new dealer discount (fix in invoice)

develop
Andreas Osim 2020-02-17 16:20:25 +01:00
parent 6a84be4a1b
commit fdbec05acb
2 changed files with 56 additions and 22 deletions

View File

@ -2,6 +2,7 @@
from odoo import fields, models, api, _ from odoo import fields, models, api, _
from odoo.exceptions import UserError from odoo.exceptions import UserError
from lxml import html
class Invoice(models.Model): class Invoice(models.Model):
_inherit = "account.invoice" _inherit = "account.invoice"
@ -21,42 +22,70 @@ class Invoice(models.Model):
def create_dealer_discount(self): def create_dealer_discount(self):
InvoiceLine = self.env['account.invoice.line'] InvoiceLine = self.env['account.invoice.line']
product_id = self.env.user.company_id.invoice_dealer_discount_product_id discount_product_id = self.env.user.company_id.invoice_dealer_discount_product_id
if not product_id: if not discount_product_id:
raise UserError(_('Please set Invoice Dealer Discount product in General Settings first.')) raise UserError(_('Please set Invoice Dealer Discount product in General Settings first.'))
# Remove Discount line first # Remove Discount line first
self._dealer_discount_unset() self._dealer_discount_unset()
account_id = product_id.property_account_income_id.id account_id = discount_product_id.property_account_income_id.id
if not account_id: if not account_id:
prop = self.env['ir.property'].get('property_account_income_categ_id', 'product.category') prop = self.env['ir.property'].get('property_account_income_categ_id', 'product.category')
account_id = prop and prop.id or False account_id = prop and prop.id or False
for invoice in self: for invoice in self:
amount = 0 amount = 0
if discount_product_id.product_description:
discount_text = html.fromstring(discount_product_id.product_description).text_content()
else:
discount_text = discount_product_id.name
# if invoice.dealer_discount_type == 'fixed':
# amount = invoice.dealer_discount_amount
# if invoice.dealer_discount_type == 'percentage':
# amount = (invoice.amount_total * invoice.dealer_discount_percentage)/100
if invoice.dealer_discount_type == 'fixed': if invoice.dealer_discount_type == 'fixed':
amount = invoice.dealer_discount_amount amount = invoice.dealer_discount_amount
if invoice.dealer_discount_type == 'percentage': else:
amount = (invoice.amount_total * invoice.dealer_discount_percentage)/100 sep = "; "
discount_text = "-" + str(invoice.dealer_discount_percentage) + "% " + discount_text + ", "
discount_pos = ""
n=0
nd=0
for line in invoice.invoice_line_ids:
n += 1
if not line.product_id.product_tmpl_id.material_type_id.no_dealer_discount:
nd += 1
amount += (line.price_subtotal * invoice.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)
# Apply fiscal position # Apply fiscal position
taxes = product_id.taxes_id.filtered(lambda t: t.company_id.id == invoice.company_id.id) taxes = discount_product_id.taxes_id.filtered(lambda t: t.company_id.id == invoice.company_id.id)
taxes_ids = taxes.ids taxes_ids = taxes.ids
if invoice.partner_id and self.fiscal_position_id: if invoice.partner_id and self.fiscal_position_id:
taxes_ids = self.fiscal_position_id.map_tax(taxes, product_id, invoice.partner_id).ids taxes_ids = self.fiscal_position_id.map_tax(taxes, discount_product_id, invoice.partner_id).ids
# Create the Invoice line if amount > 0:
InvoiceLine.create({ # Create the Invoice line
'name': product_id.name, InvoiceLine.create({
'price_unit': -amount, 'name': discount_text,
'account_id': account_id, 'price_unit': -amount,
'quantity': 1.0, 'account_id': account_id,
'discount': 0.0, 'quantity': 1.0,
'uom_id': product_id.uom_id.id, 'discount': 0.0,
'product_id': product_id.id, 'uom_id': discount_product_id.uom_id.id,
'invoice_id': invoice.id, 'product_id': discount_product_id.id,
'invoice_line_tax_ids': [(6, 0, taxes_ids)], 'invoice_id': invoice.id,
'sequence': 100, 'invoice_line_tax_ids': [(6, 0, taxes_ids)],
}) 'sequence': 99999,
})
return True return True

View File

@ -2,6 +2,7 @@
from odoo import fields, models, api, _ from odoo import fields, models, api, _
from odoo.exceptions import UserError from odoo.exceptions import UserError
from lxml import html
class SaleOrder(models.Model): class SaleOrder(models.Model):
_inherit = "sale.order" _inherit = "sale.order"
@ -30,12 +31,16 @@ class SaleOrder(models.Model):
for order in self: for order in self:
amount = 0 amount = 0
if order.dealer_discount_type == 'fixed': if discount_product_id.product_description:
discount_text = html.fromstring(discount_product_id.product_description).text_content()
else:
discount_text = discount_product_id.name discount_text = discount_product_id.name
if order.dealer_discount_type == 'fixed':
amount = order.dealer_discount_amount amount = order.dealer_discount_amount
else: else:
sep = "; " sep = "; "
discount_text = "-" + str(order.dealer_discount_percentage) + "% " + discount_product_id.name + ", " discount_text = "-" + str(order.dealer_discount_percentage) + "% " + discount_text + ", "
discount_pos = "" discount_pos = ""
n=0 n=0
nd=0 nd=0