diff --git a/rma_sale/__manifest__.py b/rma_sale/__manifest__.py
index df6916e45..90d6c3d7e 100644
--- a/rma_sale/__manifest__.py
+++ b/rma_sale/__manifest__.py
@@ -23,6 +23,7 @@
"views/sale_portal_template.xml",
"views/res_config_settings_views.xml",
"wizard/sale_order_rma_wizard_views.xml",
+ "wizard/rma_sale_order_link_wizard.xml",
],
"assets": {
"web.assets_frontend": [
diff --git a/rma_sale/i18n/fr.po b/rma_sale/i18n/fr.po
index 72b3ab2fe..e80a179d8 100644
--- a/rma_sale/i18n/fr.po
+++ b/rma_sale/i18n/fr.po
@@ -120,6 +120,7 @@ msgid "Allowed Quantity"
msgstr ""
#. module: rma_sale
+#: model_terms:ir.ui.view,arch_db:rma_sale.rma_sale_order_link_wizard_form_view
#: model_terms:ir.ui.view,arch_db:rma_sale.sale_order_rma_wizard_form_view
msgid "Cancel"
msgstr "Annuler"
@@ -158,6 +159,11 @@ msgstr "Sociétés"
msgid "Config Settings"
msgstr "Paramètres de configuration"
+#. module: rma_sale
+#: model_terms:ir.ui.view,arch_db:rma_sale.rma_sale_order_link_wizard_form_view
+msgid "Confirm"
+msgstr "Confirmer"
+
#. module: rma_sale
#: model:ir.model.fields,help:rma_sale.field_sale_order_line_rma_wizard__uom_category_id
msgid ""
@@ -182,12 +188,14 @@ msgid "Create RMAs"
msgstr "Créer RMA"
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__create_uid
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__create_uid
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__create_date
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__create_date
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__create_date
msgid "Created on"
@@ -198,6 +206,11 @@ msgstr "Créé le"
msgid "Custom Description"
msgstr "Description personnalisée"
+#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__partner_id
+msgid "Customer"
+msgstr "Client"
+
#. module: rma_sale
#: model_terms:ir.ui.view,arch_db:rma_sale.sale_rma_request_form
msgid "Delivery"
@@ -219,6 +232,7 @@ msgid "Different Return Product"
msgstr ""
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__display_name
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__display_name
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__display_name
msgid "Display Name"
@@ -241,6 +255,7 @@ msgid "Full page RMA creation"
msgstr "Création RMA pleine page"
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__id
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__id
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__id
msgid "ID"
@@ -266,18 +281,21 @@ msgid "Journal Entry"
msgstr "Pièce comptable"
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard____last_update
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard____last_update
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__write_uid
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__write_uid
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__write_uid
msgid "Last Updated by"
msgstr "Dernière modification par"
#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__write_date
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__write_date
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_rma_wizard__write_date
msgid "Last Updated on"
@@ -288,6 +306,14 @@ msgstr ""
msgid "Lines"
msgstr "Lignes"
+#. module: rma_sale
+#. odoo-python
+#: code:addons/rma_sale/models/rma.py:0
+#: model_terms:ir.ui.view,arch_db:rma_sale.rma_view_form
+#, python-format
+msgid "Link to sale order"
+msgstr "Lier à la commande client"
+
#. module: rma_sale
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__move_id
msgid "Move"
@@ -386,6 +412,16 @@ msgstr ""
msgid "Return Product"
msgstr ""
+#. module: rma_sale
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__rma_id
+msgid "Rma"
+msgstr ""
+
+#. module: rma_sale
+#: model_terms:ir.ui.view,arch_db:rma_sale.rma_sale_order_link_wizard_form_view
+msgid "Rma Sale Order Link Wizard"
+msgstr ""
+
#. module: rma_sale
#: model:ir.model.fields,field_description:rma_sale.field_rma__sale_line_id
#: model:ir.model.fields,field_description:rma_sale.field_sale_order_line_rma_wizard__sale_line_id
@@ -394,9 +430,17 @@ msgstr "Ligne de commande"
#. module: rma_sale
#: model:ir.model.fields,field_description:rma_sale.field_rma__order_id
+#: model:ir.model.fields,field_description:rma_sale.field_rma_sale_order_link_wizard__sale_order_id
msgid "Sale Order"
msgstr "Bon de commande"
+#. module: rma_sale
+#. odoo-python
+#: code:addons/rma_sale/wizard/rma_sale_order_link_wizard.py:0
+#, python-format
+msgid "Sale Order %(order)s linked manually."
+msgstr "Commande client %(order)s liée manuellement."
+
#. module: rma_sale
#: model:ir.model,name:rma_sale.model_sale_order_line_rma_wizard
msgid "Sale Order Line Rma Wizard"
@@ -489,6 +533,11 @@ msgstr "Sera utilisé pour retourner les marchandises une fois le RMA terminé"
msgid "Wizard"
msgstr ""
+#. module: rma_sale
+#: model:ir.model,name:rma_sale.model_rma_sale_order_link_wizard
+msgid "Wizard to link existing rma to sale order"
+msgstr ""
+
#. module: rma_sale
#: model_terms:ir.ui.view,arch_db:rma_sale.sale_rma_request_form
msgid ""
diff --git a/rma_sale/models/rma.py b/rma_sale/models/rma.py
index 7d7d8bbe4..81627a2d6 100644
--- a/rma_sale/models/rma.py
+++ b/rma_sale/models/rma.py
@@ -2,7 +2,7 @@
# Copyright 2023 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-from odoo import api, fields, models
+from odoo import _, api, fields, models
from odoo.tools import float_compare
@@ -219,3 +219,14 @@ def create_replace(self, scheduled_date, warehouse, product, qty, uom):
new_moves = self.delivery_move_ids - moves_before
new_moves.picking_id.sale_id = False
return res
+
+ def action_link_to_sale_order(self):
+ self.ensure_one()
+ return {
+ "name": _("Link to sale order"),
+ "type": "ir.actions.act_window",
+ "view_mode": "form",
+ "res_model": "rma.sale.order.link.wizard",
+ "target": "new",
+ "context": {"default_rma_id": self.id, **self.env.context},
+ }
diff --git a/rma_sale/security/ir.model.access.csv b/rma_sale/security/ir.model.access.csv
index f8a2b32b9..be4f692ec 100644
--- a/rma_sale/security/ir.model.access.csv
+++ b/rma_sale/security/ir.model.access.csv
@@ -1,3 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_sale_order_rma_wizard_user_all,sale.order.rma.wizard.user.all,model_sale_order_rma_wizard,rma.rma_group_user_all,1,1,1,1
access_sale_order_line_rma_wizard_user_all,sale.order.line.rma.wizard.user.all,model_sale_order_line_rma_wizard,rma.rma_group_user_all,1,1,1,1
+access_rma_sale_order_link_wizard_user_all,sale.order.rma.wizard.user.all,model_rma_sale_order_link_wizard,rma.rma_group_user_all,1,1,1,1
diff --git a/rma_sale/tests/test_rma_sale.py b/rma_sale/tests/test_rma_sale.py
index c5618478f..eb38a386b 100644
--- a/rma_sale/tests/test_rma_sale.py
+++ b/rma_sale/tests/test_rma_sale.py
@@ -336,3 +336,24 @@ def test_grouping_reception(self):
rmas = self.env["rma"].search(wizard.create_and_open_rma()["domain"])
self.assertEqual(len(rmas.reception_move_id.group_id), 1)
self.assertEqual(len(rmas.reception_move_id.picking_id), 1)
+
+ def test_link_to_sale_order(self):
+ rma_vals = {
+ "partner_id": self.partner.id,
+ "product_id": self.product_1.id,
+ "product_uom_qty": 5,
+ "location_id": self.sale_order.warehouse_id.rma_loc_id.id,
+ "operation_id": self.operation.id,
+ }
+ rma = self.env["rma"].create(rma_vals)
+ rma.action_confirm()
+ action = rma.action_link_to_sale_order()
+ wizard = (
+ self.env[action.get("res_model")]
+ .with_context(**action.get("context"))
+ .create({"sale_order_id": self.sale_order.id})
+ )
+ self.assertEqual(wizard.rma_id, rma)
+ self.assertFalse(rma.order_id)
+ wizard.action_link_rma_to_sale_order()
+ self.assertEqual(rma.order_id, self.sale_order)
diff --git a/rma_sale/views/rma_views.xml b/rma_sale/views/rma_views.xml
index d0f246ba1..b64109d54 100644
--- a/rma_sale/views/rma_views.xml
+++ b/rma_sale/views/rma_views.xml
@@ -7,6 +7,14 @@
rma
+
+
+
+
+
+ rma.sale.order.link.wizard
+
+
+
+
+
+
+
+