Odoo Mindscape. Understand Odoo faster. Explore modules, fields, dependencies and version differences in one place instead of digging through the source code.

Module: Purchase

Entity: account.move.line

Compute Method: _compute_purchase_matching_issue_msg

View 20.0
Inputs Method Outputs
  • purchase_line_id
  • product_id
  • price_unit
  • discount
  • currency_id
  • product_uom_id
  • quantity
  • is_refund
+ self.purchase_matching_issue_msg = False
+ lines_per_po_line = self.grouped('purchase_line_id')
+ aml_qties_per_po_line = {
+             pol: sum(aml.product_uom_id._compute_quantity(aml.quantity if not aml.is_refund else -aml.quantity, pol.uom_id) for aml in lines_per_po_line[pol])
+             for pol in lines_per_po_line
+         }
+ invoiced_quantities = self.purchase_line_id.with_context(excluded_aml_ids=self.ids)._prepare_qty_invoiced()
+ for line in self:
+             if not line.product_id:
+                 continue
+             if po_line := line.purchase_line_id:
+                 msg = ""
+                 discounted_price = line.price_unit * (1 - line.discount / 100)
+                 if price_compare := line.currency_id.compare_amounts(po_line.price_unit_discounted, discounted_price):
+                     msg += f" {'⬇' if price_compare > 0 else '⬆'} {po_line.currency_id.format(po_line.price_unit_discounted)}"
+ 
+                 pol_qty = po_line.product_qty if po_line.product_id.purchase_method == 'purchase' else po_line.qty_received
+                 if po_line.uom_id.compare(invoiced_quantities[po_line] + aml_qties_per_po_line[po_line], pol_qty):
+                     aml_qty = line.product_uom_id._compute_quantity(line.quantity, po_line.uom_id)
+                     if line.is_refund:
+                         aml_qty = -aml_qty
+                     expected_qty = pol_qty - (invoiced_quantities[po_line] + aml_qties_per_po_line[po_line] - aml_qty)
+                     msg += f" ⚠ {expected_qty} {po_line.uom_id.display_name}"
+ 
+                 line.purchase_matching_issue_msg = msg
  • purchase_matching_issue_msg

Back to entity