Files
manufacture/mrp_production_auto_validate/models/stock_picking.py
2023-09-13 13:46:01 +02:00

40 lines
1.6 KiB
Python

# Copyright 2022 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from odoo import models
class StockPicking(models.Model):
_inherit = "stock.picking"
def _get_manufacturing_orders(self, states=None):
self.ensure_one()
if states is None:
states = ("confirmed", "progress")
return self.move_lines.move_dest_ids.raw_material_production_id.filtered(
lambda o: o.state in states
)
def _action_done(self):
res = super()._action_done()
for picking in self:
if picking.state != "done":
continue
orders = picking._get_manufacturing_orders()
if not orders:
continue
for order in orders:
# NOTE: use of 'reservation_state' doesn't allow to produce
# at least 1 finished product even if there is enough components,
# but Odoo expects to work this way.
if order.auto_validate and order.reservation_state == "assigned":
# 'stock.immediate.transfer' could set the 'skip_immediate'
# key to process the transfer. The same ctx key is used by
# MO validation methods, but they are not the same!
# Unset the key in such case.
# TODO add a test
if order.env.context.get("skip_immediate"):
order = order.with_context(skip_immediate=False)
order._auto_validate_after_picking()
return res