diff --git a/purchase_invoice_plan/models/purchase.py b/purchase_invoice_plan/models/purchase.py index 14940a88bea..7b0573cf274 100644 --- a/purchase_invoice_plan/models/purchase.py +++ b/purchase_invoice_plan/models/purchase.py @@ -132,6 +132,15 @@ def action_view_invoice(self, invoices=False): return super().action_view_invoice(invoices=invoices) +class PurchaseOrderLine(models.Model): + _inherit = "purchase.order.line" + + qty_invoiced_before_plan = fields.Float( + string="Invoiced Quantity Before Plan", + digits="Product Unit of Measure", + ) + + class PurchaseInvoicePlan(models.Model): _name = "purchase.invoice.plan" _description = "Invoice Planning Detail" @@ -214,7 +223,11 @@ class PurchaseInvoicePlan(models.Model): @api.depends("percent") def _compute_amount(self): for rec in self: - amount_untaxed = rec.purchase_id._origin.amount_untaxed + amount_invoiced = sum( + line.qty_invoiced_before_plan * line.price_unit + for line in rec.purchase_id._origin.order_line + ) + amount_untaxed = rec.purchase_id._origin.amount_untaxed - amount_invoiced # With invoice already created, no recompute if rec.invoiced: rec.amount = rec.amount_invoiced @@ -234,6 +247,11 @@ def _compute_amount(self): def _inverse_amount(self): for rec in self: if rec.purchase_id.amount_untaxed != 0: + amount_invoiced = sum( + line.qty_invoiced_before_plan * line.price_unit + for line in rec.purchase_id.order_line + ) + amount_untaxed = rec.purchase_id.amount_untaxed - amount_invoiced if rec.last: installments = rec.purchase_id.invoice_plan_ids.filtered( lambda l: l.invoice_type == "installment" @@ -241,7 +259,7 @@ def _inverse_amount(self): prev_percent = sum((installments - rec).mapped("percent")) rec.percent = 100 - prev_percent continue - rec.percent = rec.amount / rec.purchase_id.amount_untaxed * 100 + rec.percent = rec.amount / amount_untaxed * 100 continue rec.percent = 0 @@ -310,7 +328,8 @@ def _update_new_quantity(self, line, percent): @api.model def _get_plan_qty(self, order_line, percent): - plan_qty = order_line.product_qty * (percent / 100) + product_qty = order_line.product_qty - order_line.qty_invoiced_before_plan + plan_qty = product_qty * (percent / 100) return plan_qty @api.ondelete(at_uninstall=False) diff --git a/purchase_invoice_plan/views/purchase_view.xml b/purchase_invoice_plan/views/purchase_view.xml index c8d676e1e07..c40ecbaa0ec 100644 --- a/purchase_invoice_plan/views/purchase_view.xml +++ b/purchase_invoice_plan/views/purchase_view.xml @@ -91,20 +91,19 @@ string="⇒ Create Invoice Plan" type="action" class="oe_link" - attrs="{'invisible': ['|', ('invoice_plan_ids', '!=', []), ('invoice_count', '>', 0)]}" + attrs="{'invisible': [('invoice_plan_ids', '!=', [])]}" />