[IMP] rma: optionally group returns to customer

TT34806
This commit is contained in:
david
2022-03-07 17:40:03 +01:00
committed by Víctor Martínez
parent 606d6fa74c
commit aab626b87e
12 changed files with 249 additions and 178 deletions

View File

@@ -56,6 +56,14 @@ If you want to manually finish RMAs, you need to:
#. Go to *Settings > Inventory*. #. Go to *Settings > Inventory*.
#. Set *Finish RMAs manually* checkbox on. #. Set *Finish RMAs manually* checkbox on.
By default, returns to customer are grouped by shipping address, warehouse and company.
If you want to avoid this grouping you can:
#. Go to *Settings > Inventory*.
#. Set *Group RMA returns by customer address and warehouse* checkbox off.
The users will still be able to group those pickings from the wizard.
Usage Usage
===== =====

View File

@@ -10,7 +10,6 @@ msgstr ""
"PO-Revision-Date: 2022-01-17 12:39+0000\n" "PO-Revision-Date: 2022-01-17 12:39+0000\n"
"Last-Translator: xavigutipujol <jgutierrez@pyming.com>\n" "Last-Translator: xavigutipujol <jgutierrez@pyming.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
@@ -22,12 +21,12 @@ msgstr ""
#: model:mail.template,report_name:rma.mail_template_rma_notification #: model:mail.template,report_name:rma.mail_template_rma_notification
#: model:mail.template,report_name:rma.mail_template_rma_receipt_notification #: model:mail.template,report_name:rma.mail_template_rma_receipt_notification
msgid "${(object.name or '')}" msgid "${(object.name or '')}"
msgstr "" msgstr "${(object.name or '')}"
#. module: rma #. module: rma
#: model:mail.template,subject:rma.mail_template_rma_notification #: model:mail.template,subject:rma.mail_template_rma_notification
msgid "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })" msgid "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
msgstr "" msgstr "${object.company_id.name} RMA (Ref ${object.name or 'n/a' })"
#. module: rma #. module: rma
#: model:mail.template,subject:rma.mail_template_rma_receipt_notification #: model:mail.template,subject:rma.mail_template_rma_receipt_notification
@@ -42,11 +41,10 @@ msgstr ""
#. module: rma #. module: rma
#: model:mail.template,subject:rma.mail_template_rma_draft_notification #: model:mail.template,subject:rma.mail_template_rma_draft_notification
msgid "" msgid ""
"${object.company_id.name} Your RMA has been succesfully created (Ref " "${object.company_id.name} Your RMA has been succesfully created (Ref ${object.name or 'n/"
"${object.name or 'n/a' })" "a' })"
msgstr "" msgstr ""
"${object.company_id.name} Su RMA se ha creado con éxito (Ref ${object.name " "${object.company_id.name} Su RMA se ha creado con éxito (Ref ${object.name or 'n/a' })"
"or 'n/a' })"
#. module: rma #. module: rma
#: code:addons/rma/models/rma_team.py:0 #: code:addons/rma/models/rma_team.py:0
@@ -64,8 +62,8 @@ msgstr ""
#, python-format #, python-format
msgid "<b>E-mail subject:</b> %s<br/><br/><b>E-mail body:</b><br/>%s" msgid "<b>E-mail subject:</b> %s<br/><br/><b>E-mail body:</b><br/>%s"
msgstr "" msgstr ""
"<b>Asunto del correo electrónico:</b> %s<br/><br/><b>Cuerpo del correo " "<b>Asunto del correo electrónico:</b> %s<br/><br/><b>Cuerpo del correo electrónico:</b><br/"
"electrónico:</b><br/>%s" ">%s"
#. module: rma #. module: rma
#: model:mail.template,body_html:rma.mail_template_rma_notification #: model:mail.template,body_html:rma.mail_template_rma_notification
@@ -77,8 +75,7 @@ msgid ""
" (${object.partner_id.parent_id.name})\n" " (${object.partner_id.parent_id.name})\n"
" % endif\n" " % endif\n"
" <br/><br/>\n" " <br/><br/>\n"
" Here is the RMA <strong>${object.name}</strong> from ${object.company_id." " Here is the RMA <strong>${object.name}</strong> from ${object.company_id.name}.\n"
"name}.\n"
" <br/><br/>\n" " <br/><br/>\n"
" Do not hesitate to contact us if you have any question.\n" " Do not hesitate to contact us if you have any question.\n"
"</p>\n" "</p>\n"
@@ -92,8 +89,7 @@ msgstr ""
" (${object.partner_id.parent_id.name})\n" " (${object.partner_id.parent_id.name})\n"
" % endif\n" " % endif\n"
" <br/><br/>\n" " <br/><br/>\n"
" Aquí tiene el RMA <strong>${object.name}</strong> Desde ${object." " Aquí tiene el RMA <strong>${object.name}</strong> Desde ${object.company_id.name}.\n"
"company_id.name}.\n"
" <br/><br/>\n" " <br/><br/>\n"
" No dude en ponerse en contacto con nosotros si tiene alguna pregunta.\n" " No dude en ponerse en contacto con nosotros si tiene alguna pregunta.\n"
"</p>\n" "</p>\n"
@@ -170,12 +166,9 @@ msgstr ""
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid "" msgid "<i class=\"fa fa-download\" role=\"img\" aria-label=\"Download\" title=\"Download\"/>"
"<i class=\"fa fa-download\" role=\"img\" aria-label=\"Download\" title="
"\"Download\"/>"
msgstr "" msgstr ""
"<i class=\"fa fa-download\" role=\"img\" aria-label=\"Download\" title=" "<i class=\"fa fa-download\" role=\"img\" aria-label=\"Download\" title=\"Descargar\"/>"
"\"Descargar\"/>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
@@ -194,63 +187,63 @@ msgstr "<i class=\"fa fa-fw fa-clock-o\"/><b>Esperando Pago</b>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid "" msgid ""
"<i class=\"fa fa-pencil-square-o mr-1\" role=\"img\" aria-label=\"Download\" " "<i class=\"fa fa-pencil-square-o mr-1\" role=\"img\" aria-label=\"Download\" title="
"title=\"Download\"/>"
msgstr ""
"<i class=\"fa fa-pencil-square-o mr-1\" role=\"img\" aria-label=\"Download\" "
"title=\"Descargar\"/>"
#. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid ""
"<i class=\"fa fa-truck mr-1\" role=\"img\" aria-label=\"Download\" title="
"\"Download\"/>" "\"Download\"/>"
msgstr "" msgstr ""
"<i class=\"fa fa-truck mr-1\" role=\"img\" aria-label=\"Download\" title=" "<i class=\"fa fa-pencil-square-o mr-1\" role=\"img\" aria-label=\"Download\" title="
"\"Descargar\"/>" "\"Descargar\"/>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid "" msgid ""
"<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw fa-" "<i class=\"fa fa-truck mr-1\" role=\"img\" aria-label=\"Download\" title=\"Download\"/>"
"times\"/> Cancelled</span>"
msgstr "" msgstr ""
"<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw fa-" "<i class=\"fa fa-truck mr-1\" role=\"img\" aria-label=\"Download\" title=\"Descargar\"/>"
"times\"/>Cancelado</span>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid "" msgid ""
"<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-" "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw fa-times\"/> "
"clock-o\"/> Preparation</span>" "Cancelled</span>"
msgstr "" msgstr ""
"<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-" "<span class=\"badge badge-danger label-text-align\"><i class=\"fa fa-fw fa-times\"/"
"clock-o\"/>Preparación</span>" ">Cancelado</span>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid "" msgid ""
"<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw fa-" "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-clock-o\"/> "
"truck\"/> Shipped</span>" "Preparation</span>"
msgstr "" msgstr ""
"<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw fa-" "<span class=\"badge badge-info label-text-align\"><i class=\"fa fa-fw fa-clock-o\"/"
"truck\"/> Enviado</span>" ">Preparación</span>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
msgid "" msgid ""
"<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw fa-" "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw fa-truck\"/> "
"clock-o\"/> Partially Available</span>" "Shipped</span>"
msgstr "" msgstr ""
"<span class=\"badge badge-warning label-text-align\"><i class=\"fa fa-fw fa-" "<span class=\"badge badge-success label-text-align\"><i class=\"fa fa-fw fa-truck\"/> "
"clock-o\"/>Disponible parcialmente</span>" "Enviado</span>"
#. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
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>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form
msgid "" msgid ""
"<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-" "<span class=\"fa fa-lg fa-building-o\" title=\"Values set here are company-specific.\" "
"specific.\" groups=\"base.group_multi_company\"/>" "groups=\"base.group_multi_company\"/>"
msgstr "" msgstr ""
"<span class=\"fa fa-lg fa-building-o\" title=\"Valores específicos por compañía.\" groups="
"\"base.group_multi_company\"/>"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.portal_rma_page #: model_terms:ir.ui.view,arch_db:rma.portal_rma_page
@@ -376,11 +369,11 @@ msgstr "<strong>Estado:</strong>"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_defaults #: model:ir.model.fields,help:rma.field_rma_team__alias_defaults
msgid "" msgid ""
"A Python dictionary that will be evaluated to provide default values when " "A Python dictionary that will be evaluated to provide default values when creating new "
"creating new records for this alias." "records for this alias."
msgstr "" msgstr ""
"Diccionario Python a evaluar para proporcionar valores por defecto cuando un " "Diccionario Python a evaluar para proporcionar valores por defecto cuando un nuevo "
"nuevo registro se cree para este seudónimo." "registro se cree para este seudónimo."
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.rma_team_view_form #: model_terms:ir.ui.view,arch_db:rma.rma_team_view_form
@@ -808,9 +801,7 @@ msgstr "Enviar correo al cliente una vez se recepcionen los productos del RMA."
#: model:ir.model.fields,help:rma.field_res_company__rma_mail_draft_confirmation_template_id #: model:ir.model.fields,help:rma.field_res_company__rma_mail_draft_confirmation_template_id
#: model:ir.model.fields,help:rma.field_res_config_settings__rma_mail_draft_confirmation_template_id #: model:ir.model.fields,help:rma.field_res_config_settings__rma_mail_draft_confirmation_template_id
msgid "Email sent to the customer when they place an RMA from the portal" msgid "Email sent to the customer when they place an RMA from the portal"
msgstr "" msgstr "Enviar correo de confirmación al cliente una vez se tramite el RMA desde el portal"
"Enviar correo de confirmación al cliente una vez se tramite el RMA desde el "
"portal"
#. module: rma #. module: rma
#: code:addons/rma/wizard/rma_split.py:0 #: code:addons/rma/wizard/rma_split.py:0
@@ -914,14 +905,26 @@ msgstr "Agrupar por"
msgid "ID" msgid "ID"
msgstr "" msgstr ""
#. module: rma
#: model:ir.model.fields,field_description:rma.field_res_company__rma_return_grouping
#: model:ir.model.fields,field_description:rma.field_res_config_settings__rma_return_grouping
#: model:ir.model.fields,field_description:rma.field_rma_delivery_wizard__rma_return_grouping
msgid "Group RMA returns by customer address and warehouse"
msgstr "Agrupar las devoluciones de RMA a cliente por dirección de envío y almacén"
#. module: rma
#: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form
msgid "Group RMA returns by customer and warehouse."
msgstr "Agrupar las devoluciones de RMA a cliente por dirección de envío y almacén"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_parent_thread_id #: model:ir.model.fields,help:rma.field_rma_team__alias_parent_thread_id
msgid "" msgid ""
"ID of the parent record holding the alias (example: project holding the task " "ID of the parent record holding the alias (example: project holding the task creation "
"creation alias)" "alias)"
msgstr "" msgstr ""
"ID del registro padre que tiene el seudónimo. (ejemplo: el proyecto que " "ID del registro padre que tiene el seudónimo. (ejemplo: el proyecto que contiene el "
"contiene el seudónimo para la creación de tareas)" "seudónimo para la creación de tareas)"
#. module: rma #. module: rma
#: model:ir.model.fields,field_description:rma.field_rma__activity_exception_icon #: model:ir.model.fields,field_description:rma.field_rma__activity_exception_icon
@@ -959,11 +962,10 @@ msgstr ""
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__active #: model:ir.model.fields,help:rma.field_rma_team__active
msgid "" msgid ""
"If the active field is set to false, it will allow you to hide the RMA Team " "If the active field is set to false, it will allow you to hide the RMA Team without "
"without removing it." "removing it."
msgstr "" msgstr ""
"Si el campo activo se establece a Falso, permitirá ocultar El equipo de RMA " "Si el campo activo se establece a Falso, permitirá ocultar El equipo de RMA sin eliminarlo."
"sin eliminarlo."
#. module: rma #. module: rma
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
@@ -1078,19 +1080,17 @@ msgstr "Adjuntos principales"
#. module: rma #. module: rma
#: model_terms:ir.actions.act_window,help:rma.action_rma_finalization #: model_terms:ir.actions.act_window,help:rma.action_rma_finalization
msgid "" msgid ""
"Manage RMA finalization reasons to better classify them for tracking and " "Manage RMA finalization reasons to better classify them for tracking and analysis purposes."
"analysis purposes."
msgstr "" msgstr ""
"Adminitrar motivos de finalización de RMA para una mejor clasificación de " "Adminitrar motivos de finalización de RMA para una mejor clasificación de estos para su "
"estos para su seguimiento análisis posterior." "seguimiento análisis posterior."
#. module: rma #. module: rma
#: model_terms:ir.actions.act_window,help:rma.action_rma_tag #: model_terms:ir.actions.act_window,help:rma.action_rma_tag
msgid "" msgid "Manage RMA tags to better classify them for tracking and analysis purposes."
"Manage RMA tags to better classify them for tracking and analysis purposes."
msgstr "" msgstr ""
"Administrar etiquetas de RMA para clasificarlos de modo que mejore el " "Administrar etiquetas de RMA para clasificarlos de modo que mejore el seguimiento y "
"seguimiento y análisis de los mismos." "análisis de los mismos."
#. module: rma #. module: rma
#: model:ir.module.category,description:rma.rma_module_category #: model:ir.module.category,description:rma.rma_module_category
@@ -1199,13 +1199,12 @@ msgstr "Número de mensajes no leidos"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_force_thread_id #: model:ir.model.fields,help:rma.field_rma_team__alias_force_thread_id
msgid "" msgid ""
"Optional ID of a thread (record) to which all incoming messages will be " "Optional ID of a thread (record) to which all incoming messages will be attached, even if "
"attached, even if they did not reply to it. If set, this will disable the " "they did not reply to it. If set, this will disable the creation of new records completely."
"creation of new records completely."
msgstr "" msgstr ""
"Id. opcional de un hilo (registro) al que todos los mensajes entrantes serán " "Id. opcional de un hilo (registro) al que todos los mensajes entrantes serán adjuntados, "
"adjuntados, incluso si no fueron respuestas del mismo. Si se establece, se " "incluso si no fueron respuestas del mismo. Si se establece, se deshabilitará completamente "
"deshabilitará completamente la creación de nuevos registros." "la creación de nuevos registros."
#. module: rma #. module: rma
#: model:ir.ui.menu,name:rma.rma_orders_menu #: model:ir.ui.menu,name:rma.rma_orders_menu
@@ -1245,12 +1244,11 @@ msgstr "ID del hilo del registro padre"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_parent_model_id #: model:ir.model.fields,help:rma.field_rma_team__alias_parent_model_id
msgid "" msgid ""
"Parent model holding the alias. The model holding the alias reference is not " "Parent model holding the alias. The model holding the alias reference is not necessarily "
"necessarily the model given by alias_model_id (example: project " "the model given by alias_model_id (example: project (parent_model) and task (model))"
"(parent_model) and task (model))"
msgstr "" msgstr ""
"Modelo padre que contiene el alias. El modelo que contiene la referencia " "Modelo padre que contiene el alias. El modelo que contiene la referencia alias no es "
"alias no es necesariamente el modelo dado por alias_model_id" "necesariamente el modelo dado por alias_model_id"
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.rma_view_search #: model_terms:ir.ui.view,arch_db:rma.rma_view_search
@@ -1263,15 +1261,13 @@ msgid ""
"Policy to post a message on the document using the mailgateway.\n" "Policy to post a message on the document using the mailgateway.\n"
"- everyone: everyone can post\n" "- everyone: everyone can post\n"
"- partners: only authenticated partners\n" "- partners: only authenticated partners\n"
"- followers: only followers of the related document or members of following " "- followers: only followers of the related document or members of following channels\n"
"channels\n"
msgstr "" msgstr ""
"Política para publicar un mensaje en el documento utilizando el servidor de " "Política para publicar un mensaje en el documento utilizando el servidor de correo.\n"
"correo.\n"
"- todo el mundo: todos pueden publicar\n" "- todo el mundo: todos pueden publicar\n"
"- socios: sólo socios autenticados\n" "- socios: sólo socios autenticados\n"
"- seguidores: sólo seguidores del documento relacionado o miembros de los " "- seguidores: sólo seguidores del documento relacionado o miembros de los siguientes "
"siguientes canales\n" "canales\n"
#. module: rma #. module: rma
#: model:ir.model.fields,field_description:rma.field_rma__access_url #: model:ir.model.fields,field_description:rma.field_rma__access_url
@@ -1330,12 +1326,8 @@ msgstr "Cantidad a extraer"
#. module: rma #. module: rma
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
#, python-format #, python-format
msgid "" msgid "Quantity to extract cannot be greater than remaining delivery quantity (%s %s)"
"Quantity to extract cannot be greater than remaining delivery quantity (%s " msgstr "La cantidad a extraer no puede ser mayor que la cantidad de entrega restante(%s %s)"
"%s)"
msgstr ""
"La cantidad a extraer no puede ser mayor que la cantidad de entrega "
"restante(%s %s)"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_split_wizard__product_uom_qty #: model:ir.model.fields,help:rma.field_rma_split_wizard__product_uom_qty
@@ -1343,13 +1335,11 @@ msgid "Quantity to extract to a new RMA."
msgstr "Cantidad a extraer en nuevo RMA." msgstr "Cantidad a extraer en nuevo RMA."
#. module: rma #. module: rma
#: model:ir.actions.act_window,name:rma.rma_action #: model:ir.actions.act_window,name:rma.rma_action model:ir.model,name:rma.model_rma
#: model:ir.model,name:rma.model_rma
#: model:ir.model.fields,field_description:rma.field_account_move_line__rma_id #: model:ir.model.fields,field_description:rma.field_account_move_line__rma_id
#: model:ir.model.fields,field_description:rma.field_rma_split_wizard__rma_id #: model:ir.model.fields,field_description:rma.field_rma_split_wizard__rma_id
#: model:ir.model.fields,field_description:rma.field_stock_warehouse__rma #: model:ir.model.fields,field_description:rma.field_stock_warehouse__rma
#: model:ir.module.category,name:rma.rma_module_category #: model:ir.module.category,name:rma.rma_module_category model:ir.ui.menu,name:rma.rma_menu
#: model:ir.ui.menu,name:rma.rma_menu
#: model_terms:ir.ui.view,arch_db:rma.view_partner_form #: model_terms:ir.ui.view,arch_db:rma.view_partner_form
#: model_terms:ir.ui.view,arch_db:rma.view_picking_form #: model_terms:ir.ui.view,arch_db:rma.view_picking_form
msgid "RMA" msgid "RMA"
@@ -1481,8 +1471,7 @@ msgid "RMA Tag"
msgstr "Etiqueta RMA" msgstr "Etiqueta RMA"
#. module: rma #. module: rma
#: model:ir.actions.act_window,name:rma.action_rma_tag #: model:ir.actions.act_window,name:rma.action_rma_tag model:ir.model,name:rma.model_rma_tag
#: model:ir.model,name:rma.model_rma_tag
#: model:ir.ui.menu,name:rma.rma_configuration_rma_tag_menu #: model:ir.ui.menu,name:rma.rma_configuration_rma_tag_menu
#: model_terms:ir.ui.view,arch_db:rma.rma_tag_view_search #: model_terms:ir.ui.view,arch_db:rma.rma_tag_view_search
#: model_terms:ir.ui.view,arch_db:rma.view_rma_tag_list #: model_terms:ir.ui.view,arch_db:rma.view_rma_tag_list
@@ -1532,8 +1521,7 @@ msgstr "RMAs que originaron esta orden"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_stock_warehouse__rma #: model:ir.model.fields,help:rma.field_stock_warehouse__rma
msgid "RMA related products can be stored in this warehouse." msgid "RMA related products can be stored in this warehouse."
msgstr "" msgstr "Productos relacionados con el RMA pueden ser guardados en este almacén."
"Productos relacionados con el RMA pueden ser guardados en este almacén."
#. module: rma #. module: rma
#: model:ir.model,name:rma.model_rma_operation #: model:ir.model,name:rma.model_rma_operation
@@ -1664,27 +1652,25 @@ msgstr "Reemplazado"
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
#, python-format #, python-format
msgid "" msgid ""
"Replacement: Move <a href=\"#\" data-oe-model=\"stock.move\" data-oe-id=\"%d" "Replacement: Move <a href=\"#\" data-oe-model=\"stock.move\" data-oe-id=\"%d\">%s</a> "
"\">%s</a> (Picking <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id=" "(Picking <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id=\"%d\">%s</a>) has been "
"\"%d\">%s</a>) has been created." "created."
msgstr "" msgstr ""
"Reemplazo: El movimiento <a href=\"#\" data-oe-model=\"stock.move\" data-oe-" "Reemplazo: El movimiento <a href=\"#\" data-oe-model=\"stock.move\" data-oe-id=\"%d\">%s</"
"id=\"%d\">%s</a> (Orden de entrega <a href=\"#\" data-oe-model=\"stock." "a> (Orden de entrega <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id=\"%d\">%s</"
"picking\" data-oe-id=\"%d\">%s</a>) ha sido creado." "a>) ha sido creado."
#. module: rma #. module: rma
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
#, python-format #, python-format
msgid "" msgid ""
"Replacement:<br/>Product <a href=\"#\" data-oe-model=\"product.product\" " "Replacement:<br/>Product <a href=\"#\" data-oe-model=\"product.product\" data-oe-id=\"%d\">"
"data-oe-id=\"%d\">%s</a><br/>Quantity %f %s<br/>This replacement did not " "%s</a><br/>Quantity %f %s<br/>This replacement did not create a new move, but one of the "
"create a new move, but one of the previously created moves was updated with " "previously created moves was updated with this data."
"this data."
msgstr "" msgstr ""
"Reemplazo:<br/>Producto <a href=\"#\" data-oe-model=\"product.product\" data-" "Reemplazo:<br/>Producto <a href=\"#\" data-oe-model=\"product.product\" data-oe-id=\"%d\">"
"oe-id=\"%d\">%s</a><br/>Cantidad %f %s<br/>El reemplazo realizado no creó un " "%s</a><br/>Cantidad %f %s<br/>El reemplazo realizado no creó un movimiento nuevo, pero uno "
"movimiento nuevo, pero uno de los movimientos creados anteriormente fué " "de los movimientos creados anteriormente fué actualizado con estos datos."
"actualizado con estos datos."
#. module: rma #. module: rma
#: model:ir.ui.menu,name:rma.rma_reporting_menu #: model:ir.ui.menu,name:rma.rma_reporting_menu
@@ -1729,11 +1715,11 @@ msgstr "Devolver al cliente"
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
#, python-format #, python-format
msgid "" msgid ""
"Return: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id=\"%d\">%s</" "Return: <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id=\"%d\">%s</a> has been "
"a> has been created." "created."
msgstr "" msgstr ""
"Devolución: La orden de entrega <a href=\"#\" data-oe-model=\"stock.picking" "Devolución: La orden de entrega <a href=\"#\" data-oe-model=\"stock.picking\" data-oe-id="
"\" data-oe-id=\"%d\">%s</a> ha sido creada." "\"%d\">%s</a> ha sido creada."
#. module: rma #. module: rma
#: model:ir.model.fields.selection,name:rma.selection__rma__state__returned #: model:ir.model.fields.selection,name:rma.selection__rma__state__returned
@@ -1870,12 +1856,10 @@ msgstr "Dividir RMA"
#. module: rma #. module: rma
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
#, python-format #, python-format
msgid "" msgid "Split: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> has been created."
"Split: <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> has been "
"created."
msgstr "" msgstr ""
"División: El RMA <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</" "División: El RMA <a href=\"#\" data-oe-model=\"rma\" data-oe-id=\"%d\">%s</a> ha sido "
"a> ha sido creado." "creado."
#. module: rma #. module: rma
#: model:ir.model.fields,field_description:rma.field_rma__state #: model:ir.model.fields,field_description:rma.field_rma__state
@@ -1884,8 +1868,7 @@ msgid "State"
msgstr "Estado" msgstr "Estado"
#. module: rma #. module: rma
#: code:addons/rma/controllers/main.py:0 #: code:addons/rma/controllers/main.py:0 model_terms:ir.ui.view,arch_db:rma.portal_my_rmas
#: model_terms:ir.ui.view,arch_db:rma.portal_my_rmas
#, python-format #, python-format
msgid "Status" msgid "Status"
msgstr "Estado" msgstr "Estado"
@@ -1957,46 +1940,44 @@ msgstr ""
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_model_id #: model:ir.model.fields,help:rma.field_rma_team__alias_model_id
msgid "" msgid ""
"The model (Odoo Document Kind) to which this alias corresponds. Any incoming " "The model (Odoo Document Kind) to which this alias corresponds. Any incoming email that "
"email that does not reply to an existing record will cause the creation of a " "does not reply to an existing record will cause the creation of a new record of this model "
"new record of this model (e.g. a Project Task)" "(e.g. a Project Task)"
msgstr "" msgstr ""
"El modelo (Tipo de documento de Odoo) al que corresponde este seudónimo. " "El modelo (Tipo de documento de Odoo) al que corresponde este seudónimo. Cualquier correo "
"Cualquier correo entrante que no sea respuesta a un registro existente, " "entrante que no sea respuesta a un registro existente, causará la creación de un nuevo "
"causará la creación de un nuevo registro de este modelo" "registro de este modelo"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_name #: model:ir.model.fields,help:rma.field_rma_team__alias_name
msgid "" msgid ""
"The name of the email alias, e.g. 'jobs' if you want to catch emails for " "The name of the email alias, e.g. 'jobs' if you want to catch emails for <jobs@example."
"<jobs@example.odoo.com>" "odoo.com>"
msgstr "" msgstr ""
"El nombre de este seudónimo de correo electrónico. Por ejemplo, \"trabajos" "El nombre de este seudónimo de correo electrónico. Por ejemplo, \"trabajos\", si lo que "
"\", si lo que quiere es obtener los correos para <trabajos@example.odoo.com>" "quiere es obtener los correos para <trabajos@example.odoo.com>"
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_rma_team__alias_user_id #: model:ir.model.fields,help:rma.field_rma_team__alias_user_id
msgid "" msgid ""
"The owner of records created upon receiving emails on this alias. If this " "The owner of records created upon receiving emails on this alias. If this field is not set "
"field is not set the system will attempt to find the right owner based on " "the system will attempt to find the right owner based on the sender (From) address, or "
"the sender (From) address, or will use the Administrator account if no " "will use the Administrator account if no system user is found for that address."
"system user is found for that address."
msgstr "" msgstr ""
"El propietario de los registros creados al recibir correos electrónicos en " "El propietario de los registros creados al recibir correos electrónicos en este seudónimo. "
"este seudónimo. Si el campo no está establecido, el sistema tratará de " "Si el campo no está establecido, el sistema tratará de encontrar el propietario adecuado "
"encontrar el propietario adecuado basado en la dirección del emisor (De), o " "basado en la dirección del emisor (De), o usará la cuenta de administrador si no se "
"usará la cuenta de administrador si no se encuentra un usuario para esa " "encuentra un usuario para esa dirección."
"dirección."
#. module: rma #. module: rma
#: code:addons/rma/models/stock_move.py:0 #: code:addons/rma/models/stock_move.py:0
#, python-format #, python-format
msgid "" msgid ""
"The quantity done for the product '%s' must be equal to its initial demand " "The quantity done for the product '%s' must be equal to its initial demand because the "
"because the stock move is linked to an RMA (%s)." "stock move is linked to an RMA (%s)."
msgstr "" msgstr ""
"La cantidad realizada para el producto '%s' debe ser igual a la demanda " "La cantidad realizada para el producto '%s' debe ser igual a la demanda inicial porque el "
"inicial porque el movimiento está enlazado a un RMA (%s)." "movimiento está enlazado a un RMA (%s)."
#. module: rma #. module: rma
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
@@ -2013,11 +1994,11 @@ msgstr "La etiqueta es visible en la vista de portal"
#: code:addons/rma/models/account_move.py:0 #: code:addons/rma/models/account_move.py:0
#, python-format #, python-format
msgid "" msgid ""
"There is at least one invoice lines whose quantity is less than the quantity " "There is at least one invoice lines whose quantity is less than the quantity specified in "
"specified in its linked RMA." "its linked RMA."
msgstr "" msgstr ""
"Hay al menos una linea de factura que tiene una cantidad menor que la " "Hay al menos una linea de factura que tiene una cantidad menor que la cantidad "
"cantidad especificada en el RMA asociado." "especificada en el RMA asociado."
#. module: rma #. module: rma
#: code:addons/rma/models/rma.py:0 #: code:addons/rma/models/rma.py:0
@@ -2159,8 +2140,8 @@ msgstr ""
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form
msgid "" msgid ""
"When customers themselves place an RMA from the portal, send an automatic " "When customers themselves place an RMA from the portal, send an automatic notification "
"notification acknowleging it." "acknowleging it."
msgstr "" msgstr ""
#. module: rma #. module: rma
@@ -2177,22 +2158,19 @@ msgstr ""
#. module: rma #. module: rma
#: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form #: model_terms:ir.ui.view,arch_db:rma.res_config_settings_view_form
msgid "" msgid "When the RMA products are received, send an automatic information email."
"When the RMA products are received, send an automatic information email."
msgstr "" msgstr ""
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_res_company__send_rma_receipt_confirmation #: model:ir.model.fields,help:rma.field_res_company__send_rma_receipt_confirmation
#: model:ir.model.fields,help:rma.field_res_config_settings__send_rma_receipt_confirmation #: model:ir.model.fields,help:rma.field_res_config_settings__send_rma_receipt_confirmation
msgid "" msgid "When the RMA receipt is confirmed, send a confirmation email to the customer."
"When the RMA receipt is confirmed, send a confirmation email to the customer."
msgstr "" msgstr ""
#. module: rma #. module: rma
#: model:ir.model.fields,help:rma.field_res_company__send_rma_confirmation #: model:ir.model.fields,help:rma.field_res_company__send_rma_confirmation
#: model:ir.model.fields,help:rma.field_res_config_settings__send_rma_confirmation #: model:ir.model.fields,help:rma.field_res_config_settings__send_rma_confirmation
msgid "" msgid "When the delivery is confirmed, send a confirmation email to the customer."
"When the delivery is confirmed, send a confirmation email to the customer."
msgstr "" msgstr ""
#. module: rma #. module: rma
@@ -2205,18 +2183,14 @@ msgstr "No puede eliminar RMAs que no estén en estado borrador"
#: code:addons/rma/wizard/stock_picking_return.py:0 #: code:addons/rma/wizard/stock_picking_return.py:0
#, python-format #, python-format
msgid "" msgid ""
"You must specify the 'Customer' in the 'Stock Picking' from which RMAs will " "You must specify the 'Customer' in the 'Stock Picking' from which RMAs will be created"
"be created"
msgstr "" msgstr ""
"Debe seleccionar el 'Cliente' en la 'Orden de Entrega' desde la cual los " "Debe seleccionar el 'Cliente' en la 'Orden de Entrega' desde la cual los RMAs serán creados"
"RMAs serán creados"
#. module: rma #. module: rma
#: model:res.groups,comment:rma.rma_group_user_all #: model:res.groups,comment:rma.rma_group_user_all
msgid "" msgid "the user will have access to all records of everyone in the RMA application."
"the user will have access to all records of everyone in the RMA application." msgstr "El usuario tendrá acceso a todos los registros de RMA de todos lo usuarios."
msgstr ""
"El usuario tendrá acceso a todos los registros de RMA de todos lo usuarios."
#. module: rma #. module: rma
#: model:res.groups,comment:rma.rma_group_user_own #: model:res.groups,comment:rma.rma_group_user_own
@@ -2225,9 +2199,5 @@ msgstr "el usuario tendrá acceso solo a sus propios RMAs."
#. module: rma #. module: rma
#: model:res.groups,comment:rma.rma_group_manager #: model:res.groups,comment:rma.rma_group_manager
msgid "" msgid "the user will have an access to the RMA configuration as well as statistic reports."
"the user will have an access to the RMA configuration as well as statistic " msgstr "El usuario tendrá acceso a la configuración de RMA y a los informes estasticos."
"reports."
msgstr ""
"El usuario tendrá acceso a la configuración de RMA y a los informes "
"estadísticos."

