diff --git a/addons/mrp_subcontracting/models/mrp_production.py b/addons/mrp_subcontracting/models/mrp_production.py
index 39c7e38829c..c6fe077234e 100644
--- a/addons/mrp_subcontracting/models/mrp_production.py
+++ b/addons/mrp_subcontracting/models/mrp_production.py
@@ -69,11 +69,6 @@ class MrpProduction(models.Model):
return action
return {'type': 'ir.actions.act_window_close'}
- def action_subcontracting_discard_remaining_components(self):
- self.ensure_one()
- self.qty_producing = 0
- return {'type': 'ir.actions.act_window_close'}
-
def _pre_button_mark_done(self):
if self._get_subcontract_move():
return True
@@ -144,7 +139,7 @@ class MrpProduction(models.Model):
def filter_in(mo):
if mo.state in ('done', 'cancel'):
return False
- if float_is_zero(mo.qty_producing, precision_rounding=mo.product_uom_id.rounding):
+ if not mo.subcontracting_has_been_recorded:
return False
if not all(line.lot_id for line in mo.move_raw_ids.filtered(lambda sm: sm.has_tracking != 'none').move_line_ids):
return False
diff --git a/addons/mrp_subcontracting/models/stock_picking.py b/addons/mrp_subcontracting/models/stock_picking.py
index 5f2c5cec6ed..ec63d949b17 100644
--- a/addons/mrp_subcontracting/models/stock_picking.py
+++ b/addons/mrp_subcontracting/models/stock_picking.py
@@ -23,11 +23,11 @@ class StockPicking(models.Model):
# Hide if not encoding state or it is not a subcontracting picking
if picking.state in ('draft', 'cancel', 'done') or not picking._is_subcontract():
continue
- subconctracted_moves = picking.move_ids.filtered(lambda m: m.is_subcontract)
- if subconctracted_moves._subcontrating_should_be_record():
+ subcontracted_moves = picking.move_ids.filtered(lambda m: m.is_subcontract)
+ if subcontracted_moves._subcontrating_should_be_record():
picking.display_action_record_components = 'mandatory'
continue
- if subconctracted_moves._subcontrating_can_be_record():
+ if subcontracted_moves._subcontrating_can_be_record():
picking.display_action_record_components = 'facultative'
# -------------------------------------------------------------------------
@@ -39,11 +39,13 @@ class StockPicking(models.Model):
for move in self.move_ids.filtered(lambda move: move.is_subcontract):
# Auto set qty_producing/lot_producing_id of MO wasn't recorded
# manually (if the flexible + record_component or has tracked component)
- production = move._get_subcontract_production().filtered(lambda p: not p._has_been_recorded())
+ if any(production._has_been_recorded() for production in move._get_subcontract_production()):
+ continue
+ production = move._get_subcontract_production()
if not production:
continue
if len(production) > 1:
- raise UserError("It shouldn't happen to have multiple production to record for the same subconctracted move")
+ raise UserError("It shouldn't happen to have multiple production to record for the same subcontracted move")
# Manage additional quantities
quantity_done_move = move.product_uom._compute_quantity(move.quantity_done, production.product_uom_id)
if float_compare(production.product_qty, quantity_done_move, precision_rounding=production.product_uom_id.rounding) == -1:
@@ -58,6 +60,7 @@ class StockPicking(models.Model):
production.lot_producing_id = move_line.lot_id
production.qty_producing = move_line.product_uom_id._compute_quantity(move_line.qty_done, production.product_uom_id)
production._set_qty_producing()
+ production.subcontracting_has_been_recorded = True
if move_line != move.move_line_ids[-1]:
backorder = production._generate_backorder_productions(close_mo=False)
# The move_dest_ids won't be set because the _split filter out done move
diff --git a/addons/mrp_subcontracting/views/mrp_production_views.xml b/addons/mrp_subcontracting/views/mrp_production_views.xml
index 783007ebae0..1107d551539 100644
--- a/addons/mrp_subcontracting/views/mrp_production_views.xml
+++ b/addons/mrp_subcontracting/views/mrp_production_views.xml
@@ -19,7 +19,7 @@
1
- {'invisible': [('product_tracking', 'in', ('none', False))]}
+ {'invisible': [('product_tracking', 'in', ('none', False))], 'required': [('product_tracking', 'not in', ('none', False))]}
1
@@ -46,7 +46,7 @@
diff --git a/addons/mrp_subcontracting/wizard/mrp_consumption_warning.py b/addons/mrp_subcontracting/wizard/mrp_consumption_warning.py
index fc044809292..4e37dc88c9b 100644
--- a/addons/mrp_subcontracting/wizard/mrp_consumption_warning.py
+++ b/addons/mrp_subcontracting/wizard/mrp_consumption_warning.py
@@ -15,5 +15,5 @@ class MrpConsumptionWarning(models.TransientModel):
def action_cancel(self):
mo_subcontracted_move = self.mrp_production_ids._get_subcontract_move()
if mo_subcontracted_move:
- return mo_subcontracted_move._action_record_components()
+ return mo_subcontracted_move.filtered(lambda move: move.state not in ('done', 'cancel'))._action_record_components()
return super().action_cancel()
diff --git a/addons/mrp_subcontracting_dropshipping/models/__init__.py b/addons/mrp_subcontracting_dropshipping/models/__init__.py
index 03109895870..e1335cac5a3 100644
--- a/addons/mrp_subcontracting_dropshipping/models/__init__.py
+++ b/addons/mrp_subcontracting_dropshipping/models/__init__.py
@@ -5,3 +5,4 @@ from . import stock_picking
from . import res_company
from . import stock_warehouse
from . import purchase
+from . import stock_rule
diff --git a/addons/mrp_subcontracting_dropshipping/models/purchase.py b/addons/mrp_subcontracting_dropshipping/models/purchase.py
index ae9ddd0eb47..411057b8787 100644
--- a/addons/mrp_subcontracting_dropshipping/models/purchase.py
+++ b/addons/mrp_subcontracting_dropshipping/models/purchase.py
@@ -13,8 +13,8 @@ class PurchaseOrder(models.Model):
if not self.dest_address_id:
return super()._get_destination_location()
- if self.mrp_production_count:
- mrp_production_ids = self._get_mrp_productions()
+ mrp_production_ids = self._get_mrp_productions(remove_archived_picking_types=False)
+ if mrp_production_ids:
if self.dest_address_id in mrp_production_ids.bom_id.subcontractor_ids:
return self.dest_address_id.property_stock_subcontractor.id
elif self.sale_order_count:
diff --git a/addons/mrp_subcontracting_dropshipping/models/stock_picking.py b/addons/mrp_subcontracting_dropshipping/models/stock_picking.py
index 5bc45469407..e4caa83bc5e 100644
--- a/addons/mrp_subcontracting_dropshipping/models/stock_picking.py
+++ b/addons/mrp_subcontracting_dropshipping/models/stock_picking.py
@@ -11,3 +11,8 @@ class StockPicking(models.Model):
if subcontract_move.sale_line_id:
return subcontract_move.sale_line_id.order_id.warehouse_id
return super(StockPicking, self)._get_warehouse(subcontract_move)
+
+ def _action_done(self):
+ res = super()._action_done()
+ self.move_ids.move_dest_ids._action_assign()
+ return res
diff --git a/addons/mrp_subcontracting_dropshipping/models/stock_rule.py b/addons/mrp_subcontracting_dropshipping/models/stock_rule.py
new file mode 100644
index 00000000000..505930317c9
--- /dev/null
+++ b/addons/mrp_subcontracting_dropshipping/models/stock_rule.py
@@ -0,0 +1,13 @@
+# -*- encoding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models
+
+
+class StockRule(models.Model):
+ _inherit = 'stock.rule'
+
+ def _prepare_purchase_order(self, company_id, origins, values):
+ if 'partner_id' not in values[0] and self.location_id.id == company_id.subcontracting_location_id.id:
+ values[0]['partner_id'] = values[0]['group_id'].partner_id.id
+ return super()._prepare_purchase_order(company_id, origins, values)
diff --git a/addons/mrp_subcontracting_purchase/__manifest__.py b/addons/mrp_subcontracting_purchase/__manifest__.py
index 2e4ac2e70bc..2f9ef4cbb45 100644
--- a/addons/mrp_subcontracting_purchase/__manifest__.py
+++ b/addons/mrp_subcontracting_purchase/__manifest__.py
@@ -8,7 +8,7 @@
'description': """
This bridge module adds some smart buttons between Purchase and Subcontracting
""",
- 'depends': ['mrp_subcontracting', 'purchase'],
+ 'depends': ['mrp_subcontracting', 'purchase_mrp'],
'data': [
'views/purchase_order_views.xml',
'views/stock_picking_views.xml',
diff --git a/addons/mrp_subcontracting_purchase/models/purchase_order.py b/addons/mrp_subcontracting_purchase/models/purchase_order.py
index 7283167c3c1..9ac20c03223 100644
--- a/addons/mrp_subcontracting_purchase/models/purchase_order.py
+++ b/addons/mrp_subcontracting_purchase/models/purchase_order.py
@@ -23,3 +23,9 @@ class PurchaseOrder(models.Model):
moves_subcontracted = self.order_line.move_ids.filtered(lambda m: m.is_subcontract)
subcontracted_productions = moves_subcontracted.move_orig_ids.production_id
return subcontracted_productions.picking_ids
+
+ def _get_mrp_productions(self, **kwargs):
+ productions = super()._get_mrp_productions(**kwargs)
+ if kwargs.get('remove_archived_picking_types', True):
+ productions = productions.filtered(lambda production: production.with_context(active_test=False).picking_type_id.active)
+ return productions
diff --git a/addons/purchase_mrp/models/purchase.py b/addons/purchase_mrp/models/purchase.py
index b0341452171..43dd5d7c679 100644
--- a/addons/purchase_mrp/models/purchase.py
+++ b/addons/purchase_mrp/models/purchase.py
@@ -18,12 +18,14 @@ class PurchaseOrder(models.Model):
@api.depends('order_line.move_dest_ids.group_id.mrp_production_ids')
def _compute_mrp_production_count(self):
for purchase in self:
- purchase.mrp_production_count = len(purchase.order_line.move_dest_ids.group_id.mrp_production_ids |
- purchase.order_line.move_ids.move_dest_ids.group_id.mrp_production_ids)
+ purchase.mrp_production_count = len(purchase._get_mrp_productions())
+
+ def _get_mrp_productions(self, **kwargs):
+ return self.order_line.move_dest_ids.group_id.mrp_production_ids | self.order_line.move_ids.move_dest_ids.group_id.mrp_production_ids
def action_view_mrp_productions(self):
self.ensure_one()
- mrp_production_ids = (self.order_line.move_dest_ids.group_id.mrp_production_ids | self.order_line.move_ids.move_dest_ids.group_id.mrp_production_ids).ids
+ mrp_production_ids = self._get_mrp_productions().ids
action = {
'res_model': 'mrp.production',
'type': 'ir.actions.act_window',
diff --git a/addons/purchase_stock/views/purchase_views.xml b/addons/purchase_stock/views/purchase_views.xml
index 0f7893b6cff..60eb7ebf5cc 100644
--- a/addons/purchase_stock/views/purchase_views.xml
+++ b/addons/purchase_stock/views/purchase_views.xml
@@ -59,7 +59,7 @@
-
+