Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][ADD] add rma_reason & sale_rma_reason #409

Open
wants to merge 3 commits into
base: 16.0
Choose a base branch
from
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
113 changes: 113 additions & 0 deletions rma_reason/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
==========
Rma Reason
==========

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

.. |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
: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
:target: https://github.com/OCA/rma/tree/16.0/rma_reason
:alt: OCA/rma
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/rma-16-0/rma-16-0-rma_reason
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/rma&target_branch=16.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

Specifying the RMA reason when creating an RMA order is crucial for
effective inventory management, quality control, and customer service.
It helps categorize returned items accurately, identify recurring
product issues, and improve overall product quality. This data enables
customer service to address issues more effectively and enhances the
customer experience.

This addon allows RMA managers to pre-configure possible reasons users
can specify when creating the RMA order.

In a multi-company setup, each company can define its own reasons and
choose to make the reason mandatory or optional.

**Table of contents**

.. contents::
:local:

Configuration
=============

To configure this module, you need to:

- Go to **Inventory > Settings > Settings** and select whether the
reason is mandatory or not.
- Go to **RMA > Settings > RMA Reasons** and create the RMA reasons for
your company.

Usage
=====

When creating an RMA, select the reason for the return.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/rma/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
`feedback <https://github.com/OCA/rma/issues/new?body=module:%20rma_reason%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

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

Credits
=======

Authors
-------

* Raumschmiede GmbH
* BCIM
* ACSONE SA/NV

Contributors
------------

- Jacques-Etienne Baudoux - BCIM [email protected]
- Souheil Bejaoui - ACSONE SA/NV [email protected]

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-sbejaoui| image:: https://github.com/sbejaoui.png?size=40px
:target: https://github.com/sbejaoui
:alt: sbejaoui

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-sbejaoui|

This module is part of the `OCA/rma <https://github.com/OCA/rma/tree/16.0/rma_reason>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions rma_reason/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import wizards
25 changes: 25 additions & 0 deletions rma_reason/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2024 Raumschmiede GmbH
# Copyright 2024 BCIM
# Copyright 2024 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Rma Reason",
"version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "Raumschmiede GmbH,BCIM,ACSONE SA/NV,Odoo Community Association (OCA)",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think Raumschmiede GmbH should go in the CREDITS file, not as author, being the paying customer, isn't it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jbaudoux , fine with you?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They are the original author of the module, not the paying customer of this OCA port

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But you should not add them at the top of the file that were not there originally.

"website": "https://github.com/OCA/rma",
"depends": ["rma"],
"maintainers": ["sbejaoui"],
"data": [
"security/rma_reason.xml",
"views/rma.xml",
"views/rma_reason.xml",
"views/res_config_settings.xml",
"views/rma_portal_templates.xml",
"wizards/stock_return_picking.xml",
],
"demo": [
"demo/rma_reason.xml",
],
}
43 changes: 43 additions & 0 deletions rma_reason/demo/rma_reason.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Raumschmiede GmbH
Copyright 2024 BCIM
Copyright 2024 ACSONE SA/NV
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo noupdate="1">

<record model="rma.reason" id="rma_reason_defective_product">
<field name="name">Defective Product</field>
<field
name="description"
>The item is malfunctioning or has a defect that affects its intended use.</field>
</record>

<record model="rma.reason" id="rma_reason_wrong_item_shipped">
<field name="name">Wrong Item Shipped</field>
<field
name="description"
>The customer received a different product than what they ordered.</field>
</record>

<record model="rma.reason" id="rma_reason_damaged_in_transit">
<field name="name">Damaged in Transit</field>
<field
name="description"
>The product was damaged during shipping and is not in usable condition upon arrival.</field>
</record>

<record model="rma.reason" id="rma_reason_unwanted_changed_mind">
<field name="name">Unwanted/Changed Mind</field>
<field
name="description"
>The customer no longer wants the item or changed their mind after purchasing it.</field>
</record>

<record model="rma.reason" id="rma_reason_not_as_described">
<field name="name">Product Not as Described</field>
<field
name="description"
>The item does not match the description or specifications provided by the seller, leading to customer dissatisfaction.</field>
</record>

</odoo>
4 changes: 4 additions & 0 deletions rma_reason/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from . import rma_reason
from . import rma
from . import res_company
from . import res_config_settings
16 changes: 16 additions & 0 deletions rma_reason/models/res_company.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright 2024 Raumschmiede GmbH
# Copyright 2024 BCIM
# Copyright 2024 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ResCompany(models.Model):

_inherit = "res.company"

