diff --git a/purchase_usability/models/purchase_order.py b/purchase_usability/models/purchase_order.py
index 7177438..c373d2e 100644
--- a/purchase_usability/models/purchase_order.py
+++ b/purchase_usability/models/purchase_order.py
@@ -4,6 +4,7 @@
from odoo import api, fields, models
from odoo.tools.misc import formatLang
+from odoo.tools import float_is_zero
class PurchaseOrder(models.Model):
@@ -73,3 +74,33 @@ class PurchaseOrderLine(models.Model):
# for optional display in tree view
product_barcode = fields.Char(related='product_id.barcode', string="Product Barcode")
+ invoice_status = fields.Selection(
+ [
+ ("no", "Nothing to Bill"),
+ ("to invoice", "Waiting Bills"),
+ ("invoiced", "Fully Billed"),
+ ],
+ string="Billing Status",
+ compute="_compute_invoice_status",
+ store=True,
+ readonly=True,
+ default="no",
+ )
+
+ @api.depends("state", "qty_to_invoice", "qty_invoiced")
+ def _compute_invoice_status(self):
+ """Mimic PO '_get_invoiced' method to compute PO line invoice status"""
+ prec = self.env["decimal.precision"].precision_get("Product Unit of Measure")
+ for line in self:
+ if line.state not in ("purchase", "done") or line.display_type:
+ line.invoice_status = "no"
+ continue
+
+ if not float_is_zero(line.qty_to_invoice, precision_digits=prec):
+ line.invoice_status = "to invoice"
+ elif float_is_zero(
+ line.qty_to_invoice, precision_digits=prec
+ ) and not float_is_zero(line.qty_invoiced, precision_digits=prec):
+ line.invoice_status = "invoiced"
+ else:
+ line.invoice_status = "no"
diff --git a/purchase_usability/views/purchase_order.xml b/purchase_usability/views/purchase_order.xml
index 023e097..314e9f9 100644
--- a/purchase_usability/views/purchase_order.xml
+++ b/purchase_usability/views/purchase_order.xml
@@ -131,7 +131,10 @@
-
+
+
@@ -144,7 +147,13 @@
+
+
+
+
+
+