From b378bc6f48d48ffb4381b14012dd0be822b888f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Valyi?= Date: Tue, 3 May 2022 04:09:00 -0300 Subject: [PATCH] down payment with original taxes --- sale_usability/__init__.py | 1 + sale_usability/wizard/__init__.py | 1 + .../wizard/sale_make_invoice_advance.py | 37 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 sale_usability/wizard/__init__.py create mode 100644 sale_usability/wizard/sale_make_invoice_advance.py diff --git a/sale_usability/__init__.py b/sale_usability/__init__.py index 0650744f..9b429614 100644 --- a/sale_usability/__init__.py +++ b/sale_usability/__init__.py @@ -1 +1,2 @@ from . import models +from . import wizard diff --git a/sale_usability/wizard/__init__.py b/sale_usability/wizard/__init__.py new file mode 100644 index 00000000..fca48c3d --- /dev/null +++ b/sale_usability/wizard/__init__.py @@ -0,0 +1 @@ +from . import sale_make_invoice_advance diff --git a/sale_usability/wizard/sale_make_invoice_advance.py b/sale_usability/wizard/sale_make_invoice_advance.py new file mode 100644 index 00000000..643da767 --- /dev/null +++ b/sale_usability/wizard/sale_make_invoice_advance.py @@ -0,0 +1,37 @@ +from odoo import models +from odoo.tools import float_is_zero + + +class SaleAdvancePaymentInv(models.TransientModel): + _inherit = "sale.advance.payment.inv" + + def _prepare_invoice_values(self, order, name, amount, so_line): + """ + Create as many invoice lines as order lines with their original + order line taxes. Lines quantities have the ratio of the advance payment. + """ + invoice_vals = super()._prepare_invoice_values(order, name, amount, so_line) + lines = [] + uom_precision_digits = self.env["decimal.precision"].precision_get( + "Product Unit of Measure" + ) + for line in order.order_line: + if ( + not float_is_zero( + # avoids taking lines like previous advance payments + line.product_uom_qty, precision_digits=uom_precision_digits + ) + ): + lines.append((0, 0, { + "name": name, + "price_unit": line.price_unit, + "quantity": line.product_uom_qty * amount / order.amount_total, + "product_id": line.product_id.id, + "product_uom_id": line.product_uom.id, + "tax_ids": [(6, 0, line.tax_id.ids)], + "sale_line_ids": [(6, 0, [line.id])], + "analytic_tag_ids": [(6, 0, line.analytic_tag_ids.ids)], + "analytic_account_id": order.analytic_account_id.id or False, + })) + invoice_vals["invoice_line_ids"] = lines + return invoice_vals