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', '!=', [])]}"
/>