View File

@@ -6,6 +6,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Odoo Server 14.0\n" "Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-03-07 16:33+0000\n"
"PO-Revision-Date: 2022-03-07 16:33+0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"

View File

@@ -25,6 +25,10 @@ class Company(models.Model):
except ValueError: except ValueError:
return False return False
rma_return_grouping = fields.Boolean(
string="Group RMA returns by customer address and warehouse",
default=True,
)
send_rma_confirmation = fields.Boolean( send_rma_confirmation = fields.Boolean(
string="Send RMA Confirmation", string="Send RMA Confirmation",
help="When the delivery is confirmed, send a confirmation email " help="When the delivery is confirmed, send a confirmation email "

View File

@@ -11,6 +11,10 @@ class ResConfigSettings(models.TransientModel):
help="Allow to finish an RMA without returning back a product or refunding", help="Allow to finish an RMA without returning back a product or refunding",
implied_group="rma.group_rma_manual_finalization", implied_group="rma.group_rma_manual_finalization",
) )
rma_return_grouping = fields.Boolean(
related="company_id.rma_return_grouping",
readonly=False,
)
send_rma_confirmation = fields.Boolean( send_rma_confirmation = fields.Boolean(
related="company_id.send_rma_confirmation", related="company_id.send_rma_confirmation",
readonly=False, readonly=False,

View File

@@ -1088,6 +1088,9 @@ class Rma(models.Model):
# Returning business methods # Returning business methods
def create_return(self, scheduled_date, qty=None, uom=None): def create_return(self, scheduled_date, qty=None, uom=None):
"""Intended to be invoked by the delivery wizard""" """Intended to be invoked by the delivery wizard"""
group_returns = self.env.company.rma_return_grouping
if "rma_return_grouping" in self.env.context:
group_returns = self.env.context.get("rma_return_grouping")
self._ensure_can_be_returned() self._ensure_can_be_returned()
self._ensure_qty_to_return(qty, uom) self._ensure_qty_to_return(qty, uom)
group_dict = {} group_dict = {}
@@ -1100,7 +1103,11 @@ class Rma(models.Model):
) )
group_dict.setdefault(key, self.env["rma"]) group_dict.setdefault(key, self.env["rma"])
group_dict[key] |= record group_dict[key] |= record
for rmas in group_dict.values(): if group_returns:
grouped_rmas = group_dict.values()
else:
grouped_rmas = rmas_to_return
for rmas in grouped_rmas:
origin = ", ".join(rmas.mapped("name")) origin = ", ".join(rmas.mapped("name"))
rma_out_type = rmas[0].warehouse_id.rma_out_type_id rma_out_type = rmas[0].warehouse_id.rma_out_type_id
picking_form = Form( picking_form = Form(

View File

@@ -11,3 +11,11 @@ If you want to manually finish RMAs, you need to:
#. Go to *Settings > Inventory*. #. Go to *Settings > Inventory*.
#. Set *Finish RMAs manually* checkbox on. #. Set *Finish RMAs manually* checkbox on.
By default, returns to customer are grouped by shipping address, warehouse and company.
If you want to avoid this grouping you can:
#. Go to *Settings > Inventory*.
#. Set *Group RMA returns by customer address and warehouse* checkbox off.
The users will still be able to group those pickings from the wizard.

View File

@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" /> <meta name="generator" content="Docutils: http://docutils.sourceforge.net/" />
<title>Return Merchandise Authorization Management</title> <title>Return Merchandise Authorization Management</title>
<style type="text/css"> <style type="text/css">
@@ -406,6 +406,13 @@ one.</li>
<li>Go to <em>Settings &gt; Inventory</em>.</li> <li>Go to <em>Settings &gt; Inventory</em>.</li>
<li>Set <em>Finish RMAs manually</em> checkbox on.</li> <li>Set <em>Finish RMAs manually</em> checkbox on.</li>
</ol> </ol>
<p>By default, returns to customer are grouped by shipping address, warehouse and company.
If you want to avoid this grouping you can:</p>
<ol class="arabic simple">
<li>Go to <em>Settings &gt; Inventory</em>.</li>
<li>Set <em>Group RMA returns by customer address and warehouse</em> checkbox off.</li>
</ol>
<p>The users will still be able to group those pickings from the wizard.</p>
</div> </div>
<div class="section" id="usage"> <div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1> <h1><a class="toc-backref" href="#id2">Usage</a></h1>

View File

@@ -62,6 +62,8 @@ class TestRma(SavepointCase):
{"name": "[Test] It's out of warranty. To be scrapped"} {"name": "[Test] It's out of warranty. To be scrapped"}
) )
cls.env.ref("rma.group_rma_manual_finalization").users |= cls.env.user cls.env.ref("rma.group_rma_manual_finalization").users |= cls.env.user
# Ensure grouping
cls.env.company.rma_return_grouping = True
def _create_rma(self, partner=None, product=None, qty=None, location=None): def _create_rma(self, partner=None, product=None, qty=None, location=None):
rma_form = Form(self.env["rma"]) rma_form = Form(self.env["rma"])
@@ -603,6 +605,39 @@ class TestRmaCase(TestRma):
pick_2.button_validate() pick_2.button_validate()
self.assertEqual(all_rmas.mapped("state"), ["returned"] * 4) self.assertEqual(all_rmas.mapped("state"), ["returned"] * 4)
def test_mass_return_to_customer_ungrouped(self):
"""We can choose to avoid the customer returns grouping"""
self.env.company.rma_return_grouping = False
# Create, confirm and receive rma_1
rma_1 = self._create_confirm_receive(
self.partner, self.product, 10, self.rma_loc
)
# create, confirm and receive 3 more RMAs
# rma_2: Same partner and same product as rma_1
rma_2 = self._create_confirm_receive(
self.partner, self.product, 15, self.rma_loc
)
# rma_3: Same partner and different product than rma_1
product = self.product_product.create(
{"name": "Product 2 test", "type": "product"}
)
rma_3 = self._create_confirm_receive(self.partner, product, 20, self.rma_loc)
# rma_4: Different partner and same product as rma_1
partner = self.res_partner.create({"name": "Partner 2 test"})
rma_4 = self._create_confirm_receive(partner, product, 25, self.rma_loc)
# all rmas are ready to be returned to the customer
all_rmas = rma_1 | rma_2 | rma_3 | rma_4
self.assertEqual(all_rmas.mapped("state"), ["received"] * 4)
self.assertEqual(all_rmas.mapped("can_be_returned"), [True] * 4)
# Mass return of those four RMAs
delivery_wizard = (
self.env["rma.delivery.wizard"]
.with_context(active_ids=all_rmas.ids, rma_delivery_type="return")
.create({})
)
delivery_wizard.action_deliver()
self.assertEqual(4, len(all_rmas.delivery_move_ids.picking_id))
def test_rma_from_picking_return(self): def test_rma_from_picking_return(self):
# Create a return from a delivery picking # Create a return from a delivery picking
origin_delivery = self._create_delivery() origin_delivery = self._create_delivery()