is_rma_reason_required = fields.Boolean(
string="Indicates whether specifying an RMA reason is mandatory when creating "
"an RMA order."
)
15 changes: 15 additions & 0 deletions rma_reason/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2024 Raumschmiede GmbH
# Copyright 2024 BCIM
# Copyright 2024 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import fields, models


class ResConfigSettings(models.TransientModel):

_inherit = "res.config.settings"

is_rma_reason_required = fields.Boolean(
related="company_id.is_rma_reason_required", readonly=False
)
25 changes: 25 additions & 0 deletions rma_reason/models/rma.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2024 Raumschmiede GmbH
# Copyright 2024 BCIM
# Copyright 2024 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import api, fields, models


class Rma(models.Model):

_inherit = "rma"

reason_id = fields.Many2one(comodel_name="rma.reason")
is_rma_reason_required = fields.Boolean(related="company_id.is_rma_reason_required")
operation_domain = fields.Binary(compute="_compute_operation_domain")

@api.depends("reason_id")
def _compute_operation_domain(self):
for rec in self:
if rec.reason_id and rec.reason_id.allowed_operation_ids:
rec.operation_domain = [

Check warning on line 21 in rma_reason/models/rma.py

View check run for this annotation

Codecov / codecov/patch

rma_reason/models/rma.py#L21

Added line #L21 was not covered by tests
("id", "in", rec.reason_id.allowed_operation_ids.ids)
]
else:
rec.operation_domain = []

Check warning on line 25 in rma_reason/models/rma.py

View check run for this annotation

Codecov / codecov/patch

rma_reason/models/rma.py#L25

Added line #L25 was not covered by tests
26 changes: 26 additions & 0 deletions rma_reason/models/rma_reason.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright 2024 Raumschmiede GmbH
# Copyright 2024 BCIM
# Copyright 2024 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import fields, models


class RmaReason(models.Model):

_name = "rma.reason"
_description = "Rma Reason"

name = fields.Char(required=True, translate=True)
description = fields.Text(translate=True)
company_id = fields.Many2one(
"res.company",
required=True,
readonly=True,
default=lambda self: self.env.company,
)
allowed_operation_ids = fields.Many2many(
comodel_name="rma.operation",
string="Operations",
help="List of RMA operations that are allowed when this reason is selected.",
)
4 changes: 4 additions & 0 deletions rma_reason/readme/CONFIGURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
To configure this module, you need to:

- Go to **Inventory > Settings > Settings** and select whether the reason is mandatory or not.
- Go to **RMA > Settings > RMA Reasons** and create the RMA reasons for your company.
2 changes: 2 additions & 0 deletions rma_reason/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Jacques-Etienne Baudoux - BCIM <[email protected]>
- Souheil Bejaoui - ACSONE SA/NV <[email protected]>
12 changes: 12 additions & 0 deletions rma_reason/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Specifying the RMA reason when creating an RMA order is crucial for effective
inventory management, quality control, and customer service.
It helps categorize returned items accurately, identify recurring product
issues, and improve overall product quality. This data enables customer
service to address issues more effectively and enhances the customer
experience.

This addon allows RMA managers to pre-configure possible reasons users can
specify when creating the RMA order.

In a multi-company setup, each company can define its own reasons and choose
to make the reason mandatory or optional.
1 change: 1 addition & 0 deletions rma_reason/readme/USAGE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
When creating an RMA, select the reason for the return.
37 changes: 37 additions & 0 deletions rma_reason/security/rma_reason.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2024 Raumschmiede GmbH
Copyright 2024 BCIM
Copyright 2024 ACSONE SA/NV
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>

<record model="ir.model.access" id="rma_reason_access_rma_user">
<field name="name">rma.reason access rma user</field>
<field name="model_id" ref="model_rma_reason" />
<field name="group_id" ref="rma.rma_group_user_own" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_unlink" eval="0" />
</record>

<record model="ir.model.access" id="rma_reason_access_rma_manager">
<field name="name">rma.reason access rma manager</field>
<field name="model_id" ref="model_rma_reason" />
<field name="group_id" ref="rma.rma_group_manager" />
<field name="perm_read" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_write" eval="1" />
<field name="perm_unlink" eval="1" />
</record>

<!-- Multi-Company Rules -->
<record id="rma_reason_rule_multi_company" model="ir.rule">
<field name="name">RMA reason multi-company</field>
<field name="model_id" ref="model_rma_reason" />
<field name="global" eval="True" />
<field
name="domain_force"
>['|',('company_id','=',False),('company_id','in',company_ids)]</field>
</record>
</odoo>
Binary file added rma_reason/static/description/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading