From 3e7018948a673870464c8f6c99fa31d19b0b572e Mon Sep 17 00:00:00 2001 From: AaronHForgeFlow Date: Fri, 27 Oct 2023 15:54:09 +0200 Subject: [PATCH] [IMP] rma: default warehouse and routes in rma operation --- rma/models/rma_operation.py | 26 ++++++++++++++++--- rma/models/rma_order_line.py | 7 +++-- rma/models/stock_warehouse.py | 4 +-- rma/tests/test_rma.py | 18 +++++++------ rma/views/stock_warehouse.xml | 3 +++ .../rma_order_line_make_supplier_rma.py | 2 +- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/rma/models/rma_operation.py b/rma/models/rma_operation.py index 104dc9bfa..bf3a75f07 100644 --- a/rma/models/rma_operation.py +++ b/rma/models/rma_operation.py @@ -12,7 +12,7 @@ class RmaOperation(models.Model): def _default_warehouse_id(self): company_id = self.env.user.company_id.id warehouse = self.env["stock.warehouse"].search( - [("company_id", "=", company_id)], limit=1 + [("company_id", "=", company_id)], order="sequence asc", limit=1 ) return warehouse @@ -24,13 +24,33 @@ def _default_customer_location_id(self): def _default_supplier_location_id(self): return self.env.ref("stock.stock_location_suppliers") or False + @api.onchange("in_warehouse_id") + def onchange_warehouse_id(self): + op_type = self.env.context.get("default_type") + if op_type == "customer": + warehouse = self.in_warehouse_id + if not warehouse or not warehouse.rma_customer_pull_id: + return + self.in_route_id = warehouse.rma_customer_pull_id + self.out_route_id = warehouse.rma_customer_pull_id + elif op_type == "supplier": + warehouse = self.out_warehouse_id + if not warehouse or not warehouse.rma_supplier_pull_id: + return + self.in_route_id = warehouse.rma_supplier_pull_id + self.out_route_id = warehouse.rma_supplier_pull_id + @api.model def _default_routes(self): + company_id = self.env.user.company_id.id + warehouse = self.env["stock.warehouse"].search( + [("company_id", "=", company_id)], limit=1 + ) op_type = self.env.context.get("default_type") if op_type == "customer": - return self.env.ref("rma.route_rma_customer") + return warehouse.rma_customer_pull_id.id elif op_type == "supplier": - return self.env.ref("rma.route_rma_supplier") + return warehouse.rma_supplier_pull_id.id name = fields.Char("Description", required=True) code = fields.Char("Code", required=True) diff --git a/rma/models/rma_order_line.py b/rma/models/rma_order_line.py index be10aeb41..146db69e2 100644 --- a/rma/models/rma_order_line.py +++ b/rma/models/rma_order_line.py @@ -24,11 +24,14 @@ def _get_default_type(self): @api.model def _default_warehouse_id(self): rma_id = self.env.context.get("default_rma_id", False) - warehouse = self.env["stock.warehouse"] + company_id = self.env.user.company_id.id + warehouse = self.env["stock.warehouse"].search( + [("company_id", "=", company_id)], order="sequence asc", limit=1 + ) if rma_id: rma = self.env["rma.order"].browse(rma_id) warehouse = self.env["stock.warehouse"].search( - [("company_id", "=", rma.company_id.id)], limit=1 + [("company_id", "=", rma.company_id.id)], order="sequence asc", limit=1 ) return warehouse diff --git a/rma/models/stock_warehouse.py b/rma/models/stock_warehouse.py index a9420795d..a148b9bfc 100644 --- a/rma/models/stock_warehouse.py +++ b/rma/models/stock_warehouse.py @@ -89,8 +89,8 @@ def write(self, vals): if r_type: r_type.active = False # Unlink rules: - self.mapped("rma_customer_pull_id").unlink() - self.mapped("rma_supplier_pull_id").unlink() + self.mapped("rma_customer_pull_id").active = False + self.mapped("rma_supplier_pull_id").active = False return super(StockWarehouse, self).write(vals) def _create_rma_picking_types(self): diff --git a/rma/tests/test_rma.py b/rma/tests/test_rma.py index 1f6f34dce..b8dea15a6 100644 --- a/rma/tests/test_rma.py +++ b/rma/tests/test_rma.py @@ -26,7 +26,6 @@ def setUpClass(cls): cls.rma_cust_replace_op_id = cls.env.ref("rma.rma_operation_customer_replace") cls.rma_sup_replace_op_id = cls.env.ref("rma.rma_operation_supplier_replace") cls.rma_ds_replace_op_id = cls.env.ref("rma.rma_operation_ds_replace") - cls.customer_route = cls.env.ref("rma.route_rma_customer") cls.input_location = cls.env.ref("stock.stock_location_company") cls.output_location = cls.env.ref("stock.stock_location_output") cls.category = cls._create_product_category( @@ -44,7 +43,10 @@ def setUpClass(cls): cls.partner_id = cls.env.ref("base.res_partner_2") cls.stock_location = cls.env.ref("stock.stock_location_stock") cls.wh = cls.env.ref("stock.warehouse0") + cls.wh.rma_in_this_wh = False + cls.wh.rma_in_this_wh = True cls.stock_rma_location = cls.wh.lot_rma_id + cls.customer_route = cls.wh.rma_customer_pull_id cls.customer_location = cls.env.ref("stock.stock_location_customers") cls.supplier_location = cls.env.ref("stock.stock_location_suppliers") cls.product_uom_id = cls.env.ref("uom.product_uom_unit") @@ -380,9 +382,7 @@ def test_01_rma_order_line(self): # check assert if call reference_move_id onchange self.assertEqual(line.product_id, line.reference_move_id.product_id) self.assertEqual(line.product_qty, line.reference_move_id.product_uom_qty) - self.assertEqual( - line.location_id.location_id, line.reference_move_id.location_id - ) + self.assertEqual(line.location_id, line.in_warehouse_id.lot_rma_id) self.assertEqual(line.origin, line.reference_move_id.picking_id.name) self.assertEqual( line.delivery_address_id, line.reference_move_id.picking_partner_id @@ -1087,8 +1087,10 @@ def test_08_customer_rma_multi_step(self): """ # Alter the customer RMA route to make it multi-step # Get rid of the duplicated rule - self.env.ref("rma.rule_rma_customer_out_pull").active = False - self.env.ref("rma.rule_rma_customer_in_pull").active = False + self.customer_route.rule_ids.active = False + # to be able to receive in in WH + self.wh.reception_steps = "two_steps" + self.wh.delivery_steps = "pick_ship" cust_in_pull_rule = self.customer_route.rule_ids.filtered( lambda r: r.location_id == self.stock_rma_location ) @@ -1103,7 +1105,7 @@ def test_08_customer_rma_multi_step(self): "name": "RMA->Output", "action": "pull", "warehouse_id": self.wh.id, - "location_src_id": self.env.ref("rma.location_rma").id, + "location_src_id": self.wh.lot_rma_id.id, "location_id": self.output_location.id, "procure_method": "make_to_stock", "route_id": self.customer_route.id, @@ -1140,7 +1142,7 @@ def test_08_customer_rma_multi_step(self): "action": "pull", "warehouse_id": self.wh.id, "location_src_id": self.input_location.id, - "location_id": self.env.ref("rma.location_rma").id, + "location_id": self.wh.lot_rma_id.id, "procure_method": "make_to_order", "route_id": self.customer_route.id, "picking_type_id": self.env.ref("stock.picking_type_internal").id, diff --git a/rma/views/stock_warehouse.xml b/rma/views/stock_warehouse.xml index 701edd8e8..8a63900cd 100644 --- a/rma/views/stock_warehouse.xml +++ b/rma/views/stock_warehouse.xml @@ -10,6 +10,9 @@ + + + diff --git a/rma/wizards/rma_order_line_make_supplier_rma.py b/rma/wizards/rma_order_line_make_supplier_rma.py index aa8d2119f..0b26c6641 100644 --- a/rma/wizards/rma_order_line_make_supplier_rma.py +++ b/rma/wizards/rma_order_line_make_supplier_rma.py @@ -135,7 +135,7 @@ def _prepare_supplier_rma_line(self, rma, item): "location_id": ( operation.location_id.id or operation.in_warehouse_id.lot_rma_id.id - or warehouse.lot_rma_id.id + or item.line_id.in_warehouse_id.lot_rma_id.id ), } return data