mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from odoo import api, models
|
|
|
|
|
|
class PurchaseOrderLine(models.Model):
|
|
_inherit = "purchase.order.line"
|
|
|
|
def _compute_qty_received(self):
|
|
"""Returns the quantity comes for moves"""
|
|
pol_obj = self.env["purchase.order.line"]
|
|
for line in self.filtered(
|
|
lambda l: l.qty_received_method == "stock_moves"
|
|
and l.move_ids.filtered(lambda m: m.state != "cancel")
|
|
):
|
|
kit_bom = self.env["mrp.bom"]._bom_find(
|
|
product=line.product_id,
|
|
company_id=line.company_id.id,
|
|
bom_type="phantom",
|
|
)
|
|
if kit_bom:
|
|
pol_obj |= self._set_qty_received(kit_bom, line)
|
|
super(PurchaseOrderLine, self - pol_obj)._compute_qty_received()
|
|
|
|
@api.model
|
|
def _set_qty_received(self, kit_bom, line):
|
|
"""Set qty received on the basis of the bom"""
|
|
moves = line.move_ids.filtered(lambda m: m.state == "done" and not m.scrapped)
|
|
order_qty = line.product_uom._compute_quantity(
|
|
line.product_uom_qty, kit_bom.product_uom_id
|
|
)
|
|
filters = {
|
|
"incoming_moves": lambda m: m.location_id.usage == "supplier"
|
|
and (
|
|
not m.origin_returned_move_id
|
|
or (m.origin_returned_move_id and m.to_refund)
|
|
),
|
|
"outgoing_moves": lambda m: m.location_id.usage != "supplier"
|
|
and m.to_refund,
|
|
}
|
|
line.qty_received = moves._compute_kit_quantities(
|
|
line.product_id, order_qty, kit_bom, filters
|
|
)
|
|
return line
|