diff --git a/setup/website_rma/odoo/addons/website_rma b/setup/website_rma/odoo/addons/website_rma new file mode 120000 index 00000000..78dc64e5 --- /dev/null +++ b/setup/website_rma/odoo/addons/website_rma @@ -0,0 +1 @@ +../../../../website_rma \ No newline at end of file diff --git a/setup/website_rma/setup.py b/setup/website_rma/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/website_rma/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/website_rma/README.rst b/website_rma/README.rst new file mode 100644 index 00000000..096c13d3 --- /dev/null +++ b/website_rma/README.rst @@ -0,0 +1,113 @@ +========================================================== +Return Merchandise Authorization Management - Website Form +========================================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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/13.0/website_rma + :alt: OCA/rma +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/rma-13-0/rma-13-0-website_rma + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/145/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of rma and website to allow you +to request an RMA through a form in the website. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Website > Configuration > Settings*. +#. Find 'Return Merchandise Authorization (RMA)' section. +#. Under 'Request RMA Form', select the default 'RMA Team' + and default 'RMA Responsible' for the RMAs created from + the Request RMA page. + +Usage +===== + +To use this module, you need to: + +#. Go to the website +#. Go to *Your username (at the upper-right corner) > My account* or + access to /my (Example: https://www.odoo.com/my). +#. Under your documents list you can see a text with a link to the page + where you can create an RMA through a form. +#. Click on this link to access to this page or access to + /requestrma (Example: https://www.odoo.com/requestrma). +#. Fill the desired and required fields and click on the button 'Request'. +#. If everything is right, a new RMA document will created, you will be + redirected to a page with a thank you message. + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Ernesto Tejeda + * Pedro M. Baeza + * David Vidal + +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-ernestotejeda| image:: https://github.com/ernestotejeda.png?size=40px + :target: https://github.com/ernestotejeda + :alt: ernestotejeda + +Current `maintainer `__: + +|maintainer-ernestotejeda| + +This module is part of the `OCA/rma `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/website_rma/__init__.py b/website_rma/__init__.py new file mode 100644 index 00000000..5c2bd8c9 --- /dev/null +++ b/website_rma/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import controllers +from . import models diff --git a/website_rma/__manifest__.py b/website_rma/__manifest__.py new file mode 100644 index 00000000..075bd339 --- /dev/null +++ b/website_rma/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Return Merchandise Authorization Management - Website Form", + "summary": "Return Merchandise Authorization (RMA)", + "version": "14.0.1.0.0", + "development_status": "Production/Stable", + "category": "RMA", + "website": "https://github.com/OCA/rma", + "author": "Tecnativa, Odoo Community Association (OCA)", + "maintainers": ["ernestotejeda"], + "license": "AGPL-3", + "depends": ["rma", "website_form"], + "data": [ + "data/ir_model_data.xml", + "views/assets.xml", + "views/request_rma_form.xml", + "views/res_config_settings_views.xml", + "views/website_rma_portal_templates.xml", + "views/website_templates.xml", + "data/website_data.xml", + ], +} diff --git a/website_rma/controllers/__init__.py b/website_rma/controllers/__init__.py new file mode 100644 index 00000000..f43232f0 --- /dev/null +++ b/website_rma/controllers/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import main diff --git a/website_rma/controllers/main.py b/website_rma/controllers/main.py new file mode 100644 index 00000000..5b27abaf --- /dev/null +++ b/website_rma/controllers/main.py @@ -0,0 +1,62 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import json + +from odoo import http +from odoo.http import request + +from odoo.addons.website_form.controllers.main import WebsiteForm + + +class WebsiteForm(WebsiteForm): + def insert_record(self, request, model, values, custom, meta=None): + res = super().insert_record(request, model, values, custom, meta) + # Add the customer to the followers, the same as when creating + # an RMA from a sales order in the portal. + if model.model == "rma": + rma = request.env["rma"].sudo().browse(res) + rma.message_subscribe([rma.partner_id.id]) + return res + + +class WebsiteRMA(http.Controller): + def _get_website_rma_product_domain(self, q): + """Domain used for the products to be shown in selection of + the web form. + """ + domain = [ + ("name", "=ilike", "%{}%".format(q or "")), + ("sale_ok", "=", True), + ] + # HACK: As there is no glue module for this purpose we have put + # this this condition to check that the mrp module is installed. + if "bom_ids" in request.env["product.product"]._fields: + domain += [ + "|", + ("bom_ids.type", "!=", "phantom"), + ("bom_ids", "=", False), + ] + return domain + + @http.route(["/requestrma"], type="http", auth="user", website=True) + def request_rma(self, **kw): + return http.request.render("website_rma.request_rma", {}) + + @http.route( + "/website_rma/get_products", + type="http", + auth="user", + methods=["GET"], + website=True, + ) + def rma_product_read(self, q="", limit=25, **post): + data = ( + request.env["product.product"] + .sudo() + .search_read( + domain=self._get_website_rma_product_domain(q), + fields=["id", "display_name", "uom_id"], + limit=int(limit), + ) + ) + return json.dumps(data) diff --git a/website_rma/data/ir_model_data.xml b/website_rma/data/ir_model_data.xml new file mode 100644 index 00000000..931d9ce2 --- /dev/null +++ b/website_rma/data/ir_model_data.xml @@ -0,0 +1,29 @@ + + + + + + + True + Request RMA + + + + rma + + + diff --git a/website_rma/data/website_data.xml b/website_rma/data/website_data.xml new file mode 100644 index 00000000..3acb3276 --- /dev/null +++ b/website_rma/data/website_data.xml @@ -0,0 +1,13 @@ + + + + + + /requestrma-thank-you + + True + + + + diff --git a/website_rma/i18n/es.po b/website_rma/i18n/es.po new file mode 100644 index 00000000..16001a38 --- /dev/null +++ b/website_rma/i18n/es.po @@ -0,0 +1,237 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_rma +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-12-01 18:49+0000\n" +"PO-Revision-Date: 2020-12-01 13:59-0500\n" +"Last-Translator: David Vidal \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 2.3\n" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +#, fuzzy +msgid "&times;" +msgstr "&times;" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de Configuración" + +#. module: website_rma +#: model:ir.model.fields,field_description:website_rma.field_res_config_settings__rma_default_user_id +#: model:ir.model.fields,field_description:website_rma.field_website__rma_default_user_id +msgid "Default Responsible" +msgstr "Responsable por defecto" + +#. module: website_rma +#: model:ir.model.fields,field_description:website_rma.field_res_config_settings__rma_default_team_id +#: model:ir.model.fields,field_description:website_rma.field_website__rma_default_team_id +msgid "Default Team" +msgstr "Equipo por defecto" + +#. module: website_rma +#: model:ir.model.fields,help:website_rma.field_res_config_settings__rma_default_user_id +#: model:ir.model.fields,help:website_rma.field_website__rma_default_user_id +msgid "" +"Default responsible for new leads created through the 'Request RMA' form." +msgstr "" +"Responsable por defecto para las nuevas RMAs creadas desde el formulario " +"'Solicitar RMA'." + +#. module: website_rma +#: model:ir.model.fields,help:website_rma.field_res_config_settings__rma_default_team_id +#: model:ir.model.fields,help:website_rma.field_website__rma_default_team_id +msgid "Default team for new RMAs created through the 'Request RMA' form." +msgstr "" +"Equipo por defecto para las nuevas RMAs creadas desde el formulario " +"'Solicitar RMA'." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Description" +msgstr "Descripción" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_ir_model +msgid "Models" +msgstr "Modelos" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Operation" +msgstr "Operación" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Our team will process it an will reach you once it's validated." +msgstr "Nuestro equipo lo procesará y le contactará una vez que sea validada." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Product" +msgstr "Producto" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Quantity" +msgstr "Cantidad" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_rma +msgid "RMA" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "RMA Responsible" +msgstr "Responsable de RMA" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "RMA Team" +msgstr "Equipo de RMA" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Request" +msgstr "Solicitar" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Request RMA" +msgstr "Solicitar RMA" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +#, fuzzy +#| msgid "Request RMA" +msgid "Request RMA Form" +msgstr "Solicitar RMA" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Return Merchandise Authorization (RMA)" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "" +"Set the default RMA Team and RMA responsible of the RMAs created from the" +msgstr "" +"Establece el Equipo de RMA y el responsable de RMA por defecto de las RMAs " +"creadas desde la página " + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "" +"Set the default RMA Team and RMA responsible of the RMAs created from the " +"Request RMA page." +msgstr "" +"Establece el Equipo de RMA y el responsable de RMA de las RMAs creadas desde " +"la página de solicitud de RMA" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "Thanks!" +msgstr "¡Gracias!" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "We will get back to you shortly." +msgstr "Le contestaremos en breve." + +#. module: website_rma +#: model:ir.model,name:website_rma.model_website +msgid "Website" +msgstr "Sitio web" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "You can request an RMA" +msgstr "Puede solicitar" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "Your request has been sent successfully." +msgstr "Su solicitud ha sido enviada satisfactoriamente." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "here" +msgstr "aquí" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +msgid "" +"if you do not\n" +" know the sales order from which it was " +"made.\n" +" If you know the sales order, go to it " +"and click on the corresponding button." +msgstr "" +"si usted no\n" +" conoce el pedido desde el cual fue " +"realizado.\n" +" Si usted conoce el pedido, vaya a éste y " +"pinche en el correspondiente botón." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "" +"if you do not\n" +" know the sales order from which it was " +"made. If you know\n" +" the sales order, go to it and click on " +"the corresponding button." +msgstr "" +"si usted no\n" +" conoce el pedido desde el cual fue " +"realizado. Si usted conoce\n" +" el pedido, vaya a éste y pinche en el " +"correspondiente botón." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "page" +msgstr "." + +#~ msgid "" +#~ "if you do not\n" +#~ " know the sales order from which it was made.\n" +#~ " If you know the sales order, go to it and " +#~ "click on the corresponding button." +#~ msgstr "" +#~ "directamente una devolución si no conoce\n" +#~ " el pedido de venta desde el que se realizó.\n" +#~ " Si conoce el pedido, vaya a él y pulse en el " +#~ "botón correspondiente." + +#~ msgid "" +#~ "if you do not\n" +#~ " know the sales order from which it was made. If you " +#~ "know\n" +#~ " the sales order, go to it and click on the " +#~ "corresponding button." +#~ msgstr "" +#~ "directamente una devolución si no conoce\n" +#~ " el pedido de venta desde el que se realizó.\n" +#~ " Si conoce el pedido, vaya a él y pulse en el " +#~ "botón correspondiente." diff --git a/website_rma/i18n/ro.po b/website_rma/i18n/ro.po new file mode 100644 index 00000000..689a9f04 --- /dev/null +++ b/website_rma/i18n/ro.po @@ -0,0 +1,205 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_rma +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-12-20 05:43+0000\n" +"Last-Translator: Dorin Hongu \n" +"Language-Team: none\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "&times;" +msgstr "&times;" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_res_config_settings +msgid "Config Settings" +msgstr "Configurare" + +#. module: website_rma +#: model:ir.model.fields,field_description:website_rma.field_res_config_settings__rma_default_user_id +#: model:ir.model.fields,field_description:website_rma.field_website__rma_default_user_id +msgid "Default Responsible" +msgstr "Responsabil implicit" + +#. module: website_rma +#: model:ir.model.fields,field_description:website_rma.field_res_config_settings__rma_default_team_id +#: model:ir.model.fields,field_description:website_rma.field_website__rma_default_team_id +msgid "Default Team" +msgstr "Echipa implicită" + +#. module: website_rma +#: model:ir.model.fields,help:website_rma.field_res_config_settings__rma_default_user_id +#: model:ir.model.fields,help:website_rma.field_website__rma_default_user_id +msgid "" +"Default responsible for new leads created through the 'Request RMA' form." +msgstr "" +"Responsabil implicit pentru noii clienți potențiali creați prin formularul „" +"Cerere retur”." + +#. module: website_rma +#: model:ir.model.fields,help:website_rma.field_res_config_settings__rma_default_team_id +#: model:ir.model.fields,help:website_rma.field_website__rma_default_team_id +msgid "Default team for new RMAs created through the 'Request RMA' form." +msgstr "" +"Echipa implicită pentru noile cereri de retur create prin formularul „Cerere " +"retur”." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Description" +msgstr "Descriere" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_ir_model +msgid "Models" +msgstr "Modele" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Operation" +msgstr "Operație" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Our team will process it an will reach you once it's validated." +msgstr "" +"Echipa noastră o va procesa și va ajunge la dvs. odată ce va fi validată." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Product" +msgstr "Produs" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Quantity" +msgstr "Cantitate" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_rma +msgid "RMA" +msgstr "Cerere retur" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "RMA Responsible" +msgstr "Responsabil cerere retur" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "RMA Team" +msgstr "Echipă" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Request" +msgstr "Cerere" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Request RMA" +msgstr "Cerere retur" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Request RMA Form" +msgstr "Formular cerere retur" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Return Merchandise Authorization (RMA)" +msgstr "Autorizație de returnare a mărfurilor (RMA)" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "" +"Set the default RMA Team and RMA responsible of the RMAs created from the" +msgstr "" +"Setați echipa implicită și responsabilul pentru cererile de retur create din" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "" +"Set the default RMA Team and RMA responsible of the RMAs created from the " +"Request RMA page." +msgstr "" +"Setați echipa implicită și responsabilul pentru cererile de retur create " +"din pagina Cerere retur." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "Thanks!" +msgstr "Mulțumim!" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "We will get back to you shortly." +msgstr "Te vom contacta în curând." + +#. module: website_rma +#: model:ir.model,name:website_rma.model_website +msgid "Website" +msgstr "Website" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "You can request an RMA" +msgstr "Puteți solicita o returnare" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "Your request has been sent successfully." +msgstr "Solicitarea dvs. a fost trimisă cu succes." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "here" +msgstr "aici" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +msgid "" +"if you do not\n" +" know the sales order from which it was made.\n" +" If you know the sales order, go to it and click on the corresponding button." +msgstr "" +"Dacă nu cunoașteți \n" +"comanda de vânzare din care a fost făcută.\n" +"Dacă cunoașteți comanda de vânzare, accesați-o și faceți clic pe butonul " +"corespunzător." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "" +"if you do not\n" +" know the sales order from which it was made. If you know\n" +" the sales order, go to it and click on the corresponding button." +msgstr "" +"dacă nu cunoașteți \n" +"comanda de vânzare din care a fost făcută. Dacă cunoașteți comanda de " +"vânzare, \n" +"accesați-o și faceți clic pe butonul corespunzător." + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "page" +msgstr "pagină" diff --git a/website_rma/i18n/website_rma.pot b/website_rma/i18n/website_rma.pot new file mode 100644 index 00000000..79d139dc --- /dev/null +++ b/website_rma/i18n/website_rma.pot @@ -0,0 +1,185 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_rma +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "&times;" +msgstr "" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: website_rma +#: model:ir.model.fields,field_description:website_rma.field_res_config_settings__rma_default_user_id +#: model:ir.model.fields,field_description:website_rma.field_website__rma_default_user_id +msgid "Default Responsible" +msgstr "" + +#. module: website_rma +#: model:ir.model.fields,field_description:website_rma.field_res_config_settings__rma_default_team_id +#: model:ir.model.fields,field_description:website_rma.field_website__rma_default_team_id +msgid "Default Team" +msgstr "" + +#. module: website_rma +#: model:ir.model.fields,help:website_rma.field_res_config_settings__rma_default_user_id +#: model:ir.model.fields,help:website_rma.field_website__rma_default_user_id +msgid "" +"Default responsible for new leads created through the 'Request RMA' form." +msgstr "" + +#. module: website_rma +#: model:ir.model.fields,help:website_rma.field_res_config_settings__rma_default_team_id +#: model:ir.model.fields,help:website_rma.field_website__rma_default_team_id +msgid "Default team for new RMAs created through the 'Request RMA' form." +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Description" +msgstr "" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_ir_model +msgid "Models" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Operation" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Our team will process it an will reach you once it's validated." +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Product" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Quantity" +msgstr "" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_rma +msgid "RMA" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "RMA Responsible" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "RMA Team" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +msgid "Request" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Request RMA" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Request RMA Form" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "Return Merchandise Authorization (RMA)" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "" +"Set the default RMA Team and RMA responsible of the RMAs created from the" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "" +"Set the default RMA Team and RMA responsible of the RMAs created from the " +"Request RMA page." +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "Thanks!" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "We will get back to you shortly." +msgstr "" + +#. module: website_rma +#: model:ir.model,name:website_rma.model_website +msgid "Website" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "You can request an RMA" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.request_rma_thanks_page_ir_ui_view +#: model_terms:website.page,arch_db:website_rma.request_rma_thanks_page +msgid "Your request has been sent successfully." +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "here" +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.contact_us_request_rma +msgid "" +"if you do not\n" +" know the sales order from which it was made.\n" +" If you know the sales order, go to it and click on the corresponding button." +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.portal_my_home_rma +msgid "" +"if you do not\n" +" know the sales order from which it was made. If you know\n" +" the sales order, go to it and click on the corresponding button." +msgstr "" + +#. module: website_rma +#: model_terms:ir.ui.view,arch_db:website_rma.res_config_settings_view_form +msgid "page" +msgstr "" diff --git a/website_rma/models/__init__.py b/website_rma/models/__init__.py new file mode 100644 index 00000000..2141ee61 --- /dev/null +++ b/website_rma/models/__init__.py @@ -0,0 +1,6 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import ir_model +from . import res_config_settings +from . import rma +from . import website diff --git a/website_rma/models/ir_model.py b/website_rma/models/ir_model.py new file mode 100644 index 00000000..26b26b1c --- /dev/null +++ b/website_rma/models/ir_model.py @@ -0,0 +1,23 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class IrModel(models.Model): + _inherit = "ir.model" + + @api.model + def get_authorized_fields(self, model_name): + """Hack this method to force some rma fields to be authorized in + creating an object from a web form using the website_form module. + + Those fields are readonly in all states except 'draft' state, + but the main method get_authorized_fields interprets them as + readonly always. + """ + res = super().get_authorized_fields(model_name) + if model_name == "rma": + auth_fields = ["product_uom_qty", "product_uom", "partner_id"] + res.update(self.env[model_name].fields_get(auth_fields)) + return res diff --git a/website_rma/models/res_config_settings.py b/website_rma/models/res_config_settings.py new file mode 100644 index 00000000..a59315f2 --- /dev/null +++ b/website_rma/models/res_config_settings.py @@ -0,0 +1,20 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# 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" + + rma_default_team_id = fields.Many2one( + comodel_name="rma.team", + related="website_id.rma_default_team_id", + readonly=False, + ) + rma_default_user_id = fields.Many2one( + comodel_name="res.users", + related="website_id.rma_default_user_id", + readonly=False, + help="Default responsible for new leads created through the " + "'Request RMA' form.", + ) diff --git a/website_rma/models/rma.py b/website_rma/models/rma.py new file mode 100644 index 00000000..d55e638e --- /dev/null +++ b/website_rma/models/rma.py @@ -0,0 +1,17 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import models + + +class Rma(models.Model): + _inherit = "rma" + + def website_form_input_filter(self, request, values): + values.update( + team_id=values.get("team_id") or request.website.rma_default_team_id.id, + user_id=values.get("user_id") or request.website.rma_default_user_id.id, + partner_id=values.get("partner_id") or request.env.user.partner_id.id, + origin="Website form", + ) + return values diff --git a/website_rma/models/website.py b/website_rma/models/website.py new file mode 100644 index 00000000..af61e5c4 --- /dev/null +++ b/website_rma/models/website.py @@ -0,0 +1,21 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Website(models.Model): + _inherit = "website" + + rma_default_team_id = fields.Many2one( + comodel_name="rma.team", + string="Default Team", + help="Default team for new RMAs created through the 'Request RMA' form.", + ) + rma_default_user_id = fields.Many2one( + comodel_name="res.users", + string="Default Responsible", + domain=[("share", "=", False)], + help="Default responsible for new leads created through the " + "'Request RMA' form.", + ) diff --git a/website_rma/readme/CONFIGURE.rst b/website_rma/readme/CONFIGURE.rst new file mode 100644 index 00000000..9444d524 --- /dev/null +++ b/website_rma/readme/CONFIGURE.rst @@ -0,0 +1,7 @@ +To configure this module, you need to: + +#. Go to *Website > Configuration > Settings*. +#. Find 'Return Merchandise Authorization (RMA)' section. +#. Under 'Request RMA Form', select the default 'RMA Team' + and default 'RMA Responsible' for the RMAs created from + the Request RMA page. diff --git a/website_rma/readme/CONTRIBUTORS.rst b/website_rma/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..d4052271 --- /dev/null +++ b/website_rma/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Tecnativa `_: + + * Ernesto Tejeda + * Pedro M. Baeza + * David Vidal diff --git a/website_rma/readme/DESCRIPTION.rst b/website_rma/readme/DESCRIPTION.rst new file mode 100644 index 00000000..0adba71d --- /dev/null +++ b/website_rma/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of rma and website to allow you +to request an RMA through a form in the website. diff --git a/website_rma/readme/USAGE.rst b/website_rma/readme/USAGE.rst new file mode 100644 index 00000000..90e8aebe --- /dev/null +++ b/website_rma/readme/USAGE.rst @@ -0,0 +1,12 @@ +To use this module, you need to: + +#. Go to the website +#. Go to *Your username (at the upper-right corner) > My account* or + access to /my (Example: https://www.odoo.com/my). +#. Under your documents list you can see a text with a link to the page + where you can create an RMA through a form. +#. Click on this link to access to this page or access to + /requestrma (Example: https://www.odoo.com/requestrma). +#. Fill the desired and required fields and click on the button 'Request'. +#. If everything is right, a new RMA document will created, you will be + redirected to a page with a thank you message. diff --git a/website_rma/static/description/icon.png b/website_rma/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/website_rma/static/description/icon.png differ diff --git a/website_rma/static/description/index.html b/website_rma/static/description/index.html new file mode 100644 index 00000000..28060dbf --- /dev/null +++ b/website_rma/static/description/index.html @@ -0,0 +1,456 @@ + + + + + + +Return Merchandise Authorization Management - Website Form + + + +
+

