# -*- coding: utf-8 -*- from odoo import fields, models, api, _ from odoo.exceptions import UserError class SaleOrder(models.Model): _inherit = "sale.order" dealer_discount = fields.Boolean("Add Dealer Discount", readonly=True, states={'draft': [('readonly', False),],'sent': [('readonly', False)]},) dealer_discount_type = fields.Selection([('fixed','Fixed'),('percentage','Percentage')], "Discount Type", readonly=True, states={'draft': [('readonly', False)],'sent': [('readonly', False)]}, default='percentage') dealer_discount_amount = fields.Float("Discount Amount", readonly=True, states={'draft': [('readonly', False)],'sent': [('readonly', False)]},) dealer_discount_percentage = fields.Float("Discount Percentage", readonly=True, states={'draft': [('readonly', False)],'sent': [('readonly', False)]},) @api.multi def _dealer_discount_unset(self): if self.env.user.company_id.sale_dealer_discount_product_id: self.env['sale.order.line'].search([('order_id', 'in', self.ids), ('product_id', '=', self.env.user.company_id.sale_dealer_discount_product_id.id)]).unlink() @api.multi def create_dealer_discount(self): Line = self.env['sale.order.line'] discount_product_id = self.env.user.company_id.sale_dealer_discount_product_id if not discount_product_id: raise UserError(_('Please set Sale Dealer Discount product in General Settings first.')) # Remove Discount line first self._dealer_discount_unset() for order in self: amount = 0 if order.dealer_discount_type == 'fixed': discount_text = discount_product_id.name amount = order.dealer_discount_amount else: sep = "; " discount_text = "-" + str(order.dealer_discount_percentage) + "% " + discount_product_id.name + ", " discount_pos = "" n=0 nd=0 for line in order.order_line: n += 1 if not line.product_id.product_tmpl_id.material_type_id.no_dealer_discount: nd += 1 amount += (line.price_subtotal * order.dealer_discount_percentage)/100 discount_pos += str(n)+sep if nd>1: discount_text = discount_text + "Positionen: " else: discount_text = discount_text + "Position: " discount_text = discount_text + discount_pos.rstrip(sep) if amount > 0: # Create the Sale line Line.create({ 'name': discount_text, 'price_unit': -amount, 'product_uom_qty': 1.0, 'discount': 0.0, 'product_uom': discount_product_id.uom_id.id, 'product_id': discount_product_id.id, 'order_id': order.id, 'sequence': 99999, }) return True