You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:15:36