Return Merchandise Authorization Management - Website Form

+ + +

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

+

This module extends the functionality of rma and website to allow you +to request an RMA through a form in the website.

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Website > Configuration > Settings.
  2. +
  3. Find ‘Return Merchandise Authorization (RMA)’ section.
  4. +
  5. Under ‘Request RMA Form’, select the default ‘RMA Team’ +and default ‘RMA Responsible’ for the RMAs created from +the Request RMA page.
  6. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to the website
  2. +
  3. Go to Your username (at the upper-right corner) > My account or +access to <your-url-domain>/my (Example: https://www.odoo.com/my).
  4. +
  5. Under your documents list you can see a text with a link to the page +where you can create an RMA through a form.
  6. +
  7. Click on this link to access to this page or access to +<your-url-domain>/requestrma (Example: https://www.odoo.com/requestrma).
  8. +
  9. Fill the desired and required fields and click on the button ‘Request’.
  10. +
  11. If everything is right, a new RMA document will created, you will be +redirected to a page with a thank you message.
  12. +
+
+
+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Ernesto Tejeda
    • +
    • Pedro M. Baeza
    • +
    • David Vidal
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainer:

+

ernestotejeda

+

This module is part of the OCA/rma project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/website_rma/static/src/js/website_rma.js b/website_rma/static/src/js/website_rma.js new file mode 100644 index 00000000..67a9ac64 --- /dev/null +++ b/website_rma/static/src/js/website_rma.js @@ -0,0 +1,45 @@ +/* Copyright 2020 Tecnativa - Ernesto Tejeda +/* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + */ +odoo.define("website_rma.website_rma", function (require) { + "use strict"; + + require("web.dom_ready"); + + $("#rma_request_form input[name='product_id']").select2({ + width: "100%", + placeholder: "Select a product", + allowClear: true, + selection_data: false, + ajax: { + url: "/website_rma/get_products", + dataType: "json", + data: function (term) { + return { + q: term, + l: 50, + }; + }, + results: function (data) { + var res = []; + _.each(data, function (x) { + res.push({ + id: x.id, + text: x.display_name, + uom_id: x.uom_id[0], + uom_name: x.uom_id[1], + }); + }); + return {results: res}; + }, + }, + }); + // Set UoM on selected onchange + $("#rma_request_form input[name='product_id']").change(function () { + var select2_data = $(this).select2("data"); + var uom_id = select2_data ? select2_data.uom_id : ""; + var uom_name = select2_data ? select2_data.uom_name : ""; + $("input[name='product_uom']").val(uom_id); + $("input[name='product_uom_name']").val(uom_name); + }); +}); diff --git a/website_rma/static/src/js/website_rma.tour.js b/website_rma/static/src/js/website_rma.tour.js new file mode 100644 index 00000000..3382f100 --- /dev/null +++ b/website_rma/static/src/js/website_rma.tour.js @@ -0,0 +1,44 @@ +/* Copyright 2020 Tecnativa - Ernesto Tejeda +/* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + */ +odoo.define("website_rma.tour", function (require) { + "use strict"; + + var tour = require("web_tour.tour"); + var base = require("web_editor.base"); + + tour.register( + "request_rma", + { + test: true, + url: "/my", + wait_for: base.ready(), + }, + [ + { + content: "Click on RMA form page link", + trigger: ".o_portal_my_home a[href='/requestrma']", + }, + { + content: "Fill form", + trigger: "#rma_request_form", + extra_trigger: "#rma_request_form", + run: function () { + $("select[name='operation_id'] > option:eq(1)").prop( + "selected", + true + ); + $("textarea[name='description']").val("RMA test from website form"); + }, + }, + { + content: "Click on request button with the form empty", + trigger: "a.o_website_form_send", + }, + { + content: "Click on RMA form page link", + trigger: "div#request_rma_thanks", + }, + ] + ); +}); diff --git a/website_rma/tests/__init__.py b/website_rma/tests/__init__.py new file mode 100644 index 00000000..b49733c8 --- /dev/null +++ b/website_rma/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_website_rma diff --git a/website_rma/tests/test_website_rma.py b/website_rma/tests/test_website_rma.py new file mode 100644 index 00000000..7ea773b9 --- /dev/null +++ b/website_rma/tests/test_website_rma.py @@ -0,0 +1,45 @@ +# Copyright 2020 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import Form, HttpCase + + +class TestWebsiteRma(HttpCase): + def setUp(self): + super().setUp() + self.product = self.env["product.product"].create( + {"name": "Website rma 1", "type": "product"} + ) + picking_type = self.env["stock.picking.type"].search( + [ + ("code", "=", "outgoing"), + "|", + ("warehouse_id.company_id", "=", self.env.user.company_id.id), + ("warehouse_id", "=", False), + ], + limit=1, + ) + picking_form = Form( + recordp=self.env["stock.picking"].with_context( + default_picking_type_id=picking_type.id + ), + view="stock.view_picking_form", + ) + picking_form.partner_id = self.env.user.partner_id + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product + move.product_uom_qty = 10 + picking = picking_form.save() + picking.action_confirm() + picking.move_lines.quantity_done = 10 + picking.button_validate() + + def test_website_form_request_rma(self): + self.start_tour("/my", "request_rma", login="admin") + rma = self.env["rma"].search( + [ + ("operation_id", "!=", False), + ("description", "=", "RMA test from website form"), + ] + ) + self.assertTrue(bool(rma)) diff --git a/website_rma/views/assets.xml b/website_rma/views/assets.xml new file mode 100644 index 00000000..4f5ec696 --- /dev/null +++ b/website_rma/views/assets.xml @@ -0,0 +1,17 @@ + + + +