19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:47 +01:00
parent accf5918df
commit 6e65e8c877
688 changed files with 225434 additions and 199401 deletions

View file

@ -2,6 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.fields import Command
class StockWarehouse(models.Model):
@ -10,24 +11,23 @@ class StockWarehouse(models.Model):
subcontracting_to_resupply = fields.Boolean(
'Resupply Subcontractors', default=True)
subcontracting_mto_pull_id = fields.Many2one(
'stock.rule', 'Subcontracting MTO Rule')
'stock.rule', 'Subcontracting MTO Rule', copy=False)
subcontracting_pull_id = fields.Many2one(
'stock.rule', 'Subcontracting MTS Rule'
'stock.rule', 'Subcontracting MTS Rule', copy=False
)
subcontracting_route_id = fields.Many2one('stock.route', 'Resupply Subcontractor', ondelete='restrict')
subcontracting_route_id = fields.Many2one('stock.route', 'Resupply Subcontractor', ondelete='restrict', copy=False)
subcontracting_type_id = fields.Many2one(
'stock.picking.type', 'Subcontracting Operation Type',
domain=[('code', '=', 'mrp_operation')])
domain=[('code', '=', 'mrp_operation')], copy=False)
subcontracting_resupply_type_id = fields.Many2one(
'stock.picking.type', 'Subcontracting Resupply Operation Type',
domain=[('code', '=', 'outgoing')])
domain=[('code', '=', 'internal')], copy=False)
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
res._update_subcontracting_locations_rules()
# if new warehouse has resupply enabled, enable global route
if any([vals.get('subcontracting_to_resupply', False) for vals in vals_list]):
res._update_global_route_resupply_subcontractor()
@ -44,7 +44,7 @@ class StockWarehouse(models.Model):
return res
def get_rules_dict(self):
result = super(StockWarehouse, self).get_rules_dict()
result = super().get_rules_dict()
subcontract_location_id = self._get_subcontracting_location()
for warehouse in self:
result[warehouse.id].update({
@ -61,6 +61,7 @@ class StockWarehouse(models.Model):
route_id.active = False
else:
route_id.active = True
self.route_ids = [Command.link(route_id.id)]
def _get_routes_values(self):
routes = super(StockWarehouse, self)._get_routes_values()
@ -86,8 +87,8 @@ class StockWarehouse(models.Model):
})
return routes
def _get_global_route_rules_values(self):
rules = super(StockWarehouse, self)._get_global_route_rules_values()
def _generate_global_route_rules_values(self):
rules = super()._generate_global_route_rules_values()
subcontract_location_id = self._get_subcontracting_location()
production_location_id = self._get_production_location()
rules.update({
@ -98,7 +99,7 @@ class StockWarehouse(models.Model):
'company_id': self.company_id.id,
'action': 'pull',
'auto': 'manual',
'route_id': self._find_or_create_global_route('stock.route_warehouse0_mto', _('Make To Order')).id,
'route_id': self._find_or_create_global_route('stock.route_warehouse0_mto', _('Replenish on Order (MTO)')).id,
'name': self._format_rulename(self.lot_stock_id, subcontract_location_id, 'MTO'),
'location_dest_id': subcontract_location_id.id,
'location_src_id': self.lot_stock_id.id,
@ -115,8 +116,7 @@ class StockWarehouse(models.Model):
'company_id': self.company_id.id,
'action': 'pull',
'auto': 'manual',
'route_id': self._find_or_create_global_route('mrp_subcontracting.route_resupply_subcontractor_mto',
_('Resupply Subcontractor on Order')).id,
'route_id': self._find_or_create_global_route('mrp_subcontracting.route_resupply_subcontractor_mto', _('Resupply Subcontractor on Order')).id,
'name': self._format_rulename(subcontract_location_id, production_location_id, False),
'location_dest_id': production_location_id.id,
'location_src_id': subcontract_location_id.id,
@ -142,7 +142,7 @@ class StockWarehouse(models.Model):
},
'subcontracting_resupply_type_id': {
'name': _('Resupply Subcontractor'),
'code': 'outgoing',
'code': 'internal',
'use_create_lots': False,
'use_existing_lots': True,
'default_location_dest_id': self._get_subcontracting_location().id,
@ -156,16 +156,16 @@ class StockWarehouse(models.Model):
def _get_sequence_values(self, name=False, code=False):
values = super(StockWarehouse, self)._get_sequence_values(name=name, code=code)
count = self.env['ir.sequence'].search_count([('prefix', 'like', self.code + '/SBC%/%')])
count = self.env['ir.sequence'].search_count([('prefix', '=like', self.code + '/SBC%/%')])
values.update({
'subcontracting_type_id': {
'name': self.name + ' ' + _('Sequence subcontracting'),
'name': _('%(name)s Sequence subcontracting', name=self.name),
'prefix': self.code + '/' + (self.subcontracting_type_id.sequence_code or (('SBC' + str(count)) if count else 'SBC')) + '/',
'padding': 5,
'company_id': self.company_id.id
},
'subcontracting_resupply_type_id': {
'name': self.name + ' ' + _('Sequence Resupply Subcontractor'),
'name': _('%(name)s Sequence Resupply Subcontractor', name=self.name),
'prefix': self.code + '/' + (self.subcontracting_resupply_type_id.sequence_code or (('RES' + str(count)) if count else 'RES')) + '/',
'padding': 5,
'company_id': self.company_id.id
@ -186,7 +186,7 @@ class StockWarehouse(models.Model):
'subcontracting_resupply_type_id': {
'default_location_src_id': self.lot_stock_id.id,
'default_location_dest_id': subcontract_location_id.id,
'barcode': self.code.replace(" ", "").upper() + "-RESUPPLY",
'barcode': self.code.replace(" ", "").upper() + "RESUP",
'active': self.subcontracting_to_resupply and self.active
},
})
@ -196,14 +196,7 @@ class StockWarehouse(models.Model):
return self.company_id.subcontracting_location_id
def _get_subcontracting_locations(self):
return self.env['stock.location'].search([
('company_id', 'in', self.company_id.ids),
('is_subcontracting_location', '=', 'True'),
])
def _update_subcontracting_locations_rules(self):
subcontracting_locations = self._get_subcontracting_locations()
subcontracting_locations._activate_subcontracting_location_rules()
return self.company_id.subcontracting_location_id.child_internal_location_ids
def _update_resupply_rules(self):
'''update (archive/unarchive) any warehouse subcontracting location resupply rules'''