Odoo12 伙伴分类账实现伙伴列表默认仅展示客户伙伴的配置方法
Odoo12 Partner Ledger 伙伴筛选列表默认仅展示客户的实现方案
之前定位失败的原因
Odoo12的account_reports模块采用动态报表渲染框架,伙伴筛选的数据源域并非定义在传统ir.ui.view视图中,也未暴露在前端按钮的JS配置里,因此你之前查找视图、修改JS的路径无法找到配置入口是符合模块设计逻辑的。
可行实现方案
Partner Ledger对应的后端报表模型为account.report.partner.ledger,伙伴选择弹窗的可选记录域由父类account.report的_get_partner_values方法返回,仅需通过独立自定义模块覆写该方法,追加客户过滤规则即可实现需求,无需修改原生模块代码。
步骤1:编写模型继承逻辑
在自定义模块的模型文件中新增如下代码:
from odoo import models, api class AccountPartnerLedgerReport(models.Model): _inherit = 'account.report.partner.ledger' @api.model def _get_partner_values(self, options): # 调用原方法获取默认的伙伴筛选配置 result = super()._get_partner_values(options) # 追加客户判定规则,customer_rank > 0 等价于原生客户标识customer_rank=1的判定逻辑 original_domain = result.get('domain', []) original_domain.append(('customer_rank', '>', 0)) result['domain'] = original_domain return result
该逻辑修改后,伙伴选择弹窗的下拉列表将仅展示客户类伙伴,过滤掉供应商、内部联系人等非客户记录。
步骤2(可选):调整报表默认统计范围
如果需要实现报表首次加载时,默认就仅统计客户的交易数据,而非仅在选择弹窗里过滤客户,可以继续覆写_get_options方法:
@api.model def _get_options(self, previous_options=None): options = super()._get_options(previous_options) # 初始化报表选项时,默认给伙伴统计范围追加客户过滤规则 options['partner_domain'] = [('customer_rank', '>', 0)] return options
注意事项
- 所有自定义逻辑需放在独立继承模块中,不要直接修改
account_reports原生模块代码,避免后续Odoo版本升级时自定义逻辑被覆盖。 - 代码修改完成后,需要升级自定义模块并刷新前端页面,配置即可生效。
说明:该方案复用了Odoo12原生伙伴筛选组件的域传递逻辑,前端会自动读取后端返回的domain参数,无需额外修改JS代码。
内容的提问来源于stack exchange,提问作者czuniga
相关产品推荐
相关产品推荐

