diff --git a/stock_mts_mto_rule/model/procurement.py b/stock_mts_mto_rule/model/procurement.py index 6e70c23ff..24de0babc 100644 --- a/stock_mts_mto_rule/model/procurement.py +++ b/stock_mts_mto_rule/model/procurement.py @@ -45,20 +45,21 @@ class ProcurementOrder(models.Model): 'mts_mto_procurement_id': self.id, } - @api.model - def _check(self, procurement): - if procurement.rule_id and \ - procurement.rule_id.action == 'split_procurement': + @api.multi + def _check(self): + self.ensure_one() + if self.rule_id and \ + self.rule_id.action == 'split_procurement': cancel_proc_list = [x.state == 'cancel' - for x in procurement.mts_mto_procurement_ids] + for x in self.mts_mto_procurement_ids] done_cancel_test_list = [ x.state in ('done', 'cancel') - for x in procurement.mts_mto_procurement_ids] + for x in self.mts_mto_procurement_ids] if all(cancel_proc_list): - procurement.write({'state': 'cancel'}) + self.write({'state': 'cancel'}) elif all(done_cancel_test_list): return True - return super(ProcurementOrder, self)._check(procurement) + return super(ProcurementOrder, self)._check() @api.multi def check(self, autocommit=False): diff --git a/stock_mts_mto_rule/model/warehouse.py b/stock_mts_mto_rule/model/warehouse.py index cbb62ab7d..7b30aad84 100644 --- a/stock_mts_mto_rule/model/warehouse.py +++ b/stock_mts_mto_rule/model/warehouse.py @@ -16,8 +16,9 @@ class Warehouse(models.Model): mts_mto_rule_id = fields.Many2one('procurement.rule', 'MTO+MTS rule') - @api.model - def _get_mts_mto_rule(self, warehouse): + @api.multi + def _get_mts_mto_rule(self): + self.ensure_one() route_model = self.env['stock.location.route'] pull_model = self.env['procurement.rule'] try: @@ -31,35 +32,50 @@ class Warehouse(models.Model): raise exceptions.Warning(_( 'Can\'t find any generic MTS+MTO route.')) - if not warehouse.mto_pull_id: + if not self.mto_pull_id: raise exceptions.Warning(_( 'Can\'t find MTO Rule on the warehouse')) mts_rules = pull_model.search( - [('location_src_id', '=', warehouse.lot_stock_id.id), - ('route_id', '=', warehouse.delivery_route_id.id)]) + [('location_src_id', '=', self.lot_stock_id.id), + ('route_id', '=', self.delivery_route_id.id)]) if not mts_rules: raise exceptions.Warning(_( 'Can\'t find MTS Rule on the warehouse')) return { - 'name': warehouse._format_routename(route_type='mts_mto'), + 'name': self._format_routename(route_type='mts_mto'), 'route_id': mts_mto_route.id, 'action': 'split_procurement', - 'mto_rule_id': warehouse.mto_pull_id.id, + 'mto_rule_id': self.mto_pull_id.id, 'mts_rule_id': mts_rules[0].id, - 'warehouse_id': warehouse.id, - 'location_id': warehouse.mto_pull_id.location_id.id, - 'picking_type_id': warehouse.mto_pull_id.picking_type_id.id, + 'warehouse_id': self.id, + 'location_id': self.mto_pull_id.location_id.id, + 'picking_type_id': self.mto_pull_id.picking_type_id.id, } - @api.model - def _get_push_pull_rules(self, warehouse, active, values, new_route_id): + def _get_mto_pull_rules_values(self, route_values): + """ + Prevent changing standard MTO rules' action from "move" + """ + pull_rules_list = super(Warehouse, self)._get_mto_pull_rules_values( + route_values) + for pull_rule in pull_rules_list: + pull_rule['action'] = 'move' + + return pull_rules_list + + @api.multi + def _get_push_pull_rules_values( + self, route_values, values=None, push_values=None, + pull_values=None, name_suffix=''): + self.ensure_one() pull_obj = self.env['procurement.rule'] - res = super(Warehouse, self)._get_push_pull_rules( - warehouse, active, values, new_route_id) - customer_location = warehouse._get_partner_locations() + res = super(Warehouse, self)._get_push_pull_rules_values( + route_values, values=values, push_values=push_values, + pull_values=pull_values, name_suffix=name_suffix) + customer_location = self._get_partner_locations() location_id = customer_location[0].id - if warehouse.mto_mts_management: + if self.mto_mts_management: for pull in res[1]: if pull['location_id'] == location_id: pull_mto_mts = pull.copy() @@ -69,15 +85,15 @@ class Warehouse(models.Model): 'mto_rule_id': pull_mto_mts_id.id, 'mts_rule_id': pull_mto_mts_id.id, 'sequence': 10 - }) + }) return res @api.multi - def create_routes(self, warehouse): + def create_routes(self): pull_model = self.env['procurement.rule'] - res = super(Warehouse, self).create_routes(warehouse) - if warehouse.mto_mts_management: - mts_mto_pull_vals = self._get_mts_mto_rule(warehouse) + res = super(Warehouse, self).create_routes() + if self.mto_mts_management: + mts_mto_pull_vals = self._get_mts_mto_rule() mts_mto_pull = pull_model.create(mts_mto_pull_vals) res['mts_mto_rule_id'] = mts_mto_pull.id return res @@ -89,7 +105,7 @@ class Warehouse(models.Model): if vals.get("mto_mts_management"): for warehouse in self: if not warehouse.mts_mto_rule_id: - rule_vals = self._get_mts_mto_rule(warehouse) + rule_vals = warehouse._get_mts_mto_rule() mts_mto_pull = pull_model.create(rule_vals) vals['mts_mto_rule_id'] = mts_mto_pull.id else: @@ -102,24 +118,24 @@ class Warehouse(models.Model): return res @api.model - def get_all_routes_for_wh(self, warehouse): - all_routes = super(Warehouse, self).get_all_routes_for_wh(warehouse) - if ( - warehouse.mto_mts_management and - warehouse.mts_mto_rule_id.route_id - ): - all_routes += [warehouse.mts_mto_rule_id.route_id.id] + def get_all_routes_for_wh(self): + all_routes = super(Warehouse, self).get_all_routes_for_wh() + + if self.mto_mts_management and self.mts_mto_rule_id.route_id: + all_routes += self.mts_mto_rule_id.route_id + return all_routes - @api.model - def _handle_renaming(self, warehouse, name, code): - res = super(Warehouse, self)._handle_renaming(warehouse, name, code) + @api.multi + def _update_name_and_code(self, name, code): + res = super(Warehouse, self)._update_name_and_code(name, code) - if warehouse.mts_mto_rule_id: - warehouse.mts_mto_rule_id.name = ( - warehouse.mts_mto_rule_id.name.replace( - warehouse.name, name, 1) - ) + for warehouse in self: + if warehouse.mts_mto_rule_id: + warehouse.mts_mto_rule_id.name = ( + warehouse.mts_mto_rule_id.name.replace( + warehouse.name, name, 1) + ) return res def _get_route_name(self, route_type): diff --git a/stock_mts_mto_rule/tests/test_mto_mts_route.py b/stock_mts_mto_rule/tests/test_mto_mts_route.py index 09e8cbe0d..ea24cf2ad 100644 --- a/stock_mts_mto_rule/tests/test_mto_mts_route.py +++ b/stock_mts_mto_rule/tests/test_mto_mts_route.py @@ -125,7 +125,7 @@ class TestMtoMtsRoute(TransactionCase): def test_create_routes(self): rule_obj = self.env['procurement.rule'] - created_routes = self.warehouse.create_routes(self.warehouse) + created_routes = self.warehouse.create_routes() mts_mto_route = rule_obj.browse(created_routes['mts_mto_rule_id']) self.assertEqual(mts_mto_route.warehouse_id, self.warehouse) self.assertEqual( @@ -145,9 +145,9 @@ class TestMtoMtsRoute(TransactionCase): self.assertFalse(self.warehouse.mts_mto_rule_id) def test_get_all_routes_for_wh(self): - routes = self.warehouse.get_all_routes_for_wh(self.warehouse) + routes = self.warehouse.get_all_routes_for_wh() self.assertTrue(self.warehouse.mts_mto_rule_id) - self.assertTrue(self.warehouse.mts_mto_rule_id.route_id.id in routes) + self.assertTrue(self.warehouse.mts_mto_rule_id.route_id in routes) def test_rename_warehouse(self): rule_name = self.warehouse.mts_mto_rule_id.name