# -*- coding: utf-8 -*- ############################################################################## # # datenpol gmbh # Copyright (C) 2013-TODAY datenpol gmbh () # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## from odoo import api, fields, models, _ from odoo.tools import float_round class SaleOrderLine(models.Model): _inherit = 'sale.order.line' hide_discount = fields.Boolean(string='RV', help='Rabatt verbergen') @api.multi @api.depends('product_uom_qty', 'discount', 'price_unit', 'tax_id') def _compute_amount(self): for line in self: taxes = line.tax_id.compute_all(line.price_reduce, line.order_id.currency_id, line.product_uom_qty, product=line.product_id, partner=line.order_id.partner_shipping_id) line.update({ 'price_tax': sum(t.get('amount', 0.0) for t in taxes.get('taxes', [])), 'price_total': taxes['total_included'], 'price_subtotal': taxes['total_excluded'], }) @api.multi def _get_tax_amount_by_group(self): self.ensure_one() res = {} for line in self.order_line: base_tax = 0 for tax in line.tax_id: group = tax.tax_group_id res.setdefault(group, {'amount': 0.0, 'base': 0.0}) # FORWARD-PORT UP TO SAAS-17 taxes = tax.compute_all(line.price_reduce + base_tax, quantity=line.product_uom_qty, product=line.product_id, partner=self.partner_shipping_id)['taxes'] for t in taxes: res[group]['amount'] += t['amount'] res[group]['base'] += t['base'] if tax.include_base_amount: base_tax += tax.compute_all(line.price_reduce + base_tax, quantity=1, product=line.product_id, partner=self.partner_shipping_id)['taxes'][0]['amount'] res = sorted(res.items(), key=lambda l: l[0].sequence) res = [(l[0].name, l[1]['amount'], l[1]['base'], len(res)) for l in res] return res @api.multi @api.depends('price_unit', 'discount') def _get_price_reduce(self): for line in self: line.price_reduce = float_round(line.price_unit * (1.0 - line.discount / 100.0), precision_digits=self.env['decimal.precision'].precision_get( 'Product Price')) @api.multi def _prepare_invoice_line(self, qty): self.ensure_one() res = super(SaleOrderLine, self)._prepare_invoice_line(qty) res['hide_discount'] = self.hide_discount return res