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
| Inputs | Method | Outputs |
|---|---|---|
|
+ 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 |
|
