在Odoo中如何将SaleOrder类的commission变量传入AccountTaxGroup类?
问题:在Odoo的AccountTax类中访问SaleOrder的commission字段值
现有Odoo代码
from odoo import api, models, fields, tools from odoo.tools.misc import formatLang class SaleOrder(models.Model): _inherit = 'sale.order' commission = fields.Float(compute='_compute_commission') @api.depends('user_id.commission') def _compute_commission(self): for order in self: order.commission = order.user_id.commission class AccountTax(models.Model): _inherit = 'account.tax' def _prepare_tax_totals(self, base_lines, currency, tax_lines=None): res = super()._prepare_tax_totals(base_lines, currency, tax_lines=tax_lines) commission_amount = 1900 # 需要在这里计算佣金金额 res['amount_untaxed'] -= commission_amount res['amount_total'] -= commission_amount res['formatted_amount_total'] = formatLang(self.env, res['amount_total'], currency_obj=currency) print(self.user_id.commission) return res
需求
需要在AccountTax类的_prepare_tax_totals方法中访问SaleOrder类定义的commission字段值,该如何实现?
解决方案
核心是找到当前税计算对应的销售订单记录,因为account.tax与sale.order无直接关联,可通过税计算的基准行(base_lines)向上关联:
修改后的代码
def _prepare_tax_totals(self, base_lines, currency, tax_lines=None): res = super()._prepare_tax_totals(base_lines, currency, tax_lines=tax_lines) # 从基准行关联到销售订单 sale_order = base_lines.mapped('sale_order_id') if sale_order: # 取关联的第一个订单(业务场景中通常对应单个订单) commission_amount = sale_order[0].commission res['amount_untaxed'] -= commission_amount res['amount_total'] -= commission_amount res['formatted_amount_total'] = formatLang(self.env, res['amount_total'], currency_obj=currency) return res
关键说明
base_lines.mapped('sale_order_id'):基准行一般是sale.order.line记录,通过其sale_order_id字段可获取关联的销售订单集合。- 若业务存在多订单税计算场景,可循环处理每个订单的佣金值;单订单场景下直接取第一个订单即可。
commission作为计算字段,从sale.order获取时会自动触发计算逻辑,无需额外处理字段加载问题。
内容的提问来源于stack exchange,提问作者Ajay Balachandran
相关产品推荐
相关产品推荐

