diff --git a/addons/mrp_subcontracting/models/stock_picking.py b/addons/mrp_subcontracting/models/stock_picking.py
index ecef047906a..725eaecb057 100644
--- a/addons/mrp_subcontracting/models/stock_picking.py
+++ b/addons/mrp_subcontracting/models/stock_picking.py
@@ -93,7 +93,7 @@ class StockPicking(models.Model):
return self.move_lines.filtered(lambda move: move.is_subcontract).move_orig_ids.production_id
def _get_warehouse(self, subcontract_move):
- return subcontract_move.warehouse_id or self.picking_type_id.warehouse_id
+ return subcontract_move.warehouse_id or self.picking_type_id.warehouse_id or subcontract_move.move_dest_ids.picking_type_id.warehouse_id
def _prepare_subcontract_mo_vals(self, subcontract_move, bom):
subcontract_move.ensure_one()
diff --git a/addons/mrp_subcontracting_dropshipping/__manifest__.py b/addons/mrp_subcontracting_dropshipping/__manifest__.py
index 644099353b1..c9da839f96f 100644
--- a/addons/mrp_subcontracting_dropshipping/__manifest__.py
+++ b/addons/mrp_subcontracting_dropshipping/__manifest__.py
@@ -10,6 +10,10 @@
This bridge module allows to manage subcontracting with the dropshipping module.
""",
'depends': ['mrp_subcontracting', 'stock_dropshipping'],
+ 'data': [
+ 'data/mrp_subcontracting_dropshipping_data.xml',
+ 'views/stock_warehouse_views.xml',
+ ],
'installable': True,
'auto_install': True,
'license': 'LGPL-3',
diff --git a/addons/mrp_subcontracting_dropshipping/data/mrp_subcontracting_dropshipping_data.xml b/addons/mrp_subcontracting_dropshipping/data/mrp_subcontracting_dropshipping_data.xml
new file mode 100644
index 00000000000..d4ada8aeb57
--- /dev/null
+++ b/addons/mrp_subcontracting_dropshipping/data/mrp_subcontracting_dropshipping_data.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Dropship Subcontractor on Order
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/mrp_subcontracting_dropshipping/models/__init__.py b/addons/mrp_subcontracting_dropshipping/models/__init__.py
index ac9517445ae..069e3f45f70 100644
--- a/addons/mrp_subcontracting_dropshipping/models/__init__.py
+++ b/addons/mrp_subcontracting_dropshipping/models/__init__.py
@@ -2,3 +2,5 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import stock_picking
+from . import res_company
+from . import stock_warehouse
diff --git a/addons/mrp_subcontracting_dropshipping/models/res_company.py b/addons/mrp_subcontracting_dropshipping/models/res_company.py
new file mode 100644
index 00000000000..b1cddbd7975
--- /dev/null
+++ b/addons/mrp_subcontracting_dropshipping/models/res_company.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, models
+
+
+class ResCompany(models.Model):
+ _inherit = 'res.company'
+
+ def _create_subcontracting_dropshipping_rules(self):
+ route = self.env.ref('mrp_subcontracting_dropshipping.route_subcontracting_dropshipping')
+ supplier_location = self.env.ref('stock.stock_location_suppliers')
+ vals = []
+ for company in self:
+ subcontracting_location = company.subcontracting_location_id
+ dropship_picking_type = self.env['stock.picking.type'].search([
+ ('company_id', '=', company.id),
+ ('default_location_src_id.usage', '=', 'supplier'),
+ ('default_location_dest_id.usage', '=', 'customer'),
+ ], limit=1, order='sequence')
+ if dropship_picking_type:
+ vals.append({
+ 'name': '%s → %s' % (supplier_location.name, subcontracting_location.name),
+ 'action': 'buy',
+ 'location_id': subcontracting_location.id,
+ 'location_src_id': supplier_location.id,
+ 'procure_method': 'make_to_stock',
+ 'route_id': route.id,
+ 'picking_type_id': dropship_picking_type.id,
+ 'company_id': company.id,
+ })
+ if vals:
+ self.env['stock.rule'].create(vals)
+
+ @api.model
+ def create_missing_subcontracting_dropshipping_rules(self):
+ route = self.env.ref('mrp_subcontracting_dropshipping.route_subcontracting_dropshipping')
+ company_ids = self.env['res.company'].search([])
+ company_has_rules = self.env['stock.rule'].search([('route_id', '=', route.id)]).mapped('company_id')
+ company_todo_rules = company_ids - company_has_rules
+ company_todo_rules._create_subcontracting_dropshipping_rules()
+
+ def _create_per_company_rules(self):
+ res = super()._create_per_company_rules()
+ self.create_missing_subcontracting_dropshipping_rules()
+ return res
diff --git a/addons/mrp_subcontracting_dropshipping/models/stock_warehouse.py b/addons/mrp_subcontracting_dropshipping/models/stock_warehouse.py
new file mode 100644
index 00000000000..c85e5dd3ca7
--- /dev/null
+++ b/addons/mrp_subcontracting_dropshipping/models/stock_warehouse.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, _
+
+
+class StockWarehouse(models.Model):
+ _inherit = 'stock.warehouse'
+
+ subcontracting_dropshipping_to_resupply = fields.Boolean(
+ 'Dropship Subcontractors', default=True,
+ help="Dropship subcontractors with components")
+
+ subcontracting_dropshipping_pull_id = fields.Many2one(
+ 'stock.rule', 'Subcontracting-Dropshipping MTS Rule'
+ )
+
+ def _get_global_route_rules_values(self):
+ rules = super()._get_global_route_rules_values()
+ subcontract_location_id = self._get_subcontracting_location()
+ production_location_id = self._get_production_location()
+ rules.update({
+ 'subcontracting_dropshipping_pull_id': {
+ 'depends': ['subcontracting_dropshipping_to_resupply'],
+ 'create_values': {
+ 'procure_method': 'make_to_order',
+ 'company_id': self.company_id.id,
+ 'action': 'pull',
+ 'auto': 'manual',
+ 'route_id': self._find_global_route('mrp_subcontracting_dropshipping.route_subcontracting_dropshipping',
+ _('Dropship Subcontractor on Order')).id,
+ 'name': self._format_rulename(subcontract_location_id, production_location_id, False),
+ 'location_id': production_location_id.id,
+ 'location_src_id': subcontract_location_id.id,
+ 'picking_type_id': self.subcontracting_type_id.id
+ },
+ 'update_values': {
+ 'active': self.subcontracting_dropshipping_to_resupply
+ }
+ },
+ })
+ return rules
diff --git a/addons/mrp_subcontracting_dropshipping/views/stock_warehouse_views.xml b/addons/mrp_subcontracting_dropshipping/views/stock_warehouse_views.xml
new file mode 100644
index 00000000000..e61b6ff48f4
--- /dev/null
+++ b/addons/mrp_subcontracting_dropshipping/views/stock_warehouse_views.xml
@@ -0,0 +1,13 @@
+
+
+
+ Stock Warehouse Inherit Subcontracting Dropshipping
+ stock.warehouse
+
+
+
+
+
+
+
+