View File

@@ -23,6 +23,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="rma_return_grouping" />
</div>
<div class="o_setting_right_pane">
<label for="rma_return_grouping" />
<span
class="fa fa-lg fa-building-o"
title="Values set here are company-specific."
groups="base.group_multi_company"
/>
<div class="text-muted">
Group RMA returns by customer and warehouse.
</div>
</div>
</div>
<div <div
class="col-12 col-lg-6 o_setting_box" class="col-12 col-lg-6 o_setting_box"
title="Send automatic RMA info to customer" title="Send automatic RMA info to customer"

View File

@@ -31,6 +31,10 @@ class RmaReDeliveryWizard(models.TransientModel):
required=True, required=True,
) )
uom_category_id = fields.Many2one(related="product_id.uom_id.category_id") uom_category_id = fields.Many2one(related="product_id.uom_id.category_id")
rma_return_grouping = fields.Boolean(
string="Group RMA returns by customer address and warehouse",
default=lambda self: self.env.company.rma_return_grouping,
)
@api.constrains("product_uom_qty") @api.constrains("product_uom_qty")
def _check_product_uom_qty(self): def _check_product_uom_qty(self):
@@ -87,4 +91,6 @@ class RmaReDeliveryWizard(models.TransientModel):
qty = uom = None qty = uom = None
if self.rma_count == 1: if self.rma_count == 1:
qty, uom = self.product_uom_qty, self.product_uom qty, uom = self.product_uom_qty, self.product_uom
rma.create_return(self.scheduled_date, qty, uom) rma.with_context(
rma_return_grouping=self.rma_return_grouping
).create_return(self.scheduled_date, qty, uom)

View File

@@ -14,6 +14,10 @@
name="warehouse_id" name="warehouse_id"
attrs="{'invisible': [('type', '!=', 'replace')]}" attrs="{'invisible': [('type', '!=', 'replace')]}"
/> />
<field
name="rma_return_grouping"
attrs="{'invisible': ['|', ('type', '=', 'replace'), ('rma_count', '=', 1)]}"
/>
</group> </group>
<group> <group>
<field name="uom_category_id" invisible="1" /> <field name="uom_category_id" invisible="1" />