diff --git a/rma/models/rma.py b/rma/models/rma.py index d61911b8..b2865a72 100644 --- a/rma/models/rma.py +++ b/rma/models/rma.py @@ -73,6 +73,13 @@ class Rma(models.Model): index=True, tracking=True, ) + partner_shipping_id = fields.Many2one( + string="Shipping Address", + comodel_name="res.partner", + readonly=True, + states={"draft": [("readonly", False)]}, + help="Shipping address for current RMA.", + ) partner_invoice_id = fields.Many2one( string="Invoice Address", comodel_name="res.partner", @@ -385,7 +392,9 @@ class Rma(models.Model): record.access_url = "/my/rmas/{}".format(record.id) # Constrains methods (@api.constrains) - @api.constrains("state", "partner_id", "partner_invoice_id", "product_id") + @api.constrains( + "state", "partner_id", "partner_shipping_id", "partner_invoice_id", "product_id" + ) def _check_required_after_draft(self): """ Check that RMAs are being created or edited with the necessary fields filled out. Only applies to 'Draft' and @@ -420,10 +429,13 @@ class Rma(models.Model): def _onchange_partner_id(self): self.picking_id = False partner_invoice_id = False + partner_shipping_id = False if self.partner_id: - address = self.partner_id.address_get(["invoice"]) + address = self.partner_id.address_get(["invoice", "delivery"]) partner_invoice_id = address.get("invoice", False) + partner_shipping_id = address.get("delivery", False) self.partner_invoice_id = partner_invoice_id + self.partner_shipping_id = partner_shipping_id @api.onchange("picking_id") def _onchange_picking_id(self): @@ -723,7 +735,10 @@ class Rma(models.Model): # Validation business methods def _ensure_required_fields(self): """ This method is used to ensure the following fields are not empty: - ['partner_id', 'partner_invoice_id', 'product_id', 'location_id'] + [ + 'partner_id', 'partner_invoice_id', 'partner_shipping_id', + 'product_id', 'location_id' + ] This method is intended to be called on confirm RMA action and is invoked by: @@ -731,7 +746,13 @@ class Rma(models.Model): rma.action_confirm """ ir_translation = self.env["ir.translation"] - required = ["partner_id", "partner_invoice_id", "product_id", "location_id"] + required = [ + "partner_id", + "partner_shipping_id", + "partner_invoice_id", + "product_id", + "location_id", + ] for record in self: desc = "" for field in filter(lambda item: not record[item], required): @@ -863,7 +884,7 @@ class Rma(models.Model): def _prepare_picking(self, picking_form): picking_form.origin = self.name - picking_form.partner_id = self.partner_id + picking_form.partner_id = self.partner_shipping_id picking_form.location_dest_id = self.location_id with picking_form.move_ids_without_package.new() as move_form: move_form.product_id = self.product_id @@ -962,7 +983,11 @@ class Rma(models.Model): group_dict = {} rmas_to_return = self.filtered("can_be_returned") for record in rmas_to_return: - key = (record.partner_id.id, record.company_id.id, record.warehouse_id) + key = ( + record.partner_shipping_id.id, + record.company_id.id, + record.warehouse_id, + ) group_dict.setdefault(key, self.env["rma"]) group_dict[key] |= record for rmas in group_dict.values(): @@ -1010,7 +1035,7 @@ class Rma(models.Model): def _prepare_returning_picking(self, picking_form, origin=None): picking_form.picking_type_id = self.warehouse_id.rma_out_type_id picking_form.origin = origin or self.name - picking_form.partner_id = self.partner_id + picking_form.partner_id = self.partner_shipping_id def _prepare_returning_move( self, move_form, scheduled_date, quantity=None, uom=None @@ -1076,7 +1101,7 @@ class Rma(models.Model): { "name": self.name, "move_type": "direct", - "partner_id": self.partner_id.id, + "partner_id": self.partner_shipping_id.id, } ) .id @@ -1088,7 +1113,7 @@ class Rma(models.Model): product, qty, uom, - self.partner_id.property_stock_customer, + self.partner_shipping_id.property_stock_customer, self.product_id.display_name, self.procurement_group_id.name, self.company_id, @@ -1106,7 +1131,7 @@ class Rma(models.Model): "group_id": group_id, "date_planned": scheduled_date, "warehouse_id": warehouse, - "partner_id": self.partner_id.id, + "partner_id": self.partner_shipping_id.id, "rma_id": self.id, "priority": self.priority, } diff --git a/rma/models/stock_move.py b/rma/models/stock_move.py index a1b702c8..ade29234 100644 --- a/rma/models/stock_move.py +++ b/rma/models/stock_move.py @@ -96,13 +96,16 @@ class StockMove(models.Model): partner = original_picking.partner_id if hasattr(original_picking, "sale_id") and original_picking.sale_id: partner_invoice_id = original_picking.sale_id.partner_invoice_id.id + partner_shipping_id = original_picking.sale_id.partner_shipping_id.id else: - partner_invoice_id = ( - partner.address_get(["invoice"]).get("invoice", False), + partner_invoice_id = partner.address_get(["invoice"]).get("invoice", False) + partner_shipping_id = partner.address_get(["delivery"]).get( + "delivery", False ) return { "user_id": self.env.user.id, "partner_id": partner.id, + "partner_shipping_id": partner_shipping_id, "partner_invoice_id": partner_invoice_id, "origin": original_picking.name, "picking_id": original_picking.id, diff --git a/rma/tests/test_rma.py b/rma/tests/test_rma.py index 767fabee..65d4a3f1 100644 --- a/rma/tests/test_rma.py +++ b/rma/tests/test_rma.py @@ -44,6 +44,13 @@ class TestRma(SavepointCase): "type": "invoice", } ) + cls.partner_shipping = cls.res_partner.create( + { + "name": "Partner shipping test", + "parent_id": cls.partner.id, + "type": "delivery", + } + ) def _create_rma(self, partner=None, product=None, qty=None, location=None): rma_form = Form(self.env["rma"]) @@ -181,7 +188,8 @@ class TestRma(SavepointCase): rma.action_confirm() self.assertEqual( e.exception.name, - "Required field(s):\nCustomer\nInvoice Address\nProduct\nLocation", + "Required field(s):\nCustomer\nShipping Address\nInvoice Address\n" + "Product\nLocation", ) with Form(rma) as rma_form: rma_form.partner_id = self.partner @@ -531,7 +539,7 @@ class TestRma(SavepointCase): # One picking per partner self.assertNotEqual(pick_1.partner_id, pick_2.partner_id) self.assertEqual( - pick_1.partner_id, (rma_1 | rma_2 | rma_3).mapped("partner_id"), + pick_1.partner_id, (rma_1 | rma_2 | rma_3).mapped("partner_shipping_id"), ) self.assertEqual(pick_2.partner_id, rma_4.partner_id) # Each RMA of (rma_1, rma_2 and rma_3) is linked to a different diff --git a/rma/views/rma_views.xml b/rma/views/rma_views.xml index a8efd316..5ac50e05 100644 --- a/rma/views/rma_views.xml +++ b/rma/views/rma_views.xml @@ -239,6 +239,7 @@ context="{'search_default_customer':1, 'show_address': 1, 'show_vat': True}" options="{'always_reload': True}" /> + + + +
+
+ +
+
+ +