mirror of
https://github.com/OCA/rma.git
synced 2025-02-16 17:11:47 +02:00
[MIG] rma: Migration to 18.0
Changes done: - Purge translations - Remove migration scripts - Change translations (_) to self.env._ - Change check_access_rights() method to has_access() method - Change method _product_is_storable() to product_id.is_storable - Set check_company=True to stock.warehouse fields - Change domain of multi-company rules for better performance - Change tree to list in views - Change kanban-box to card - Replace <div class="oe_chatter"> with <chatter /> - Remove unnecessary invisible fields in views - Changes in portal templates - Changes in stock.picking.return - Change copy() methods to make them multi-records - Remove copy() method from stock.picking, context key is not used TT54263
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
{
|
||||
"name": "Return Merchandise Authorization Management",
|
||||
"summary": "Return Merchandise Authorization (RMA)",
|
||||
"version": "17.0.2.0.0",
|
||||
"version": "18.0.1.0.0",
|
||||
"development_status": "Production/Stable",
|
||||
"category": "RMA",
|
||||
"website": "https://github.com/OCA/rma",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# Copyright 2022 Tecnativa - Víctor Martínez
|
||||
# Copyright 2022-2025 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, exceptions, http
|
||||
@@ -17,9 +17,7 @@ class PortalRma(CustomerPortal):
|
||||
if "rma_count" in counters:
|
||||
rma_model = request.env["rma"]
|
||||
rma_count = (
|
||||
rma_model.search_count([])
|
||||
if rma_model.check_access_rights("read", raise_exception=False)
|
||||
else 0
|
||||
rma_model.search_count([]) if rma_model.has_access("read") else 0
|
||||
)
|
||||
values["rma_count"] = rma_count
|
||||
return values
|
||||
@@ -43,7 +41,7 @@ class PortalRma(CustomerPortal):
|
||||
values = self._prepare_portal_layout_values()
|
||||
rma_obj = request.env["rma"]
|
||||
# Avoid error if the user does not have access.
|
||||
if not rma_obj.check_access_rights("read", raise_exception=False):
|
||||
if not rma_obj.has_access("read"):
|
||||
return request.redirect("/my")
|
||||
domain = self._get_filter_domain(kw)
|
||||
searchbar_sortings = {
|
||||
@@ -137,8 +135,7 @@ class PortalRma(CustomerPortal):
|
||||
picking = request.env["stock.picking"].browse([picking_id])
|
||||
picking_sudo = picking.sudo()
|
||||
try:
|
||||
picking.check_access_rights("read")
|
||||
picking.check_access_rule("read")
|
||||
picking.check_access("read")
|
||||
except exceptions.AccessError:
|
||||
if not access_token or not consteq(rma.access_token, access_token):
|
||||
raise
|
||||
|
||||
243
rma/i18n/de.po
243
rma/i18n/de.po
@@ -2301,246 +2301,3 @@ msgid ""
|
||||
msgstr ""
|
||||
"{{object.company_id.name}} Ihre RMA wurde erfolgreich erstellt (Ref {{object."
|
||||
"name or 'n/a' }})"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "SMS-Zustellungsfehler"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are "
|
||||
#~ "company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Diese Werte sind "
|
||||
#~ "unternehmensspezifisch.\" groups=\"base.group_multi_company\"/>"
|
||||
|
||||
#~ msgid "Alias domain"
|
||||
#~ msgstr "Alias domain"
|
||||
|
||||
#~ msgid "Delivered Qty Done"
|
||||
#~ msgstr "gelieferte Menge Erledigt"
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Zuletzt geändert am"
|
||||
|
||||
#~ msgid "Main Attachment"
|
||||
#~ msgstr "Hauptanhang"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Eigentümer"
|
||||
|
||||
#~ msgid "RMA Confirmation Email"
|
||||
#~ msgstr "RMA-Bestätigungs-E-Mail"
|
||||
|
||||
#~ msgid "RMA Manual Finalization"
|
||||
#~ msgstr "Manueller RMA-Abschluss"
|
||||
|
||||
#~ msgid "RMA Receipt Confirmation Email"
|
||||
#~ msgstr "RMA-Empfangsbestätigungs-E-Mail"
|
||||
|
||||
#~ msgid "RMA draft notification Email"
|
||||
#~ msgstr "Benachrichtigungs-E-Mail zum RMA-Entwurf"
|
||||
|
||||
#~ msgid "Remaining delivered qty to done"
|
||||
#~ msgstr "Verbleibende Liefermenge zu erledigen"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The owner of records created upon receiving emails on this alias. If this "
|
||||
#~ "field is not set the system will attempt to find the right owner based on "
|
||||
#~ "the sender (From) address, or will use the Administrator account if no "
|
||||
#~ "system user is found for that address."
|
||||
#~ msgstr ""
|
||||
#~ "Der Eigentümer von Datensätzen, die beim Empfang von E-Mails unter diesem "
|
||||
#~ "Alias erstellt wurden. Wenn dieses Feld nicht gesetzt ist, versucht das "
|
||||
#~ "System, den richtigen Eigentümer anhand der Absenderadresse (Von) zu "
|
||||
#~ "finden, oder verwendet das Administratorkonto, wenn kein Systembenutzer "
|
||||
#~ "für diese Adresse gefunden wird."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "When the RMA is receive, allow to finsish it manually choosing\n"
|
||||
#~ " a finalization reason."
|
||||
#~ msgstr ""
|
||||
#~ "Wenn die RMA eingegangen ist, können Sie sie manuell abschließen, \n"
|
||||
#~ " indem Sie einen Abschlussgrund auswählen."
|
||||
|
||||
#~ msgid "{{(object.name or '')}}"
|
||||
#~ msgstr "{{(object.name or '')}}"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Here is the RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " from\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " .\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any "
|
||||
#~ "question.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"box-sizing:border-box;margin: 0px; padding: "
|
||||
#~ "0px; font-size: 13px;\">\n"
|
||||
#~ " Sehr geehrte/r\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\" data-oe-t-"
|
||||
#~ "inline=\"true\"></t>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\" data-oe-t-"
|
||||
#~ "group-active=\"true\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\" "
|
||||
#~ "data-oe-t-inline=\"true\"></t>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br>\n"
|
||||
#~ " <br>\n"
|
||||
#~ " Hiermit übermitteln wie Ihnen unseren RMA Auftrag\n"
|
||||
#~ " <strong style=\"box-sizing:border-box;font-weight:500;"
|
||||
#~ "\">\n"
|
||||
#~ " <t t-out=\"object.name\" data-oe-t-"
|
||||
#~ "inline=\"true\"></t>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " von\n"
|
||||
#~ " <t t-out=\"object.company_id.name\" data-oe-t-"
|
||||
#~ "inline=\"true\"></t>\n"
|
||||
#~ " .\n"
|
||||
#~ " <br>\n"
|
||||
#~ " <br>\n"
|
||||
#~ " Zögern Sie nicht uns zu kontaktieren.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " The products for your RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " from\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " have been received in our warehouse.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any "
|
||||
#~ "question.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Sehr geehrte/r\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ "Die Produkte für ihren RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " von\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ "wurden in unserem Lager erfolgreich entgegen genommen.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Zögern Sie nicht uns bei weiteren Fragen erneut zu "
|
||||
#~ "kontaktieren\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " You've succesfully placed your RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " on\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " . Our team will check it and will validate it as soon "
|
||||
#~ "as possible.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any "
|
||||
#~ "question.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"box-sizing:border-box;margin: 0px; padding: "
|
||||
#~ "0px; font-size: 13px;\">\n"
|
||||
#~ " Sehr geehrte/r\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\" data-oe-t-"
|
||||
#~ "inline=\"true\"></t>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\" data-oe-t-"
|
||||
#~ "group-active=\"true\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\" "
|
||||
#~ "data-oe-t-inline=\"true\"></t>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br>\n"
|
||||
#~ " <br>\n"
|
||||
#~ " Sie haben erfolgreich ihren Reklamationsauftrag "
|
||||
#~ "eingebracht.\n"
|
||||
#~ " <strong style=\"box-sizing:border-box;font-weight:500;"
|
||||
#~ "\">\n"
|
||||
#~ " <t t-out=\"object.name\" data-oe-t-"
|
||||
#~ "inline=\"true\"></t>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " für\n"
|
||||
#~ " <t t-out=\"object.company_id.name\" data-oe-t-"
|
||||
#~ "inline=\"true\"></t>\n"
|
||||
#~ " . Unser Team wird die Anfrage bearbeiten uns sich so "
|
||||
#~ "bald wie möglich bei Ihnen melden.\n"
|
||||
#~ " <br>\n"
|
||||
#~ " <br>\n"
|
||||
#~ "Zögern Sie nicht uns bei weiteren Fragen erneut zu kontaktieren\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Number of messages which requires an action"
|
||||
#~ msgstr "Anzahl der Nachrichten, die eine Aktion erfordern"
|
||||
|
||||
#~ msgid "Number of unread messages"
|
||||
#~ msgstr "Anzahl der ungelesenen Nachrichten"
|
||||
|
||||
#~ msgid "Unread Messages"
|
||||
#~ msgstr "ungelesene Nachrichten"
|
||||
|
||||
#~ msgid "Unread Messages Counter"
|
||||
#~ msgstr "Zähler für ungelesene Nachrichten"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Benutzer"
|
||||
|
||||
263
rma/i18n/es.po
263
rma/i18n/es.po
@@ -2360,266 +2360,3 @@ msgid ""
|
||||
msgstr ""
|
||||
"{{object.company_id.name}} Su RMA se ha creado con éxito (Ref {{object.name "
|
||||
"or 'n/a' }})"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "Error de Envío de Mensaje"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are "
|
||||
#~ "company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Valores específicos por "
|
||||
#~ "compañía.\" groups=\"base.group_multi_company\"/>"
|
||||
|
||||
#~ msgid "Alias domain"
|
||||
#~ msgstr "Seudónimo del dominio"
|
||||
|
||||
#~ msgid "Delivered Qty Done"
|
||||
#~ msgstr "Ctd. entregada realizada"
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Última modificación en"
|
||||
|
||||
#~ msgid "Main Attachment"
|
||||
#~ msgstr "Adjuntos principales"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Propietario"
|
||||
|
||||
#~ msgid "RMA Confirmation Email"
|
||||
#~ msgstr "Correo de confirmación de RMA"
|
||||
|
||||
#~ msgid "RMA Manual Finalization"
|
||||
#~ msgstr "Finalización del Manual RMA"
|
||||
|
||||
#~ msgid "RMA Receipt Confirmation Email"
|
||||
#~ msgstr "Correo de confirmación de recepción de RMA"
|
||||
|
||||
#~ msgid "RMA draft notification Email"
|
||||
#~ msgstr "Correo de notificación de borrador de RMA"
|
||||
|
||||
#~ msgid "Remaining delivered qty to done"
|
||||
#~ msgstr "Ctd. entregada restante por realizar"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The owner of records created upon receiving emails on this alias. If this "
|
||||
#~ "field is not set the system will attempt to find the right owner based on "
|
||||
#~ "the sender (From) address, or will use the Administrator account if no "
|
||||
#~ "system user is found for that address."
|
||||
#~ msgstr ""
|
||||
#~ "El propietario de los registros creados al recibir correos electrónicos "
|
||||
#~ "en este seudónimo. Si el campo no está establecido, el sistema tratará de "
|
||||
#~ "encontrar el propietario adecuado basado en la dirección del emisor (De), "
|
||||
#~ "o usará la cuenta de administrador si no se encuentra un usuario para esa "
|
||||
#~ "dirección."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "When the RMA is receive, allow to finsish it manually choosing\n"
|
||||
#~ " a finalization reason."
|
||||
#~ msgstr ""
|
||||
#~ "Cuando se recibe el RMA, permite finalizarlo manualmente eligiendo\n"
|
||||
#~ " un motivo de finalización."
|
||||
|
||||
#~ msgid "{{(object.name or '')}}"
|
||||
#~ msgstr "{{(object.name or '')}}"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Here is the RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " from\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " .\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any "
|
||||
#~ "question.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Estimado/a\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Aquí tiene el RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " desde\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " .\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " No dude en ponerse en contacto con nosotros si tiene "
|
||||
#~ "alguna pregunta.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " The products for your RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " from\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " have been received in our warehouse.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any "
|
||||
#~ "question.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Estimado/a\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Los productos de su RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " desde\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " han sido recibidos en nuestro almacén.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Póngase en contacto con nosotros para cualquier duda "
|
||||
#~ "al respecto.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " You've succesfully placed your RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " on\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " . Our team will check it and will validate it as soon "
|
||||
#~ "as possible.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any "
|
||||
#~ "question.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Estimado/a\n"
|
||||
#~ " <t t-out=\"object.partner_id.name\"/>\n"
|
||||
#~ " <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
#~ " <t t-out=\"object.partner_id.parent_id.name\"/>\n"
|
||||
#~ " </t>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Ha solicitado con éxito su RMA\n"
|
||||
#~ " <strong>\n"
|
||||
#~ " <t t-out=\"object.name\"/>\n"
|
||||
#~ " </strong>\n"
|
||||
#~ " en\n"
|
||||
#~ " <t t-out=\"object.company_id.name\"/>\n"
|
||||
#~ " . Nuestro equipo la comprobará y validará tan pronto "
|
||||
#~ "como sea posible.\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " <br/>\n"
|
||||
#~ " Póngase en contacto con nosotros para cualquier duda "
|
||||
#~ "al respecto.\n"
|
||||
#~ " </p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelled</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/>Cancelado</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparation</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/>Preparación</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Shipped</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Enviado</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Partially Available</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/>Disponible parcialmente</span>"
|
||||
|
||||
#~ msgid "Number of messages which requires an action"
|
||||
#~ msgstr "Número de mensajes que requieren una acción"
|
||||
|
||||
#~ msgid "Number of unread messages"
|
||||
#~ msgstr "Número de mensajes no leidos"
|
||||
|
||||
#~ msgid "Unread Messages"
|
||||
#~ msgstr "Mensajes por leer"
|
||||
|
||||
#~ msgid "Unread Messages Counter"
|
||||
#~ msgstr "Contador de mensajes sin leer"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Usuarios"
|
||||
|
||||
#~ msgid "Followers (Channels)"
|
||||
#~ msgstr "Seguidores (Canales)"
|
||||
|
||||
@@ -2341,48 +2341,3 @@ msgid ""
|
||||
msgstr ""
|
||||
"{{object.company_id.name}} Votre RMA a été crée avec succès(Ref {{object."
|
||||
"name or 'n/a' }})"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are "
|
||||
#~ "company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Les valeurs définies ici "
|
||||
#~ "sont propres à l'entreprise.\" groups=\"base.group_multi_company\"/>"
|
||||
|
||||
#~ msgid "Alias domain"
|
||||
#~ msgstr "Domaine de l'alias"
|
||||
|
||||
#~ msgid "Delivered Qty Done"
|
||||
#~ msgstr "Quantité livrée Terminé"
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Dernière Modification le"
|
||||
|
||||
#~ msgid "Main Attachment"
|
||||
#~ msgstr "Pièce jointe principale"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Propriétaire"
|
||||
|
||||
#~ msgid "RMA Confirmation Email"
|
||||
#~ msgstr "Email de confirmation RMA"
|
||||
|
||||
#~ msgid "RMA Manual Finalization"
|
||||
#~ msgstr "Clôture manuelle RMA"
|
||||
|
||||
#~ msgid "RMA Receipt Confirmation Email"
|
||||
#~ msgstr "Email de confirmation de réception RMA"
|
||||
|
||||
#~ msgid "RMA draft notification Email"
|
||||
#~ msgstr "Email de notification brouillon RMA"
|
||||
|
||||
#~ msgid "Remaining delivered qty to done"
|
||||
#~ msgstr "Qté restante à livrer avant de terminer"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "When the RMA is receive, allow to finsish it manually choosing\n"
|
||||
#~ " a finalization reason."
|
||||
#~ msgstr ""
|
||||
#~ "Quand une RMA est reçue, permet de la terminer manuellement en "
|
||||
#~ "sélectionnant\n"
|
||||
#~ " comme motif de clôture."
|
||||
|
||||
294
rma/i18n/it.po
294
rma/i18n/it.po
@@ -2351,297 +2351,3 @@ msgid ""
|
||||
msgstr ""
|
||||
"{{object.company_id.name}} La vostra RMA è stata creata con successo (rif. "
|
||||
"{{object.name or 'n/a' }})"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "Errore consegna SMS"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are "
|
||||
#~ "company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"I valori impostati qui "
|
||||
#~ "sono specifici per azienda.\" groups=\"base.group_multi_company\"/>"
|
||||
|
||||
#~ msgid "Alias domain"
|
||||
#~ msgstr "Dominio alias"
|
||||
|
||||
#~ msgid "Delivered Qty Done"
|
||||
#~ msgstr "Quantità consegnata fatta"
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Ultima modifica il"
|
||||
|
||||
#~ msgid "Main Attachment"
|
||||
#~ msgstr "Allegato principale"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Proprietario"
|
||||
|
||||
#~ msgid "RMA Confirmation Email"
|
||||
#~ msgstr "Email di Conferma RMA"
|
||||
|
||||
#~ msgid "RMA Manual Finalization"
|
||||
#~ msgstr "Chiusura manuale RMA"
|
||||
|
||||
#~ msgid "RMA Receipt Confirmation Email"
|
||||
#~ msgstr "E-mail di conferma ricevuta RMA"
|
||||
|
||||
#~ msgid "RMA draft notification Email"
|
||||
#~ msgstr "E-mail di notifica bozza RMA"
|
||||
|
||||
#~ msgid "Remaining delivered qty to done"
|
||||
#~ msgstr "Quantità consegnata rimanente da fare"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The owner of records created upon receiving emails on this alias. If this "
|
||||
#~ "field is not set the system will attempt to find the right owner based on "
|
||||
#~ "the sender (From) address, or will use the Administrator account if no "
|
||||
#~ "system user is found for that address."
|
||||
#~ msgstr ""
|
||||
#~ "Il proprietario dei record creati dopo aver ricevuto email con questo "
|
||||
#~ "alias. Se questo campo non è impostato il sistema tenterà di trovare il "
|
||||
#~ "proprietario corretto in base all'indirizzo del mittente (Da) oppure "
|
||||
#~ "utilizzerà l'account amministratore se non viene trovato alcun utente di "
|
||||
#~ "sistema per quell'indirizzo."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "When the RMA is receive, allow to finsish it manually choosing\n"
|
||||
#~ " a finalization reason."
|
||||
#~ msgstr ""
|
||||
#~ "Quando si riceve l'RMA, permetti di chiuderlo manualmente scegliendo\n"
|
||||
#~ " un motivo per la chiusura."
|
||||
|
||||
#~ msgid "{{(object.name or '')}}"
|
||||
#~ msgstr "{{(object.name or '')}}"
|
||||
|
||||
#~ msgid "${(object.name or '')}"
|
||||
#~ msgstr "${(object.name or '')}"
|
||||
|
||||
#~ msgid "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
|
||||
#~ msgstr "${object.company_id.name} RMA (Rif ${object.name or 'n/a' })"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "${object.company_id.name} RMA (Ref ${object.name or 'n/a' }) products "
|
||||
#~ "received"
|
||||
#~ msgstr ""
|
||||
#~ "${object.company_id.name} RMA (Ref ${object.name or 'n/a' }) prodotti "
|
||||
#~ "ricevuti"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "${object.company_id.name} Your RMA has been succesfully created (Ref "
|
||||
#~ "${object.name or 'n/a' })"
|
||||
#~ msgstr ""
|
||||
#~ "${object.company_id.name} Il tuo RMA è stato creato correttamente (Ref "
|
||||
#~ "${object.name or 'n/a' })"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "<b>E-mail subject:</b> %s<br/><br/><b>E-mail body:</b><br/>%s"
|
||||
#~ msgstr "<b>Soggetto E-mail:</b> %s<br/><br/><b>Corpo E-mail:</b><br/>%s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Here is the RMA <strong>${object.name}</strong> from ${object."
|
||||
#~ "company_id.name}.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any question.\n"
|
||||
#~ "</p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Gentile ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Di seguito l'RMA <strong>${object.name}</strong> da ${object."
|
||||
#~ "company_id.name}.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Non esiti a contattarci per qualsiasi domanda.\n"
|
||||
#~ "</p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ "<p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
#~ " Dear ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " The products for your RMA <strong>${object.name}</strong>\n"
|
||||
#~ " from ${object.company_id.name} have been received in our warehouse.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any question.\n"
|
||||
#~ "</p>\n"
|
||||
#~ "</div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ "<p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
#~ " Gentile ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " I prodotti del suo RMA <strong>${object.name}</strong>\n"
|
||||
#~ " da ${object.company_id.name} sono stati ricevuti nel nostro "
|
||||
#~ "magazzino.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Non esiti a contattarci per qualsiasi domanda.\n"
|
||||
#~ "</p>\n"
|
||||
#~ "</div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ "<p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
#~ " Dear ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " You've succesfully placed your RMA <strong>${object.name}</strong>\n"
|
||||
#~ " on ${object.company_id.name}. Our team will check it and will "
|
||||
#~ "validate\n"
|
||||
#~ " it as soon as possible.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any question.\n"
|
||||
#~ "</p>\n"
|
||||
#~ "</div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ "<p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
#~ " Gentile ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " ha inserito con successo il suo RMA <strong>${object.name}</strong>\n"
|
||||
#~ " per ${object.company_id.name}. Il nostro team lo verificherà \n"
|
||||
#~ " il prima possibile.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Non esiti a contattarci per qualsiasi domanda.\n"
|
||||
#~ "</p>\n"
|
||||
#~ "</div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelled</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancellato</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparation</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparazione</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Shipped</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Spedito</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Partially Available</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Parzialmente disponibile</span>"
|
||||
|
||||
#~ msgid "Delivered qty"
|
||||
#~ msgstr "Quantità Consegnata"
|
||||
|
||||
#~ msgid "Delivered qty done"
|
||||
#~ msgstr "Quantità consegnata fatta"
|
||||
|
||||
#~ msgid "Followers (Channels)"
|
||||
#~ msgstr "Seguito da (canali)"
|
||||
|
||||
#~ msgid "Number of messages which requires an action"
|
||||
#~ msgstr "Numero di messaggi che richiedono un'azione"
|
||||
|
||||
#~ msgid "Number of unread messages"
|
||||
#~ msgstr "Numero di messaggi non letti"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Quantity to extract cannot be greater than remaining delivery quantity "
|
||||
#~ "(%s %s)"
|
||||
#~ msgstr ""
|
||||
#~ "La quantità da prelevare non può essere superiore alla quantità di "
|
||||
#~ "consegna rimanente (%s %s)"
|
||||
|
||||
#~ msgid "Refund line"
|
||||
#~ msgstr "Riga rimborso"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement: Move <a href=\"#\" data-oe-model=\"stock.move\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> (Picking <a href=\"#\" data-oe-model=\"stock.picking\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a>) has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Sostituzione: Il trasferimento <a href=\"#\" data-oe-model=\"stock.move\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a> (Picking <a href=\"#\" data-oe-model=\"stock."
|
||||
#~ "picking\" data-oe-id=\"%d\">%s</a>) è stato creato."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement:<br/>Product <a href=\"#\" data-oe-model=\"product.product\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a><br/>Quantity %f %s<br/>This replacement did not "
|
||||
#~ "create a new move, but one of the previously created moves was updated "
|
||||
#~ "with this data."
|
||||
#~ msgstr ""
|
||||
#~ "Sostituzione:<br/>Il prodotto<a href=\"#\" data-oe-model=\"product."
|
||||
#~ "product\" data-oe-id=\"%d\">%s</a><br/>Quantità%f %s<br/>Questo prodotto "
|
||||
#~ "non ha generato un nuovo trasferimento, ma uno dei trasferimenti già "
|
||||
#~ "creati è stato aggiornato con questi dati."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Return: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Reso: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id=\"%d\">%s</"
|
||||
#~ "a> è stato creato."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Split: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> has "
|
||||
#~ "been created."
|
||||
#~ msgstr ""
|
||||
#~ "Divisione: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> è "
|
||||
#~ "stato creato."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "The quantity done for the product '%s' must be equal to its initial "
|
||||
#~ "demand because the stock move is linked to an RMA (%s)."
|
||||
#~ msgstr ""
|
||||
#~ "La quantità completata per il prodotto '%s' deve essere uguale alla "
|
||||
#~ "quantità iniziale perchè il movimento è legato ad un RMA (%s)."
|
||||
|
||||
#~ msgid "Unread Messages"
|
||||
#~ msgstr "Messaggi non letti"
|
||||
|
||||
#~ msgid "Unread Messages Counter"
|
||||
#~ msgstr "Numero messaggi non letti"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Utenti"
|
||||
|
||||
152
rma/i18n/pt.po
152
rma/i18n/pt.po
@@ -2205,155 +2205,3 @@ msgid ""
|
||||
"{{object.company_id.name}} Your RMA has been succesfully created (Ref "
|
||||
"{{object.name or 'n/a' }})"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are "
|
||||
#~ "company-specific.\" groups=\"base.group_multi_company\"/>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"fa fa-lg fa-building-o\" title=\"Estes valores são "
|
||||
#~ "específicos por empresa.\" groups=\"base.group_multi_company\"/>"
|
||||
|
||||
#~ msgid "Alias domain"
|
||||
#~ msgstr "Domínio do Alias"
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Última Modificação Em"
|
||||
|
||||
#~ msgid "Main Attachment"
|
||||
#~ msgstr "Anexo Principal"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Proprietário"
|
||||
|
||||
#~ msgid "RMA Confirmation Email"
|
||||
#~ msgstr "E-mail de Confirmação da RMA"
|
||||
|
||||
#~ msgid "Remaining delivered qty to done"
|
||||
#~ msgstr "Qtd. restante entregue a fazer"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The owner of records created upon receiving emails on this alias. If this "
|
||||
#~ "field is not set the system will attempt to find the right owner based on "
|
||||
#~ "the sender (From) address, or will use the Administrator account if no "
|
||||
#~ "system user is found for that address."
|
||||
#~ msgstr ""
|
||||
#~ "O proprietário dos registos criados ao receber emails nesse alias. Se "
|
||||
#~ "esse campo não estiver definido, o sistema tentará encontrar o "
|
||||
#~ "proprietário certo com base no endereço do remetente (De) ou usará a "
|
||||
#~ "conta de Administrador se nenhum utilizador do sistema for encontrado "
|
||||
#~ "para esse endereço."
|
||||
|
||||
#~ msgid "${(object.name or '')}"
|
||||
#~ msgstr "${(object.name or '')}"
|
||||
|
||||
#~ msgid "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
|
||||
#~ msgstr "${object.company_id.name} RMA (Refª ${object.name or 'n/a' })"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelled</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelado</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparation</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparação</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Shipped</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Expedido</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Partially Available</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Parcialmente Disponível</span>"
|
||||
|
||||
#~ msgid "Delivered qty"
|
||||
#~ msgstr "Quantidade Enviada"
|
||||
|
||||
#~ msgid "Delivered qty done"
|
||||
#~ msgstr "Quantidade Envidada Concluída"
|
||||
|
||||
#~ msgid "Followers (Channels)"
|
||||
#~ msgstr "Seguidores (Canais)"
|
||||
|
||||
#~ msgid "Number of messages which requires an action"
|
||||
#~ msgstr "Número de Mensagens que Requerem a sua Atenção"
|
||||
|
||||
#~ msgid "Number of unread messages"
|
||||
#~ msgstr "Número de Mensagens Não Lidas"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Quantity to extract cannot be greater than remaining delivery quantity "
|
||||
#~ "(%s %s)"
|
||||
#~ msgstr ""
|
||||
#~ "A quantidade a extrair não pode ser maior do que a quantidade restante da "
|
||||
#~ "entrega (%s %s)"
|
||||
|
||||
#~ msgid "Refund line"
|
||||
#~ msgstr "Linha de reembolso"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement: Move <a href=\"#\" data-oe-model=\"stock.move\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> (Picking <a href=\"#\" data-oe-model=\"stock.picking\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a>) has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Substituição: Movimentação <a href=\"#\" data-oe-model=\"stock.move\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a> (A Coleta <a href=\"#\" data-oe-model=\"stock."
|
||||
#~ "picking\" data-oe-id=\"%d\">%s</a> foi criada."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement:<br/>Product <a href=\"#\" data-oe-model=\"product.product\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a><br/>Quantity %f %s<br/>This replacement did not "
|
||||
#~ "create a new move, but one of the previously created moves was updated "
|
||||
#~ "with this data."
|
||||
#~ msgstr ""
|
||||
#~ "Substituição:<br/> Produto <a href=\"#\" data-oe-model=\"product."
|
||||
#~ "product\" data-oe-id=\"%d\">%s</a><br/> Quantidade %f%s<br/> Essa "
|
||||
#~ "substituição não criou uma nova movimentação, mas uma das movimentos "
|
||||
#~ "criadas anteriormente foi atualizada com esses dados."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Return: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Devolução: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> foi criada."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Split: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> has "
|
||||
#~ "been created."
|
||||
#~ msgstr ""
|
||||
#~ "Divisão: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> foi "
|
||||
#~ "criada."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "The quantity done for the product '%s' must be equal to its initial "
|
||||
#~ "demand because the stock move is linked to an RMA (%s)."
|
||||
#~ msgstr ""
|
||||
#~ "A quantidade realizada para o produto '%s' deve ser igual à sua demanda "
|
||||
#~ "inicial, porque a movimentação do stock está vinculada a uma RMA (%s)."
|
||||
|
||||
#~ msgid "Unread Messages"
|
||||
#~ msgstr "Mensagens não lidas"
|
||||
|
||||
#~ msgid "Unread Messages Counter"
|
||||
#~ msgstr "Contador de Mensagens Não Lidas"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Utilizadores"
|
||||
|
||||
@@ -2202,145 +2202,3 @@ msgid ""
|
||||
"{{object.company_id.name}} Your RMA has been succesfully created (Ref "
|
||||
"{{object.name or 'n/a' }})"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Alias domain"
|
||||
#~ msgstr "Domínio do Alias"
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Última Modificação Feita em"
|
||||
|
||||
#~ msgid "Main Attachment"
|
||||
#~ msgstr "Anexo Principal"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Proprietário"
|
||||
|
||||
#~ msgid "Remaining delivered qty to done"
|
||||
#~ msgstr "Quantidade restante entregue a concluir"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The owner of records created upon receiving emails on this alias. If this "
|
||||
#~ "field is not set the system will attempt to find the right owner based on "
|
||||
#~ "the sender (From) address, or will use the Administrator account if no "
|
||||
#~ "system user is found for that address."
|
||||
#~ msgstr ""
|
||||
#~ "O proprietário dos registros criados ao receber emails nesse alias. Se "
|
||||
#~ "esse campo não estiver definido, o sistema tentará encontrar o "
|
||||
#~ "proprietário certo com base no endereço do remetente (De) ou usará a "
|
||||
#~ "conta de Administrador se nenhum usuário do sistema for encontrado para "
|
||||
#~ "esse endereço."
|
||||
|
||||
#~ msgid "${(object.name or '')}"
|
||||
#~ msgstr "${(object.name or '')}"
|
||||
|
||||
#~ msgid "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
|
||||
#~ msgstr "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelled</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelado</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparation</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparo</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Shipped</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Embarcado</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Partially Available</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Parcialmente Disponível</span>"
|
||||
|
||||
#~ msgid "Delivered qty"
|
||||
#~ msgstr "Quantidade Enviada"
|
||||
|
||||
#~ msgid "Delivered qty done"
|
||||
#~ msgstr "Quantidade Envidada Concluída"
|
||||
|
||||
#~ msgid "Followers (Channels)"
|
||||
#~ msgstr "Seguidores (Canais)"
|
||||
|
||||
#~ msgid "Number of messages which requires an action"
|
||||
#~ msgstr "Número de Mensagens que Requerem sua Atenção"
|
||||
|
||||
#~ msgid "Number of unread messages"
|
||||
#~ msgstr "Número de Mensagens Não Lidas"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Quantity to extract cannot be greater than remaining delivery quantity "
|
||||
#~ "(%s %s)"
|
||||
#~ msgstr ""
|
||||
#~ "A quantidade a extrair não pode ser maior que a quantidade de entrega "
|
||||
#~ "restante (%s %s)"
|
||||
|
||||
#~ msgid "Refund line"
|
||||
#~ msgstr "Linha de Restituição"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement: Move <a href=\"#\" data-oe-model=\"stock.move\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> (Picking <a href=\"#\" data-oe-model=\"stock.picking\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a>) has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Substituição: Movimentação <a href=\"#\" data-oe-model=\"stock.move\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a> (A Coleta <a href=\"#\" data-oe-model=\"stock."
|
||||
#~ "picking\" data-oe-id=\"%d\">%s</a> foi criada."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement:<br/>Product <a href=\"#\" data-oe-model=\"product.product\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a><br/>Quantity %f %s<br/>This replacement did not "
|
||||
#~ "create a new move, but one of the previously created moves was updated "
|
||||
#~ "with this data."
|
||||
#~ msgstr ""
|
||||
#~ "Substituição:<br/> Produto <a href=\"#\" data-oe-model=\"product."
|
||||
#~ "product\" data-oe-id=\"%d\">%s</a><br/> Quantidade %f%s<br/> Essa "
|
||||
#~ "substituição não criou uma nova movimentação, mas uma das movimentos "
|
||||
#~ "criadas anteriormente foi atualizada com esses dados."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Return: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Retorno: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> foi criado."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Split: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> has "
|
||||
#~ "been created."
|
||||
#~ msgstr ""
|
||||
#~ "Divisão: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> foi "
|
||||
#~ "criada."
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "The quantity done for the product '%s' must be equal to its initial "
|
||||
#~ "demand because the stock move is linked to an RMA (%s)."
|
||||
#~ msgstr ""
|
||||
#~ "A quantidade realizada para o produto '%s' deve ser igual à sua demanda "
|
||||
#~ "inicial, porque a movimentação do estoque está vinculada a uma RMA (%s)."
|
||||
|
||||
#~ msgid "Unread Messages"
|
||||
#~ msgstr "Mensagens não lidas"
|
||||
|
||||
#~ msgid "Unread Messages Counter"
|
||||
#~ msgstr "Contador de Mensagens Não Lidas"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Usuários"
|
||||
|
||||
119
rma/i18n/ro.po
119
rma/i18n/ro.po
@@ -2188,122 +2188,3 @@ msgid ""
|
||||
"{{object.company_id.name}} Your RMA has been succesfully created (Ref "
|
||||
"{{object.name or 'n/a' }})"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Last Modified on"
|
||||
#~ msgstr "Ultima modificare în"
|
||||
|
||||
#~ msgid "Owner"
|
||||
#~ msgstr "Proprietar"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "The owner of records created upon receiving emails on this alias. If this "
|
||||
#~ "field is not set the system will attempt to find the right owner based on "
|
||||
#~ "the sender (From) address, or will use the Administrator account if no "
|
||||
#~ "system user is found for that address."
|
||||
#~ msgstr ""
|
||||
#~ "Proprietarul înregistrărilor create la primirea e-mailurilor de la acest "
|
||||
#~ "alias. Dacă acest câmp nu este setat, sistemul va încerca să găsească "
|
||||
#~ "proprietarul potrivit în funcție de adresa expeditorului (De la) sau va "
|
||||
#~ "utiliza contul de administrator dacă nu este găsit niciun utilizator de "
|
||||
#~ "sistem pentru acea adresă."
|
||||
|
||||
#~ msgid "${(object.name or '')}"
|
||||
#~ msgstr "${(object.name or '')}"
|
||||
|
||||
#~ msgid "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
|
||||
#~ msgstr "${object.company_id.name} Retur (Ref ${object.name or 'n/a' })"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "<b>E-mail subject:</b> %s<br/><br/><b>E-mail body:</b><br/>%s"
|
||||
#~ msgstr "<b>Subiect e-mail:</b> %s<br/><br/><b>Conținut e-mail:</b><br/>%s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dear ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Here is the RMA <strong>${object.name}</strong> from ${object."
|
||||
#~ "company_id.name}.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Do not hesitate to contact us if you have any question.\n"
|
||||
#~ "</p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
#~ msgstr ""
|
||||
#~ "<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
#~ " <p style=\"margin: 0px; padding: 0px; font-size: 13px;"
|
||||
#~ "\">\n"
|
||||
#~ " Dragă ${object.partner_id.name}\n"
|
||||
#~ " % if object.partner_id.parent_id:\n"
|
||||
#~ " (${object.partner_id.parent_id.name})\n"
|
||||
#~ " % endif\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Aici este formularul de retur <strong>${object.name}</strong> de la "
|
||||
#~ "${object.company_id.name}.\n"
|
||||
#~ " <br/><br/>\n"
|
||||
#~ " Nu ezitați să ne contactați dacă aveți întrebări.\n"
|
||||
#~ "</p>\n"
|
||||
#~ " </div>\n"
|
||||
#~ " "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Cancelled</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-times\"/> Anulat</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Preparation</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-"
|
||||
#~ "clock-o\"/> Pregătire</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Shipped</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-truck\"/> Expediat</span>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Partially Available</span>"
|
||||
#~ msgstr ""
|
||||
#~ "<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw "
|
||||
#~ "fa-clock-o\"/> Disponibil parțial</span>"
|
||||
|
||||
#~ msgid "Delivered qty"
|
||||
#~ msgstr "Cantitate livrată"
|
||||
|
||||
#~ msgid "Delivered qty done"
|
||||
#~ msgstr "Cantitate livrată efectivă"
|
||||
|
||||
#~ msgid "Followers (Channels)"
|
||||
#~ msgstr "Urmăritori (Canale)"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Quantity to extract cannot be greater than remaining delivery quantity "
|
||||
#~ "(%s %s)"
|
||||
#~ msgstr ""
|
||||
#~ "Cantitatea de extras nu poate fi mai mare decât cantitatea de livrare "
|
||||
#~ "rămasă (%s %s)"
|
||||
|
||||
#~ msgid "Refund line"
|
||||
#~ msgstr "Linie ramburs"
|
||||
|
||||
#, python-format
|
||||
#~ msgid ""
|
||||
#~ "Replacement: Move <a href=\"#\" data-oe-model=\"stock.move\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> (Picking <a href=\"#\" data-oe-model=\"stock.picking\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a>) has been created."
|
||||
#~ msgstr ""
|
||||
#~ "Înlocuire: Mișcarea <a href=\"#\" data-oe-model=\"stock.move\" data-oe-"
|
||||
#~ "id=\"%d\">%s</a> (Transfer <a href=\"#\" data-oe-model=\"stock.picking\" "
|
||||
#~ "data-oe-id=\"%d\">%s</a>) a fost creat."
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
# Copyright 2024 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from openupgradelib import openupgrade
|
||||
|
||||
|
||||
@openupgrade.migrate()
|
||||
def migrate(env, version):
|
||||
"""Similar behavior to create_rma_routes of post_init_hook."""
|
||||
warehouses = env["stock.warehouse"].search([])
|
||||
warehouses = warehouses.with_context(rma_post_init_hook=True)
|
||||
for wh in warehouses:
|
||||
if not wh.rma_in_type_id or not wh.rma_out_type_id:
|
||||
data = wh._create_or_update_sequences_and_picking_types()
|
||||
wh.write(data)
|
||||
route_vals = wh._create_or_update_route()
|
||||
wh.write(route_vals)
|
||||
@@ -1,7 +1,7 @@
|
||||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo import fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tools import float_compare
|
||||
|
||||
@@ -33,7 +33,7 @@ class AccountMove(models.Model):
|
||||
"""
|
||||
if self._check_rma_invoice_lines_qty():
|
||||
raise ValidationError(
|
||||
_(
|
||||
self.env._(
|
||||
"There is at least one invoice lines whose quantity is "
|
||||
"less than the quantity specified in its linked RMA."
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
class ResCompany(models.Model):
|
||||
@@ -79,7 +79,7 @@ class ResCompany(models.Model):
|
||||
.sudo()
|
||||
.create(
|
||||
{
|
||||
"name": _("RMA Code"),
|
||||
"name": self.env._("RMA Code"),
|
||||
"prefix": "RMA",
|
||||
"code": "rma",
|
||||
"padding": 4,
|
||||
|
||||
@@ -21,6 +21,7 @@ class ResConfigSettings(models.TransientModel):
|
||||
)
|
||||
rma_mail_confirmation_template_id = fields.Many2one(
|
||||
related="company_id.rma_mail_confirmation_template_id",
|
||||
domain="[('model', '=', 'rma')]",
|
||||
readonly=False,
|
||||
)
|
||||
send_rma_receipt_confirmation = fields.Boolean(
|
||||
@@ -29,6 +30,7 @@ class ResConfigSettings(models.TransientModel):
|
||||
)
|
||||
rma_mail_receipt_confirmation_template_id = fields.Many2one(
|
||||
related="company_id.rma_mail_receipt_confirmation_template_id",
|
||||
domain="[('model', '=', 'rma')]",
|
||||
readonly=False,
|
||||
)
|
||||
send_rma_draft_confirmation = fields.Boolean(
|
||||
@@ -37,5 +39,6 @@ class ResConfigSettings(models.TransientModel):
|
||||
)
|
||||
rma_mail_draft_confirmation_template_id = fields.Many2one(
|
||||
related="company_id.rma_mail_draft_confirmation_template_id",
|
||||
domain="[('model', '=', 'rma')]",
|
||||
readonly=False,
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@ from itertools import groupby
|
||||
|
||||
from markupsafe import Markup
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import AccessError, ValidationError
|
||||
from odoo.tools import html2plaintext
|
||||
|
||||
@@ -40,7 +40,7 @@ class Rma(models.Model):
|
||||
name = fields.Char(
|
||||
index=True,
|
||||
copy=False,
|
||||
default=lambda self: _("New"),
|
||||
default=lambda self: self.env._("New"),
|
||||
)
|
||||
origin = fields.Char(
|
||||
string="Source Document",
|
||||
@@ -314,9 +314,7 @@ class Rma(models.Model):
|
||||
for r in self:
|
||||
r.remaining_qty = r.product_uom_qty - r.delivered_qty
|
||||
|
||||
@api.depends(
|
||||
"state",
|
||||
)
|
||||
@api.depends("state")
|
||||
def _compute_can_be_refunded(self):
|
||||
"""Compute 'can_be_refunded'. This field controls the visibility
|
||||
of 'Refund' button in the rma form view and determinates if
|
||||
@@ -497,7 +495,7 @@ class Rma(models.Model):
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
if vals.get("name", _("New")) == _("New"):
|
||||
if vals.get("name", self.env._("New")) == self.env._("New"):
|
||||
ir_sequence = self.env["ir.sequence"]
|
||||
if "company_id" in vals:
|
||||
ir_sequence = ir_sequence.with_company(vals["company_id"])
|
||||
@@ -514,18 +512,19 @@ class Rma(models.Model):
|
||||
return rmas
|
||||
|
||||
def copy(self, default=None):
|
||||
team = super().copy(default)
|
||||
for follower in self.message_follower_ids:
|
||||
team.message_subscribe(
|
||||
partner_ids=follower.partner_id.ids,
|
||||
subtype_ids=follower.subtype_ids.ids,
|
||||
)
|
||||
return team
|
||||
new_rmas = super().copy(default)
|
||||
for old_rma, new_rma in zip(self, new_rmas, strict=False):
|
||||
for follower in old_rma.message_follower_ids:
|
||||
new_rma.message_subscribe(
|
||||
partner_ids=follower.partner_id.ids,
|
||||
subtype_ids=follower.subtype_ids.ids,
|
||||
)
|
||||
return new_rmas
|
||||
|
||||
def unlink(self):
|
||||
if self.filtered(lambda r: r.state != "draft"):
|
||||
raise ValidationError(
|
||||
_("You cannot delete RMAs that are not in draft state")
|
||||
self.env._("You cannot delete RMAs that are not in draft state")
|
||||
)
|
||||
return super().unlink()
|
||||
|
||||
@@ -601,10 +600,6 @@ class Rma(models.Model):
|
||||
if self.partner_id and self.partner_id not in self.message_partner_ids:
|
||||
self.message_subscribe([self.partner_id.id])
|
||||
|
||||
def _product_is_storable(self, product=None):
|
||||
product = product or self.product_id
|
||||
return product.type in ["product", "consu"]
|
||||
|
||||
def _prepare_procurement_group_vals(self):
|
||||
return {
|
||||
"move_type": "direct",
|
||||
@@ -643,7 +638,7 @@ class Rma(models.Model):
|
||||
procurements = []
|
||||
group_model = self.env["procurement.group"]
|
||||
for rma in self:
|
||||
if not rma._product_is_storable():
|
||||
if not rma.product_id.is_storable:
|
||||
continue
|
||||
group = rma.procurement_group_id
|
||||
if not group:
|
||||
@@ -824,7 +819,7 @@ class Rma(models.Model):
|
||||
"""Invoked when 'Refund' smart button in rma form view is clicked."""
|
||||
self.ensure_one()
|
||||
return {
|
||||
"name": _("Refund"),
|
||||
"name": self.env._("Refund"),
|
||||
"type": "ir.actions.act_window",
|
||||
"view_type": "form",
|
||||
"view_mode": "form",
|
||||
@@ -873,7 +868,7 @@ class Rma(models.Model):
|
||||
)
|
||||
desc += f"\n{field_record.field_description}"
|
||||
if desc:
|
||||
raise ValidationError(_("Required field(s):%s") % desc)
|
||||
raise ValidationError(self.env._("Required field(s):%s") % desc)
|
||||
|
||||
def _ensure_can_be_returned(self):
|
||||
"""This method is intended to be invoked after user click on
|
||||
@@ -888,9 +883,11 @@ class Rma(models.Model):
|
||||
"""
|
||||
if len(self) == 1:
|
||||
if not self.can_be_returned:
|
||||
raise ValidationError(_("This RMA cannot perform a return."))
|
||||
raise ValidationError(self.env._("This RMA cannot perform a return."))
|
||||
elif not self.filtered("can_be_returned"):
|
||||
raise ValidationError(_("None of the selected RMAs can perform a return."))
|
||||
raise ValidationError(
|
||||
self.env._("None of the selected RMAs can perform a return.")
|
||||
)
|
||||
|
||||
def _ensure_can_be_replaced(self):
|
||||
"""This method is intended to be invoked after user click on
|
||||
@@ -903,10 +900,12 @@ class Rma(models.Model):
|
||||
"""
|
||||
if len(self) == 1:
|
||||
if not self.can_be_replaced:
|
||||
raise ValidationError(_("This RMA cannot perform a replacement."))
|
||||
raise ValidationError(
|
||||
self.env._("This RMA cannot perform a replacement.")
|
||||
)
|
||||
elif not self.filtered("can_be_replaced"):
|
||||
raise ValidationError(
|
||||
_("None of the selected RMAs can perform a replacement.")
|
||||
self.env._("None of the selected RMAs can perform a replacement.")
|
||||
)
|
||||
|
||||
def _ensure_can_be_split(self):
|
||||
@@ -917,7 +916,7 @@ class Rma(models.Model):
|
||||
"""
|
||||
self.ensure_one()
|
||||
if not self.can_be_split:
|
||||
raise ValidationError(_("This RMA cannot be split."))
|
||||
raise ValidationError(self.env._("This RMA cannot be split."))
|
||||
|
||||
def _ensure_qty_to_return(self, qty=None, uom=None):
|
||||
"""This method is intended to be invoked after confirm the wizard.
|
||||
@@ -928,7 +927,9 @@ class Rma(models.Model):
|
||||
qty = uom._compute_quantity(qty, self.product_uom)
|
||||
if qty > self.remaining_qty:
|
||||
raise ValidationError(
|
||||
_("The quantity to return is greater than " "remaining quantity.")
|
||||
self.env._(
|
||||
"The quantity to return is greater than " "remaining quantity."
|
||||
)
|
||||
)
|
||||
|
||||
def _ensure_qty_to_extract(self, qty, uom):
|
||||
@@ -940,7 +941,7 @@ class Rma(models.Model):
|
||||
to_split_uom_qty = uom._compute_quantity(qty, self.product_uom)
|
||||
if to_split_uom_qty > self.remaining_qty:
|
||||
raise ValidationError(
|
||||
_(
|
||||
self.env._(
|
||||
"Quantity to extract cannot be greater than remaining"
|
||||
" delivery quantity (%(remaining_qty)s %(product_uom)s)"
|
||||
)
|
||||
@@ -980,7 +981,7 @@ class Rma(models.Model):
|
||||
)
|
||||
self.message_post(
|
||||
body=Markup(
|
||||
_(
|
||||
self.env._(
|
||||
'Split: <a href="#" data-oe-model="rma" '
|
||||
'data-oe-id="%(id)d">%(name)s</a> has been created.'
|
||||
)
|
||||
@@ -1103,7 +1104,7 @@ class Rma(models.Model):
|
||||
self._ensure_can_be_returned()
|
||||
self._ensure_qty_to_return(qty, uom)
|
||||
rmas_to_return = self.filtered(
|
||||
lambda rma: rma.can_be_returned and rma._product_is_storable()
|
||||
lambda rma: rma.can_be_returned and rma.product_id.is_storable
|
||||
)
|
||||
procurements = rmas_to_return._prepare_delivery_procurements(
|
||||
scheduled_date, qty, uom
|
||||
@@ -1116,7 +1117,7 @@ class Rma(models.Model):
|
||||
pickings[picking] |= rma
|
||||
rma.message_post(
|
||||
body=Markup(
|
||||
_(
|
||||
self.env._(
|
||||
'Return: <a href="#" data-oe-model="stock.picking" '
|
||||
'data-oe-id="%(id)d">%(name)s</a> has been created.'
|
||||
)
|
||||
@@ -1146,7 +1147,7 @@ class Rma(models.Model):
|
||||
procurements = []
|
||||
group_model = self.env["procurement.group"]
|
||||
for rma in self:
|
||||
if not rma._product_is_storable(product):
|
||||
if not product.is_storable:
|
||||
continue
|
||||
|
||||
if not rma.procurement_group_id:
|
||||
@@ -1186,7 +1187,7 @@ class Rma(models.Model):
|
||||
# MRP BoM Kits
|
||||
for new_move in new_moves:
|
||||
body += Markup(
|
||||
_(
|
||||
self.env._(
|
||||
'Replacement: Move <a href="#" data-oe-model="stock.move"'
|
||||
' data-oe-id="%(move_id)d">%(move_name)s</a> (Picking <a'
|
||||
' href="#" data-oe-model="stock.picking"'
|
||||
@@ -1212,7 +1213,7 @@ class Rma(models.Model):
|
||||
self.message_post(
|
||||
body=body
|
||||
or Markup(
|
||||
_(
|
||||
self.env._(
|
||||
"Replacement:<br/>"
|
||||
'Product <a href="#" data-oe-model="product.product" '
|
||||
'data-oe-id="%(id)d">%(name)s</a><br/>'
|
||||
@@ -1255,14 +1256,14 @@ class Rma(models.Model):
|
||||
custom_values = {}
|
||||
subject = msg_dict.get("subject", "")
|
||||
body = html2plaintext(msg_dict.get("body", ""))
|
||||
desc = _(
|
||||
desc = self.env._(
|
||||
"<b>E-mail subject:</b> %(subject)s<br/><br/><b>E-mail"
|
||||
" body:</b><br/>%(body)s"
|
||||
) % ({"subject": subject, "body": body})
|
||||
defaults = {
|
||||
"description": desc,
|
||||
"name": _("New"),
|
||||
"origin": _("Incoming e-mail"),
|
||||
"name": self.env._("New"),
|
||||
"origin": self.env._("Incoming e-mail"),
|
||||
}
|
||||
if msg_dict.get("author_id"):
|
||||
partner = self.env["res.partner"].browse(msg_dict.get("author_id"))
|
||||
@@ -1298,7 +1299,7 @@ class Rma(models.Model):
|
||||
try:
|
||||
for record in self.filtered("partner_id"):
|
||||
record._message_add_suggested_recipient(
|
||||
recipients, partner=record.partner_id, reason=_("Customer")
|
||||
recipients, partner=record.partner_id, reason=self.env._("Customer")
|
||||
)
|
||||
except AccessError as e: # no read access rights
|
||||
_logger.debug(e)
|
||||
@@ -1307,7 +1308,7 @@ class Rma(models.Model):
|
||||
# Reporting business methods
|
||||
def _get_report_base_filename(self):
|
||||
self.ensure_one()
|
||||
return "RMA Report - %s" % self.name
|
||||
return f"RMA Report - {self.name}"
|
||||
|
||||
# Other business methods
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
import ast
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class RmaTeam(models.Model):
|
||||
@@ -40,18 +40,17 @@ class RmaTeam(models.Model):
|
||||
)
|
||||
|
||||
def copy(self, default=None):
|
||||
self.ensure_one()
|
||||
if default is None:
|
||||
default = {}
|
||||
if not default.get("name"):
|
||||
default["name"] = _("%s (copy)") % self.name
|
||||
team = super().copy(default)
|
||||
for follower in self.message_follower_ids:
|
||||
team.message_subscribe(
|
||||
partner_ids=follower.partner_id.ids,
|
||||
subtype_ids=follower.subtype_ids.ids,
|
||||
)
|
||||
return team
|
||||
default = dict(default or {})
|
||||
new_teams = super().copy(default)
|
||||
for old_team, new_team in zip(self, new_teams, strict=False):
|
||||
if not default.get("name"):
|
||||
new_team.name = self.env._("%s (copy)") % old_team.name
|
||||
for follower in old_team.message_follower_ids:
|
||||
new_team.message_subscribe(
|
||||
partner_ids=follower.partner_id.ids,
|
||||
subtype_ids=follower.subtype_ids.ids,
|
||||
)
|
||||
return new_teams
|
||||
|
||||
def _alias_get_creation_values(self):
|
||||
values = super()._alias_get_creation_values()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
# 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.exceptions import ValidationError
|
||||
from odoo.tools import float_compare
|
||||
|
||||
@@ -72,7 +72,7 @@ class StockMove(models.Model):
|
||||
!= 0
|
||||
):
|
||||
raise ValidationError(
|
||||
_(
|
||||
self.env._(
|
||||
"The quantity done for the product '%(id)s' must "
|
||||
"be equal to its initial demand because the "
|
||||
"stock move is linked to an RMA (%(name)s)."
|
||||
|
||||
@@ -16,18 +16,6 @@ class StockPicking(models.Model):
|
||||
for rec in self:
|
||||
rec.rma_count = len(rec.move_ids.mapped("rma_ids"))
|
||||
|
||||
def copy(self, default=None):
|
||||
self.ensure_one()
|
||||
if self.env.context.get("set_rma_picking_type"):
|
||||
location_dest_id = default.get("location_dest_id")
|
||||
if location_dest_id:
|
||||
warehouse = self.env["stock.warehouse"].search(
|
||||
[("rma_loc_id", "parent_of", location_dest_id)], limit=1
|
||||
)
|
||||
if warehouse:
|
||||
default["picking_type_id"] = warehouse.rma_in_type_id.id
|
||||
return super().copy(default)
|
||||
|
||||
def action_view_rma(self):
|
||||
self.ensure_one()
|
||||
action = self.env["ir.actions.act_window"]._for_xml_id("rma.rma_action")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class StockWarehouse(models.Model):
|
||||
@@ -19,17 +19,24 @@ class StockWarehouse(models.Model):
|
||||
rma_in_type_id = fields.Many2one(
|
||||
comodel_name="stock.picking.type",
|
||||
string="RMA In Type",
|
||||
check_company=True,
|
||||
copy=False,
|
||||
)
|
||||
rma_out_type_id = fields.Many2one(
|
||||
comodel_name="stock.picking.type",
|
||||
string="RMA Out Type",
|
||||
check_company=True,
|
||||
copy=False,
|
||||
)
|
||||
rma_loc_id = fields.Many2one(
|
||||
comodel_name="stock.location",
|
||||
string="RMA Location",
|
||||
comodel_name="stock.location", string="RMA Location", check_company=True
|
||||
)
|
||||
rma_in_route_id = fields.Many2one(
|
||||
"stock.route", "RMA in Route", ondelete="restrict", copy=False
|
||||
)
|
||||
rma_out_route_id = fields.Many2one(
|
||||
"stock.route", "RMA out Route", ondelete="restrict", copy=False
|
||||
)
|
||||
rma_in_route_id = fields.Many2one("stock.route", "RMA in Route")
|
||||
rma_out_route_id = fields.Many2one("stock.route", "RMA out Route")
|
||||
|
||||
def _get_rma_location_values(self, vals, code=False):
|
||||
"""this method is intended to be used by 'create' method
|
||||
@@ -49,7 +56,6 @@ class StockWarehouse(models.Model):
|
||||
return {
|
||||
"name": view_location.name,
|
||||
"active": True,
|
||||
"return_location": True,
|
||||
"usage": "internal",
|
||||
"company_id": company_id,
|
||||
"location_id": self.env.ref("rma.stock_location_rma").id,
|
||||
@@ -63,17 +69,19 @@ class StockWarehouse(models.Model):
|
||||
|
||||
def _get_sequence_values(self, name=False, code=False):
|
||||
values = super()._get_sequence_values(name=name, code=code)
|
||||
name = name if name else self.name
|
||||
code = code if code else self.code
|
||||
values.update(
|
||||
{
|
||||
"rma_in_type_id": {
|
||||
"name": self.name + " " + _("Sequence RMA in"),
|
||||
"prefix": self.code + "/RMA/IN/",
|
||||
"name": name + " " + self.env._("Sequence RMA in"),
|
||||
"prefix": code + "/RMA/IN/",
|
||||
"padding": 5,
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
"rma_out_type_id": {
|
||||
"name": self.name + " " + _("Sequence RMA out"),
|
||||
"prefix": self.code + "/RMA/OUT/",
|
||||
"name": name + " " + self.env._("Sequence RMA out"),
|
||||
"prefix": code + "/RMA/OUT/",
|
||||
"padding": 5,
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
@@ -96,23 +104,21 @@ class StockWarehouse(models.Model):
|
||||
data.update(
|
||||
{
|
||||
"rma_in_type_id": {
|
||||
"name": _("RMA Receipts"),
|
||||
"name": self.env._("RMA Receipts"),
|
||||
"code": "incoming",
|
||||
"use_create_lots": False,
|
||||
"use_existing_lots": True,
|
||||
"default_location_src_id": False,
|
||||
"default_location_dest_id": self.rma_loc_id.id,
|
||||
"sequence": max_sequence + 1,
|
||||
"sequence_code": "RMA/IN",
|
||||
"company_id": self.company_id.id,
|
||||
},
|
||||
"rma_out_type_id": {
|
||||
"name": _("RMA Delivery Orders"),
|
||||
"name": self.env._("RMA Delivery Orders"),
|
||||
"code": "outgoing",
|
||||
"use_create_lots": False,
|
||||
"use_existing_lots": True,
|
||||
"default_location_src_id": self.rma_loc_id.id,
|
||||
"default_location_dest_id": False,
|
||||
"sequence": max_sequence + 2,
|
||||
"sequence_code": "RMA/OUT",
|
||||
"company_id": self.company_id.id,
|
||||
|
||||
@@ -71,25 +71,19 @@
|
||||
<field name="name">RMA multi-company</field>
|
||||
<field name="model_id" ref="model_rma" />
|
||||
<field name="global" eval="True" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|',('company_id','=',False),('company_id','in',company_ids)]</field>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
|
||||
</record>
|
||||
<record id="rma_team_rule_multi_company" model="ir.rule">
|
||||
<field name="name">RMA team multi-company</field>
|
||||
<field name="model_id" ref="model_rma_team" />
|
||||
<field name="global" eval="True" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|',('company_id','=',False),('company_id','in',company_ids)]</field>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
|
||||
</record>
|
||||
<record id="rma_finalization_comp_rule" model="ir.rule">
|
||||
<field name="name">RMA Finalization Reason multi-company</field>
|
||||
<field name="model_id" ref="model_rma_finalization" />
|
||||
<field name="global" eval="True" />
|
||||
<field
|
||||
name="domain_force"
|
||||
> ['|', ('company_id', 'in', company_ids), ('company_id', '=', False)]</field>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids + [False])]</field>
|
||||
</record>
|
||||
<!-- Allow to refund RMAs -->
|
||||
<record id="rma_account_move_personal_rule" model="ir.rule">
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
# Copyright 2025 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
@@ -28,7 +29,7 @@ class TestRma(BaseCommon):
|
||||
)
|
||||
cls.rma_loc = cls.warehouse_company.rma_loc_id
|
||||
cls.product = cls.product_product.create(
|
||||
{"name": "Product test 1", "type": "product"}
|
||||
{"name": "Product test 1", "type": "consu", "is_storable": True}
|
||||
)
|
||||
cls.account_receiv = cls.env["account.account"].create(
|
||||
{
|
||||
@@ -123,7 +124,7 @@ class TestRma(BaseCommon):
|
||||
move.product_uom_qty = 10
|
||||
with picking_form.move_ids_without_package.new() as move:
|
||||
move.product_id = self.product_product.create(
|
||||
{"name": "Product 2 test", "type": "product"}
|
||||
{"name": "Product 2 test", "type": "consu", "is_storable": True}
|
||||
)
|
||||
move.product_uom_qty = 20
|
||||
picking = picking_form.save()
|
||||
@@ -169,14 +170,44 @@ class TestRmaCase(TestRma):
|
||||
wizard_form.product_uom_qty = rma.product_uom_qty
|
||||
wizard = wizard_form.save()
|
||||
wizard.action_deliver()
|
||||
self.assertEqual(rma.delivery_picking_count, 2)
|
||||
out_pickings = rma.mapped("delivery_move_ids.picking_id")
|
||||
self.assertIn(
|
||||
self.warehouse.pick_type_id, out_pickings.mapped("picking_type_id")
|
||||
)
|
||||
self.assertIn(
|
||||
self.warehouse.out_type_id, out_pickings.mapped("picking_type_id")
|
||||
out_picking = rma.delivery_move_ids.picking_id
|
||||
out_picking.move_ids.quantity = 1
|
||||
out_picking.button_validate()
|
||||
self.assertEqual(out_picking.state, "done")
|
||||
self.assertEqual(out_picking.picking_type_id, self.warehouse.pick_type_id)
|
||||
next_transfer = out_picking._get_next_transfers()
|
||||
self.assertEqual(next_transfer.picking_type_id, self.warehouse.out_type_id)
|
||||
self.assertEqual(rma.delivery_picking_count, 1)
|
||||
|
||||
def test_rma_replace_pick_pack_ship(self):
|
||||
self.warehouse.write({"delivery_steps": "pick_pack_ship"})
|
||||
rma = self._create_rma(self.partner, self.product, 1, self.rma_loc)
|
||||
rma.action_confirm()
|
||||
rma.reception_move_id.quantity = 1
|
||||
rma.reception_move_id.picking_id.button_validate()
|
||||
self.assertEqual(rma.reception_move_id.picking_id.state, "done")
|
||||
self.assertEqual(rma.state, "received")
|
||||
res = rma.action_replace()
|
||||
wizard_form = Form(self.env[res["res_model"]].with_context(**res["context"]))
|
||||
wizard_form.product_id = self.product
|
||||
wizard_form.product_uom_qty = rma.product_uom_qty
|
||||
wizard = wizard_form.save()
|
||||
wizard.action_deliver()
|
||||
out_picking = rma.delivery_move_ids.picking_id
|
||||
out_picking.move_ids.quantity = 1
|
||||
out_picking.button_validate()
|
||||
self.assertEqual(out_picking.state, "done")
|
||||
self.assertEqual(out_picking.picking_type_id, self.warehouse.pick_type_id)
|
||||
next_transfer = out_picking._get_next_transfers()
|
||||
self.assertEqual(next_transfer.picking_type_id, self.warehouse.pack_type_id)
|
||||
next_transfer.move_ids.quantity = 1
|
||||
next_transfer.button_validate()
|
||||
self.assertEqual(next_transfer.state, "done")
|
||||
next_transfer_extra = next_transfer._get_next_transfers()
|
||||
self.assertEqual(
|
||||
next_transfer_extra.picking_type_id, self.warehouse.out_type_id
|
||||
)
|
||||
self.assertEqual(rma.delivery_picking_count, 1)
|
||||
|
||||
def test_computed(self):
|
||||
# If partner changes, the invoice address is set
|
||||
@@ -193,7 +224,12 @@ class TestRmaCase(TestRma):
|
||||
}
|
||||
)
|
||||
product_2 = self.product_product.create(
|
||||
{"name": "Product test 2", "type": "product", "uom_id": uom_ten.id}
|
||||
{
|
||||
"name": "Product test 2",
|
||||
"type": "consu",
|
||||
"is_storable": True,
|
||||
"uom_id": uom_ten.id,
|
||||
}
|
||||
)
|
||||
outgoing_picking_type = self.env["stock.picking.type"].search(
|
||||
[
|
||||
@@ -305,6 +341,7 @@ class TestRmaCase(TestRma):
|
||||
self.assertEqual(rma_2.state, "received")
|
||||
|
||||
@users("__system__", "user_rma")
|
||||
@mute_logger("odoo.models.unlink")
|
||||
def test_action_refund(self):
|
||||
rma = self._create_confirm_receive(self.partner, self.product, 10, self.rma_loc)
|
||||
self.assertEqual(rma.state, "received")
|
||||
@@ -339,6 +376,7 @@ class TestRmaCase(TestRma):
|
||||
self.assertFalse(rma.can_be_returned)
|
||||
self.assertFalse(rma.can_be_replaced)
|
||||
|
||||
@mute_logger("odoo.models.unlink")
|
||||
def test_mass_refund(self):
|
||||
# Create, confirm and receive rma_1
|
||||
rma_1 = self._create_confirm_receive(
|
||||
@@ -351,7 +389,7 @@ class TestRmaCase(TestRma):
|
||||
)
|
||||
# rma_3: Same partner and different product than rma_1
|
||||
product = self.product_product.create(
|
||||
{"name": "Product 2 test", "type": "product"}
|
||||
{"name": "Product 2 test", "type": "consu", "is_storable": True}
|
||||
)
|
||||
rma_3 = self._create_confirm_receive(self.partner, product, 20, self.rma_loc)
|
||||
# rma_4: Different partner and same product as rma_1
|
||||
@@ -424,7 +462,7 @@ class TestRmaCase(TestRma):
|
||||
rma = self._create_confirm_receive(self.partner, self.product, 10, self.rma_loc)
|
||||
# Replace with another product with quantity 2.
|
||||
product_2 = self.product_product.create(
|
||||
{"name": "Product 2 test", "type": "product"}
|
||||
{"name": "Product 2 test", "type": "consu", "is_storable": True}
|
||||
)
|
||||
delivery_form = Form(
|
||||
self.env["rma.delivery.wizard"].with_context(
|
||||
@@ -450,7 +488,7 @@ class TestRmaCase(TestRma):
|
||||
picking = first_move.picking_id
|
||||
# Replace again with another product with the remaining quantity
|
||||
product_3 = self.product_product.create(
|
||||
{"name": "Product 3 test", "type": "product"}
|
||||
{"name": "Product 3 test", "type": "consu", "is_storable": True}
|
||||
)
|
||||
delivery_form = Form(
|
||||
self.env["rma.delivery.wizard"].with_context(
|
||||
@@ -572,7 +610,7 @@ class TestRmaCase(TestRma):
|
||||
)
|
||||
# rma_3: Same partner and different product than rma_1
|
||||
product = self.product_product.create(
|
||||
{"name": "Product 2 test", "type": "product"}
|
||||
{"name": "Product 2 test", "type": "consu", "is_storable": True}
|
||||
)
|
||||
rma_3 = self._create_confirm_receive(self.partner, product, 20, self.rma_loc)
|
||||
# rma_4: Different partner and same product as rma_1
|
||||
@@ -653,7 +691,7 @@ class TestRmaCase(TestRma):
|
||||
)
|
||||
# rma_3: Same partner and different product than rma_1
|
||||
product = self.product_product.create(
|
||||
{"name": "Product 2 test", "type": "product"}
|
||||
{"name": "Product 2 test", "type": "consu", "is_storable": True}
|
||||
)
|
||||
rma_3 = self._create_confirm_receive(self.partner, product, 20, self.rma_loc)
|
||||
# rma_4: Different partner and same product as rma_1
|
||||
@@ -685,7 +723,11 @@ class TestRmaCase(TestRma):
|
||||
stock_return_picking_form.create_rma = True
|
||||
stock_return_picking_form.rma_operation_id = self.operation
|
||||
return_wizard = stock_return_picking_form.save()
|
||||
picking_action = return_wizard.create_returns()
|
||||
for move in origin_delivery.move_ids_without_package:
|
||||
return_wizard.product_return_moves.filtered(
|
||||
lambda x, move=move: x.move_id == move
|
||||
).quantity = move.quantity
|
||||
picking_action = return_wizard.action_create_returns()
|
||||
# Each origin move is linked to a different RMA
|
||||
origin_moves = origin_delivery.move_ids
|
||||
self.assertTrue(origin_moves[0].rma_ids)
|
||||
|
||||
@@ -78,7 +78,6 @@
|
||||
name="rma_mail_confirmation_template_id"
|
||||
class="oe_inline"
|
||||
required="send_rma_confirmation"
|
||||
context="{'default_model': 'rma'}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -116,7 +115,6 @@
|
||||
name="rma_mail_receipt_confirmation_template_id"
|
||||
class="oe_inline"
|
||||
required="send_rma_receipt_confirmation"
|
||||
context="{'default_model': 'rma'}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -154,7 +152,6 @@
|
||||
name="rma_mail_draft_confirmation_template_id"
|
||||
class="oe_inline"
|
||||
required="send_rma_draft_confirmation"
|
||||
context="{'default_model': 'rma'}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,11 +45,11 @@
|
||||
<field name="model">rma.finalization</field>
|
||||
<field eval="6" name="priority" />
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<list>
|
||||
<field name="name" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="company_id" invisible="1" />
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_rma_finalization" model="ir.actions.act_window">
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<span t-field="rma.product_uom_qty" />
|
||||
</td>
|
||||
<td class="d-none d-md-table-cell tx_status">
|
||||
<span class="badge badge-pill badge-secondary">
|
||||
<span class="badge rounded-pill text-bg-info">
|
||||
<span t-field="rma.state" />
|
||||
</span>
|
||||
</td>
|
||||
@@ -93,251 +93,313 @@
|
||||
/>
|
||||
</t>
|
||||
</t>
|
||||
<t t-call="portal.portal_record_layout">
|
||||
<t t-set="card_header">
|
||||
<h5 class="mb-0">
|
||||
<span>
|
||||
RMA Order -
|
||||
<span t-field="rma.name" />
|
||||
</span>
|
||||
<h5 class="mb-0">
|
||||
<span>
|
||||
RMA Order -
|
||||
<span t-field="rma.name" />
|
||||
</span>
|
||||
<span style="position: absolute; left: 50%;" class="d-none d-sm-inline">
|
||||
<a
|
||||
t-att-href="rma.get_portal_url(report_type='pdf', download=True)"
|
||||
>
|
||||
<i
|
||||
class="fa fa-download"
|
||||
role="img"
|
||||
aria-label="Download"
|
||||
title="Download"
|
||||
/>
|
||||
</a>
|
||||
</span>
|
||||
<span class="float-right">
|
||||
<!-- Tags -->
|
||||
<t t-set="tags" t-value="rma.tag_ids.filtered('is_public')" />
|
||||
<!-- We don't have the color o_tag_color_# classes available in the frontend -->
|
||||
<t t-foreach="tags" t-as="tag">
|
||||
<span
|
||||
style="position: absolute; left: 50%;"
|
||||
class="d-none d-sm-inline"
|
||||
>
|
||||
<a
|
||||
t-att-href="rma.get_portal_url(report_type='pdf', download=True)"
|
||||
>
|
||||
<i
|
||||
class="fa fa-download"
|
||||
role="img"
|
||||
aria-label="Download"
|
||||
title="Download"
|
||||
/>
|
||||
</a>
|
||||
class="badge badge-pill badge-info label-text-align"
|
||||
t-esc="tag.name"
|
||||
/>
|
||||
</t>
|
||||
<t t-if="rma.state in ['refunded', 'returned', 'replaced']">
|
||||
<span class="small text-success orders_label_text_align">
|
||||
<i class="fa fa-fw fa-check" />
|
||||
<b>
|
||||
<span t-field="rma.state" />
|
||||
</b>
|
||||
</span>
|
||||
<span class="float-right">
|
||||
<!-- Tags -->
|
||||
<t
|
||||
t-set="tags"
|
||||
t-value="rma.tag_ids.filtered('is_public')"
|
||||
/>
|
||||
<!-- We don't have the color o_tag_color_# classes available in the frontend -->
|
||||
<t t-foreach="tags" t-as="tag">
|
||||
<span
|
||||
class="badge badge-pill badge-info label-text-align"
|
||||
t-esc="tag.name"
|
||||
/>
|
||||
</t>
|
||||
<t t-if="rma.state in ['refunded', 'returned', 'replaced']">
|
||||
<span
|
||||
class="small text-success orders_label_text_align"
|
||||
>
|
||||
<i class="fa fa-fw fa-check" />
|
||||
<b>
|
||||
<span t-field="rma.state" />
|
||||
</b>
|
||||
</span>
|
||||
</t>
|
||||
<t t-elif="rma.state in ['cancelled', 'locked']">
|
||||
<span class="small text-danger orders_label_text_align">
|
||||
<i class="fa fa-fw fa-times" />
|
||||
<b>
|
||||
<span t-field="rma.state" />
|
||||
</b>
|
||||
</span>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span class="small text-info orders_label_text_align">
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
<b>
|
||||
<span t-field="rma.state" />
|
||||
</b>
|
||||
</span>
|
||||
</t>
|
||||
</t>
|
||||
<t t-elif="rma.state in ['cancelled', 'locked']">
|
||||
<span class="small text-danger orders_label_text_align">
|
||||
<i class="fa fa-fw fa-times" />
|
||||
<b>
|
||||
<span t-field="rma.state" />
|
||||
</b>
|
||||
</span>
|
||||
</h5>
|
||||
</t>
|
||||
<t t-set="card_body">
|
||||
<div id="general_information">
|
||||
<div class="row mt4">
|
||||
<!-- Customer -->
|
||||
<div
|
||||
t-if="rma.partner_id"
|
||||
class="col-12 col-md-6 mb-4 mb-md-0"
|
||||
>
|
||||
<h6>
|
||||
<strong>Customer:</strong>
|
||||
</h6>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-3">
|
||||
<img
|
||||
t-if="rma.partner_id.image_1024"
|
||||
class="rounded-circle mt-1 o_portal_contact_img"
|
||||
t-att-src="image_data_uri(rma.partner_id.image_1024)"
|
||||
alt="Contact"
|
||||
/>
|
||||
<img
|
||||
t-else=""
|
||||
class="rounded-circle mt-1 o_portal_contact_img"
|
||||
src="/web/static/src/img/user_menu_avatar.png"
|
||||
alt="Contact"
|
||||
/>
|
||||
</div>
|
||||
<div class="col pl-sm-0">
|
||||
<address
|
||||
t-field="rma.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span class="small text-info orders_label_text_align">
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
<b>
|
||||
<span t-field="rma.state" />
|
||||
</b>
|
||||
</span>
|
||||
</t>
|
||||
</span>
|
||||
</h5>
|
||||
<div id="general_information">
|
||||
<div class="row mt4">
|
||||
<!-- Customer -->
|
||||
<div t-if="rma.partner_id" class="col-12 col-md-6 mb-4 mb-md-0">
|
||||
<h6>
|
||||
<strong>Customer:</strong>
|
||||
</h6>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-3">
|
||||
<img
|
||||
t-if="rma.partner_id.avatar_1024"
|
||||
class="o_avatar o_portal_contact_img rounded"
|
||||
t-att-src="image_data_uri(rma.partner_id.avatar_512)"
|
||||
alt="Contact"
|
||||
/>
|
||||
</div>
|
||||
<!-- Shipping Address -->
|
||||
<div
|
||||
t-if="rma.partner_shipping_id"
|
||||
class="col-12 col-md-6 mb-4 mb-md-0"
|
||||
>
|
||||
<h6>
|
||||
<strong>Shipping address:</strong>
|
||||
</h6>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-3">
|
||||
<img
|
||||
t-if="rma.partner_shipping_id.image_1024"
|
||||
class="rounded-circle mt-1 o_portal_contact_img"
|
||||
t-att-src="image_data_uri(rma.partner_shipping_id.image_1024)"
|
||||
alt="Contact"
|
||||
/>
|
||||
<img
|
||||
t-else=""
|
||||
class="rounded-circle mt-1 o_portal_contact_img"
|
||||
src="/web/static/src/img/user_menu_avatar.png"
|
||||
alt="Contact"
|
||||
/>
|
||||
</div>
|
||||
<div class="col pl-sm-0">
|
||||
<address
|
||||
t-field="rma.partner_shipping_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "email", "phone", "address"]}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- RMA Info -->
|
||||
<div t-if="rma.user_id" class="col-12 col-md-6">
|
||||
<h6>
|
||||
<strong>Responsible:</strong>
|
||||
</h6>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-3">
|
||||
<img
|
||||
t-if="rma.user_id.image_1024"
|
||||
class="rounded-circle mt-1 o_portal_contact_img"
|
||||
t-att-src="image_data_uri(rma.user_id.image_1024)"
|
||||
alt="Contact"
|
||||
/>
|
||||
<img
|
||||
t-else=""
|
||||
class="rounded-circle mt-1 o_portal_contact_img"
|
||||
src="/web/static/src/img/user_menu_avatar.png"
|
||||
alt="Contact"
|
||||
/>
|
||||
</div>
|
||||
<div class="col pl-sm-0">
|
||||
<address
|
||||
t-field="rma.user_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt32" id="product_information">
|
||||
<div class="col-12 col-md-6 mb-4 mb-md-0">
|
||||
<div t-if="rma.picking_id" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Origin delivery</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.picking_id" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- We need to prevent access errors if the product is
|
||||
unpublished-->
|
||||
<div
|
||||
t-if="rma.sudo().product_id"
|
||||
class="row mb-2 mb-sm-1"
|
||||
>
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Product</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span
|
||||
t-esc="rma.sudo().product_id.display_name"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
t-if="rma.product_uom_qty"
|
||||
class="row mb-2 mb-sm-1"
|
||||
>
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Quantity</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.product_uom_qty" />
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.delivered_qty" class="row">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Delivered quantity</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.delivered_qty" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div t-if="rma.date" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>RMA Date</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span
|
||||
t-field="rma.date"
|
||||
t-options='{"widget": "date"}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.deadline" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Deadline</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span
|
||||
t-field="rma.deadline"
|
||||
t-options='{"widget": "date"}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.origin" class="row">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Origin</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.origin" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col pl-sm-0">
|
||||
<address
|
||||
t-field="rma.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section
|
||||
t-if="rma.reception_move_id"
|
||||
id="reception_section"
|
||||
style="page-break-inside: auto;"
|
||||
class="mt32"
|
||||
<!-- Shipping Address -->
|
||||
<div
|
||||
t-if="rma.partner_shipping_id"
|
||||
class="col-12 col-md-6 mb-4 mb-md-0"
|
||||
>
|
||||
<h6>
|
||||
<strong>Shipping address:</strong>
|
||||
</h6>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-3">
|
||||
<img
|
||||
t-if="rma.partner_shipping_id.avatar_1024"
|
||||
class="o_avatar o_portal_contact_img rounded"
|
||||
t-att-src="image_data_uri(rma.partner_shipping_id.avatar_512)"
|
||||
alt="Contact"
|
||||
/>
|
||||
</div>
|
||||
<div class="col pl-sm-0">
|
||||
<address
|
||||
t-field="rma.partner_shipping_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "email", "phone", "address"]}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- RMA Info -->
|
||||
<div t-if="rma.user_id" class="col-12 col-md-6">
|
||||
<h6>
|
||||
<strong>Responsible:</strong>
|
||||
</h6>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pr-3">
|
||||
<img
|
||||
t-if="rma.user_id.avatar_1024"
|
||||
class="o_avatar o_portal_contact_img rounded"
|
||||
t-att-src="image_data_uri(rma.user_id.avatar_512)"
|
||||
alt="Contact"
|
||||
/>
|
||||
</div>
|
||||
<div class="col pl-sm-0">
|
||||
<address
|
||||
t-field="rma.user_id"
|
||||
t-options='{"widget": "contact", "fields": ["name", "email", "phone"]}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt32" id="product_information">
|
||||
<div class="col-12 col-md-6 mb-4 mb-md-0">
|
||||
<div t-if="rma.picking_id" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Origin delivery</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.picking_id" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- We need to prevent access errors if the product is
|
||||
unpublished-->
|
||||
<div t-if="rma.sudo().product_id" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Product</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-esc="rma.sudo().product_id.display_name" />
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.product_uom_qty" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Quantity</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.product_uom_qty" />
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.delivered_qty" class="row">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Delivered quantity</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.delivered_qty" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div t-if="rma.date" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>RMA Date</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span
|
||||
t-field="rma.date"
|
||||
t-options='{"widget": "date"}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.deadline" class="row mb-2 mb-sm-1">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Deadline</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span
|
||||
t-field="rma.deadline"
|
||||
t-options='{"widget": "date"}'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="rma.origin" class="row">
|
||||
<div class="col-12 col-sm-4">
|
||||
<strong>Origin</strong>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8">
|
||||
<span t-field="rma.origin" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<section
|
||||
t-if="rma.reception_move_id"
|
||||
id="reception_section"
|
||||
style="page-break-inside: auto;"
|
||||
class="mt32"
|
||||
>
|
||||
<strong class="d-block mb-1">Reception</strong>
|
||||
<t t-set="picking" t-value="rma.reception_move_id.picking_id" />
|
||||
<t
|
||||
t-set="report_url"
|
||||
t-value="'/my/rma/picking/pdf/%s/%s?%s' % (rma.id, picking.id, keep_query())"
|
||||
/>
|
||||
<a
|
||||
class="list-group-item list-group-item-action d-flex flex-wrap align-items-center justify-content-between py-2 px-3"
|
||||
t-att-href="report_url"
|
||||
>
|
||||
<div>
|
||||
<i
|
||||
class="fa fa-truck mr-1"
|
||||
role="img"
|
||||
aria-label="Download"
|
||||
title="Download"
|
||||
/>
|
||||
<span t-esc="picking.name" class="mr-lg-3" />
|
||||
<div class="d-lg-inline-block">
|
||||
Date:
|
||||
<span class="text-muted" t-field="picking.date" />
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="picking.state == 'done'">
|
||||
<span class="badge badge-success label-text-align">
|
||||
<i class="fa fa-fw fa-truck" />
|
||||
Shipped
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="picking.state == 'partially_available'">
|
||||
<span class="badge badge-warning label-text-align">
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
Partially Available
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="picking.state == 'cancel'">
|
||||
<span class="badge badge-danger label-text-align">
|
||||
<i class="fa fa-fw fa-times" />
|
||||
Cancelled
|
||||
</span>
|
||||
</t>
|
||||
<t
|
||||
t-if="picking.state in ['draft', 'waiting', 'confirmed', 'assigned']"
|
||||
>
|
||||
<span class="badge badge-info label-text-align">
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
Preparation
|
||||
</span>
|
||||
</t>
|
||||
</a>
|
||||
</section>
|
||||
<section
|
||||
t-if="rma.refund_id"
|
||||
id="refund_section"
|
||||
style="page-break-inside: auto;"
|
||||
class="mt32"
|
||||
>
|
||||
<strong class="d-block mb-1">Refund</strong>
|
||||
<t t-set="refund" t-value="rma.refund_id" />
|
||||
<t
|
||||
t-set="report_url"
|
||||
t-value="refund.get_portal_url(report_type='pdf')"
|
||||
/>
|
||||
<a
|
||||
class="list-group-item list-group-item-action d-flex flex-wrap align-items-center justify-content-between py-2 px-3"
|
||||
t-att-href="report_url"
|
||||
>
|
||||
<div>
|
||||
<i
|
||||
class="fa fa-pencil-square-o mr-1"
|
||||
role="img"
|
||||
aria-label="Download"
|
||||
title="Download"
|
||||
/>
|
||||
<span t-esc="refund.name" class="mr-lg-3" />
|
||||
<div class="d-lg-inline-block">
|
||||
Date:
|
||||
<span class="text-muted" t-field="refund.invoice_date" />
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
t-if="refund.state == 'paid'"
|
||||
class="small text-success orders_label_text_align"
|
||||
>
|
||||
<i class="fa fa-fw fa-check" />
|
||||
<b>Paid</b>
|
||||
</span>
|
||||
<span t-else="" class="small text-info orders_label_text_align">
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
<b>Waiting Payment</b>
|
||||
</span>
|
||||
</a>
|
||||
</section>
|
||||
<section
|
||||
t-if="rma.delivery_move_ids"
|
||||
id="reception_section"
|
||||
style="page-break-inside: auto;"
|
||||
class="mt32"
|
||||
>
|
||||
<strong class="d-block mb-1">Delivery</strong>
|
||||
<ul class="list-group mb-4">
|
||||
<t
|
||||
t-foreach="rma.delivery_move_ids.mapped('picking_id')"
|
||||
t-as="picking"
|
||||
>
|
||||
<strong class="d-block mb-1">Reception</strong>
|
||||
<t t-set="picking" t-value="rma.reception_move_id.picking_id" />
|
||||
<t
|
||||
t-set="report_url"
|
||||
t-value="'/my/rma/picking/pdf/%s/%s?%s' % (rma.id, picking.id, keep_query())"
|
||||
@@ -386,134 +448,14 @@
|
||||
</span>
|
||||
</t>
|
||||
</a>
|
||||
</section>
|
||||
<section
|
||||
t-if="rma.refund_id"
|
||||
id="refund_section"
|
||||
style="page-break-inside: auto;"
|
||||
class="mt32"
|
||||
>
|
||||
<strong class="d-block mb-1">Refund</strong>
|
||||
<t t-set="refund" t-value="rma.refund_id" />
|
||||
<t
|
||||
t-set="report_url"
|
||||
t-value="refund.get_portal_url(report_type='pdf')"
|
||||
/>
|
||||
<a
|
||||
class="list-group-item list-group-item-action d-flex flex-wrap align-items-center justify-content-between py-2 px-3"
|
||||
t-att-href="report_url"
|
||||
>
|
||||
<div>
|
||||
<i
|
||||
class="fa fa-pencil-square-o mr-1"
|
||||
role="img"
|
||||
aria-label="Download"
|
||||
title="Download"
|
||||
/>
|
||||
<span t-esc="refund.name" class="mr-lg-3" />
|
||||
<div class="d-lg-inline-block">
|
||||
Date:
|
||||
<span
|
||||
class="text-muted"
|
||||
t-field="refund.invoice_date"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
t-if="refund.state == 'paid'"
|
||||
class="small text-success orders_label_text_align"
|
||||
>
|
||||
<i class="fa fa-fw fa-check" />
|
||||
<b>Paid</b>
|
||||
</span>
|
||||
<span
|
||||
t-else=""
|
||||
class="small text-info orders_label_text_align"
|
||||
>
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
<b>Waiting Payment</b>
|
||||
</span>
|
||||
</a>
|
||||
</section>
|
||||
<section
|
||||
t-if="rma.delivery_move_ids"
|
||||
id="reception_section"
|
||||
style="page-break-inside: auto;"
|
||||
class="mt32"
|
||||
>
|
||||
<strong class="d-block mb-1">Delivery</strong>
|
||||
<ul class="list-group mb-4">
|
||||
<t
|
||||
t-foreach="rma.delivery_move_ids.mapped('picking_id')"
|
||||
t-as="picking"
|
||||
>
|
||||
<t
|
||||
t-set="report_url"
|
||||
t-value="'/my/rma/picking/pdf/%s/%s?%s' % (rma.id, picking.id, keep_query())"
|
||||
/>
|
||||
<a
|
||||
class="list-group-item list-group-item-action d-flex flex-wrap align-items-center justify-content-between py-2 px-3"
|
||||
t-att-href="report_url"
|
||||
>
|
||||
<div>
|
||||
<i
|
||||
class="fa fa-truck mr-1"
|
||||
role="img"
|
||||
aria-label="Download"
|
||||
title="Download"
|
||||
/>
|
||||
<span t-esc="picking.name" class="mr-lg-3" />
|
||||
<div class="d-lg-inline-block">
|
||||
Date:
|
||||
<span
|
||||
class="text-muted"
|
||||
t-field="picking.date"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="picking.state == 'done'">
|
||||
<span
|
||||
class="badge badge-success label-text-align"
|
||||
>
|
||||
<i class="fa fa-fw fa-truck" />
|
||||
Shipped
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="picking.state == 'partially_available'">
|
||||
<span
|
||||
class="badge badge-warning label-text-align"
|
||||
>
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
Partially Available
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="picking.state == 'cancel'">
|
||||
<span
|
||||
class="badge badge-danger label-text-align"
|
||||
>
|
||||
<i class="fa fa-fw fa-times" />
|
||||
Cancelled
|
||||
</span>
|
||||
</t>
|
||||
<t
|
||||
t-if="picking.state in ['draft', 'waiting', 'confirmed', 'assigned']"
|
||||
>
|
||||
<span class="badge badge-info label-text-align">
|
||||
<i class="fa fa-fw fa-clock-o" />
|
||||
Preparation
|
||||
</span>
|
||||
</t>
|
||||
</a>
|
||||
</t>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="description" class="mt-5" t-if="rma.description">
|
||||
<h3 class="">Description</h3>
|
||||
<hr class="mt-0 mb-1" />
|
||||
<t t-out="rma.description" />
|
||||
</section>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="description" class="mt-5" t-if="rma.description">
|
||||
<h3 class="">Description</h3>
|
||||
<hr class="mt-0 mb-1" />
|
||||
<t t-out="rma.description" />
|
||||
</section>
|
||||
<!-- chatter -->
|
||||
<div id="rma_communication" class="mt-4">
|
||||
<h2>Communication</h2>
|
||||
|
||||
@@ -37,11 +37,11 @@
|
||||
<field name="model">rma.tag</field>
|
||||
<field eval="6" name="priority" />
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<list>
|
||||
<field name="name" />
|
||||
<field name="is_public" />
|
||||
<field name="active" />
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_rma_tag" model="ir.actions.act_window">
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
<record id="rma_team_view_tree" model="ir.ui.view">
|
||||
<field name="model">rma.team</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<list>
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="name" />
|
||||
<field name="user_id" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="company_id" column_invisible="1" />
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="rma_team_view_form" model="ir.ui.view">
|
||||
@@ -52,30 +52,32 @@
|
||||
<field name="id" />
|
||||
<field name="name" />
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div
|
||||
class="oe_kanban_global_click"
|
||||
style="max-width: 200px"
|
||||
>
|
||||
<div class="o_kanban_record_top">
|
||||
<img
|
||||
t-att-src="kanban_image('res.users', 'avatar_128', record.id.raw_value)"
|
||||
height="40"
|
||||
width="40"
|
||||
class="oe_avatar oe_kanban_avatar_smallbox mb0"
|
||||
alt="Avatar"
|
||||
<t t-name="card" class="flex-row">
|
||||
<aside>
|
||||
<field
|
||||
name="avatar_128"
|
||||
widget="image"
|
||||
class="o_image_64_cover"
|
||||
alt="Avatar"
|
||||
/>
|
||||
</aside>
|
||||
<main class="ms-3">
|
||||
<field
|
||||
name="name"
|
||||
class="fw-bold fs-5"
|
||||
/>
|
||||
<div
|
||||
class="d-flex align-items-baseline text-break"
|
||||
>
|
||||
<i
|
||||
class="fa fa-envelope me-1"
|
||||
role="img"
|
||||
aria-label="Email"
|
||||
title="Email"
|
||||
/>
|
||||
<div
|
||||
class="o_kanban_record_headings ml8"
|
||||
>
|
||||
<strong
|
||||
class="o_kanban_record_title"
|
||||
>
|
||||
<field name="name" />
|
||||
</strong>
|
||||
</div>
|
||||
<field name="email" />
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
@@ -115,17 +117,14 @@
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
<chatter />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="rma_team_action" model="ir.actions.act_window">
|
||||
<field name="name">RMA team</field>
|
||||
<field name="res_model">rma.team</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Click to add a new RMA.
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<field name="name">rma.view.tree</field>
|
||||
<field name="model">rma</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree
|
||||
<list
|
||||
decoration-muted="state in ['cancelled', 'locked']"
|
||||
decoration-bf="state == 'draft' and product_id == False"
|
||||
decoration-danger="deadline and (deadline < current_date)"
|
||||
@@ -119,7 +119,7 @@
|
||||
<field name="deadline" />
|
||||
<field name="finalization_id" optional="hide" />
|
||||
<field name="state" />
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="rma_view_form" model="ir.ui.view">
|
||||
@@ -340,11 +340,7 @@
|
||||
groups="base.group_multi_company"
|
||||
readonly="state in ['locked', 'cancelled']"
|
||||
/>
|
||||
<field
|
||||
name="company_id"
|
||||
invisible="1"
|
||||
readonly="state in ['locked', 'cancelled']"
|
||||
/>
|
||||
<field name="company_id" invisible="1" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
@@ -373,7 +369,6 @@
|
||||
widget="priority"
|
||||
readonly="state != 'draft'"
|
||||
/>
|
||||
<field name="origin_split_rma_id" invisible="1" />
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
@@ -386,23 +381,8 @@
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
<field name="sent" invisible="1" />
|
||||
<field name="reception_move_id" invisible="1" />
|
||||
<field name="refund_id" invisible="1" />
|
||||
<field name="can_be_refunded" invisible="1" />
|
||||
<field name="can_be_returned" invisible="1" />
|
||||
<field name="can_be_replaced" invisible="1" />
|
||||
<field name="can_be_split" invisible="1" />
|
||||
<field name="can_be_locked" invisible="1" />
|
||||
<field name="can_be_finished" invisible="1" />
|
||||
<field name="commercial_partner_id" invisible="1" />
|
||||
<field name="remaining_qty" invisible="1" />
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="activity_ids" widget="mail_activity" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
<chatter />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -458,7 +438,7 @@
|
||||
<record id="rma_action" model="ir.actions.act_window">
|
||||
<field name="name">RMA</field>
|
||||
<field name="res_model">rma</field>
|
||||
<field name="view_mode">tree,form,pivot,calendar,activity</field>
|
||||
<field name="view_mode">list,form,pivot,calendar,activity</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# 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.exceptions import ValidationError
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ class RmaReDeliveryWizard(models.TransientModel):
|
||||
self.ensure_one()
|
||||
rma_ids = self.env.context.get("active_ids")
|
||||
if len(rma_ids) == 1 and self.product_uom_qty <= 0:
|
||||
raise ValidationError(_("Quantity must be greater than 0."))
|
||||
raise ValidationError(self.env._("Quantity must be greater than 0."))
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields_list):
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="uom_category_id" invisible="1" />
|
||||
<field
|
||||
name="product_id"
|
||||
invisible="type != 'replace' or rma_count > 1"
|
||||
@@ -37,8 +36,6 @@
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
<field name="rma_count" invisible="1" />
|
||||
<field name="type" invisible="1" />
|
||||
<footer>
|
||||
<button
|
||||
name="action_deliver"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class RmaReSplitWizard(models.TransientModel):
|
||||
@@ -60,7 +60,7 @@ class RmaReSplitWizard(models.TransientModel):
|
||||
self.product_uom_qty, self.product_uom
|
||||
)
|
||||
return {
|
||||
"name": _("Extracted RMA"),
|
||||
"name": self.env._("Extracted RMA"),
|
||||
"type": "ir.actions.act_window",
|
||||
"view_type": "form",
|
||||
"view_mode": "form",
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
<div class="o_row">
|
||||
<field name="product_uom_qty" />
|
||||
<field name="product_uom" groups="uom.group_uom" />
|
||||
<field name="product_uom" invisible="1" />
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
# Copyright 2020 Tecnativa - Ernesto Tejeda
|
||||
# Copyright 2023 Michael Tietz (MT Software) <mtietz@mt-software.de>
|
||||
# Copyright 2025 Tecnativa - Víctor Martínez
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
from copy import deepcopy
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.tools import float_compare
|
||||
from odoo.tools import float_is_zero
|
||||
|
||||
|
||||
class ReturnPickingLine(models.TransientModel):
|
||||
@@ -27,12 +28,13 @@ class ReturnPickingLine(models.TransientModel):
|
||||
|
||||
def _prepare_rma_vals(self):
|
||||
self.ensure_one()
|
||||
warehouse = self.move_id.picking_id.picking_type_id.warehouse_id
|
||||
return {
|
||||
"move_id": self.move_id.id,
|
||||
"product_id": self.move_id.product_id.id,
|
||||
"product_uom_qty": self.quantity,
|
||||
"product_uom": self.product_id.uom_id.id,
|
||||
"location_id": self.wizard_id.location_id.id or self.move_id.location_id.id,
|
||||
"location_id": warehouse.rma_loc_id.id,
|
||||
"operation_id": self.rma_operation_id.id,
|
||||
}
|
||||
|
||||
@@ -42,47 +44,17 @@ class ReturnPicking(models.TransientModel):
|
||||
|
||||
create_rma = fields.Boolean(string="Create RMAs")
|
||||
picking_type_code = fields.Selection(related="picking_id.picking_type_id.code")
|
||||
rma_location_ids = fields.Many2many(
|
||||
comodel_name="stock.location", compute="_compute_rma_location_id"
|
||||
)
|
||||
rma_operation_id = fields.Many2one(
|
||||
comodel_name="rma.operation",
|
||||
string="Requested operation",
|
||||
)
|
||||
# Expand domain for RMAs
|
||||
location_id = fields.Many2one(
|
||||
domain="create_rma and [('id', 'child_of', rma_location_ids)]"
|
||||
"or "
|
||||
"['|', ('id', '=', original_location_id), '|', '&', "
|
||||
"('return_location', '=', True), ('company_id', '=', False), '&', "
|
||||
"('return_location', '=', True), ('company_id', '=', company_id)]"
|
||||
)
|
||||
|
||||
@api.depends("picking_id")
|
||||
def _compute_rma_location_id(self):
|
||||
for record in self:
|
||||
record.rma_location_ids = (
|
||||
self.env["stock.warehouse"]
|
||||
.search([("company_id", "=", record.picking_id.company_id.id)])
|
||||
.rma_loc_id
|
||||
)
|
||||
|
||||
@api.onchange("create_rma")
|
||||
def _onchange_create_rma(self):
|
||||
if self.create_rma:
|
||||
warehouse = self.picking_id.picking_type_id.warehouse_id
|
||||
self.location_id = warehouse.rma_loc_id.id
|
||||
# We want to avoid setting the return move `to_refund` as it will change
|
||||
# the delivered quantities in the sale and set them to invoice.
|
||||
self.product_return_moves.to_refund = False
|
||||
else:
|
||||
# If self.create_rma is not True, the value of the location will be the
|
||||
# same as assigned by default
|
||||
location_id = self.picking_id.location_id.id
|
||||
return_picking_type = self.picking_id.picking_type_id.return_picking_type_id
|
||||
if return_picking_type.default_location_dest_id.return_location:
|
||||
location_id = return_picking_type.default_location_dest_id.id
|
||||
self.location_id = location_id
|
||||
|
||||
def _prepare_rma_partner_values(self):
|
||||
self.ensure_one()
|
||||
@@ -119,10 +91,8 @@ class ReturnPicking(models.TransientModel):
|
||||
for return_picking in self:
|
||||
global_vals = return_picking._prepare_rma_vals()
|
||||
for line in return_picking.product_return_moves:
|
||||
if (
|
||||
not line.move_id
|
||||
or float_compare(line.quantity, 0, line.product_id.uom_id.rounding)
|
||||
<= 0
|
||||
if not line.move_id or float_is_zero(
|
||||
line.quantity, precision_rounding=line.uom_id.rounding
|
||||
):
|
||||
continue
|
||||
vals = deepcopy(global_vals)
|
||||
@@ -130,7 +100,7 @@ class ReturnPicking(models.TransientModel):
|
||||
vals_list.append(vals)
|
||||
return vals_list
|
||||
|
||||
def create_returns(self):
|
||||
def action_create_returns(self):
|
||||
"""Override create_returns method for creating one or more
|
||||
'confirmed' RMAs after return a delivery picking in case
|
||||
'Create RMAs' checkbox is checked in this wizard.
|
||||
@@ -141,7 +111,7 @@ class ReturnPicking(models.TransientModel):
|
||||
if self.create_rma:
|
||||
if not self.picking_id.partner_id:
|
||||
raise ValidationError(
|
||||
_(
|
||||
self.env._(
|
||||
"You must specify the 'Customer' in the "
|
||||
"'Stock Picking' from which RMAs will be created"
|
||||
)
|
||||
@@ -165,11 +135,11 @@ class ReturnPicking(models.TransientModel):
|
||||
}
|
||||
)
|
||||
return {
|
||||
"name": _("Returned Picking"),
|
||||
"view_mode": "form,tree,calendar",
|
||||
"name": self.env._("Returned Picking"),
|
||||
"view_mode": "form,list,calendar",
|
||||
"res_model": "stock.picking",
|
||||
"res_id": picking.id,
|
||||
"type": "ir.actions.act_window",
|
||||
"context": ctx,
|
||||
}
|
||||
return super().create_returns()
|
||||
return super().action_create_returns()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<field name="model">stock.return.picking</field>
|
||||
<field name="inherit_id" ref="stock.view_stock_return_picking_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='product_return_moves']//tree" position="inside">
|
||||
<xpath expr="//field[@name='product_return_moves']//list" position="inside">
|
||||
<field
|
||||
name="rma_operation_id"
|
||||
required="parent.create_rma and quantity>0"
|
||||
@@ -22,10 +22,6 @@
|
||||
invisible="picking_type_code != 'outgoing'"
|
||||
/>
|
||||
<field name="rma_operation_id" invisible="not create_rma" />
|
||||
<field name="rma_location_ids" invisible="1" />
|
||||
<field name="picking_id" invisible="1" />
|
||||
<field name="picking_type_code" invisible="1" />
|
||||
<field name="location_id" invisible="1" />
|
||||
</group>
|
||||
</field>
|
||||
</field>
|
||||
|
||||
Reference in New Issue
Block a user