我的代码怎么了?

2024-04-20 12:42:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在account.invoice.line中添加了一个新字段discount

_inherit = "account.invoice.line"

discount = fields.Float(string='Discount (%)',
                        digits=(16, 10),
                        # digits= dp.get_precision('Discount'),
                        default=0.0)

现在逻辑地price_subtotal = price_unit* qty *(1-discount)每一行。 在另一个类account.invoice中,我指定了计算amount_totalamount_tax的函数

_inherit = "account.invoice"

@api.one
@api.depends('invoice_line.price_subtotal' ,'tax_line.amount')
def _compute_amount(self):
    disc = 0.0
    for inv in self:
        for line in inv.invoice_line:
            disc += (line.quantity * line.price_unit) * (line.discount) / 100
    self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line)
    self.amount_tax = sum(line.amount*self.change_rate for line in self.tax_line)
    self.amount_discount = disc
    self.amount_total = self.amount_untaxed + self.amount_tax

问题是,如果我改变某行的折扣值,发票的税额就不会改变

提前谢谢


Tags: inselfforlinediscountaccountinvoiceamount
2条回答

折扣字段添加到@api.1取决于所以当您更新折扣字段时,您的方法将被执行并根据您的逻辑计算金额。你知道吗

尝试使用以下代码:

@api.one
@api.depends('invoice_line.price_subtotal' ,'tax_line.amount', 'invoice_line.discount')
def _compute_amount(self):
    disc = 0.0
    for inv in self:
        for line in inv.invoice_line:
            disc += (line.quantity * line.price_unit) * (line.discount) / 100
    self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line)
    self.amount_tax = sum(line.amount*self.change_rate for line in self.tax_line)
    self.amount_discount = disc
    self.amount_total = self.amount_untaxed + self.amount_tax

经过一番艰苦的搜索和尝试,我找到了amount_tax计算不正确的原因,我只编辑了一行代码,它计算了account.invoice类的同一函数_compute_amount中的税

@api.one
@api.depends('invoice_line.price_subtotal',  'invoice_line.discount', 'tax_line.amount')
def _compute_amount(self):
    disc = 0.0
    for inv in self:
        for line in inv.invoice_line:
            disc += (line.quantity * line.price_unit) * (line.discount) / 100
    self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line)
    self.amount_tax = sum(line.price_subtotal*(sum(tax.amount for tax in line.invoice_line_tax_id)) for line in self.invoice_line)
    self.amount_discount = disc
    self.amount_total = self.amount_untaxed + self.amount_tax

相关问题 更多 >