Odoo 8允许负发票行项目

时间:2016-05-04 08:23:06

标签: python openerp odoo-8

我有一个名为“优惠券”的产品,负数用于抵消产品价格。但是,似乎Odoo 8不允许计算负值到price_subtotal(它变为0.00):

Coupon ... ... 1 Each -40.0000 0.0000

当我删除负号时,它会计算

Coupon ... ... 1 Each  40.0000 40.0000

从会计角度来看,总发票不应为负数。这是真的。但是,我确实需要对发票行项目进行负面计算。我需要在哪里和哪些地方进行更改?我试过调查帐户/ account.py但到目前为止无济于事 - 这只是“税”相关。

提前致谢!

总计的金额列的详细信息 Details of the Amount column for the line total

enter image description here

class account_invoice(models.Model)
    ....

    @api.one
    @api.depends('invoice_line.price_subtotal', 'tax_line.amount')
    def _compute_amount(self):
        self.amount_untaxed = sum(line.price_subtotal for line in self.invoice_line)
        self.amount_tax = sum(line.amount for line in self.tax_line)
        self.amount_total = self.amount_untaxed + self.amount_tax

    ....

class account_invoice_line(models.Model):
    _name = "account.invoice.line"
    _description = "Invoice Line"
    _order = "invoice_id,sequence,id"

    @api.one
    @api.depends('price_unit', 'discount', 'invoice_line_tax_id', 'quantity',
        'product_id', 'invoice_id.partner_id', 'invoice_id.currency_id')
    def _compute_price(self):
        price = self.price_unit * (1 - (self.discount or 0.0) / 100.0)
        taxes = self.invoice_line_tax_id.compute_all(price, self.quantity, product=self.product_id, partner=self.invoice_id.partner_id)
        self.price_subtotal = taxes['total']
        if self.invoice_id:
            self.price_subtotal = self.invoice_id.currency_id.round(self.price_subtotal)

    @api.model
    def _default_price_unit(self):
        if not self._context.get('check_total'):
            return 0
        total = self._context['check_total']
        for l in self._context.get('invoice_line', []):
            if isinstance(l, (list, tuple)) and len(l) >= 3 and l[2]:
                vals = l[2]
                price = vals.get('price_unit', 0) * (1 - vals.get('discount', 0) / 100.0)
                total = total - (price * vals.get('quantity'))
                taxes = vals.get('invoice_line_tax_id')
                if taxes and len(taxes[0]) >= 3 and taxes[0][2]:
                    taxes = self.env['account.tax'].browse(taxes[0][2])
                    tax_res = taxes.compute_all(price, vals.get('quantity'),
                        product=vals.get('product_id'), partner=self._context.get('partner_id'))
                    for tax in tax_res['taxes']:
                        total = total - tax['amount']
        return total

1 个答案:

答案 0 :(得分:0)

Odoo的默认行为是按预期处理它。问题是自定义代码。 (有关更多信息,请阅读问题评论)