summaryrefslogtreecommitdiff
path: root/addons/mrp_subcontracting/models/stock_warehouse.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/mrp_subcontracting/models/stock_warehouse.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/mrp_subcontracting/models/stock_warehouse.py')
-rw-r--r--addons/mrp_subcontracting/models/stock_warehouse.py139
1 files changed, 139 insertions, 0 deletions
diff --git a/addons/mrp_subcontracting/models/stock_warehouse.py b/addons/mrp_subcontracting/models/stock_warehouse.py
new file mode 100644
index 00000000..ef1a6056
--- /dev/null
+++ b/addons/mrp_subcontracting/models/stock_warehouse.py
@@ -0,0 +1,139 @@
+# -*- 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_to_resupply = fields.Boolean(
+ 'Resupply Subcontractors', default=True,
+ help="Resupply subcontractors with components")
+
+ subcontracting_mto_pull_id = fields.Many2one(
+ 'stock.rule', 'Subcontracting MTO Rule')
+ subcontracting_pull_id = fields.Many2one(
+ 'stock.rule', 'Subcontracting MTS Rule'
+ )
+
+ subcontracting_route_id = fields.Many2one('stock.location.route', 'Resupply Subcontractor', ondelete='restrict')
+
+ subcontracting_type_id = fields.Many2one(
+ 'stock.picking.type', 'Subcontracting Operation Type',
+ domain=[('code', '=', 'mrp_operation')])
+
+ def get_rules_dict(self):
+ result = super(StockWarehouse, self).get_rules_dict()
+ subcontract_location_id = self._get_subcontracting_location()
+ for warehouse in self:
+ result[warehouse.id].update({
+ 'subcontract': [
+ self.Routing(warehouse.lot_stock_id, subcontract_location_id, warehouse.out_type_id, 'pull'),
+ ]
+ })
+ return result
+
+ def _get_routes_values(self):
+ routes = super(StockWarehouse, self)._get_routes_values()
+ routes.update({
+ 'subcontracting_route_id': {
+ 'routing_key': 'subcontract',
+ 'depends': ['subcontracting_to_resupply'],
+ 'route_create_values': {
+ 'product_categ_selectable': False,
+ 'warehouse_selectable': True,
+ 'product_selectable': False,
+ 'company_id': self.company_id.id,
+ 'sequence': 10,
+ 'name': self._format_routename(name=_('Resupply Subcontractor'))
+ },
+ 'route_update_values': {
+ 'active': self.subcontracting_to_resupply,
+ },
+ 'rules_values': {
+ 'active': self.subcontracting_to_resupply,
+ }
+ }
+ })
+ return routes
+
+ def _get_global_route_rules_values(self):
+ rules = super(StockWarehouse, self)._get_global_route_rules_values()
+ subcontract_location_id = self._get_subcontracting_location()
+ production_location_id = self._get_production_location()
+ rules.update({
+ 'subcontracting_mto_pull_id': {
+ 'depends': ['subcontracting_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('stock.route_warehouse0_mto', _('Make To Order')).id,
+ 'name': self._format_rulename(self.lot_stock_id, subcontract_location_id, 'MTO'),
+ 'location_id': subcontract_location_id.id,
+ 'location_src_id': self.lot_stock_id.id,
+ 'picking_type_id': self.out_type_id.id
+ },
+ 'update_values': {
+ 'active': self.subcontracting_to_resupply
+ }
+ },
+ 'subcontracting_pull_id': {
+ 'depends': ['subcontracting_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.route_resupply_subcontractor_mto',
+ _('Resupply Subcontractor on Order')).id,
+ 'name': self._format_rulename(self.lot_stock_id, subcontract_location_id, False),
+ 'location_id': production_location_id.id,
+ 'location_src_id': subcontract_location_id.id,
+ 'picking_type_id': self.out_type_id.id
+ },
+ 'update_values': {
+ 'active': self.subcontracting_to_resupply
+ }
+ },
+ })
+ return rules
+
+ def _get_picking_type_create_values(self, max_sequence):
+ data, next_sequence = super(StockWarehouse, self)._get_picking_type_create_values(max_sequence)
+ data.update({
+ 'subcontracting_type_id': {
+ 'name': _('Subcontracting'),
+ 'code': 'mrp_operation',
+ 'use_create_components_lots': True,
+ 'sequence': next_sequence + 2,
+ 'sequence_code': 'SBC',
+ 'company_id': self.company_id.id,
+ },
+ })
+ return data, max_sequence + 4
+
+ def _get_sequence_values(self):
+ values = super(StockWarehouse, self)._get_sequence_values()
+ values.update({
+ 'subcontracting_type_id': {'name': self.name + ' ' + _('Sequence subcontracting'), 'prefix': self.code + '/SBC/', 'padding': 5, 'company_id': self.company_id.id},
+ })
+ return values
+
+ def _get_picking_type_update_values(self):
+ data = super(StockWarehouse, self)._get_picking_type_update_values()
+ subcontract_location_id = self._get_subcontracting_location()
+ production_location_id = self._get_production_location()
+ data.update({
+ 'subcontracting_type_id': {
+ 'active': False,
+ 'default_location_src_id': subcontract_location_id.id,
+ 'default_location_dest_id': production_location_id.id,
+ },
+ })
+ return data
+
+ def _get_subcontracting_location(self):
+ return self.company_id.subcontracting_location_id