From 901b09c924c552213549fdfde51d5855190b6fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Mon, 30 Mar 2026 10:29:10 +0200 Subject: [PATCH 01/55] [FIX] rma_sale: Use the appropriate _is_outgoing() method in get_delivery_move() TT61634 --- rma_sale/models/sale.py | 2 +- rma_sale/tests/test_rma_sale.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/rma_sale/models/sale.py b/rma_sale/models/sale.py index 96778b2ca..efb8fa397 100644 --- a/rma_sale/models/sale.py +++ b/rma_sale/models/sale.py @@ -113,7 +113,7 @@ def get_delivery_move(self): self == r.sale_line_id and r.state == "done" and not r.scrapped - and r.location_dest_id.usage == "customer" + and r._is_outgoing() and ( not r.origin_returned_move_id or (r.origin_returned_move_id and r.to_refund) diff --git a/rma_sale/tests/test_rma_sale.py b/rma_sale/tests/test_rma_sale.py index 83a22b884..3819a75af 100644 --- a/rma_sale/tests/test_rma_sale.py +++ b/rma_sale/tests/test_rma_sale.py @@ -76,6 +76,19 @@ def setUpClass(cls): cls.order_out_picking.move_ids.quantity = 5 cls.order_out_picking.button_validate() + def test_sale_order_line_get_delivery_move(self): + # Example of a use case: sale order with a partner from existing res.company + self.order_out_picking.move_ids.write( + { + "location_dest_id": self.env.ref( + "stock.stock_location_inter_company" + ).id, + } + ) + self.assertIn( + self.order_out_picking.move_ids, self.order_line.get_delivery_move() + ) + def test_rma_sale_computes_onchange(self): rma = self.env["rma"].new() # No m2m values when everything is selectable From 3b9fde3ca52f10be6a3d8aec3a08d4a5cc8270a6 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 30 Mar 2026 11:35:59 +0000 Subject: [PATCH 02/55] [BOT] post-merge updates --- README.md | 2 +- rma_sale/README.rst | 2 +- rma_sale/__manifest__.py | 2 +- rma_sale/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 01a74d098..9da1858a5 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ addon | version | maintainers | summary [rma_reason](rma_reason/) | 18.0.1.0.1 | sbejaoui | Rma Reason [rma_repair](rma_repair/) | 18.0.1.0.1 | peluko00 | Create a repair order from rma [rma_repair_lot](rma_repair_lot/) | 18.0.1.0.1 | peluko00 | RMA Repair Lot -[rma_sale](rma_sale/) | 18.0.2.1.4 | pedrobaeza | Sale Order - Return Merchandise Authorization (RMA) +[rma_sale](rma_sale/) | 18.0.2.1.5 | pedrobaeza | Sale Order - Return Merchandise Authorization (RMA) [rma_sale_delivery](rma_sale_delivery/) | 18.0.1.0.0 | victoralmau | RMA Sale Delivery [rma_sale_lot](rma_sale_lot/) | 18.0.1.1.0 | | Manage sale returns with lot. [rma_sale_mrp](rma_sale_mrp/) | 18.0.1.0.1 | chienandalu | Allow doing RMAs from MRP kits diff --git a/rma_sale/README.rst b/rma_sale/README.rst index 8ab587035..54c28c446 100644 --- a/rma_sale/README.rst +++ b/rma_sale/README.rst @@ -11,7 +11,7 @@ Return Merchandise Authorization Management - Link with Sales !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8cc0345b74fa54db4963accccbb899cf092e96d390bc28409e52c81cf66680e9 + !! source digest: sha256:439ab97a5d12ee92368bea0dc93018f1d1870541c4daf8d7483ad24bc384dd9c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/rma_sale/__manifest__.py b/rma_sale/__manifest__.py index 0f1a7b0a0..5dfb28e6f 100644 --- a/rma_sale/__manifest__.py +++ b/rma_sale/__manifest__.py @@ -6,7 +6,7 @@ { "name": "Return Merchandise Authorization Management - Link with Sales", "summary": "Sale Order - Return Merchandise Authorization (RMA)", - "version": "18.0.2.1.4", + "version": "18.0.2.1.5", "development_status": "Production/Stable", "category": "RMA", "website": "https://github.com/OCA/rma", diff --git a/rma_sale/static/description/index.html b/rma_sale/static/description/index.html index 9f9b08d4d..93b6b53b8 100644 --- a/rma_sale/static/description/index.html +++ b/rma_sale/static/description/index.html @@ -372,7 +372,7 @@

Return Merchandise Authorization Management - Link with Sales

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:8cc0345b74fa54db4963accccbb899cf092e96d390bc28409e52c81cf66680e9 +!! source digest: sha256:439ab97a5d12ee92368bea0dc93018f1d1870541c4daf8d7483ad24bc384dd9c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

This module allows you to link a sales order to an RMA. This can be done From 712f57100fb341a0453bb273b09eb62407d723ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 31 Mar 2026 12:53:09 +0200 Subject: [PATCH 03/55] [FIX] rma_lot: Do not define move_orig_ids with other lot to avoid inconsistencies TT61741 --- rma_lot/models/rma.py | 9 ++++++++- rma_lot/tests/test_rma_lot.py | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/rma_lot/models/rma.py b/rma_lot/models/rma.py index c8512b240..043997295 100644 --- a/rma_lot/models/rma.py +++ b/rma_lot/models/rma.py @@ -1,7 +1,7 @@ # Copyright 2024 ACSONE SA/NV # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import api, fields, models +from odoo import Command, api, fields, models class Rma(models.Model): @@ -23,6 +23,13 @@ def _compute_lots_visible(self): for rec in self: rec.lots_visible = rec.product_id.tracking != "none" + def _prepare_delivery_procurement_vals(self, scheduled_date=None): + vals = super()._prepare_delivery_procurement_vals(scheduled_date=scheduled_date) + if vals.get("restrict_lot_id") and self.reception_move_id.restrict_lot_id: + if self.reception_move_id.restrict_lot_id.id != vals.get("restrict_lot_id"): + vals["move_orig_ids"] = [Command.clear()] # Avoid inconsistencies + return vals + def _prepare_reception_procurement_vals(self, group=None): vals = super()._prepare_reception_procurement_vals(group=group) vals["restrict_lot_id"] = self.lot_id.id diff --git a/rma_lot/tests/test_rma_lot.py b/rma_lot/tests/test_rma_lot.py index 4ec4f29b5..ff9ab0237 100644 --- a/rma_lot/tests/test_rma_lot.py +++ b/rma_lot/tests/test_rma_lot.py @@ -1,8 +1,9 @@ # Copyright 2020 Iryna Vyshnevska Camptocamp # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import Command +from odoo import Command, fields from odoo.tests import Form +from odoo.tools import mute_logger from odoo.addons.base.tests.common import BaseCommon @@ -107,6 +108,36 @@ def test_deliver_same_lot_as_received(self): self.assertEqual(rma_lot_1.delivery_move_ids.restrict_lot_id, self.lot_1) self.assertEqual(rma_lot_2.delivery_move_ids.restrict_lot_id, self.lot_2) + @mute_logger("odoo.models.unlink") + def test_deliver_same_lot_as_received_extra(self): + self.operation.deliver_same_lot = True + self.operation.action_create_delivery = "manual_after_receipt" + rma_lot_1, rma_lot_2 = self.test_00() + # TODO: This shouldn't be necessary + rma_lot_1.product_uom_qty = 1 + rma_lot_1.reception_move_id.move_line_ids.filtered( + lambda x: x.lot_id == self.lot_2 + ).unlink() + reception_picking = rma_lot_1.reception_move_id.picking_id + wiz_act = reception_picking.button_validate() + wiz = Form( + self.env[wiz_act["res_model"]].with_context(**wiz_act["context"]) + ).save() + wiz.process() + self.assertEqual(reception_picking.state, "done") + self.assertEqual(rma_lot_1.state, "received") + self.assertEqual(rma_lot_2.state, "received") + rma_lot_1.lot_id = self.lot_2 + rma_lot_1.create_return( + fields.Datetime.now(), + rma_lot_1.product_uom_qty, + rma_lot_1.product_uom, + ) + delivery_picking = rma_lot_1.delivery_move_ids.picking_id + self.assertEqual(delivery_picking.state, "assigned") + delivery_picking.button_validate() + self.assertEqual(delivery_picking.state, "done") + def test_deliver_different_lot_as_received(self): self.operation.deliver_same_lot = False rma_lot_1, rma_lot_2 = self.test_00() From ff775f74ee6a91554537472b736ad543daf3d66e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 31 Mar 2026 15:14:30 +0000 Subject: [PATCH 04/55] [BOT] post-merge updates --- README.md | 2 +- rma_lot/README.rst | 2 +- rma_lot/__manifest__.py | 2 +- rma_lot/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9da1858a5..ce1cf284c 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ addon | version | maintainers | summary [rma](rma/) | 18.0.2.2.18 | pedrobaeza chienandalu | Return Merchandise Authorization (RMA) [rma_batch](rma_batch/) | 18.0.1.0.0 | | Group RMAs into batches for collective management [rma_delivery](rma_delivery/) | 18.0.1.1.0 | chienandalu | Allow to choose a default delivery carrier for returns -[rma_lot](rma_lot/) | 18.0.1.1.0 | | Manage lot in RMA +[rma_lot](rma_lot/) | 18.0.1.1.1 | | Manage lot in RMA [rma_reason](rma_reason/) | 18.0.1.0.1 | sbejaoui | Rma Reason [rma_repair](rma_repair/) | 18.0.1.0.1 | peluko00 | Create a repair order from rma [rma_repair_lot](rma_repair_lot/) | 18.0.1.0.1 | peluko00 | RMA Repair Lot diff --git a/rma_lot/README.rst b/rma_lot/README.rst index 2399da303..d339d1803 100644 --- a/rma_lot/README.rst +++ b/rma_lot/README.rst @@ -11,7 +11,7 @@ Rma Lot !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b5581680286899dee6e6d669926fc112937c50e2bb5dd0333681e23982995031 + !! source digest: sha256:ebaabb43a82cd547923bf91f795b831ce9644d7c5eed06dcb3952cc1279f24fa !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/rma_lot/__manifest__.py b/rma_lot/__manifest__.py index bd1b71292..caa5a52cf 100644 --- a/rma_lot/__manifest__.py +++ b/rma_lot/__manifest__.py @@ -5,7 +5,7 @@ "name": "Rma Lot", "summary": """ Manage lot in RMA""", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "license": "AGPL-3", "author": "ACSONE SA/NV,BCIM,Odoo Community Association (OCA)", "website": "https://github.com/OCA/rma", diff --git a/rma_lot/static/description/index.html b/rma_lot/static/description/index.html index 044b2b7da..6faf91103 100644 --- a/rma_lot/static/description/index.html +++ b/rma_lot/static/description/index.html @@ -372,7 +372,7 @@

Rma Lot

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:b5581680286899dee6e6d669926fc112937c50e2bb5dd0333681e23982995031 +!! source digest: sha256:ebaabb43a82cd547923bf91f795b831ce9644d7c5eed06dcb3952cc1279f24fa !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

Tracking returned products by lot or serial number is crucial for From bc10880e2b831c23b47ed38abe9ee0e2b2608516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 31 Mar 2026 17:31:19 +0200 Subject: [PATCH 05/55] [IMP] rma_lot: Specify the appropriate qty in the RMA created if the move does not have a restrict_lot_id defined TT61741 --- rma_lot/tests/test_rma_lot.py | 128 ++++++++++++++----- rma_lot/wizards/stock_return_picking_line.py | 6 +- 2 files changed, 98 insertions(+), 36 deletions(-) diff --git a/rma_lot/tests/test_rma_lot.py b/rma_lot/tests/test_rma_lot.py index ff9ab0237..43262243d 100644 --- a/rma_lot/tests/test_rma_lot.py +++ b/rma_lot/tests/test_rma_lot.py @@ -13,7 +13,7 @@ class TestRMALot(BaseCommon): def setUpClass(cls): super().setUpClass() cls.picking_obj = cls.env["stock.picking"] - partner = cls.env["res.partner"].create({"name": "Test"}) + cls.partner = cls.env["res.partner"].create({"name": "Test"}) cls.product = cls.env["product.product"].create( { "name": "test_product", @@ -28,21 +28,21 @@ def setUpClass(cls): cls.lot_2 = cls.env["stock.lot"].create( {"name": "000002", "product_id": cls.product.id} ) - picking_type_out = cls.env.ref("stock.picking_type_out") - stock_location = cls.env.ref("stock.stock_location_stock") - customer_location = cls.env.ref("stock.stock_location_customers") + cls.picking_type_out = cls.env.ref("stock.picking_type_out") + cls.stock_location = cls.env.ref("stock.stock_location_stock") + cls.customer_location = cls.env.ref("stock.stock_location_customers") cls.env["stock.quant"]._update_available_quantity( - cls.product, stock_location, 1, lot_id=cls.lot_1 + cls.product, cls.stock_location, 1, lot_id=cls.lot_1 ) cls.env["stock.quant"]._update_available_quantity( - cls.product, stock_location, 2, lot_id=cls.lot_2 + cls.product, cls.stock_location, 2, lot_id=cls.lot_2 ) cls.picking = cls.picking_obj.create( { - "partner_id": partner.id, - "picking_type_id": picking_type_out.id, - "location_id": stock_location.id, - "location_dest_id": customer_location.id, + "partner_id": cls.partner.id, + "picking_type_id": cls.picking_type_out.id, + "location_id": cls.stock_location.id, + "location_dest_id": cls.customer_location.id, "move_ids": [ Command.create( { @@ -50,8 +50,8 @@ def setUpClass(cls): "product_id": cls.product.id, "product_uom_qty": 3, "product_uom": cls.product.uom_id.id, - "location_id": stock_location.id, - "location_dest_id": customer_location.id, + "location_id": cls.stock_location.id, + "location_dest_id": cls.customer_location.id, }, ) ], @@ -64,35 +64,102 @@ def setUpClass(cls): cls.operation.action_create_delivery = "automatic_on_confirm" @classmethod - def create_return_wiz(cls): + def create_return_wiz(cls, picking): return ( cls.env["stock.return.picking"] - .with_context(active_id=cls.picking.id, active_model="stock.picking") + .with_context(active_id=picking.id, active_model="stock.picking") .create({"create_rma": True}) ) - def test_00(self): + def _create_rmas(self, picking, lot_1, lot_2): """ Check the process of creating RMAs when returning products tracked by lot - The correct number of RMAs is created - The RMAs are correctly associated with the lot """ - return_wizard = self.create_return_wiz() + return_wizard = self.create_return_wiz(picking) return_wizard.create_rma = True return_wizard.rma_operation_id = self.operation self.assertEqual(len(return_wizard.product_return_moves), 2) return_wizard.action_create_returns_all() - self.assertEqual(self.picking.rma_count, 2) - rmas = self.picking.move_ids.rma_ids - rma_lot_1 = rmas.filtered(lambda r, lot=self.lot_1: r.lot_id == lot) - rma_lot_2 = rmas.filtered(lambda r, lot=self.lot_2: r.lot_id == lot) + self.assertEqual(picking.rma_count, 2) + rmas = picking.move_ids.rma_ids + rma_lot_1 = rmas.filtered(lambda r, lot=lot_1: r.lot_id == lot) self.assertTrue(rma_lot_1) + rma_lot_2 = rmas.filtered(lambda r, lot=lot_2: r.lot_id == lot) + self.assertTrue(rma_lot_2) + return rma_lot_1, rma_lot_2 + + def test_00(self): + """ + Check the process of creating RMAs when returning products tracked by lot + - The correct number of RMAs is created + - The RMAs are correctly associated with the lot + """ + rma_lot_1, rma_lot_2 = self._create_rmas(self.picking, self.lot_1, self.lot_2) + self.assertEqual(rma_lot_1.product_uom_qty, 1) self.assertEqual(rma_lot_1.reception_move_id.restrict_lot_id, self.lot_1) self.assertEqual(rma_lot_1.reception_move_id.state, "assigned") - self.assertTrue(rma_lot_2) + self.assertEqual(rma_lot_2.product_uom_qty, 2) self.assertEqual(rma_lot_2.reception_move_id.restrict_lot_id, self.lot_2) self.assertEqual(rma_lot_2.reception_move_id.state, "assigned") - return rma_lot_1, rma_lot_2 + + def test_01(self): + lot_3 = self.env["stock.lot"].create( + {"name": "000003", "product_id": self.product.id} + ) + lot_4 = self.env["stock.lot"].create( + {"name": "000004", "product_id": self.product.id} + ) + self.env["stock.quant"]._update_available_quantity( + self.product, self.stock_location, 1, lot_id=lot_3 + ) + self.env["stock.quant"]._update_available_quantity( + self.product, self.stock_location, 2, lot_id=lot_4 + ) + picking = self.picking_obj.create( + { + "partner_id": self.partner.id, + "picking_type_id": self.picking_type_out.id, + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + "move_ids": [ + Command.create( + { + "name": self.product.name, + "product_id": self.product.id, + "product_uom_qty": 1, + "product_uom": self.product.uom_id.id, + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + "restrict_lot_id": lot_3.id, + }, + ), + Command.create( + { + "name": self.product.name, + "product_id": self.product.id, + "product_uom_qty": 2, + "product_uom": self.product.uom_id.id, + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + "restrict_lot_id": lot_4.id, + }, + ), + ], + } + ) + picking.action_confirm() + picking.action_assign() + picking.button_validate() + self.assertEqual(picking.state, "done") + rma_lot_3, rma_lot_4 = self._create_rmas(picking, lot_3, lot_4) + self.assertEqual(rma_lot_3.product_uom_qty, 1) + self.assertEqual(rma_lot_3.reception_move_id.restrict_lot_id, lot_3) + self.assertEqual(rma_lot_3.reception_move_id.state, "assigned") + self.assertEqual(rma_lot_4.product_uom_qty, 2) + self.assertEqual(rma_lot_4.reception_move_id.restrict_lot_id, lot_4) + self.assertEqual(rma_lot_4.reception_move_id.state, "assigned") def test_rma_form(self): rma_form = Form(self.env["rma"]) @@ -104,7 +171,7 @@ def test_rma_form(self): def test_deliver_same_lot_as_received(self): self.operation.deliver_same_lot = True - rma_lot_1, rma_lot_2 = self.test_00() + rma_lot_1, rma_lot_2 = self._create_rmas(self.picking, self.lot_1, self.lot_2) self.assertEqual(rma_lot_1.delivery_move_ids.restrict_lot_id, self.lot_1) self.assertEqual(rma_lot_2.delivery_move_ids.restrict_lot_id, self.lot_2) @@ -112,18 +179,9 @@ def test_deliver_same_lot_as_received(self): def test_deliver_same_lot_as_received_extra(self): self.operation.deliver_same_lot = True self.operation.action_create_delivery = "manual_after_receipt" - rma_lot_1, rma_lot_2 = self.test_00() - # TODO: This shouldn't be necessary - rma_lot_1.product_uom_qty = 1 - rma_lot_1.reception_move_id.move_line_ids.filtered( - lambda x: x.lot_id == self.lot_2 - ).unlink() + rma_lot_1, rma_lot_2 = self._create_rmas(self.picking, self.lot_1, self.lot_2) reception_picking = rma_lot_1.reception_move_id.picking_id - wiz_act = reception_picking.button_validate() - wiz = Form( - self.env[wiz_act["res_model"]].with_context(**wiz_act["context"]) - ).save() - wiz.process() + reception_picking.button_validate() self.assertEqual(reception_picking.state, "done") self.assertEqual(rma_lot_1.state, "received") self.assertEqual(rma_lot_2.state, "received") @@ -140,6 +198,6 @@ def test_deliver_same_lot_as_received_extra(self): def test_deliver_different_lot_as_received(self): self.operation.deliver_same_lot = False - rma_lot_1, rma_lot_2 = self.test_00() + rma_lot_1, rma_lot_2 = self._create_rmas(self.picking, self.lot_1, self.lot_2) self.assertFalse(rma_lot_1.delivery_move_ids.restrict_lot_id) self.assertFalse(rma_lot_2.delivery_move_ids.restrict_lot_id, self.lot_2) diff --git a/rma_lot/wizards/stock_return_picking_line.py b/rma_lot/wizards/stock_return_picking_line.py index 9ce1b1a4c..f09af9a02 100644 --- a/rma_lot/wizards/stock_return_picking_line.py +++ b/rma_lot/wizards/stock_return_picking_line.py @@ -9,5 +9,9 @@ class StockReturnPickingLine(models.TransientModel): def _prepare_rma_vals(self): vals = super()._prepare_rma_vals() - vals.update({"lot_id": self.lot_id.id}) + lot = self.lot_id + vals["lot_id"] = lot.id + if not self.move_id.restrict_lot_id: + smls = self.move_id.move_line_ids.filtered(lambda x: x.lot_id == lot) + vals["product_uom_qty"] = sum(smls.mapped("quantity")) return vals From 3ebc630418000857ce72be2fb15604e23f581922 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 31 Mar 2026 21:46:10 +0000 Subject: [PATCH 06/55] [BOT] post-merge updates --- README.md | 2 +- rma_lot/README.rst | 2 +- rma_lot/__manifest__.py | 2 +- rma_lot/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ce1cf284c..9bd8c8dae 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ addon | version | maintainers | summary [rma](rma/) | 18.0.2.2.18 | pedrobaeza chienandalu | Return Merchandise Authorization (RMA) [rma_batch](rma_batch/) | 18.0.1.0.0 | | Group RMAs into batches for collective management [rma_delivery](rma_delivery/) | 18.0.1.1.0 | chienandalu | Allow to choose a default delivery carrier for returns -[rma_lot](rma_lot/) | 18.0.1.1.1 | | Manage lot in RMA +[rma_lot](rma_lot/) | 18.0.1.1.2 | | Manage lot in RMA [rma_reason](rma_reason/) | 18.0.1.0.1 | sbejaoui | Rma Reason [rma_repair](rma_repair/) | 18.0.1.0.1 | peluko00 | Create a repair order from rma [rma_repair_lot](rma_repair_lot/) | 18.0.1.0.1 | peluko00 | RMA Repair Lot diff --git a/rma_lot/README.rst b/rma_lot/README.rst index d339d1803..5e83a61b0 100644 --- a/rma_lot/README.rst +++ b/rma_lot/README.rst @@ -11,7 +11,7 @@ Rma Lot !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ebaabb43a82cd547923bf91f795b831ce9644d7c5eed06dcb3952cc1279f24fa + !! source digest: sha256:9542b82047cb2ee8b8439e6cb151a10ee9d4c4a537a40c2d5d3c36da455d4697 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/rma_lot/__manifest__.py b/rma_lot/__manifest__.py index caa5a52cf..84e5f5aa8 100644 --- a/rma_lot/__manifest__.py +++ b/rma_lot/__manifest__.py @@ -5,7 +5,7 @@ "name": "Rma Lot", "summary": """ Manage lot in RMA""", - "version": "18.0.1.1.1", + "version": "18.0.1.1.2", "license": "AGPL-3", "author": "ACSONE SA/NV,BCIM,Odoo Community Association (OCA)", "website": "https://github.com/OCA/rma", diff --git a/rma_lot/static/description/index.html b/rma_lot/static/description/index.html index 6faf91103..636b34c37 100644 --- a/rma_lot/static/description/index.html +++ b/rma_lot/static/description/index.html @@ -372,7 +372,7 @@

Rma Lot

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:ebaabb43a82cd547923bf91f795b831ce9644d7c5eed06dcb3952cc1279f24fa +!! source digest: sha256:9542b82047cb2ee8b8439e6cb151a10ee9d4c4a537a40c2d5d3c36da455d4697 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

Tracking returned products by lot or serial number is crucial for From c1d0ede8fae1020e85dc44a6704422be66d93e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 31 Mar 2026 14:24:42 +0200 Subject: [PATCH 07/55] [IMP] rma_lot: Add lot_id field to Replace wizard TT61741 --- rma_lot/README.rst | 10 ++-- rma_lot/__manifest__.py | 1 + rma_lot/models/rma.py | 5 +- rma_lot/static/description/index.html | 26 ++++------ rma_lot/tests/test_rma_lot.py | 32 +++++++++++++ rma_lot/wizards/__init__.py | 1 + rma_lot/wizards/rma_delivery.py | 66 ++++++++++++++++++++++++++ rma_lot/wizards/rma_delivery_views.xml | 32 +++++++++++++ 8 files changed, 149 insertions(+), 24 deletions(-) create mode 100644 rma_lot/wizards/rma_delivery.py create mode 100644 rma_lot/wizards/rma_delivery_views.xml diff --git a/rma_lot/README.rst b/rma_lot/README.rst index 5e83a61b0..a1991cf66 100644 --- a/rma_lot/README.rst +++ b/rma_lot/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ======= Rma Lot ======= @@ -17,7 +13,7 @@ Rma Lot .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frma-lightgray.png?logo=github @@ -86,8 +82,8 @@ Authors Contributors ------------ -- Jacques-Etienne Baudoux - BCIM je@bcim.be -- Souheil Bejaoui - ACSONE SA/NV souheil.bejaoui@acsone.eu +- Jacques-Etienne Baudoux - BCIM je@bcim.be +- Souheil Bejaoui - ACSONE SA/NV souheil.bejaoui@acsone.eu Maintainers ----------- diff --git a/rma_lot/__manifest__.py b/rma_lot/__manifest__.py index 84e5f5aa8..5b621acd3 100644 --- a/rma_lot/__manifest__.py +++ b/rma_lot/__manifest__.py @@ -14,6 +14,7 @@ "views/rma_operation.xml", "views/rma.xml", "views/rma_portal_template.xml", + "wizards/rma_delivery_views.xml", ], "demo": [], } diff --git a/rma_lot/models/rma.py b/rma_lot/models/rma.py index 043997295..31311a27e 100644 --- a/rma_lot/models/rma.py +++ b/rma_lot/models/rma.py @@ -41,7 +41,10 @@ def _prepare_common_procurement_vals( vals = super()._prepare_common_procurement_vals( warehouse=warehouse, scheduled_date=scheduled_date, group=group ) - if self.operation_id.deliver_same_lot: + replace_lot = self.env.context.get("rma_replace_lot_id") + if replace_lot: + vals["restrict_lot_id"] = replace_lot.id + elif self.operation_id.deliver_same_lot: vals["restrict_lot_id"] = self.lot_id.id return vals diff --git a/rma_lot/static/description/index.html b/rma_lot/static/description/index.html index 636b34c37..1d324f9ce 100644 --- a/rma_lot/static/description/index.html +++ b/rma_lot/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Rma Lot -

+
+

Rma Lot

- - -Odoo Community Association - -
-

Rma Lot

-

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

Tracking returned products by lot or serial number is crucial for businesses that require precise monitoring, especially in industries where quality control, compliance, and inventory accuracy are critical. @@ -403,7 +398,7 @@

Rma Lot

-

Configuration

+

Configuration

To allow delivering or replacing with the same lot/serial received from the customer:

    @@ -413,7 +408,7 @@

    Configuration

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -421,23 +416,23 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • ACSONE SA/NV
  • BCIM
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -450,6 +445,5 @@

Maintainers

-
diff --git a/rma_lot/tests/test_rma_lot.py b/rma_lot/tests/test_rma_lot.py index 43262243d..b0325c7d4 100644 --- a/rma_lot/tests/test_rma_lot.py +++ b/rma_lot/tests/test_rma_lot.py @@ -22,6 +22,14 @@ def setUpClass(cls): "tracking": "lot", } ) + cls.product_extra = cls.env["product.product"].create( + { + "name": "test_product extra", + "type": "consu", + "is_storable": True, + "tracking": "lot", + } + ) cls.lot_1 = cls.env["stock.lot"].create( {"name": "000001", "product_id": cls.product.id} ) @@ -31,12 +39,18 @@ def setUpClass(cls): cls.picking_type_out = cls.env.ref("stock.picking_type_out") cls.stock_location = cls.env.ref("stock.stock_location_stock") cls.customer_location = cls.env.ref("stock.stock_location_customers") + cls.lot_extra = cls.env["stock.lot"].create( + {"name": "000003", "product_id": cls.product_extra.id} + ) cls.env["stock.quant"]._update_available_quantity( cls.product, cls.stock_location, 1, lot_id=cls.lot_1 ) cls.env["stock.quant"]._update_available_quantity( cls.product, cls.stock_location, 2, lot_id=cls.lot_2 ) + cls.env["stock.quant"]._update_available_quantity( + cls.product_extra, cls.stock_location, 1, lot_id=cls.lot_extra + ) cls.picking = cls.picking_obj.create( { "partner_id": cls.partner.id, @@ -201,3 +215,21 @@ def test_deliver_different_lot_as_received(self): rma_lot_1, rma_lot_2 = self._create_rmas(self.picking, self.lot_1, self.lot_2) self.assertFalse(rma_lot_1.delivery_move_ids.restrict_lot_id) self.assertFalse(rma_lot_2.delivery_move_ids.restrict_lot_id, self.lot_2) + + def test_replace_wizard_lot_change(self): + self.operation.action_create_delivery = "manual_after_receipt" + rma_lot_1, rma_lot_2 = self._create_rmas(self.picking, self.lot_1, self.lot_2) + reception_picking = rma_lot_1.reception_move_id.picking_id + reception_picking.button_validate() + self.assertEqual(reception_picking.state, "done") + self.assertEqual(rma_lot_1.state, "received") + self.assertEqual(rma_lot_2.state, "received") + res = rma_lot_1.action_replace() + wizard_form = Form(self.env[res["res_model"]].with_context(**res["context"])) + wizard_form.product_id = self.product_extra + wizard_form.lot_id = self.lot_extra + wizard = wizard_form.save() + wizard.action_deliver() + self.assertEqual(rma_lot_1.state, "waiting_replacement") + self.assertEqual(rma_lot_1.delivery_move_ids.product_id, self.product_extra) + self.assertEqual(rma_lot_1.delivery_move_ids.restrict_lot_id, self.lot_extra) diff --git a/rma_lot/wizards/__init__.py b/rma_lot/wizards/__init__.py index 2ed06ea13..ee8db4f80 100644 --- a/rma_lot/wizards/__init__.py +++ b/rma_lot/wizards/__init__.py @@ -1 +1,2 @@ +from . import rma_delivery from . import stock_return_picking_line diff --git a/rma_lot/wizards/rma_delivery.py b/rma_lot/wizards/rma_delivery.py new file mode 100644 index 000000000..671a6401d --- /dev/null +++ b/rma_lot/wizards/rma_delivery.py @@ -0,0 +1,66 @@ +# Copyright 2026 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models +from odoo.tools import float_compare + + +class RmaReDeliveryWizard(models.TransientModel): + _inherit = "rma.delivery.wizard" + + domain_lot_id = fields.Binary(compute="_compute_domain_lot_id") + lot_id = fields.Many2one( + comodel_name="stock.lot", + string="Lot/Serial Number", + domain="domain_lot_id", + ) + product_tracking = fields.Selection(related="product_id.tracking") + + @api.depends("product_id", "product_tracking", "product_uom_qty", "warehouse_id") + def _compute_domain_lot_id(self): + dp = self.env["decimal.precision"].precision_get("Product Unit of Measure") + for item in self: + domain = [] + if item.product_id and item.product_tracking != "none": + # Only available lots should be displayed. In pickings, the + # corresponding stock.quant record is selected directly, so we + # use the same filters that are used. + quants = self.env["stock.quant"].search( + [ + ("product_id", "=", item.product_id.id), + ("quantity", ">=", item.product_uom_qty), + ("lot_id", "!=", False), + ("location_id.usage", "=", "internal"), + "|", + ("location_id.warehouse_id", "=", item.warehouse_id.id), + ("location_id", "child_of", item.warehouse_id.rma_loc_id.id), + ] + ) + available_quants = quants.filtered( + lambda x, qty=item.product_uom_qty: float_compare( + x.available_quantity, + qty, + precision_digits=dp, + ) + >= 0 + ) + domain = [("id", "in", available_quants.mapped("lot_id").ids)] + item.domain_lot_id = domain + + @api.onchange("product_id") + def _onchange_product_id(self): + res = super()._onchange_product_id() + if self.product_id and self.product_tracking: + rma_ids = self.env.context.get("active_ids") + rma = self.env["rma"].browse(rma_ids) + if len(rma) == 1: + if rma.lot_id.product_id == self.product_id: + self.lot_id = rma.lot_id + else: + self.lot_id = False + return res + + def action_deliver(self): + if self.type == "replace" and self.lot_id: + self = self.with_context(rma_replace_lot_id=self.lot_id) + return super().action_deliver() diff --git a/rma_lot/wizards/rma_delivery_views.xml b/rma_lot/wizards/rma_delivery_views.xml new file mode 100644 index 000000000..63e807482 --- /dev/null +++ b/rma_lot/wizards/rma_delivery_views.xml @@ -0,0 +1,32 @@ + + + + rma.delivery.wizard + + + + + From 62f1afdfd4b4e72d8593bfa9993f47d13c6436f7 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 1 Apr 2026 06:41:04 +0000 Subject: [PATCH 08/55] [UPD] Update rma_lot.pot --- rma_lot/i18n/rma_lot.pot | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/rma_lot/i18n/rma_lot.pot b/rma_lot/i18n/rma_lot.pot index 37dce7647..b1fa8c29b 100644 --- a/rma_lot/i18n/rma_lot.pot +++ b/rma_lot/i18n/rma_lot.pot @@ -18,8 +18,14 @@ msgstr "" msgid "Deliver Same Lot/Serial as Received" msgstr "" +#. module: rma_lot +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__domain_lot_id +msgid "Domain Lot" +msgstr "" + #. module: rma_lot #: model:ir.model.fields,help:rma_lot.field_rma__product_tracking +#: model:ir.model.fields,help:rma_lot.field_rma_delivery_wizard__product_tracking msgid "Ensure the traceability of a storable product in your warehouse." msgstr "" @@ -34,12 +40,15 @@ msgstr "" #. module: rma_lot #: model_terms:ir.ui.view,arch_db:rma_lot.portal_rma_page_lot #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot" msgstr "" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__lot_id +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__lot_id #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot/Serial Number" msgstr "" @@ -53,6 +62,11 @@ msgstr "" msgid "RMA" msgstr "" +#. module: rma_lot +#: model:ir.model,name:rma_lot.model_rma_delivery_wizard +msgid "RMA Delivery Wizard" +msgstr "" + #. module: rma_lot #: model:ir.model,name:rma_lot.model_rma_operation msgid "RMA requested operation" @@ -66,10 +80,12 @@ msgstr "" #. module: rma_lot #: model_terms:ir.ui.view,arch_db:rma_lot.portal_rma_page_lot #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Serial Number" msgstr "" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__product_tracking +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__product_tracking msgid "Tracking" msgstr "" From 22c0d389421dac82704b15cb2464ac4e480600a5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 1 Apr 2026 06:45:25 +0000 Subject: [PATCH 09/55] [BOT] post-merge updates --- README.md | 2 +- rma_lot/README.rst | 12 ++++++++---- rma_lot/__manifest__.py | 2 +- rma_lot/static/description/index.html | 28 ++++++++++++++++----------- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 9bd8c8dae..843c6d105 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ addon | version | maintainers | summary [rma](rma/) | 18.0.2.2.18 | pedrobaeza chienandalu | Return Merchandise Authorization (RMA) [rma_batch](rma_batch/) | 18.0.1.0.0 | | Group RMAs into batches for collective management [rma_delivery](rma_delivery/) | 18.0.1.1.0 | chienandalu | Allow to choose a default delivery carrier for returns -[rma_lot](rma_lot/) | 18.0.1.1.2 | | Manage lot in RMA +[rma_lot](rma_lot/) | 18.0.1.2.0 | | Manage lot in RMA [rma_reason](rma_reason/) | 18.0.1.0.1 | sbejaoui | Rma Reason [rma_repair](rma_repair/) | 18.0.1.0.1 | peluko00 | Create a repair order from rma [rma_repair_lot](rma_repair_lot/) | 18.0.1.0.1 | peluko00 | RMA Repair Lot diff --git a/rma_lot/README.rst b/rma_lot/README.rst index a1991cf66..5aae5e88c 100644 --- a/rma_lot/README.rst +++ b/rma_lot/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ======= Rma Lot ======= @@ -7,13 +11,13 @@ Rma Lot !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:9542b82047cb2ee8b8439e6cb151a10ee9d4c4a537a40c2d5d3c36da455d4697 + !! source digest: sha256:78f967ed69276752aabcbb6ab0b695fcfe256c2e47b8a71d483df47eed1a0814 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frma-lightgray.png?logo=github @@ -82,8 +86,8 @@ Authors Contributors ------------ -- Jacques-Etienne Baudoux - BCIM je@bcim.be -- Souheil Bejaoui - ACSONE SA/NV souheil.bejaoui@acsone.eu +- Jacques-Etienne Baudoux - BCIM je@bcim.be +- Souheil Bejaoui - ACSONE SA/NV souheil.bejaoui@acsone.eu Maintainers ----------- diff --git a/rma_lot/__manifest__.py b/rma_lot/__manifest__.py index 5b621acd3..8c251182d 100644 --- a/rma_lot/__manifest__.py +++ b/rma_lot/__manifest__.py @@ -5,7 +5,7 @@ "name": "Rma Lot", "summary": """ Manage lot in RMA""", - "version": "18.0.1.1.2", + "version": "18.0.1.2.0", "license": "AGPL-3", "author": "ACSONE SA/NV,BCIM,Odoo Community Association (OCA)", "website": "https://github.com/OCA/rma", diff --git a/rma_lot/static/description/index.html b/rma_lot/static/description/index.html index 1d324f9ce..3566e80bf 100644 --- a/rma_lot/static/description/index.html +++ b/rma_lot/static/description/index.html @@ -3,7 +3,7 @@ -Rma Lot +README.rst -
-

Rma Lot

+
+ + +Odoo Community Association + +
+

Rma Lot

-

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

Tracking returned products by lot or serial number is crucial for businesses that require precise monitoring, especially in industries where quality control, compliance, and inventory accuracy are critical. @@ -398,7 +403,7 @@

Rma Lot

-

Configuration

+

Configuration

To allow delivering or replacing with the same lot/serial received from the customer:

    @@ -408,7 +413,7 @@

    Configuration

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -416,23 +421,23 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • ACSONE SA/NV
  • BCIM
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -445,5 +450,6 @@

Maintainers

+
From 1d764f37f0b6d51f171a2d8084c875afb5ff45f0 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 1 Apr 2026 06:45:33 +0000 Subject: [PATCH 10/55] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: rma-18.0/rma-18.0-rma_lot Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma_lot/ --- rma_lot/i18n/es.po | 16 ++++++++++++++++ rma_lot/i18n/it.po | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/rma_lot/i18n/es.po b/rma_lot/i18n/es.po index 8c4c30fc9..6e33cff3f 100644 --- a/rma_lot/i18n/es.po +++ b/rma_lot/i18n/es.po @@ -21,8 +21,14 @@ msgstr "" msgid "Deliver Same Lot/Serial as Received" msgstr "Devolver mismo Número de lote/serie recibido" +#. module: rma_lot +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__domain_lot_id +msgid "Domain Lot" +msgstr "" + #. module: rma_lot #: model:ir.model.fields,help:rma_lot.field_rma__product_tracking +#: model:ir.model.fields,help:rma_lot.field_rma_delivery_wizard__product_tracking msgid "Ensure the traceability of a storable product in your warehouse." msgstr "" @@ -37,12 +43,15 @@ msgstr "" #. module: rma_lot #: model_terms:ir.ui.view,arch_db:rma_lot.portal_rma_page_lot #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot" msgstr "" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__lot_id +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__lot_id #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot/Serial Number" msgstr "Número de lote/serie" @@ -56,6 +65,11 @@ msgstr "" msgid "RMA" msgstr "RMA" +#. module: rma_lot +#: model:ir.model,name:rma_lot.model_rma_delivery_wizard +msgid "RMA Delivery Wizard" +msgstr "" + #. module: rma_lot #: model:ir.model,name:rma_lot.model_rma_operation msgid "RMA requested operation" @@ -69,10 +83,12 @@ msgstr "Línea de albarán de devolución" #. module: rma_lot #: model_terms:ir.ui.view,arch_db:rma_lot.portal_rma_page_lot #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Serial Number" msgstr "" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__product_tracking +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__product_tracking msgid "Tracking" msgstr "" diff --git a/rma_lot/i18n/it.po b/rma_lot/i18n/it.po index eee322212..4e0f7f6e7 100644 --- a/rma_lot/i18n/it.po +++ b/rma_lot/i18n/it.po @@ -21,8 +21,14 @@ msgstr "" msgid "Deliver Same Lot/Serial as Received" msgstr "Consegna lo stesso lotto/seriale ricevuto" +#. module: rma_lot +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__domain_lot_id +msgid "Domain Lot" +msgstr "" + #. module: rma_lot #: model:ir.model.fields,help:rma_lot.field_rma__product_tracking +#: model:ir.model.fields,help:rma_lot.field_rma_delivery_wizard__product_tracking msgid "Ensure the traceability of a storable product in your warehouse." msgstr "Assicura la tracciabilità di un prodotto stoccabile nel magazzino." @@ -40,12 +46,15 @@ msgstr "" #. module: rma_lot #: model_terms:ir.ui.view,arch_db:rma_lot.portal_rma_page_lot #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot" msgstr "Lotto" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__lot_id +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__lot_id #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot/Serial Number" msgstr "Numero di lotto/serie" @@ -59,6 +68,11 @@ msgstr "Lotti visibili" msgid "RMA" msgstr "RMA" +#. module: rma_lot +#: model:ir.model,name:rma_lot.model_rma_delivery_wizard +msgid "RMA Delivery Wizard" +msgstr "" + #. module: rma_lot #: model:ir.model,name:rma_lot.model_rma_operation msgid "RMA requested operation" @@ -72,10 +86,12 @@ msgstr "Riga prelievo di reso" #. module: rma_lot #: model_terms:ir.ui.view,arch_db:rma_lot.portal_rma_page_lot #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view +#: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Serial Number" msgstr "Numero seriale" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__product_tracking +#: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__product_tracking msgid "Tracking" msgstr "Tracciamento" From 560026591e0a327c6b263fb30847d0edee15817a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 1 Apr 2026 09:51:36 +0200 Subject: [PATCH 11/55] [FIX] rma_reason: Properly hide fields in the wizard lines TT61741 --- rma_reason/wizards/stock_return_picking.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/rma_reason/wizards/stock_return_picking.xml b/rma_reason/wizards/stock_return_picking.xml index d7469d31f..b95c6dda7 100644 --- a/rma_reason/wizards/stock_return_picking.xml +++ b/rma_reason/wizards/stock_return_picking.xml @@ -15,8 +15,6 @@ column_invisible="not parent.create_rma" required="is_rma_reason_required and parent.create_rma and quantity>0" /> - - Date: Wed, 1 Apr 2026 09:36:45 +0000 Subject: [PATCH 12/55] Translated using Weblate (Spanish) Currently translated at 53.8% (7 of 13 strings) Translation: rma-18.0/rma-18.0-rma_lot Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma_lot/es/ --- rma_lot/i18n/es.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rma_lot/i18n/es.po b/rma_lot/i18n/es.po index 6e33cff3f..1cda0c172 100644 --- a/rma_lot/i18n/es.po +++ b/rma_lot/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-03-18 14:29+0000\n" +"PO-Revision-Date: 2026-04-01 11:45+0000\n" "Last-Translator: Víctor Martínez \n" "Language-Team: none\n" "Language: es\n" @@ -45,7 +45,7 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view #: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Lot" -msgstr "" +msgstr "Lote" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__lot_id @@ -85,7 +85,7 @@ msgstr "Línea de albarán de devolución" #: model_terms:ir.ui.view,arch_db:rma_lot.rma_form_view #: model_terms:ir.ui.view,arch_db:rma_lot.rma_redelivery_wizard_view_form msgid "Serial Number" -msgstr "" +msgstr "Número de serie" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma__product_tracking From f6adda5f61f3f1e70af7a47fad58e5259af45e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 1 Apr 2026 09:37:10 +0000 Subject: [PATCH 13/55] Translated using Weblate (Spanish) Currently translated at 75.0% (6 of 8 strings) Translation: rma-18.0/rma-18.0-rma_sale_lot Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma_sale_lot/es/ --- rma_sale_lot/i18n/es.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rma_sale_lot/i18n/es.po b/rma_sale_lot/i18n/es.po index 73e29b9f8..f61ac7e9e 100644 --- a/rma_sale_lot/i18n/es.po +++ b/rma_sale_lot/i18n/es.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-03-18 14:29+0000\n" +"PO-Revision-Date: 2026-04-01 11:45+0000\n" "Last-Translator: Víctor Martínez \n" "Language-Team: none\n" "Language: es\n" @@ -19,7 +19,7 @@ msgstr "" #. module: rma_sale_lot #: model_terms:ir.ui.view,arch_db:rma_sale_lot.sale_rma_lot_request_form msgid "Lot" -msgstr "" +msgstr "Lote" #. module: rma_sale_lot #: model:ir.model.fields,field_description:rma_sale_lot.field_sale_order_line_rma_wizard__lot_id @@ -56,4 +56,4 @@ msgstr "Línea de pedido de venta" #. module: rma_sale_lot #: model_terms:ir.ui.view,arch_db:rma_sale_lot.sale_rma_lot_request_form msgid "Serial Number" -msgstr "" +msgstr "Número de serie" From d270911c5463e721820d77d320d5c1bb4335998a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 2 Apr 2026 06:31:54 +0000 Subject: [PATCH 14/55] [BOT] post-merge updates --- README.md | 2 +- rma_reason/README.rst | 2 +- rma_reason/__manifest__.py | 2 +- rma_reason/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 843c6d105..290b11512 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ addon | version | maintainers | summary [rma_batch](rma_batch/) | 18.0.1.0.0 | | Group RMAs into batches for collective management [rma_delivery](rma_delivery/) | 18.0.1.1.0 | chienandalu | Allow to choose a default delivery carrier for returns [rma_lot](rma_lot/) | 18.0.1.2.0 | | Manage lot in RMA -[rma_reason](rma_reason/) | 18.0.1.0.1 | sbejaoui | Rma Reason +[rma_reason](rma_reason/) | 18.0.1.0.2 | sbejaoui | Rma Reason [rma_repair](rma_repair/) | 18.0.1.0.1 | peluko00 | Create a repair order from rma [rma_repair_lot](rma_repair_lot/) | 18.0.1.0.1 | peluko00 | RMA Repair Lot [rma_sale](rma_sale/) | 18.0.2.1.5 | pedrobaeza | Sale Order - Return Merchandise Authorization (RMA) diff --git a/rma_reason/README.rst b/rma_reason/README.rst index 82f9b8e33..6bd59c9db 100644 --- a/rma_reason/README.rst +++ b/rma_reason/README.rst @@ -11,7 +11,7 @@ Rma Reason !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:1938cf11ac2a439882d0504fc94c68922954c89398b985573ba69a9db3ebdcbd + !! source digest: sha256:a82bbaf4257eb6d28960f1b52e7edf1d17b8d57d9d257237300ece5e56729a08 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/rma_reason/__manifest__.py b/rma_reason/__manifest__.py index 5f0eda967..a668ccbb6 100644 --- a/rma_reason/__manifest__.py +++ b/rma_reason/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Rma Reason", - "version": "18.0.1.0.1", + "version": "18.0.1.0.2", "license": "AGPL-3", "author": "Raumschmiede GmbH,BCIM,ACSONE SA/NV,Odoo Community Association (OCA)", "website": "https://github.com/OCA/rma", diff --git a/rma_reason/static/description/index.html b/rma_reason/static/description/index.html index c29f9bf37..e71cca6fe 100644 --- a/rma_reason/static/description/index.html +++ b/rma_reason/static/description/index.html @@ -372,7 +372,7 @@

Rma Reason

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:1938cf11ac2a439882d0504fc94c68922954c89398b985573ba69a9db3ebdcbd +!! source digest: sha256:a82bbaf4257eb6d28960f1b52e7edf1d17b8d57d9d257237300ece5e56729a08 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

Specifying the RMA reason when creating an RMA order is crucial for From 7f9429cd734ae0ae314b72f99fcd99265cd2e80c Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 3 Apr 2026 07:28:29 +0000 Subject: [PATCH 15/55] Translated using Weblate (Italian) Currently translated at 100.0% (13 of 13 strings) Translation: rma-18.0/rma-18.0-rma_lot Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma_lot/it/ --- rma_lot/i18n/it.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rma_lot/i18n/it.po b/rma_lot/i18n/it.po index 4e0f7f6e7..09c6f3e3f 100644 --- a/rma_lot/i18n/it.po +++ b/rma_lot/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-03-26 08:14+0000\n" +"PO-Revision-Date: 2026-04-03 09:45+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -24,7 +24,7 @@ msgstr "Consegna lo stesso lotto/seriale ricevuto" #. module: rma_lot #: model:ir.model.fields,field_description:rma_lot.field_rma_delivery_wizard__domain_lot_id msgid "Domain Lot" -msgstr "" +msgstr "Lotto dominio" #. module: rma_lot #: model:ir.model.fields,help:rma_lot.field_rma__product_tracking @@ -71,7 +71,7 @@ msgstr "RMA" #. module: rma_lot #: model:ir.model,name:rma_lot.model_rma_delivery_wizard msgid "RMA Delivery Wizard" -msgstr "" +msgstr "Procedura guidata consegna RMA" #. module: rma_lot #: model:ir.model,name:rma_lot.model_rma_operation From 5daebda6189e407649cb34e1ff55d3a426c2da80 Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 3 Apr 2026 07:28:51 +0000 Subject: [PATCH 16/55] Translated using Weblate (Italian) Currently translated at 100.0% (402 of 402 strings) Translation: rma-18.0/rma-18.0-rma Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma/it/ --- rma/i18n/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rma/i18n/it.po b/rma/i18n/it.po index 150ef4df4..33e3c44cc 100644 --- a/rma/i18n/it.po +++ b/rma/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2026-02-17 09:09+0000\n" +"PO-Revision-Date: 2026-04-03 09:45+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -1669,7 +1669,7 @@ msgstr "Ordini di consegna RMA" #. module: rma #: model:ir.model,name:rma.model_rma_delivery_wizard msgid "RMA Delivery Wizard" -msgstr "Wizard Consegna RMA" +msgstr "Procedura guidata consegna RMA" #. module: rma #: model:mail.template,name:rma.mail_template_rma_draft_notification From ce93576bff466099180526c77e623c8a0c24c063 Mon Sep 17 00:00:00 2001 From: jans23 Date: Fri, 3 Apr 2026 19:46:19 +0000 Subject: [PATCH 17/55] Translated using Weblate (German) Currently translated at 99.2% (399 of 402 strings) Translation: rma-18.0/rma-18.0-rma Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma/de/ --- rma/i18n/de.po | 245 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 182 insertions(+), 63 deletions(-) diff --git a/rma/i18n/de.po b/rma/i18n/de.po index 7aae5ed66..68b8ddd2b 100644 --- a/rma/i18n/de.po +++ b/rma/i18n/de.po @@ -6,16 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-04-05 07:26+0000\n" -"Last-Translator: Nikolaus Weingartmair " -"\n" +"PO-Revision-Date: 2026-04-03 21:45+0000\n" +"Last-Translator: jans23 \n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 5.15.2\n" #. module: rma #. odoo-python @@ -63,6 +62,29 @@ msgid "" " \n" " " msgstr "" +"

\n" +"

\n" +" Dear\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" Hier ist die Reklamation\n" +" \n" +" \n" +" \n" +" from\n" +" \n" +" .\n" +"
\n" +"
\n" +" Zögern Sie nicht uns zu kontaktieren, wenn Sie Fragen " +"haben.\n" +"

\n" +"
\n" +" " #. module: rma #: model:mail.template,body_html:rma.mail_template_rma_receipt_notification @@ -90,6 +112,29 @@ msgid "" " \n" " " msgstr "" +"
\n" +"

\n" +" Liebe/r\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" Die Produkte für Ihre Reklamation\n" +" \n" +" \n" +" \n" +" from\n" +" \n" +" wurden in unserem Lager empfangen.\n" +"
\n" +"
\n" +" Zögern Sie nicht uns zu kontaktieren, wenn Sie Fragen " +"haben.\n" +"

\n" +"
\n" +" " #. module: rma #: model:mail.template,body_html:rma.mail_template_rma_draft_notification @@ -118,6 +163,30 @@ msgid "" " \n" " " msgstr "" +"
\n" +"

\n" +" Liebe/r\n" +" \n" +" \n" +" \n" +" \n" +"
\n" +"
\n" +" Sie haben Ihre Reklamation erfolgreich beantragt\n" +" \n" +" \n" +" \n" +" bei\n" +" \n" +" . Unser Team wird dies prüfen und so schnell wie möglich " +"bestätigen.\n" +"
\n" +"
\n" +" Zögern Sie nicht uns zu kontaktieren, wenn Sie Fragen " +"haben.\n" +"

\n" +"
\n" +" " #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -134,6 +203,8 @@ msgid "" "" msgstr "" +"" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -141,6 +212,8 @@ msgid "" "\n" " Paid" msgstr "" +"\n" +" Bezahlt" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -148,6 +221,8 @@ msgid "" "\n" " Waiting Payment" msgstr "" +"\n" +" Erwarte Zahlung" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -188,6 +263,10 @@ msgid "" " Cancelled\n" " " msgstr "" +"\n" +" \n" +" Abgebrochen\n" +" " #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -210,6 +289,10 @@ msgid "" " Preparation\n" " " msgstr "" +"\n" +" \n" +" Vorbereitung\n" +" " #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -232,6 +315,10 @@ msgid "" " Shipped\n" " " msgstr "" +"\n" +" \n" +" Versandt\n" +" " #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -254,21 +341,25 @@ msgid "" " Partially Available\n" " " msgstr "" +"\n" +" \n" +" Teilweise verfügbar\n" +" " #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban msgid "Awaiting action" -msgstr "" +msgstr "Erwarte Aktion" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban msgid "Draft" -msgstr "" +msgstr "Entwurf" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban msgid "Processed" -msgstr "" +msgstr "Bearbeitet" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page @@ -439,12 +530,12 @@ msgstr "" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_team__alias_domain msgid "Alias Domain Name" -msgstr "" +msgstr "Alias Domain-Name" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_team__alias_full_name msgid "Alias Email" -msgstr "" +msgstr "Alias E-Mail" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_team__alias_name @@ -460,6 +551,7 @@ msgstr "" #: model:ir.model.fields,help:rma.field_rma_team__alias_status msgid "Alias status assessed on the last message received." msgstr "" +"Der Alias-Status wird anhand der zuletzt empfangenen Nachricht ermittelt." #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_team__alias_model_id @@ -469,7 +561,7 @@ msgstr "Aliased Model" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban msgid "All" -msgstr "" +msgstr "Alle" #. module: rma #: model:res.groups,name:rma.group_rma_manual_finalization @@ -504,20 +596,20 @@ msgstr "Anzahl der Anhänge" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__auto_confirm_reception msgid "Auto Confirm Reception" -msgstr "" +msgstr "Automatische Empfangsbestätigung" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_delivery__automatic_after_receipt #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_refund__automatic_after_receipt msgid "Automatically After Receipt" -msgstr "" +msgstr "Automatisch nach Erhalt" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_delivery__automatic_on_confirm #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_receipt__automatic_on_confirm #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_refund__automatic_on_confirm msgid "Automatically on Confirm" -msgstr "" +msgstr "Automatisch bei Bestätigung" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_team_view_form @@ -530,7 +622,7 @@ msgstr "Avatar" #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban #: model_terms:ir.ui.view,arch_db:rma.rma_view_search msgid "Awaiting Action" -msgstr "" +msgstr "Erwarte Aktion" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__can_be_finished @@ -593,17 +685,17 @@ msgstr "Klicken Sie hier, um eine neue RMA hinzuzufügen." #. module: rma #: model_terms:ir.actions.act_window,help:rma.rma_team_action msgid "Click to add a new team." -msgstr "" +msgstr "Klicken Sie hier, um ein neues Team hinzuzufügen." #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_view_search msgid "Closed" -msgstr "" +msgstr "Geschlossen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__color msgid "Color" -msgstr "" +msgstr "Farbe" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_tag__color @@ -673,17 +765,17 @@ msgstr "" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__count_rma_awaiting_action msgid "Count Rma Awaiting Action" -msgstr "" +msgstr "Anzahl der zu bearbeitenden Reklamationen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__count_rma_draft msgid "Count Rma Draft" -msgstr "" +msgstr "Anzahl der Entwurfs-Reklamationen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__count_rma_processed msgid "Count Rma Processed" -msgstr "" +msgstr "Anzahl der bearbeiteten Reklamationen" #. module: rma #: model:ir.model.fields,field_description:rma.field_stock_return_picking__create_rma @@ -694,7 +786,7 @@ msgstr "Erstellen Sie RMAs" #: model:ir.model.fields,field_description:rma.field_rma_operation__action_create_receipt #: model_terms:ir.ui.view,arch_db:rma.rma_view_form msgid "Create Receipt" -msgstr "" +msgstr "Beleg erstellen" #. module: rma #: model_terms:ir.actions.act_window,help:rma.rma_dashboard_action @@ -702,6 +794,8 @@ msgid "" "Create a new RMA\n" " operation" msgstr "" +"Erstelle einen neuen\n" +" Reklamationsvorgang" #. module: rma #: model_terms:ir.actions.act_window,help:rma.action_rma_finalization @@ -782,17 +876,17 @@ msgstr "Unterlassungswerte" #. module: rma #: model:ir.model.fields,help:rma.field_rma_operation__action_create_delivery msgid "Define how the delivery action should be handled." -msgstr "" +msgstr "Legen Sie fest, wie die Lieferung abgewickelt werden soll." #. module: rma #: model:ir.model.fields,help:rma.field_rma_operation__action_create_receipt msgid "Define how the receipt action should be handled." -msgstr "" +msgstr "Legen Sie fest, wie der Empfang abgewickelt werden soll." #. module: rma #: model:ir.model.fields,help:rma.field_rma_operation__action_create_refund msgid "Define how the refund action should be handled." -msgstr "" +msgstr "Legen Sie fest, wie die Erstattung abgewickelt werden soll." #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_redelivery_wizard_view_form @@ -807,7 +901,7 @@ msgstr "gelieferte Menge" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.report_rma_document msgid "Delivered Quantity" -msgstr "" +msgstr "Gelieferte Anzahl" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_view_form @@ -817,7 +911,7 @@ msgstr "Lieferung" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__action_create_delivery msgid "Delivery Action" -msgstr "" +msgstr "Lieferaktion" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__delivery_picking_count @@ -840,7 +934,7 @@ msgstr "Beschreibung" #: model:ir.model.fields,field_description:rma.field_rma_operation__different_return_product #: model:ir.model.fields,field_description:rma.field_stock_return_picking_line__different_return_product msgid "Different Return Product" -msgstr "" +msgstr "Anderes Rücksendeprodukt" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__display_name @@ -857,7 +951,7 @@ msgstr "Anzeigename" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__prevent_delivery_grouping msgid "Do not group deliveries" -msgstr "" +msgstr "Lieferungen nicht zusammenfassen" #. module: rma #. odoo-python @@ -911,7 +1005,7 @@ msgstr "E-Mail-Vorlage Empfangsbestätigung für RMA" #. module: rma #: model:ir.model.fields,help:rma.field_rma_team__alias_domain msgid "Email domain e.g. 'example.com' in 'odoo@example.com'" -msgstr "" +msgstr "E-Mail-Domain z.B. 'example.com' in 'odoo@example.com'" #. module: rma #: model:ir.model.fields,help:rma.field_res_company__rma_mail_confirmation_template_id @@ -940,6 +1034,8 @@ msgid "" "Enable this option to automatically confirm the reception when the RMA is " "confirmed." msgstr "" +"Aktivieren Sie diese Option, um den Empfang automatisch zu bestätigen, " +"sobald die RMA bestätigt wurde." #. module: rma #. odoo-python @@ -1071,6 +1167,9 @@ msgid "" "If checked, allows the return of a product different from the one originally " "ordered. Used if the delivery is created automatically" msgstr "" +"Wenn diese Option aktiviert ist, ist die Rücksendung eines anderen Produkts " +"als des ursprünglich bestellten möglich. Wird verwendet, wenn die Lieferung " +"automatisch erstellt wird" #. module: rma #: model:ir.model.fields,help:rma.field_rma__message_needaction @@ -1094,6 +1193,10 @@ msgid "" "If enabled, RMAs using this operation will NOT be grouped into a single " "delivery picking, even if the company setting allows grouping." msgstr "" +"Wenn diese Option aktiviert ist, werden Reklamationen, bei denen dieser " +"Vorgang zum Einsatz kommt, NICHT zu einer einzigen Kommissionierung " +"zusammengefasst, selbst wenn die Unternehmenseinstellung eine Gruppierung " +"zulässt." #. module: rma #: model:ir.model.fields,help:rma.field_rma_team__alias_bounced_content @@ -1125,6 +1228,9 @@ msgid "" "Indicates whether this RMA can be manually finished, without requiring " "further processing such as a receipt, delivery, or refund." msgstr "" +"Gibt an, ob diese Reklamation manuell abgeschlossen werden kann, ohne dass " +"weitere Schritte wie Wareneingang, Warenausgang oder Rückerstattung " +"erforderlich sind." #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__partner_invoice_id @@ -1235,20 +1341,20 @@ msgstr "Manager" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__manual_finish_allowed msgid "Manual Finish Allowed" -msgstr "" +msgstr "Manuelle Fertigstellung zulässig" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_delivery__manual_after_receipt #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_refund__manual_after_receipt msgid "Manually After Receipt" -msgstr "" +msgstr "Manuell nach Erhalt" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_delivery__manual_on_confirm #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_receipt__manual_on_confirm #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_refund__manual_on_confirm msgid "Manually on Confirm" -msgstr "" +msgstr "Manuell bei Bestätigung" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__message_has_error @@ -1286,7 +1392,7 @@ msgstr "Neu" #. module: rma #: model:ir.actions.act_window,name:rma.action_rma_form msgid "New RMA" -msgstr "" +msgstr "Neue Reklamation" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__activity_date_deadline @@ -1336,7 +1442,7 @@ msgstr "Anzahl der Fehler" #: model:ir.model.fields,help:rma.field_rma__message_needaction_counter #: model:ir.model.fields,help:rma.field_rma_team__message_needaction_counter msgid "Number of messages requiring action" -msgstr "" +msgstr "Anzahl der Nachrichten, die eine Bearbeitung erfordern" #. module: rma #: model:ir.model.fields,help:rma.field_rma__message_has_error_counter @@ -1347,13 +1453,13 @@ msgstr "Anzahl der Nachrichten mit Zustellfehler" #. module: rma #: model:ir.model.fields,field_description:rma.field_stock_return_picking_line__rma_operation_id msgid "Operation" -msgstr "" +msgstr "Vorgang" #. module: rma #: model:ir.actions.act_window,name:rma.rma_operation_act_window #: model:ir.ui.menu,name:rma.rma_operation_menu msgid "Operations" -msgstr "" +msgstr "Vorgänge" #. module: rma #: model:ir.model.fields,help:rma.field_rma_team__alias_force_thread_id @@ -1379,7 +1485,7 @@ msgstr "Ursprungslieferung" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.report_rma_document msgid "Origin delivery" -msgstr "" +msgstr "Ursprungslieferung" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__move_id @@ -1394,7 +1500,7 @@ msgstr "Andere Informationen" #. module: rma #: model:ir.ui.menu,name:rma.rma_dashboard_menu msgid "Overview" -msgstr "" +msgstr "Übersicht" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_team__alias_parent_model_id @@ -1458,7 +1564,7 @@ msgstr "Priorität" #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban #: model_terms:ir.ui.view,arch_db:rma.rma_view_search msgid "Processed" -msgstr "" +msgstr "Bearbeitet" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__procurement_group_id @@ -1483,6 +1589,8 @@ msgstr "Produktmenge" msgid "" "Product to be returned if it's different from the originally delivered item." msgstr "" +"Das Produkt ist zurückzusenden, wenn es von dem ursprünglich gelieferten " +"Artikel abweicht." #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_tag__is_public @@ -1552,7 +1660,7 @@ msgstr "RMA-Code" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form msgid "RMA Confirmation Email" -msgstr "" +msgstr "E-Mail zur Bestätigung der Reklamation" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_view_search @@ -1615,7 +1723,7 @@ msgstr "RMA-Standort" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form msgid "RMA Manual Finalization" -msgstr "" +msgstr "Reklamation manueller Abschluss" #. module: rma #: model:mail.message.subtype,name:rma.mt_rma_notification @@ -1644,12 +1752,12 @@ msgstr "RMA-Out-Typ" #. module: rma #: model:ir.actions.act_window,name:rma.rma_dashboard_action msgid "RMA Overview" -msgstr "" +msgstr "Reklamation Übersicht" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form msgid "RMA Receipt Confirmation Email" -msgstr "" +msgstr "E-Mail zur Bestätigung des Reklamations-Eingangs" #. module: rma #: model:mail.template,name:rma.mail_template_rma_receipt_notification @@ -1688,7 +1796,7 @@ msgstr "RMA-Tags" #: model:ir.model.fields,field_description:rma.field_res_users__rma_team_id #: model_terms:ir.ui.view,arch_db:rma.rma_team_view_form msgid "RMA Team" -msgstr "" +msgstr "Reklamations-Team" #. module: rma #: model:ir.model.fields,help:rma.field_res_users__rma_team_id @@ -1710,12 +1818,12 @@ msgstr "RMA-Zählung" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form msgid "RMA draft notification Email" -msgstr "" +msgstr "Reklamation Entwurf einer Benachrichtigungs-E-Mail" #. module: rma #: model:ir.model.fields,field_description:rma.field_stock_warehouse__rma_in_route_id msgid "RMA in Route" -msgstr "" +msgstr "Reklamation in Bearbeitung" #. module: rma #: model:mail.message.subtype,description:rma.mt_rma_draft @@ -1725,12 +1833,12 @@ msgstr "RMA im Entwurfszustand" #. module: rma #: model:ir.model.fields,field_description:rma.field_stock_warehouse__rma_out_replace_route_id msgid "RMA out Replace Route" -msgstr "" +msgstr "Reklamation-Ausgangs-Ersatzroute" #. module: rma #: model:ir.model.fields,field_description:rma.field_stock_warehouse__rma_out_route_id msgid "RMA out Route" -msgstr "" +msgstr "Reklamations-Auslieferungsroute" #. module: rma #: model:ir.model.fields,field_description:rma.field_stock_move__rma_receiver_ids @@ -1824,7 +1932,7 @@ msgstr "Erstattung" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_operation__action_create_refund msgid "Refund Action" -msgstr "" +msgstr "Erstattungsvorgang" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__refund_line_id @@ -1928,7 +2036,7 @@ msgstr "Verantwortlicher Benutzer" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form msgid "Return Merchandise Authorization Management" -msgstr "" +msgstr "Verwaltung von Reklamationen" #. module: rma #: model:ir.model,name:rma.model_stock_return_picking @@ -1938,13 +2046,13 @@ msgstr "Inbound Kommissionierung" #. module: rma #: model:ir.model,name:rma.model_stock_return_picking_line msgid "Return Picking Line" -msgstr "" +msgstr "Retouren-Kommissionierlinie" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__return_product_id #: model:ir.model.fields,field_description:rma.field_stock_return_picking_line__return_product_id msgid "Return Product" -msgstr "" +msgstr "Rückgabeprodukt" #. module: rma #: model:ir.actions.act_window,name:rma.rma_delivery_wizard_action @@ -1972,7 +2080,7 @@ msgstr "Ist zurückgekommen" #. odoo-python #: code:addons/rma/wizard/stock_picking_return.py:0 msgid "Returned Picking" -msgstr "" +msgstr "Rückgabe" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma_tag__rma_ids @@ -2073,7 +2181,7 @@ msgstr "Auf Entwurf setzen" #: model:ir.ui.menu,name:rma.menu_rma_general_settings #: model_terms:ir.ui.view,arch_db:rma.rma_operation_form_view msgid "Settings" -msgstr "" +msgstr "Einstellungen" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_view_form @@ -2093,22 +2201,22 @@ msgstr "Lieferadresse für aktuelle RMA." #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__show_create_receipt msgid "Show Create Receipt Button" -msgstr "" +msgstr "Schaltfläche „Beleg erstellen“ anzeigen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__show_create_return msgid "Show Create Return Button" -msgstr "" +msgstr "Schaltfläche „Rücksendung erstellen“ anzeigen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__show_create_refund msgid "Show Create refund Button" -msgstr "" +msgstr "Schaltfläche „Erstattung erstellen“ anzeigen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__show_create_replace msgid "Show Create replace Button" -msgstr "" +msgstr "Schaltfläche „Ersetzen erstellen“ anzeigen" #. module: rma #: model:ir.model.fields,field_description:rma.field_rma__origin @@ -2223,6 +2331,10 @@ msgid "" " operation\n" " with specific settings that will adjust its behavior." msgstr "" +"Das RMA-Betriebssystem ermöglicht es Ihnen, jeden\n" +" Rücksendevorgang\n" +" mit spezifischen Einstellungen zu konfigurieren, die dessen " +"Ablauf anpassen." #. module: rma #: model:ir.model.fields,help:rma.field_rma_tag__active @@ -2273,7 +2385,7 @@ msgstr "Die zurückzugebende Menge ist größer als die verbleibende Menge." #. odoo-python #: code:addons/rma/models/rma.py:0 msgid "The reception must be done before finishing this rma" -msgstr "" +msgstr "Die Annahme muss vor Abschluss dieser Reklamation erfolgen" #. module: rma #. odoo-python @@ -2282,6 +2394,9 @@ msgid "" "The selected operation requires a return product different from the " "originally delivered item. Please select the product to return." msgstr "" +"Für den ausgewählten Vorgang ist ein anderes Produkt als der ursprünglich " +"gelieferte Artikel erforderlich. Bitte wählen Sie das Produkt aus, das Sie " +"zurücksenden möchten." #. module: rma #: model:ir.model.fields,help:rma.field_rma_tag__is_public @@ -2371,7 +2486,7 @@ msgstr "UoM (ME)" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma_operation__action_create_refund__update_quantity msgid "Update Quantities" -msgstr "" +msgstr "Mengen aktualisieren" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma__priority__1 @@ -2381,7 +2496,7 @@ msgstr "Dringend" #. module: rma #: model:ir.model,name:rma.model_res_users msgid "User" -msgstr "" +msgstr "Benutzer" #. module: rma #: model:res.groups,name:rma.rma_group_user_all @@ -2396,12 +2511,12 @@ msgstr "Benutzer: Nur eigene Dokumente" #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form msgid "Values set here are company-specific." -msgstr "" +msgstr "Die hier festgelegten Werte sind unternehmensspezifisch." #. module: rma #: model_terms:ir.ui.view,arch_db:rma.rma_operation_kanban msgid "View" -msgstr "" +msgstr "Ansicht" #. module: rma #: model:ir.model.fields.selection,name:rma.selection__rma__state__waiting_replacement @@ -2459,6 +2574,10 @@ msgid "" "When the RMA is receive, allow to finsish it manually choosing\n" " a finalization reason." msgstr "" +"Sobald die Reklamation eingegangen ist, kann sie manuell abgeschlossen " +"werden, indem\n" +" ein Grund für den Abschluss ausgewählt " +"wird." #. module: rma #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form From aa19777b1260fca16c97af81ec5497c6d6587aa1 Mon Sep 17 00:00:00 2001 From: jans23 Date: Fri, 3 Apr 2026 19:26:28 +0000 Subject: [PATCH 18/55] Translated using Weblate (German) Currently translated at 98.8% (85 of 86 strings) Translation: rma-18.0/rma-18.0-rma_sale Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma_sale/de/ --- rma_sale/i18n/de.po | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/rma_sale/i18n/de.po b/rma_sale/i18n/de.po index 1a0ad81fd..b20244b94 100644 --- a/rma_sale/i18n/de.po +++ b/rma_sale/i18n/de.po @@ -6,16 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-04-05 07:26+0000\n" -"Last-Translator: Nikolaus Weingartmair " -"\n" +"PO-Revision-Date: 2026-04-03 21:45+0000\n" +"Last-Translator: jans23 \n" "Language-Team: none\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 5.15.2\n" #. module: rma_sale #. odoo-python @@ -43,7 +42,7 @@ msgstr " Anforderung RMAs" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.sale_order_portal_template msgid " Request RMAs" -msgstr "" +msgstr " Reklamationen beantragen" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.sale_rma_request_form @@ -107,7 +106,7 @@ msgstr "Erlaubtes Product" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__allowed_quantity msgid "Allowed Quantity" -msgstr "" +msgstr "Erlaubte Menge" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.sale_order_rma_wizard_form_view @@ -204,7 +203,7 @@ msgstr "Beschreibung" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__different_return_product msgid "Different Return Product" -msgstr "" +msgstr "Anderes Rücksendeprodukt" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__display_name @@ -240,6 +239,9 @@ msgid "" "If checked, allows the return of a product different from the one originally " "ordered. Used if the delivery is created automatically" msgstr "" +"Wenn diese Option aktiviert ist, ist die Rücksendung eines anderen Produkts " +"als des ursprünglich bestellten möglich. Wird verwendet, wenn die Lieferung " +"automatisch erstellt wird" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.sale_rma_request_form @@ -251,7 +253,7 @@ msgstr "" #. module: rma_sale #: model:ir.model,name:rma_sale.model_account_move msgid "Journal Entry" -msgstr "" +msgstr "Journaleintrag" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__write_uid @@ -303,6 +305,8 @@ msgstr "Produkt" msgid "" "Product to be returned if it's different from the originally delivered item." msgstr "" +"Das Produkt ist zurückzusenden, wenn es von dem ursprünglich gelieferten " +"Artikel abweicht." #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__quantity @@ -339,7 +343,7 @@ msgstr "RMAs" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_rma__refund_id msgid "Refund" -msgstr "" +msgstr "Erstattung" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.sale_rma_request_form @@ -356,17 +360,17 @@ msgstr "Angeforderter Vorgang" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__is_return_all msgid "Return All?" -msgstr "" +msgstr "Alle zurückgeben?" #. module: rma_sale #: model:ir.model,name:rma_sale.model_stock_return_picking msgid "Return Picking" -msgstr "" +msgstr "Rücklieferung" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__return_product_id msgid "Return Product" -msgstr "" +msgstr "Rücklieferprodukt" #. module: rma_sale #: model:ir.model.fields,field_description:rma_sale.field_rma__sale_line_id @@ -392,7 +396,7 @@ msgstr "Verkaufsauftrags-RMA-Assistent" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.report_rma_document msgid "Sale order" -msgstr "" +msgstr "Verkaufsauftrag" #. module: rma_sale #: model:ir.model,name:rma_sale.model_sale_order @@ -456,7 +460,7 @@ msgstr "" #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.res_config_settings_view_form msgid "Values set here are company-specific." -msgstr "" +msgstr "Die hier festgelegten Werte sind unternehmensspezifisch." #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.res_config_settings_view_form @@ -498,12 +502,16 @@ msgstr "Sie können in jeder gesendeten RMA eine Nachricht senden" msgid "" "You can't exceed the allowed quantity for returning product %(product)s." msgstr "" +"Die zulässige Menge für die Rücksendung von Produkt %(product)s darf nicht " +"überschritten werden." #. module: rma_sale #. odoo-python #: code:addons/rma_sale/models/sale.py:0 msgid "You may only create RMAs from a confirmed sale order." msgstr "" +"Sie können RMA-Anfragen nur auf der Grundlage eines bestätigten " +"Verkaufsauftrags erstellen." #. module: rma_sale #: model_terms:ir.ui.view,arch_db:rma_sale.sale_rma_request_form From 0e31211afd879ece68b60af0c31a125acaaaae20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Mon, 6 Apr 2026 16:14:02 +0200 Subject: [PATCH 19/55] [IMP] rma: Dropship compatibility TT61634 --- rma/wizard/stock_picking_return.py | 6 ++++++ rma/wizard/stock_picking_return_views.xml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/rma/wizard/stock_picking_return.py b/rma/wizard/stock_picking_return.py index c0abfa744..23457ccdd 100644 --- a/rma/wizard/stock_picking_return.py +++ b/rma/wizard/stock_picking_return.py @@ -37,6 +37,12 @@ def _compute_rma_operation_id(self): def _prepare_rma_vals(self): self.ensure_one() warehouse = self.move_id.picking_id.picking_type_id.warehouse_id + if not warehouse: + # Dropship compatibility + warehouse = self.env["stock.warehouse"].search( + [("company_id", "=", self.move_id.picking_id.company_id.id)], + limit=1, + ) return { "move_id": self.move_id.id, "product_id": self.move_id.product_id.id, diff --git a/rma/wizard/stock_picking_return_views.xml b/rma/wizard/stock_picking_return_views.xml index 9b5b59d9c..472ea9628 100644 --- a/rma/wizard/stock_picking_return_views.xml +++ b/rma/wizard/stock_picking_return_views.xml @@ -25,7 +25,7 @@ From f4c6f20f66f8f0daab824f7fe2e90ff9dc92b1b7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Mon, 6 Apr 2026 14:36:08 +0000 Subject: [PATCH 20/55] [BOT] post-merge updates --- README.md | 2 +- rma/README.rst | 2 +- rma/__manifest__.py | 2 +- rma/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 290b11512..00982a256 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Available addons addon | version | maintainers | summary --- | --- | --- | --- [product_warranty](product_warranty/) | 18.0.1.0.0 | osi-scampbell max3903 | Product Warranty -[rma](rma/) | 18.0.2.2.18 | pedrobaeza chienandalu | Return Merchandise Authorization (RMA) +[rma](rma/) | 18.0.2.2.19 | pedrobaeza chienandalu | Return Merchandise Authorization (RMA) [rma_batch](rma_batch/) | 18.0.1.0.0 | | Group RMAs into batches for collective management [rma_delivery](rma_delivery/) | 18.0.1.1.0 | chienandalu | Allow to choose a default delivery carrier for returns [rma_lot](rma_lot/) | 18.0.1.2.0 | | Manage lot in RMA diff --git a/rma/README.rst b/rma/README.rst index a9930655d..1a66b163e 100644 --- a/rma/README.rst +++ b/rma/README.rst @@ -11,7 +11,7 @@ Return Merchandise Authorization Management !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:33b8992b5999b822407a97d645c3a8fb7983ed7549c4d6e3d981300f6885455e + !! source digest: sha256:c24dd5328d6204089a6acf7988507269ff4feb5c6c1b10d6b390e268f704715b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/rma/__manifest__.py b/rma/__manifest__.py index 3fdacc83b..1f437dbb8 100644 --- a/rma/__manifest__.py +++ b/rma/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Return Merchandise Authorization Management", "summary": "Return Merchandise Authorization (RMA)", - "version": "18.0.2.2.18", + "version": "18.0.2.2.19", "development_status": "Production/Stable", "category": "RMA", "website": "https://github.com/OCA/rma", diff --git a/rma/static/description/index.html b/rma/static/description/index.html index c1452c48d..9134f6140 100644 --- a/rma/static/description/index.html +++ b/rma/static/description/index.html @@ -372,7 +372,7 @@

Return Merchandise Authorization Management

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:33b8992b5999b822407a97d645c3a8fb7983ed7549c4d6e3d981300f6885455e +!! source digest: sha256:c24dd5328d6204089a6acf7988507269ff4feb5c6c1b10d6b390e268f704715b !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Production/Stable License: AGPL-3 OCA/rma Translate me on Weblate Try me on Runboat

This module allows you to manage Return Merchandise Authorization From 148d5e2d43ff571cd91dffbccd02d1946256e14c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Mon, 13 Apr 2026 16:06:37 +0200 Subject: [PATCH 21/55] [FIX] checklog-odoo.cfg: ignore Killing chrome descendants-or-self warning Warning introduced in odoo/odoo@d22e0b4. The previous warning apparently did not occur, as it was not featured in checklog-odoo.cfg. ``` 2026-04-13 08:02:23,361 314 WARNING odoo odoo.addons.rma_sale_mrp.tests.test_rma_sale_mrp_portal.TestRmaSaleMrpPortal.test_rma_sale_mrp_portal: Killing chrome descendants-or-self of 450: 5 remaining - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) - chrome (zombie) --- checklog-odoo.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/checklog-odoo.cfg b/checklog-odoo.cfg index 0b55b7bf6..486495855 100644 --- a/checklog-odoo.cfg +++ b/checklog-odoo.cfg @@ -1,3 +1,4 @@ [checklog-odoo] ignore= WARNING.* 0 failed, 0 error\(s\).* + WARNING .* Killing chrome descendants-or-self .* From e385fc1f1727e516b5065c31f56061980f5bf47d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Tue, 14 Apr 2026 09:09:38 +0200 Subject: [PATCH 22/55] [IMP] rma_delivery: Add wizard to change reception/delivery carrier TT61741 --- rma_delivery/README.rst | 44 +++++------ rma_delivery/__manifest__.py | 2 + rma_delivery/i18n/es.po | 76 +++++++++++++++++++ rma_delivery/i18n/rma_delivery.pot | 76 +++++++++++++++++++ rma_delivery/models/rma.py | 13 ++++ rma_delivery/security/ir.model.access.csv | 2 + rma_delivery/static/description/index.html | 36 ++++----- rma_delivery/tests/test_rma_delivery.py | 27 +++++++ rma_delivery/views/rma_views.xml | 8 ++ rma_delivery/wizard/__init__.py | 1 + .../wizard/rma_choose_delivery_carrier.py | 63 +++++++++++++++ .../rma_choose_delivery_carrier_views.xml | 34 +++++++++ 12 files changed, 337 insertions(+), 45 deletions(-) create mode 100644 rma_delivery/security/ir.model.access.csv create mode 100644 rma_delivery/wizard/rma_choose_delivery_carrier.py create mode 100644 rma_delivery/wizard/rma_choose_delivery_carrier_views.xml diff --git a/rma_delivery/README.rst b/rma_delivery/README.rst index 15404d308..8e9fa9dee 100644 --- a/rma_delivery/README.rst +++ b/rma_delivery/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ================================================================== Return Merchandise Authorization Management - Link with deliveries ================================================================== @@ -17,7 +13,7 @@ Return Merchandise Authorization Management - Link with deliveries .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frma-lightgray.png?logo=github @@ -50,25 +46,25 @@ To configure RMAs shipping strategy for your company: 2. Choose an *RMA delivery method strategy*. 3. There are 4 possibilities: - - Fixed method: the method will always be the same. Select it on the - field *Default RMA delivery method* (or leave it empty for no - delivery method at all). - - Customer method: the method will be the one configured on the - partner. - - Mixed method: the method will be the one configured on the partner, - otherwise the fixed one will be chosen. - - RMA method: the method will be configured in each RMA. + - Fixed method: the method will always be the same. Select it on the + field *Default RMA delivery method* (or leave it empty for no + delivery method at all). + - Customer method: the method will be the one configured on the + partner. + - Mixed method: the method will be the one configured on the + partner, otherwise the fixed one will be chosen. + - RMA method: the method will be configured in each RMA. 4. Choose an *RMA reception method strategy*. 5. There are 4 possibilities: - - Fixed method: the method will always be the same. Select it on the - field *Default RMA delivery method* (or leave it empty for no - delivery method at all). - - Customer method: the method will be the one configured on the - partner. - - Mixed method: the method will be the one configured on the partner, - otherwise the fixed one will be chosen. + - Fixed method: the method will always be the same. Select it on the + field *Default RMA delivery method* (or leave it empty for no + delivery method at all). + - Customer method: the method will be the one configured on the + partner. + - Mixed method: the method will be the one configured on the + partner, otherwise the fixed one will be chosen. Usage ===== @@ -101,12 +97,12 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - David Vidal - - Víctor Martínez + - David Vidal + - Víctor Martínez -- Souheil Bejaoui - ACSONE SA/NV +- Souheil Bejaoui - ACSONE SA/NV Maintainers ----------- diff --git a/rma_delivery/__manifest__.py b/rma_delivery/__manifest__.py index 984105d4c..f504e3502 100644 --- a/rma_delivery/__manifest__.py +++ b/rma_delivery/__manifest__.py @@ -12,8 +12,10 @@ "license": "AGPL-3", "depends": ["rma", "stock_delivery"], "data": [ + "security/ir.model.access.csv", "views/res_config_settings_views.xml", "views/rma_views.xml", + "wizard/rma_choose_delivery_carrier_views.xml", "wizard/stock_picking_return_views.xml", ], } diff --git a/rma_delivery/i18n/es.po b/rma_delivery/i18n/es.po index 38bef9abc..1ad735db1 100644 --- a/rma_delivery/i18n/es.po +++ b/rma_delivery/i18n/es.po @@ -16,11 +16,27 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.2\n" +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_choose_delivery_carrier_form_view +msgid "Accept" +msgstr "Aceptar" + +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_choose_delivery_carrier_form_view +msgid "Cancel" +msgstr "Cancelar" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_rma__carrier_id +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__carrier_id msgid "Carrier" msgstr "Transportista" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__carrier_type +msgid "Carrier Type" +msgstr "Tipo de transportista" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_res_company msgid "Companies" @@ -31,6 +47,16 @@ msgstr "Compañías" msgid "Config Settings" msgstr "Ajustes de configuración" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__create_date +msgid "Created on" +msgstr "Creado el" + #. module: rma_delivery #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_delivery_strategy__customer_method #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_reception_strategy__customer_method @@ -55,17 +81,47 @@ msgstr "Método de entrega de RMA predeterminado" msgid "Default RMA reception method" msgstr "Método de recepción de RMA predeterminado" +#. module: rma_delivery +#: model:ir.model.fields.selection,name:rma_delivery.selection__rma_choose_delivery_carrier__carrier_type__delivery +msgid "Delivery" +msgstr "Entrega" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + #. module: rma_delivery #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_delivery_strategy__fixed_method #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_reception_strategy__fixed_method msgid "Fixed method" msgstr "Método fijo" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__id +msgid "ID" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_rma msgid "RMA" msgstr "RMA" +#. module: rma_delivery +#: model:ir.model,name:rma_delivery.model_rma_choose_delivery_carrier +msgid "RMA Delivery Carrier Selection Wizard" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_res_company__rma_delivery_strategy #: model:ir.model.fields,field_description:rma_delivery.field_res_config_settings__rma_delivery_strategy @@ -97,6 +153,11 @@ msgstr "Estrategia del método de recepción de RMA" msgid "RMA reception strategy" msgstr "Estrategia de recepción de RMA" +#. module: rma_delivery +#: model:ir.model.fields.selection,name:rma_delivery.selection__rma_choose_delivery_carrier__carrier_type__reception +msgid "Reception" +msgstr "Recepción" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_rma__reception_carrier_id #: model:ir.model.fields,field_description:rma_delivery.field_stock_return_picking__reception_carrier_id @@ -113,7 +174,22 @@ msgstr "Albarán de devolución" msgid "Return Picking Line" msgstr "Línea de albarán de devolución" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__rma_id +msgid "Rma" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_stock_move msgid "Stock Move" msgstr "Movimiento de stock" + +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_view_form +msgid "Update carrier" +msgstr "Actualizar envío" + +#. module: rma_delivery +#: model:ir.actions.act_window,name:rma_delivery.rma_choose_delivery_carrier_action +msgid "Update shipping" +msgstr "Actualizar envío" diff --git a/rma_delivery/i18n/rma_delivery.pot b/rma_delivery/i18n/rma_delivery.pot index dfb895ac1..8b04650c2 100644 --- a/rma_delivery/i18n/rma_delivery.pot +++ b/rma_delivery/i18n/rma_delivery.pot @@ -13,11 +13,27 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_choose_delivery_carrier_form_view +msgid "Accept" +msgstr "" + +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_choose_delivery_carrier_form_view +msgid "Cancel" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_rma__carrier_id +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__carrier_id msgid "Carrier" msgstr "" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__carrier_type +msgid "Carrier Type" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_res_company msgid "Companies" @@ -28,6 +44,16 @@ msgstr "" msgid "Config Settings" msgstr "" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__create_uid +msgid "Created by" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__create_date +msgid "Created on" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_delivery_strategy__customer_method #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_reception_strategy__customer_method @@ -52,17 +78,47 @@ msgstr "" msgid "Default RMA reception method" msgstr "" +#. module: rma_delivery +#: model:ir.model.fields.selection,name:rma_delivery.selection__rma_choose_delivery_carrier__carrier_type__delivery +msgid "Delivery" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__display_name +msgid "Display Name" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_delivery_strategy__fixed_method #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_reception_strategy__fixed_method msgid "Fixed method" msgstr "" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__id +msgid "ID" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__write_date +msgid "Last Updated on" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_rma msgid "RMA" msgstr "" +#. module: rma_delivery +#: model:ir.model,name:rma_delivery.model_rma_choose_delivery_carrier +msgid "RMA Delivery Carrier Selection Wizard" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_res_company__rma_delivery_strategy #: model:ir.model.fields,field_description:rma_delivery.field_res_config_settings__rma_delivery_strategy @@ -94,6 +150,11 @@ msgstr "" msgid "RMA reception strategy" msgstr "" +#. module: rma_delivery +#: model:ir.model.fields.selection,name:rma_delivery.selection__rma_choose_delivery_carrier__carrier_type__reception +msgid "Reception" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_rma__reception_carrier_id #: model:ir.model.fields,field_description:rma_delivery.field_stock_return_picking__reception_carrier_id @@ -110,7 +171,22 @@ msgstr "" msgid "Return Picking Line" msgstr "" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__rma_id +msgid "Rma" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_stock_move msgid "Stock Move" msgstr "" + +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_view_form +msgid "Update carrier" +msgstr "" + +#. module: rma_delivery +#: model:ir.actions.act_window,name:rma_delivery.rma_choose_delivery_carrier_action +msgid "Update shipping" +msgstr "" diff --git a/rma_delivery/models/rma.py b/rma_delivery/models/rma.py index 54766a89e..691cd55e6 100644 --- a/rma_delivery/models/rma.py +++ b/rma_delivery/models/rma.py @@ -75,3 +75,16 @@ def _get_reception_carrier(self): return self._get_default_reception_carrier_id( self.company_id, self.partner_shipping_id ) + + def action_open_choose_carrier_wizard(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "rma_delivery.rma_choose_delivery_carrier_action" + ) + # Force active_id to avoid issues when coming from smart buttons + # in other models + action["context"] = dict(self.env.context) + action["context"].update( + active_model=self._name, active_id=self.id, active_ids=self.ids + ) + return action diff --git a/rma_delivery/security/ir.model.access.csv b/rma_delivery/security/ir.model.access.csv new file mode 100644 index 000000000..75504bd11 --- /dev/null +++ b/rma_delivery/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_rma_choose_delivery_carrier,rma.choose.delivery.carrier,model_rma_choose_delivery_carrier,rma.rma_group_user_all,1,1,1,1 diff --git a/rma_delivery/static/description/index.html b/rma_delivery/static/description/index.html index 665cc3921..0792dc294 100644 --- a/rma_delivery/static/description/index.html +++ b/rma_delivery/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Return Merchandise Authorization Management - Link with deliveries -

+ -
diff --git a/rma_delivery/tests/test_rma_delivery.py b/rma_delivery/tests/test_rma_delivery.py index b596b9b54..2d4943744 100644 --- a/rma_delivery/tests/test_rma_delivery.py +++ b/rma_delivery/tests/test_rma_delivery.py @@ -205,6 +205,33 @@ def test_reception_04_rma_method(self): rma.reception_carrier_id = self.carrier rma.action_confirm() self.assertEqual(rma.reception_move_id.picking_id.carrier_id, self.carrier) + # Change reception carrier + res = rma.action_open_choose_carrier_wizard() + wizard_form = Form(self.env[res["res_model"]].with_context(**res["context"])) + self.assertEqual(wizard_form.carrier_type, "reception") + self.assertEqual(wizard_form.carrier_id, self.carrier) + wizard_form.carrier_id = self.carrier_customer + wizard = wizard_form.save() + wizard.button_confirm() + self.assertEqual(rma.reception_carrier_id, self.carrier_customer) + self.assertEqual( + rma.reception_move_id.picking_id.carrier_id, self.carrier_customer + ) + rma.reception_move_id.picking_id.button_validate() + rma.carrier_id = self.carrier + self.company.rma_delivery_strategy = "rma_method" + picking = self._return_to_customer(rma) + self.assertEqual(picking.carrier_id, self.carrier) + # Change delivery carrier + res = rma.action_open_choose_carrier_wizard() + wizard_form = Form(self.env[res["res_model"]].with_context(**res["context"])) + self.assertEqual(wizard_form.carrier_type, "delivery") + self.assertEqual(wizard_form.carrier_id, self.carrier) + wizard_form.carrier_id = self.carrier_customer + wizard = wizard_form.save() + wizard.button_confirm() + self.assertEqual(rma.carrier_id, self.carrier_customer) + self.assertEqual(picking.carrier_id, self.carrier_customer) def test_reception_04_rma_method_picking_return(self): self.company.rma_reception_strategy = "rma_method" diff --git a/rma_delivery/views/rma_views.xml b/rma_delivery/views/rma_views.xml index 148588830..adbc2912f 100644 --- a/rma_delivery/views/rma_views.xml +++ b/rma_delivery/views/rma_views.xml @@ -7,6 +7,14 @@ rma + + + + Update shipping + rma.choose.delivery.carrier + form + new + + + rma.choose.delivery.carrier.form + rma.choose.delivery.carrier + +
+ + + + +
+
+
+
+
+
From 4240fcbf5aee5f723ab1c7a4132c96ec2b21370c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 15 Apr 2026 16:22:22 +0000 Subject: [PATCH 23/55] [BOT] post-merge updates --- README.md | 2 +- rma_delivery/README.rst | 46 ++++++++++++---------- rma_delivery/__manifest__.py | 2 +- rma_delivery/static/description/index.html | 38 ++++++++++-------- 4 files changed, 49 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 00982a256..8c7675b64 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ addon | version | maintainers | summary [product_warranty](product_warranty/) | 18.0.1.0.0 | osi-scampbell max3903 | Product Warranty [rma](rma/) | 18.0.2.2.19 | pedrobaeza chienandalu | Return Merchandise Authorization (RMA) [rma_batch](rma_batch/) | 18.0.1.0.0 | | Group RMAs into batches for collective management -[rma_delivery](rma_delivery/) | 18.0.1.1.0 | chienandalu | Allow to choose a default delivery carrier for returns +[rma_delivery](rma_delivery/) | 18.0.1.2.0 | chienandalu | Allow to choose a default delivery carrier for returns [rma_lot](rma_lot/) | 18.0.1.2.0 | | Manage lot in RMA [rma_reason](rma_reason/) | 18.0.1.0.2 | sbejaoui | Rma Reason [rma_repair](rma_repair/) | 18.0.1.0.1 | peluko00 | Create a repair order from rma diff --git a/rma_delivery/README.rst b/rma_delivery/README.rst index 8e9fa9dee..67bb35bc8 100644 --- a/rma_delivery/README.rst +++ b/rma_delivery/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ================================================================== Return Merchandise Authorization Management - Link with deliveries ================================================================== @@ -7,13 +11,13 @@ Return Merchandise Authorization Management - Link with deliveries !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c4ef831d6a5188b5eb0cffd4500caa3c214fcd9eb6fa691a1ad1ca14ef321139 + !! source digest: sha256:4e36c81bde8099a98f6a56af21cc735883a099848c9eb0b8b1eab52fde76c20a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frma-lightgray.png?logo=github @@ -46,25 +50,25 @@ To configure RMAs shipping strategy for your company: 2. Choose an *RMA delivery method strategy*. 3. There are 4 possibilities: - - Fixed method: the method will always be the same. Select it on the - field *Default RMA delivery method* (or leave it empty for no - delivery method at all). - - Customer method: the method will be the one configured on the - partner. - - Mixed method: the method will be the one configured on the - partner, otherwise the fixed one will be chosen. - - RMA method: the method will be configured in each RMA. + - Fixed method: the method will always be the same. Select it on the + field *Default RMA delivery method* (or leave it empty for no + delivery method at all). + - Customer method: the method will be the one configured on the + partner. + - Mixed method: the method will be the one configured on the partner, + otherwise the fixed one will be chosen. + - RMA method: the method will be configured in each RMA. 4. Choose an *RMA reception method strategy*. 5. There are 4 possibilities: - - Fixed method: the method will always be the same. Select it on the - field *Default RMA delivery method* (or leave it empty for no - delivery method at all). - - Customer method: the method will be the one configured on the - partner. - - Mixed method: the method will be the one configured on the - partner, otherwise the fixed one will be chosen. + - Fixed method: the method will always be the same. Select it on the + field *Default RMA delivery method* (or leave it empty for no + delivery method at all). + - Customer method: the method will be the one configured on the + partner. + - Mixed method: the method will be the one configured on the partner, + otherwise the fixed one will be chosen. Usage ===== @@ -97,12 +101,12 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - David Vidal - - Víctor Martínez + - David Vidal + - Víctor Martínez -- Souheil Bejaoui - ACSONE SA/NV +- Souheil Bejaoui - ACSONE SA/NV Maintainers ----------- diff --git a/rma_delivery/__manifest__.py b/rma_delivery/__manifest__.py index f504e3502..ec311397e 100644 --- a/rma_delivery/__manifest__.py +++ b/rma_delivery/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Return Merchandise Authorization Management - Link with deliveries", "summary": "Allow to choose a default delivery carrier for returns", - "version": "18.0.1.1.0", + "version": "18.0.1.2.0", "development_status": "Beta", "category": "RMA", "website": "https://github.com/OCA/rma", diff --git a/rma_delivery/static/description/index.html b/rma_delivery/static/description/index.html index 0792dc294..d1b5e6d4d 100644 --- a/rma_delivery/static/description/index.html +++ b/rma_delivery/static/description/index.html @@ -3,7 +3,7 @@ -Return Merchandise Authorization Management - Link with deliveries +README.rst - From c91ef02f015ad952d33d671796dae924b9e8a383 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 15 Apr 2026 16:22:31 +0000 Subject: [PATCH 24/55] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: rma-18.0/rma-18.0-rma_delivery Translate-URL: https://translation.odoo-community.org/projects/rma-18-0/rma-18-0-rma_delivery/ --- rma_delivery/i18n/it.po | 76 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/rma_delivery/i18n/it.po b/rma_delivery/i18n/it.po index 56437539f..60cb01f58 100644 --- a/rma_delivery/i18n/it.po +++ b/rma_delivery/i18n/it.po @@ -16,11 +16,27 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.15.2\n" +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_choose_delivery_carrier_form_view +msgid "Accept" +msgstr "" + +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_choose_delivery_carrier_form_view +msgid "Cancel" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_rma__carrier_id +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__carrier_id msgid "Carrier" msgstr "Vettore" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__carrier_type +msgid "Carrier Type" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_res_company msgid "Companies" @@ -31,6 +47,16 @@ msgstr "Aziende" msgid "Config Settings" msgstr "Impostazioni configurazione" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__create_uid +msgid "Created by" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__create_date +msgid "Created on" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_delivery_strategy__customer_method #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_reception_strategy__customer_method @@ -55,17 +81,47 @@ msgstr "Metodo predefinito consegna RMA" msgid "Default RMA reception method" msgstr "Metodo ricezione RMA predefinito" +#. module: rma_delivery +#: model:ir.model.fields.selection,name:rma_delivery.selection__rma_choose_delivery_carrier__carrier_type__delivery +msgid "Delivery" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__display_name +msgid "Display Name" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_delivery_strategy__fixed_method #: model:ir.model.fields.selection,name:rma_delivery.selection__res_company__rma_reception_strategy__fixed_method msgid "Fixed method" msgstr "Metodo fisso" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__id +msgid "ID" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__write_date +msgid "Last Updated on" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_rma msgid "RMA" msgstr "RMA" +#. module: rma_delivery +#: model:ir.model,name:rma_delivery.model_rma_choose_delivery_carrier +msgid "RMA Delivery Carrier Selection Wizard" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_res_company__rma_delivery_strategy #: model:ir.model.fields,field_description:rma_delivery.field_res_config_settings__rma_delivery_strategy @@ -97,6 +153,11 @@ msgstr "Strategia metodo ricevimento RMA" msgid "RMA reception strategy" msgstr "Strategia ricevimento RMA" +#. module: rma_delivery +#: model:ir.model.fields.selection,name:rma_delivery.selection__rma_choose_delivery_carrier__carrier_type__reception +msgid "Reception" +msgstr "" + #. module: rma_delivery #: model:ir.model.fields,field_description:rma_delivery.field_rma__reception_carrier_id #: model:ir.model.fields,field_description:rma_delivery.field_stock_return_picking__reception_carrier_id @@ -113,7 +174,22 @@ msgstr "Prelievo di reso" msgid "Return Picking Line" msgstr "Riga prelievo di reso" +#. module: rma_delivery +#: model:ir.model.fields,field_description:rma_delivery.field_rma_choose_delivery_carrier__rma_id +msgid "Rma" +msgstr "" + #. module: rma_delivery #: model:ir.model,name:rma_delivery.model_stock_move msgid "Stock Move" msgstr "Movimento di magazzino" + +#. module: rma_delivery +#: model_terms:ir.ui.view,arch_db:rma_delivery.rma_view_form +msgid "Update carrier" +msgstr "" + +#. module: rma_delivery +#: model:ir.actions.act_window,name:rma_delivery.rma_choose_delivery_carrier_action +msgid "Update shipping" +msgstr "" From 2969728edb24d7c739e44ddf05f320ed27ec439e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Fri, 10 Apr 2026 14:22:22 +0200 Subject: [PATCH 25/55] [IMP] rma_delivery: Filter by available carriers (similar to what happens in sale.order) TT61753 --- rma_delivery/models/__init__.py | 1 + rma_delivery/models/delivery_carrier.py | 98 +++++++++++++++++++ rma_delivery/models/rma.py | 21 +++- .../wizard/rma_choose_delivery_carrier.py | 24 ++++- .../rma_choose_delivery_carrier_views.xml | 5 + rma_delivery/wizard/stock_picking_return.py | 19 ++++ 6 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 rma_delivery/models/delivery_carrier.py diff --git a/rma_delivery/models/__init__.py b/rma_delivery/models/__init__.py index 15e594577..e4250e187 100644 --- a/rma_delivery/models/__init__.py +++ b/rma_delivery/models/__init__.py @@ -1,3 +1,4 @@ +from . import delivery_carrier from . import res_company from . import res_config_settings from . import rma diff --git a/rma_delivery/models/delivery_carrier.py b/rma_delivery/models/delivery_carrier.py new file mode 100644 index 000000000..f0c8c58cf --- /dev/null +++ b/rma_delivery/models/delivery_carrier.py @@ -0,0 +1,98 @@ +# Copyright 2026 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class DeliveryCarrier(models.Model): + _inherit = "delivery.carrier" + + # TODO 19.0: The available_carriers_* methods should be removed, and the core + # methods should be reused and extended for RMA. + def available_carriers_picking(self, partner, picking): + return self.filtered(lambda c: c._match_picking(partner, picking)) + + def available_carriers_rma(self, partner, rma): + return self.filtered(lambda c: c._match_rma(partner, rma)) + + def _match_picking(self, partner, picking): + self.ensure_one() + return ( + self._match_address(partner) + and self._match_must_have_tags_picking(picking) + and self._match_excluded_tags_picking(picking) + and self._match_weight_picking(picking) + and self._match_volume_picking(picking) + ) + + def _match_rma(self, partner, rma): + self.ensure_one() + return ( + self._match_address(partner) + and self._match_must_have_tags_rma(rma) + and self._match_excluded_tags_rma(rma) + and self._match_weight_rma(rma) + and self._match_volume_rma(rma) + ) + + def _match_must_have_tags_picking(self, picking): + self.ensure_one() + return not self.must_have_tag_ids or any( + tag in picking.move_ids.product_id.all_product_tag_ids + for tag in self.must_have_tag_ids + ) + + def _match_must_have_tags_rma(self, rma): + self.ensure_one() + return not self.must_have_tag_ids or any( + tag in rma.product_id.all_product_tag_ids for tag in self.must_have_tag_ids + ) + + def _match_excluded_tags_picking(self, picking): + self.ensure_one() + return not any( + tag in picking.move_ids.product_id.all_product_tag_ids + for tag in self.excluded_tag_ids + ) + + def _match_excluded_tags_rma(self, rma): + self.ensure_one() + return not any( + tag in rma.product_id.all_product_tag_ids for tag in self.excluded_tag_ids + ) + + def _match_weight_picking(self, picking): + self.ensure_one() + return ( + not self.max_weight + or sum( + move.product_id.weight * move.product_uom_qty + for move in picking.move_ids + ) + <= self.max_weight + ) + + def _match_weight_rma(self, rma): + self.ensure_one() + return ( + not self.max_weight + or (rma.product_id.weight * rma.product_uom_qty) <= self.max_weight + ) + + def _match_volume_picking(self, picking): + self.ensure_one() + return ( + not self.max_volume + or sum( + move.product_id.volume * move.product_uom_qty + for move in picking.move_ids + ) + <= self.max_volume + ) + + def _match_volume_rma(self, rma): + self.ensure_one() + return ( + not self.max_volume + or (rma.product_id.volume * rma.product_uom_qty) <= self.max_volume + ) diff --git a/rma_delivery/models/rma.py b/rma_delivery/models/rma.py index 691cd55e6..bce25b92f 100644 --- a/rma_delivery/models/rma.py +++ b/rma_delivery/models/rma.py @@ -1,25 +1,44 @@ # Copyright 2022 Tecnativa - David Vidal # Copyright 2026 Tecnativa - Víctor Martínez # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields, models +from odoo import api, fields, models class Rma(models.Model): _inherit = "rma" + available_carrier_ids = fields.Many2many( + comodel_name="delivery.carrier", + compute="_compute_available_carrier_ids", + ) carrier_id = fields.Many2one( comodel_name="delivery.carrier", string="Carrier", + domain="[('id', 'in', available_carrier_ids)]", ) rma_delivery_strategy = fields.Selection(related="company_id.rma_delivery_strategy") reception_carrier_id = fields.Many2one( comodel_name="delivery.carrier", string="Reception Carrier", + domain="[('id', 'in', available_carrier_ids)]", ) rma_reception_strategy = fields.Selection( related="company_id.rma_reception_strategy" ) + @api.depends("partner_shipping_id", "product_id", "product_uom_qty") + def _compute_available_carrier_ids(self): + carrier_model = self.env["delivery.carrier"] + for item in self: + carriers = carrier_model.search( + carrier_model._check_company_domain(item.company_id) + ) + item.available_carrier_ids = ( + carriers.available_carriers_rma(item.partner_shipping_id, item) + if item.partner_shipping_id + else carriers + ) + def _get_default_carrier_id(self, company, partner): """Gather the company option for default carrier on RMA returns. We could either: diff --git a/rma_delivery/wizard/rma_choose_delivery_carrier.py b/rma_delivery/wizard/rma_choose_delivery_carrier.py index 746f34638..18ce36ffe 100644 --- a/rma_delivery/wizard/rma_choose_delivery_carrier.py +++ b/rma_delivery/wizard/rma_choose_delivery_carrier.py @@ -12,6 +12,8 @@ class RmaChooseDeliveryCarrier(models.TransientModel): comodel_name="rma", default=lambda self: self.env.context.get("active_id", False), ) + company_id = fields.Many2one(related="rma_id.company_id") + partner_id = fields.Many2one(related="rma_id.partner_shipping_id") carrier_type = fields.Selection( [ ("reception", "Reception"), @@ -20,8 +22,15 @@ class RmaChooseDeliveryCarrier(models.TransientModel): default="reception", readonly=True, ) + available_carrier_ids = fields.Many2many( + comodel_name="delivery.carrier", + compute="_compute_available_carrier_ids", + ) carrier_id = fields.Many2one( - comodel_name="delivery.carrier", string="Carrier", required=True + comodel_name="delivery.carrier", + string="Carrier", + required=True, + domain="[('id', 'in', available_carrier_ids)]", ) @api.model @@ -39,6 +48,19 @@ def default_get(self, fields_list): res.update(carrier_type=carrier_type, carrier_id=carrier.id) return res + @api.depends("partner_id") + def _compute_available_carrier_ids(self): + carrier_model = self.env["delivery.carrier"] + for item in self: + carriers = carrier_model.search( + carrier_model._check_company_domain(item.company_id) + ) + item.available_carrier_ids = ( + carriers.available_carriers_rma(item.partner_id, item.rma_id) + if item.partner_id + else carriers + ) + def _get_pending_moves(self): rma = self.rma_id moves = ( diff --git a/rma_delivery/wizard/rma_choose_delivery_carrier_views.xml b/rma_delivery/wizard/rma_choose_delivery_carrier_views.xml index 24d078c2d..ba982e16c 100644 --- a/rma_delivery/wizard/rma_choose_delivery_carrier_views.xml +++ b/rma_delivery/wizard/rma_choose_delivery_carrier_views.xml @@ -17,6 +17,11 @@ widget="radio" options="{'horizontal': true}" /> + +