Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion rma_delivery/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@ To configure RMAs shipping strategy for your company:

#. Go to *Inventory > Configuration > Settings*
#. Choose an *RMA delivery method strategy*.
#. There are 3 possibilities:
#. 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.

Usage
=====
Expand Down Expand Up @@ -85,6 +86,7 @@ Contributors
* `Tecnativa <https://www.tecnativa.com>`_:

* David Vidal
* Víctor Martínez

* Souheil Bejaoui - ACSONE SA/NV <[email protected]>

Expand Down
5 changes: 4 additions & 1 deletion rma_delivery/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,8 @@
"maintainers": ["chienandalu"],
"license": "AGPL-3",
"depends": ["rma", "delivery"],
"data": ["views/res_config_settings_views.xml"],
"data": [
"views/res_config_settings_views.xml",
"views/rma_views.xml",
],
}
1 change: 1 addition & 0 deletions rma_delivery/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from . import res_company
from . import res_config_settings
from . import rma
from . import stock_move
1 change: 1 addition & 0 deletions rma_delivery/models/res_company.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class Company(models.Model):
("fixed_method", "Fixed method"),
("customer_method", "Customer method"),
("mixed_method", "Customer method (fallback to fixed)"),
("rma_method", "RMA method"),
],
string="RMA delivery method strategy",
default="mixed_method",
Expand Down
39 changes: 15 additions & 24 deletions rma_delivery/models/rma.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
# 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 models
from odoo import fields, models


class Rma(models.Model):
_inherit = "rma"

carrier_id = fields.Many2one(
comodel_name="delivery.carrier",
string="Carrier",
)
rma_delivery_strategy = fields.Selection(related="company_id.rma_delivery_strategy")

def _get_default_carrier_id(self, company, partner):
"""Gather the company option for default carrier on RMA returns. We could
either:
Expand All @@ -25,27 +32,11 @@ def _get_default_carrier_id(self, company, partner):
delivery_method = partner_method
return delivery_method

def _prepare_returning_picking(self, picking_form, origin=None):
res = super()._prepare_returning_picking(picking_form, origin)
picking_form.carrier_id = self._get_default_carrier_id(
picking_form.company_id, picking_form.partner_id
)
return res

def _set_carrier(self, pickings):
for picking in pickings:
picking.carrier_id = self._get_default_carrier_id(
picking.company_id, picking.partner_id
def _get_carrier(self):
self.ensure_one()
if self.rma_delivery_strategy == "rma_method":
return self.carrier_id
else:
return self._get_default_carrier_id(
self.company_id, self.partner_shipping_id
)

def create_replace(self, scheduled_date, warehouse, product, qty, uom):
existing_pickings = self.delivery_move_ids.picking_id
res = super().create_replace(scheduled_date, warehouse, product, qty, uom)
self._set_carrier(self.delivery_move_ids.picking_id - existing_pickings)
return res

def create_return(self, scheduled_date, qty=None, uom=None):
existing_pickings = self.delivery_move_ids.picking_id
res = super().create_return(scheduled_date, qty=qty, uom=uom)
self._set_carrier(self.delivery_move_ids.picking_id - existing_pickings)
return res
15 changes: 15 additions & 0 deletions rma_delivery/models/stock_move.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2026 Tecnativa - Víctor Martínez
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import models


class StockMove(models.Model):
_inherit = "stock.move"

def _get_new_picking_values(self):
vals = super()._get_new_picking_values()
if self.rma_id:
carrier = self.rma_id[0]._get_carrier()
if carrier and any(rule.propagate_carrier for rule in self.rule_id):
vals["carrier_id"] = carrier.id
return vals
3 changes: 2 additions & 1 deletion rma_delivery/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ To configure RMAs shipping strategy for your company:

#. Go to *Inventory > Configuration > Settings*
#. Choose an *RMA delivery method strategy*.
#. There are 3 possibilities:
#. 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.
1 change: 1 addition & 0 deletions rma_delivery/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
* `Tecnativa <https://www.tecnativa.com>`_:

* David Vidal
* Víctor Martínez

* Souheil Bejaoui - ACSONE SA/NV <[email protected]>
4 changes: 3 additions & 1 deletion rma_delivery/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -392,12 +392,13 @@ <h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<ol class="arabic simple">
<li>Go to <em>Inventory &gt; Configuration &gt; Settings</em></li>
<li>Choose an <em>RMA delivery method strategy</em>.</li>
<li>There are 3 possibilities:<ul>
<li>There are 4 possibilities:<ul>
<li>Fixed method: the method will always be the same. Select it on the field <em>Default RMA delivery method</em>
(or leave it empty for no delivery method at all).</li>
<li>Customer method: the method will be the one configured on the partner.</li>
<li>Mixed method: the method will be the one configured on the partner, otherwise
the fixed one will be chosen.</li>
<li>RMA method: the method will be configured in each RMA.</li>
</ul>
</li>
</ol>
Expand Down Expand Up @@ -433,6 +434,7 @@ <h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>David Vidal</li>
<li>Víctor Martínez</li>
</ul>
</li>
<li>Souheil Bejaoui - ACSONE SA/NV &lt;<a class="reference external" href="mailto:souheil.bejaoui&#64;acsone.eu">souheil.bejaoui&#64;acsone.eu</a>&gt;</li>
Expand Down
17 changes: 17 additions & 0 deletions rma_delivery/tests/test_rma_delivery.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# 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.tests import Form

Expand Down Expand Up @@ -143,3 +144,19 @@ def test_03_mixed_method(self):
self.carrier,
"The carrier isn't the one set in the company as default",
)

def test_04_rma_method(self):
self.company.rma_delivery_strategy = "rma_method"
rma = self._create_confirm_receive(
self.partner_shipping, self.product, 1, self.rma_loc
)
rma.carrier_id = self.carrier
picking = self._return_to_customer(rma)
self.assertEqual(picking.carrier_id, self.carrier)
# Replace picking
rma = self._create_confirm_receive(
self.partner_shipping, self.product, 1, self.rma_loc
)
rma.carrier_id = self.carrier
picking = self._return_to_customer(rma, "replace")
self.assertEqual(picking.carrier_id, self.carrier)
3 changes: 1 addition & 2 deletions rma_delivery/views/res_config_settings_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
</div>
<div
class="content-group"
attrs="{'invisible': [('rma_delivery_strategy', '=', 'customer_method')]}"
attrs="{'invisible': [('rma_delivery_strategy', 'in', ('customer_method', 'rma_method'))]}"
>
<label for="rma_fixed_delivery_method" />
<div class="mt16">
Expand All @@ -37,7 +37,6 @@
</div>
</div>
</div>

</xpath>
</field>
</record>
Expand Down
19 changes: 19 additions & 0 deletions rma_delivery/views/rma_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2026 Tecnativa - Víctor Martínez
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="rma_view_form" model="ir.ui.view">
<field name="name">rma.view.form</field>
<field name="model">rma</field>
<field name="inherit_id" ref="rma.rma_view_form" />
<field name="arch" type="xml">
<field name="procurement_group_id" position="after">
<field name="rma_delivery_strategy" invisible="1" />
<field
name="carrier_id"
attrs="{'invisible': [('rma_delivery_strategy', '!=', 'rma_method')], 'readonly': [('show_create_refund', '=', False),('show_create_replace', '=', False),('show_create_return', '=', False)]}"
/>
</field>
</field>
</record>
</odoo>