From 995168186474224cb7c3ef2bd2b4029aa334334d Mon Sep 17 00:00:00 2001 From: Tu Nombre Date: Fri, 31 Mar 2023 12:54:30 +0200 Subject: [PATCH 1/6] [14.0][ADD] purchase_import_wizard: --- purchase_import_wizard/__init__.py | 1 + purchase_import_wizard/__manifest__.py | 25 + purchase_import_wizard/i18n/es.po | 627 ++++++++++++++++++ .../i18n/purchase_import_wizard.pot | 617 +++++++++++++++++ purchase_import_wizard/models/__init__.py | 1 + .../models/purchase_order_import.py | 500 ++++++++++++++ .../security/ir.model.access.csv | 3 + .../purchase_import_wizard_security.xml | 10 + .../purchase_order_import_line_views.xml | 157 +++++ .../views/purchase_order_import_views.xml | 193 ++++++ 10 files changed, 2134 insertions(+) create mode 100644 purchase_import_wizard/__init__.py create mode 100644 purchase_import_wizard/__manifest__.py create mode 100644 purchase_import_wizard/i18n/es.po create mode 100644 purchase_import_wizard/i18n/purchase_import_wizard.pot create mode 100644 purchase_import_wizard/models/__init__.py create mode 100644 purchase_import_wizard/models/purchase_order_import.py create mode 100644 purchase_import_wizard/security/ir.model.access.csv create mode 100644 purchase_import_wizard/security/purchase_import_wizard_security.xml create mode 100644 purchase_import_wizard/views/purchase_order_import_line_views.xml create mode 100644 purchase_import_wizard/views/purchase_order_import_views.xml diff --git a/purchase_import_wizard/__init__.py b/purchase_import_wizard/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/purchase_import_wizard/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/purchase_import_wizard/__manifest__.py b/purchase_import_wizard/__manifest__.py new file mode 100644 index 0000000000..182d676afe --- /dev/null +++ b/purchase_import_wizard/__manifest__.py @@ -0,0 +1,25 @@ +# Copyright 2022 Berezi Amubieta - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + "name": "Purchase Import Wizard", + "version": "14.0.1.0.0", + "category": "Hidden/Tools", + "license": "AGPL-3", + "author": "AvanzOSC", + "website": "https://github.com/avanzosc/odoo-addons", + "depends": [ + "purchase", + "base_import_wizard", + "purchase_discount", + "product_trim_name" + ], + "data": [ + "security/ir.model.access.csv", + "security/purchase_import_wizard_security.xml", + "views/purchase_order_import_line_views.xml", + "views/purchase_order_import_views.xml", + ], + "external_dependencies": {"python": ["xlrd"]}, + "installable": True, +} diff --git a/purchase_import_wizard/i18n/es.po b/purchase_import_wizard/i18n/es.po new file mode 100644 index 0000000000..f456726897 --- /dev/null +++ b/purchase_import_wizard/i18n/es.po @@ -0,0 +1,627 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_import_wizard +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-23 08:30+0000\n" +"PO-Revision-Date: 2023-03-23 08:30+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__purchase_order_count +msgid "# Purchase Orders" +msgstr "# Pedidos de compra" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "CodigoAlmacen: this will fill Warehouse" +msgstr "CodigoAlmacen: esto rellenará el Almacén" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "CodigoProducto: this will fill Product" +msgstr "CodigoProducto: esto rellenará el Producto" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "CodigoProveedor: this will fill Supplier" +msgstr "CodigoProveedor: esto rellenará el Proveedor" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Descuento: this will fill Discount" +msgstr "Descuento: esto rellenará el Descuento" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Entrada: this will fill Partner Ref" +msgstr "" +"Entrada: esto rellenará la Referencia de proveedor" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Estado: this will fill State" +msgstr "Estado: esto rellenará el Estado" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "FechaConfirmada: this will fill Date Confirm" +msgstr "" +"FechaConfirmada: esto rellenará la Fecha Confirmación" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "FechaCreada: this will fill Date Order" +msgstr "" +"FechaCreada: esto rellenará la Fecha límite de pedido" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "KgNeto: this will fill Quantity Received" +msgstr "KgNeto: esto rellenará la Cantiad recivida" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "KgProveedor: this will fill Product Quantity" +msgstr "KgProveedor: esto rellenará la Cantidad" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "NombreProducto: this will fill Product" +msgstr "NombreProducto: esto rellenará el Producto" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "NombreProveedor: this will fill Supplier" +msgstr "NombreProveedor: esto rellenará el Proveedor" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "PrecioUnitario: this will fill Price Unit" +msgstr "PrecioUnitario: esto rellenará el Precio unitario" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__action +msgid "Action" +msgstr "Acción" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_needaction +msgid "Action Needed" +msgstr "Acción requerida" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_ids +msgid "Activities" +msgstr "Actividades" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "Actividad decoración de excepción" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_state +msgid "Activity State" +msgstr "Estado de la actividad" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_type_icon +msgid "Activity Type Icon" +msgstr "Icono de tipo de actividad" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_attachment_count +msgid "Attachment Count" +msgstr "Recuento de anexos" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__company_id +msgid "Company" +msgstr "Compañía" + +#. module: purchase_import_wizard +#: model:ir.model.fields.selection,name:purchase_import_wizard.selection__purchase_order_import_line__action__create +msgid "Create" +msgstr "Creart" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_create_date +msgid "CreateDate" +msgstr "Fecha creada" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__create_uid +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__create_date +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_date_confirm +msgid "DateConfirm" +msgstr "Fecha de confirmación" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_discount +msgid "Discount" +msgstr "Descuento" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__display_name +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Done" +msgstr "Hecho" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Error" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Error Log" +msgstr "Registro de errores" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one picking type with warehouse {} found." +msgstr "" +"Error: Se ha encontrado más de un tipo de operación encontradi con almacén " +"{}." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one product with the same name or code found." +msgstr "Error: Más de un producto encontrado." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one supplier found." +msgstr "Error: Más de un proveedor encontrado." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one warehouse with name {} found." +msgstr "Error: Más de un almacén encontrado con el nombre {}." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No picking type found." +msgstr "Error: No se ha encontrado el tipo de operación." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No product found." +msgstr "Error: No se ha encontrado el producto." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No supplier found." +msgstr "Error: No se ha encontrado el proveedor." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No warehouse found." +msgstr "Error: No se ha encontrado el almacén." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: Previously uploaded order." +msgstr "Error: Pedido previamente cargado." + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "" +"Error: There is another line with the same origin document with some errors." +msgstr "" +"Error: Hay otra línea con el mismo documento de origen con algunos errores." + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Errored" +msgstr "Error en" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__data +msgid "File" +msgstr "Archivo" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__filename +msgid "Filename" +msgstr "Nombre del archivo" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_follower_ids +msgid "Followers" +msgstr "Seguidores" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_channel_ids +msgid "Followers (Channels)" +msgstr "Seguidores (canales)" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguidores (contactos)" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "Icono de la fuente, por ejemplo, fa-tasks" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Help" +msgstr "Ayuda" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Help with Excel column names" +msgstr "Ayuda con los nombres de las columnas de Excel" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__id +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__id +msgid "ID" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_exception_icon +msgid "Icon" +msgstr "Icono" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "Icono para indicar una actividad de excepción." + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_needaction +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_unread +msgid "If checked, new messages require your attention." +msgstr "Si está marcada, los nuevos mensajes requieren su atención." + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "Si está marcada, algunos mensajes tienen un error de entrega." + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Import" +msgstr "Importar" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__file_date +msgid "Import Date" +msgstr "Fecha de importación" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Import Lines" +msgstr "Líneas importadas" + +#. module: purchase_import_wizard +#: model:ir.actions.act_window,name:purchase_import_wizard.purchase_order_import_line_action +msgid "Import Purchase Order Lines" +msgstr "Líneas de pedido de compra importadas" + +#. module: purchase_import_wizard +#: model:ir.actions.act_window,name:purchase_import_wizard.purchase_order_import_action +#: model:ir.ui.menu,name:purchase_import_wizard.purchase_order_import_menu +msgid "Import Purchase Orders" +msgstr "Importar pedidos de compra" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__import_id +msgid "Import Wizard" +msgstr "Asistente de importación" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Imported Lines" +msgstr "Líneas importadas" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_is_follower +msgid "Is Follower" +msgstr "Es seguidor" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import____last_update +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__write_uid +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__write_uid +msgid "Last Updated by" +msgstr "Actualizado por" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__write_date +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__write_date +msgid "Last Updated on" +msgstr "Actualizado el" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__import_line_ids +msgid "Lines to Import" +msgstr "Líneas para importar" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__log_info +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__log_info +msgid "Log Info" +msgstr "Información de registro" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_main_attachment_id +msgid "Main Attachment" +msgstr "Adjunto principal" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_has_error +msgid "Message Delivery error" +msgstr "Error en la entrega del mensaje" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_ids +msgid "Messages" +msgstr "Mensajes" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "Mi plazo de actividad" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__name +msgid "Name" +msgstr "Nombre" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "Plazo de la próxima actividad" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_summary +msgid "Next Activity Summary" +msgstr "Resumen de la siguiente actividad" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_type_id +msgid "Next Activity Type" +msgstr "Siguiente tipo de actividad" + +#. module: purchase_import_wizard +#: model:ir.model.fields.selection,name:purchase_import_wizard.selection__purchase_order_import_line__action__nothing +msgid "Nothing" +msgstr "Nada" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_needaction_counter +msgid "Number of Actions" +msgstr "Número de acciones" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_has_error_counter +msgid "Number of errors" +msgstr "Número de errores" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Número de mensajes que requieren una acción" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Número de mensajes con error de entrega" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_unread_counter +msgid "Number of unread messages" +msgstr "Número de mensajes no leídos" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_ordered_qty +msgid "Ordered Qty" +msgstr "Cantidad pedida" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_origin +msgid "Origin" +msgstr "Origen" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Pending" +msgstr "Pendiente" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_picking_type_id +msgid "Picking Type" +msgstr "Tipo de operación" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_price_unit +msgid "Price Unit" +msgstr "Precio unitario" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_form +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Process" +msgstr "Procesar" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_product_id +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Product" +msgstr "Producto" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_product_code +msgid "Product Code" +msgstr "Código producto" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_product_name +msgid "Product Name" +msgstr "Nombre producto" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_order_id +msgid "Purchase Order" +msgstr "Pedido" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_qty_done +msgid "Qty Done" +msgstr "Cantidad hecha" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_user_id +msgid "Responsible User" +msgstr "Usuario responsable" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_state +msgid "State" +msgstr "Estado" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__state +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__state +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Status" +msgstr "Estado" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" +"Estado basado en actividades\n" +"Atrasado: La fecha de vencimiento ya ha pasado\n" +"Hoy: La fecha de la actividad es hoy\n" +"Planificado: Actividades futuras" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_supplier_id +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Supplier" +msgstr "Proveedor" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_supplier_code +msgid "Supplier Code" +msgstr "Código proveedor" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_supplier_name +msgid "Supplier Name" +msgstr "Nombre proveedor" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "To Create" +msgstr "Para crear" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "Tipo de la actividad de excepción registrada." + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_unread +msgid "Unread Messages" +msgstr "Mensajes no leídos" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Contador de mensajes no leídos" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_form +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Validate" +msgstr "Validar" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__warehouse_id +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_warehouse +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_warehouse_id +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Warehouse" +msgstr "Almacén" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__website_message_ids +msgid "Website Messages" +msgstr "Mensajes del sitio web" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__website_message_ids +msgid "Website communication history" +msgstr "Historia de la comunicación en la web" + +#. module: purchase_import_wizard +#: model:ir.model,name:purchase_import_wizard.model_purchase_order_import_line +msgid "Wizard lines to import purchase orders" +msgstr "Líneas del asistente para la importación de pedidos de compra" + +#. module: purchase_import_wizard +#: model:ir.model,name:purchase_import_wizard.model_purchase_order_import +msgid "Wizard to import purchase orders" +msgstr "Asistente para la importación de pedidos de compra" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "You must use this column names in order to fill the table:" +msgstr "Debe utilizar estos nombres de columna para rellenar la tabla:" diff --git a/purchase_import_wizard/i18n/purchase_import_wizard.pot b/purchase_import_wizard/i18n/purchase_import_wizard.pot new file mode 100644 index 0000000000..b6e4e7eb2c --- /dev/null +++ b/purchase_import_wizard/i18n/purchase_import_wizard.pot @@ -0,0 +1,617 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * purchase_import_wizard +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-03-23 08:30+0000\n" +"PO-Revision-Date: 2023-03-23 08:30+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__purchase_order_count +msgid "# Purchase Orders" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "CodigoAlmacen: this will fill Warehouse" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "CodigoProducto: this will fill Product" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "CodigoProveedor: this will fill Supplier" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Descuento: this will fill Discount" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Entrada: this will fill Partner Ref" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Estado: this will fill State" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "FechaConfirmada: this will fill Date Confirm" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "FechaCreada: this will fill Date Order" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "KgNeto: this will fill Quantity Received" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "KgProveedor: this will fill Product Quantity" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "NombreProducto: this will fill Product" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "NombreProveedor: this will fill Supplier" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "PrecioUnitario: this will fill Price Unit" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__action +msgid "Action" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_ids +msgid "Activities" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_exception_decoration +msgid "Activity Exception Decoration" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_state +msgid "Activity State" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_type_icon +msgid "Activity Type Icon" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__company_id +msgid "Company" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields.selection,name:purchase_import_wizard.selection__purchase_order_import_line__action__create +msgid "Create" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_create_date +msgid "CreateDate" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__create_uid +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__create_uid +msgid "Created by" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__create_date +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__create_date +msgid "Created on" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_date_confirm +msgid "DateConfirm" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_discount +msgid "Discount" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__display_name +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__display_name +msgid "Display Name" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Done" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Error" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Error Log" +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one picking type with warehouse {} found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one product with the same name or code found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one supplier found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: More than one warehouse with name {} found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No picking type found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No product found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No supplier found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: No warehouse found." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "Error: Previously uploaded order." +msgstr "" + +#. module: purchase_import_wizard +#: code:addons/purchase_import_wizard/models/purchase_order_import.py:0 +#, python-format +msgid "" +"Error: There is another line with the same origin document with some errors." +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Errored" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__data +msgid "File" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__filename +msgid "Filename" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_type_icon +msgid "Font awesome icon e.g. fa-tasks" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Group By" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Help" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Help with Excel column names" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__id +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__id +msgid "ID" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_exception_icon +msgid "Icon" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_exception_icon +msgid "Icon to indicate an exception activity." +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_needaction +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_has_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Import" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__file_date +msgid "Import Date" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Import Lines" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.actions.act_window,name:purchase_import_wizard.purchase_order_import_line_action +msgid "Import Purchase Order Lines" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.actions.act_window,name:purchase_import_wizard.purchase_order_import_action +#: model:ir.ui.menu,name:purchase_import_wizard.purchase_order_import_menu +msgid "Import Purchase Orders" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__import_id +msgid "Import Wizard" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Imported Lines" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import____last_update +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__write_uid +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__write_date +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__import_line_ids +msgid "Lines to Import" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__log_info +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__log_info +msgid "Log Info" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_ids +msgid "Messages" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__my_activity_date_deadline +msgid "My Activity Deadline" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__name +msgid "Name" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_date_deadline +msgid "Next Activity Deadline" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_summary +msgid "Next Activity Summary" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_type_id +msgid "Next Activity Type" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields.selection,name:purchase_import_wizard.selection__purchase_order_import_line__action__nothing +msgid "Nothing" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_ordered_qty +msgid "Ordered Qty" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_origin +msgid "Origin" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Pending" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_picking_type_id +msgid "Picking Type" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_price_unit +msgid "Price Unit" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_form +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Process" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_product_id +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Product" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_product_code +msgid "Product Code" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_product_name +msgid "Product Name" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_order_id +msgid "Purchase Order" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_qty_done +msgid "Qty Done" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__activity_user_id +msgid "Responsible User" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_state +msgid "State" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__state +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__state +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_search +msgid "Status" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_state +msgid "" +"Status based on activities\n" +"Overdue: Due date is already passed\n" +"Today: Activity date is today\n" +"Planned: Future activities." +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_supplier_id +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Supplier" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_supplier_code +msgid "Supplier Code" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_supplier_name +msgid "Supplier Name" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "To Create" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__activity_exception_decoration +msgid "Type of the exception activity on record." +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_form +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "Validate" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__warehouse_id +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_warehouse +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import_line__purchase_warehouse_id +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_line_view_search +msgid "Warehouse" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,field_description:purchase_import_wizard.field_purchase_order_import__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model.fields,help:purchase_import_wizard.field_purchase_order_import__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model,name:purchase_import_wizard.model_purchase_order_import_line +msgid "Wizard lines to import purchase orders" +msgstr "" + +#. module: purchase_import_wizard +#: model:ir.model,name:purchase_import_wizard.model_purchase_order_import +msgid "Wizard to import purchase orders" +msgstr "" + +#. module: purchase_import_wizard +#: model_terms:ir.ui.view,arch_db:purchase_import_wizard.purchase_order_import_view_form +msgid "You must use this column names in order to fill the table:" +msgstr "" diff --git a/purchase_import_wizard/models/__init__.py b/purchase_import_wizard/models/__init__.py new file mode 100644 index 0000000000..00c66fca65 --- /dev/null +++ b/purchase_import_wizard/models/__init__.py @@ -0,0 +1 @@ +from . import purchase_order_import diff --git a/purchase_import_wizard/models/purchase_order_import.py b/purchase_import_wizard/models/purchase_order_import.py new file mode 100644 index 0000000000..ee8f0351fb --- /dev/null +++ b/purchase_import_wizard/models/purchase_order_import.py @@ -0,0 +1,500 @@ +# Copyright 2022 Berezi Amubieta - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import _, api, fields, models +from odoo.addons.base_import_wizard.models.base_import import convert2str +from odoo.models import expression +from odoo.tools.safe_eval import safe_eval +from datetime import datetime +import xlrd +import pytz +import unicodedata + + +class PurchaseOrderImport(models.Model): + _name = "purchase.order.import" + _inherit = "base.import" + _description = "Wizard to import purchase orders" + + import_line_ids = fields.One2many( + comodel_name="purchase.order.import.line", + ) + purchase_order_count = fields.Integer( + string="# Purchase Orders", + compute="_compute_purchase_order_count", + ) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + index=True, + ) + warehouse_id = fields.Many2one( + string="Warehouse", + comodel_name="stock.warehouse") + + def _get_line_values(self, row_values=False): + self.ensure_one() + values = super()._get_line_values(row_values=row_values) + timezone = pytz.timezone(self._context.get('tz') or 'UTC') + if row_values: + purchase_supplier_code = row_values.get("codigoproveedor", "") + purchase_supplier_name = row_values.get("nombreproveedor", "") + purchase_create_date = row_values.get("fechacreada", "") + if purchase_create_date: + purchase_create_date = purchase_create_date[0:19] + purchase_create_date = datetime.strptime( + purchase_create_date, "%Y-%m-%d %H:%M:%S") + if not purchase_create_date: + purchase_create_date = False + purchase_date_confirm = row_values.get("fechaconfirmada", "") + if purchase_date_confirm: + purchase_date_confirm = xlrd.xldate.xldate_as_datetime( + purchase_date_confirm, 0) + purchase_date_confirm = timezone.localize( + purchase_date_confirm).astimezone(pytz.UTC) + purchase_date_confirm = purchase_date_confirm.replace( + tzinfo=None) + if not purchase_date_confirm: + purchase_date_confirm = False + purchase_origin = row_values.get("entrada", "") + purchase_product_code = row_values.get("codigoproducto", "") + purchase_product_name = row_values.get("nombreproducto", "") + purchase_ordered_qty = row_values.get("kgproveedor", "") + purchase_qty_done = row_values.get("kgneto", "") + purchase_price_unit = row_values.get("preciounitario", "") + purchase_discount = row_values.get("descuento", "") + purchase_state = row_values.get("estado", "") + purchase_warehouse = row_values.get("codigoalmacen", "") + log_info = "" + values.update( + { + "purchase_supplier_code": convert2str( + purchase_supplier_code), + "purchase_supplier_name": purchase_supplier_name.title(), + "purchase_create_date": purchase_create_date, + "purchase_date_confirm": purchase_date_confirm, + "purchase_origin": convert2str(purchase_origin), + "purchase_product_code": convert2str( + purchase_product_code), + "purchase_product_name": convert2str( + purchase_product_name), + "purchase_ordered_qty": purchase_ordered_qty, + "purchase_qty_done": purchase_qty_done, + "purchase_price_unit": purchase_price_unit, + "purchase_discount": purchase_discount, + "purchase_state": convert2str(purchase_state), + "purchase_warehouse": convert2str(purchase_warehouse), + "log_info": log_info, + } + ) + return values + + def _compute_purchase_order_count(self): + for record in self: + record.purchase_order_count = len( + record.mapped("import_line_ids.purchase_order_id")) + + def button_open_purchase_order(self): + self.ensure_one() + orders = self.mapped("import_line_ids.purchase_order_id") + action = self.env.ref("purchase.purchase_form_action") + action_dict = action.read()[0] if action else {} + domain = expression.AND( + [[("id", "in", orders.ids)], safe_eval(action.domain or "[]")]) + action_dict.update({"domain": domain}) + return action_dict + + +class PurchaseOrderImportLine(models.Model): + _name = "purchase.order.import.line" + _inherit = "base.import.line" + _description = "Wizard lines to import purchase orders" + + @api.model + def _get_selection_purchase_type(self): + return self.env["purchase.order"].fields_get( + allfields=["type"])["type"]["selection"] + + def default_purchase_type(self): + default_dict = self.env["purchase.order"].default_get(["type"]) + return default_dict.get("type") + + import_id = fields.Many2one( + comodel_name="purchase.order.import", + ) + action = fields.Selection( + string="Action", + selection=[ + ("create", "Create"), + ("nothing", "Nothing"), + ], + default="nothing", + states={"done": [("readonly", True)]}, + copy=False, + required=True, + ) + purchase_order_id = fields.Many2one( + string="Purchase Order", + comodel_name="purchase.order") + purchase_supplier_code = fields.Char( + string="Supplier Code", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_supplier_name = fields.Char( + string="Supplier Name", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_create_date = fields.Datetime( + string="CreateDate", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_date_confirm = fields.Datetime( + string="DateConfirm", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_origin = fields.Char( + string="Origin", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_product_code = fields.Char( + string="Product Code", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_product_name = fields.Char( + string="Product Name", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_ordered_qty = fields.Float( + string="Ordered Qty", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_qty_done = fields.Float( + string="Qty Done", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_price_unit = fields.Float( + string="Price Unit", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_discount = fields.Float( + string="Discount", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_state = fields.Char( + string="State", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_warehouse = fields.Char( + string="Warehouse", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_supplier_id = fields.Many2one( + string="Supplier", + comodel_name="res.partner", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_product_id = fields.Many2one( + comodel_name="product.product", + string="Product", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_warehouse_id = fields.Many2one( + comodel_name="stock.warehouse", + string="Warehouse", + states={"done": [("readonly", True)]}, + copy=False, + ) + purchase_picking_type_id = fields.Many2one( + comodel_name="stock.picking.type", + string="Picking Type", + states={"done": [("readonly", True)]}, + copy=False, + ) + + def action_validate(self): + super().action_validate() + line_values = [] + for line in self.filtered(lambda l: l.state != "done"): + log_info = "" + origin = picking_type = product = supplier = warehouse = False + if line.purchase_origin: + origin, log_info = line._check_origin() + if log_info: + update_values = { + "purchase_origin": origin, + "log_info": log_info, + "state": "error", + "action": "nothing", + } + if not log_info: + supplier, log_info_supplier = line._check_supplier() + if log_info_supplier: + log_info += log_info_supplier + product, log_info_product = line._check_product() + if log_info_product: + log_info += log_info_product + warehouse, log_info_warehouse = line._check_warehouse() + if log_info_warehouse: + log_info += log_info_warehouse + if not log_info_warehouse and warehouse: + picking_type, log_info_picking_type = ( + line._check_picking_type(warehouse=warehouse)) + if log_info_picking_type: + log_info += log_info_picking_type + state = "error" if log_info else "pass" + action = "nothing" + if state != "error": + action = "create" + update_values = { + "purchase_origin": origin, + "purchase_supplier_id": supplier and supplier.id, + "purchase_product_id": product and product.id, + "purchase_warehouse_id": warehouse and warehouse.id, + "purchase_picking_type_id": ( + picking_type and picking_type.id), + "log_info": log_info, + "state": state, + "action": action, + } + line_values.append( + ( + 1, + line.id, + update_values, + ) + ) + return line_values + + def action_process(self): + super().action_validate() + line_values = [] + origins = [] + for line in self.filtered(lambda l: l.state not in ("error", "done")): + if line.action == "create": + if not line.purchase_origin: + log_info = "" + purchase = line._create_purchase_order() + line._create_purchase_order_line(purchase_order=purchase) + if line.purchase_origin and ( + line.purchase_origin) not in ( + origins): + if self.filtered(lambda l: l.purchase_origin == ( + line.purchase_origin) and ( + l.state == "error")): + log_info = _( + "Error: There is another line with the same" + + " origin document with some errors.") + else: + origin, log_info = line._check_origin() + if not log_info: + origins.append(origin) + purchase = line._create_purchase_order() + same_origin = self.filtered( + lambda l: l.purchase_origin == ( + line.purchase_origin)) + for record in same_origin: + record._create_purchase_order_line( + purchase_order=purchase) + if purchase: + purchase.button_confirm() + purchase.date_approve = line.purchase_date_confirm + # pickings = self.env["stock.picking"].search( + # [("purchase_id", "=", purchase.id)]) + # pickings.write({ + # "scheduled_date": line.purchase_date_confirm, + # "origin": line.purchase_origin}) + # pickings.button_force_done_detailed_operations() + # pickings.button_validate() + # for orderlines in purchase.order_line: + # move = pickings.move_ids_without_package.filtered( + # lambda c: c.purchase_line_id == orderlines) + # move.write({ + # "standard_price": orderlines.price_unit, + # "amount": ( + # orderlines.price_unit * move.quantity_done)}) + # ml = move.move_line_ids + # ml.write({ + # "qty_done": move.purchase_line_id.qty_done, + # "standard_price":orderlines.price_unit, + # "amount": ( + # move.purchase_line_id.qty_done) * ( + # orderlines.price_unit)}) + else: + continue + state = "error" if log_info else "done" + line.write({ + "purchase_order_id": purchase.id, + "log_info": log_info, + "state": state}) + line_values.append( + ( + 1, + line.id, + { + "purchase_order_id": purchase.id, + "log_info": log_info, + "state": state, + }, + ) + ) + return line_values + + def _check_origin(self): + self.ensure_one() + purchase_obj = self.env["purchase.order"] + search_domain = [("partner_ref", "=", self.purchase_origin)] + log_info = "" + purchases = purchase_obj.search(search_domain) + if purchases: + log_info = _("Error: Previously uploaded order.") + return self.purchase_origin, log_info + + def _check_supplier(self): + self.ensure_one() + log_info = "" + if self.purchase_supplier_id: + return self.purchase_supplier_id, log_info + supplier_obj = self.env["res.partner"] + if self.purchase_supplier_code and not self.purchase_supplier_name: + search_domain = [("ref", "=", self.purchase_supplier_code)] + elif self.purchase_supplier_name and not self.purchase_supplier_code: + search_domain = [("name", "=ilike", self.purchase_supplier_name)] + elif self.purchase_supplier_code and self.purchase_supplier_name: + search_domain = [ + '|', ("name", "=ilike", self.purchase_supplier_name), + ("ref", "=", self.purchase_supplier_code)] + suppliers = supplier_obj.search(search_domain) + if not suppliers: + suppliers = False + log_info = _("Error: No supplier found.") + elif len(suppliers) > 1: + if self.purchase_supplier_code and self.purchase_supplier_name: + search_domain = [ + ("name", "=ilike", self.purchase_supplier_name), + ("ref", "=", self.purchase_supplier_code)] + suppliers = supplier_obj.search(search_domain) + if not len(suppliers) == 1: + suppliers = False + log_info = _("Error: More than one supplier found.") + return suppliers and suppliers[:1], log_info + + def _check_product(self): + self.ensure_one() + log_info = "" + if self.purchase_product_id: + return self.purchase_product_id, log_info + product_obj = self.env["product.product"] + if self.purchase_product_name: + name = self.purchase_product_name.replace(" ","") + name = ''.join((c for c in unicodedata.normalize('NFD',name) if unicodedata.category(c) != 'Mn')) + if self.purchase_product_code and not self.purchase_product_name: + search_domain = [ + ("default_code", "=", self.purchase_product_code)] + elif self.purchase_product_name and not self.purchase_product_code: + search_domain = [("trim_name", "=ilike", name)] + elif self.purchase_product_code and self.purchase_product_name: + search_domain = [ + '|', ("trim_name", "=ilike", name), + ("default_code", "=", self.purchase_product_code)] + products = product_obj.search(search_domain) + if not products: + products = False + log_info = _("Error: No product found.") + elif len(products) > 1: + if self.purchase_product_code and self.purchase_product_name: + search_domain = [ + ("trim_name", "=ilike", name), + ("default_code", "=", self.purchase_product_code)] + products = product_obj.search(search_domain) + if not len(products) == 1: + products = False + log_info = _( + "Error: More than one product with the same name or " + + "code found.").format(self.purchase_product_name, + self.purchase_product_code) + return products and products[:1], log_info + + def _check_warehouse(self): + self.ensure_one() + log_info = "" + if self.import_id.warehouse_id: + self.purchase_warehouse_id = self.import_id.warehouse_id.id + if self.purchase_warehouse_id: + return self.purchase_warehouse_id, log_info + warehouse_obj = self.env["stock.warehouse"] + search_domain = ['|', + ("name", "=", self.purchase_warehouse), + ("code", "=", self.purchase_warehouse)] + warehouses = warehouse_obj.search(search_domain) + if not warehouses: + warehouses = False + log_info = _("Error: No warehouse found.") + elif len(warehouses) > 1: + warehouses = False + log_info = _( + "Error: More than one warehouse with name {} found." + ).format(self.purchase_warehouse) + return warehouses and warehouses[:1], log_info + + def _check_picking_type(self, warehouse=False): + self.ensure_one() + log_info = "" + if self.purchase_picking_type_id: + return self.purchase_picking_type_id, log_info + picking_type_obj = self.env["stock.picking.type"] + search_domain = [("code", "=", "incoming")] + if warehouse: + search_domain = expression.AND( + [[("warehouse_id", "=", warehouse.id)], search_domain]) + picking_types = picking_type_obj.search(search_domain) + if not picking_types: + picking_types = False + log_info = _("Error: No picking type found.") + elif len(picking_types) > 1: + picking_types = False + log_info = _( + "Error: More than one picking type with warehouse {} found." + ).format(warehouse) + return picking_types and picking_types[:1], log_info + + def _create_purchase_order(self): + purchase_order_obj = self.env["purchase.order"] + values = self._purchase_order_values() + purchase = purchase_order_obj.create(values) + return purchase + + def _create_purchase_order_line(self, purchase_order=False): + if purchase_order: + if not self.purchase_ordered_qty and self.purchase_qty_done: + self.purchase_ordered_qty = self.purchase_qty_done + purchase_order.order_line = [(0, 0, { + "product_id": self.purchase_product_id.id, + "product_qty": self.purchase_ordered_qty, + "qty_received": self.purchase_qty_done, + "product_uom": self.purchase_product_id.uom_id.id, + "name": self.purchase_product_id.display_name, + "order_id": purchase_order, + "price_unit": self.purchase_price_unit, + "discount": self.purchase_discount})] + + def _purchase_order_values(self): + return { + "partner_id": self.purchase_supplier_id.id, + "picking_type_id": self.purchase_picking_type_id.id, + "partner_ref": self.purchase_origin, + "date_order": self.purchase_create_date} diff --git a/purchase_import_wizard/security/ir.model.access.csv b/purchase_import_wizard/security/ir.model.access.csv new file mode 100644 index 0000000000..54e097eb24 --- /dev/null +++ b/purchase_import_wizard/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_purchase_order_import,purchase_order_import internal,model_purchase_order_import,purchase.group_purchase_user,1,1,1,1 +access_purchase_order_import_line,purchase_order_import_line internal,model_purchase_order_import_line,purchase.group_purchase_manager,1,1,1,1 diff --git a/purchase_import_wizard/security/purchase_import_wizard_security.xml b/purchase_import_wizard/security/purchase_import_wizard_security.xml new file mode 100644 index 0000000000..85a845021a --- /dev/null +++ b/purchase_import_wizard/security/purchase_import_wizard_security.xml @@ -0,0 +1,10 @@ + + + + Purchase order wizard company rule + + ['|', ('company_id', 'in', company_ids), ('company_id', '=', False)] + + diff --git a/purchase_import_wizard/views/purchase_order_import_line_views.xml b/purchase_import_wizard/views/purchase_order_import_line_views.xml new file mode 100644 index 0000000000..30619624ef --- /dev/null +++ b/purchase_import_wizard/views/purchase_order_import_line_views.xml @@ -0,0 +1,157 @@ + + + + purchase.order.import.line + + + + + + + + + + + + + + + + + + + + + + + + + purchase.order.import.line + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + purchase.order.import.line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Import Purchase Order Lines + ir.actions.act_window + purchase.order.import.line + tree,form + + +
diff --git a/purchase_import_wizard/views/purchase_order_import_views.xml b/purchase_import_wizard/views/purchase_order_import_views.xml new file mode 100644 index 0000000000..46332a252d --- /dev/null +++ b/purchase_import_wizard/views/purchase_order_import_views.xml @@ -0,0 +1,193 @@ + + + + purchase.order.import + + + + + + + + + + + + purchase.order.import + +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + +
+

Help with Excel column names

+

You must use this column names in order to fill the table:

+
    +
  • CodigoProveedor: this will fill Supplier
  • +
  • NombreProveedor: this will fill Supplier
  • +
  • FechaCreada: this will fill Date Order
  • +
  • FechaConfirmada: this will fill Date Confirm
  • +
  • Entrada: this will fill Partner Ref
  • +
  • CodigoProducto: this will fill Product
  • +
  • NombreProducto: this will fill Product
  • +
  • KgProveedor: this will fill Product Quantity
  • +
  • KgNeto: this will fill Quantity Received
  • + +
  • PrecioUnitario: this will fill Price Unit
  • +
  • Descuento: this will fill Discount
  • +
  • Estado: this will fill State
  • +
  • CodigoAlmacen: this will fill Warehouse
  • +
+
+
+
+
+
+
+ + + +
+
+
+
+ + + purchase.order.import + + + + + + + + + + + + + + + Import Purchase Orders + ir.actions.act_window + purchase.order.import + tree,form + + + + + + + +
From 403bf1beb6e513fe8fbc09943f10fd6cc5e08b62 Mon Sep 17 00:00:00 2001 From: Berezi <82805447+Berezi@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:12:52 +0200 Subject: [PATCH 2/6] [FIX] purchase_import_wizard: (#2106) --- purchase_import_wizard/security/ir.model.access.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/purchase_import_wizard/security/ir.model.access.csv b/purchase_import_wizard/security/ir.model.access.csv index 54e097eb24..f26614caca 100644 --- a/purchase_import_wizard/security/ir.model.access.csv +++ b/purchase_import_wizard/security/ir.model.access.csv @@ -1,3 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_purchase_order_import,purchase_order_import internal,model_purchase_order_import,purchase.group_purchase_user,1,1,1,1 -access_purchase_order_import_line,purchase_order_import_line internal,model_purchase_order_import_line,purchase.group_purchase_manager,1,1,1,1 +access_purchase_order_import_line,purchase_order_import_line internal,model_purchase_order_import_line,purchase.group_purchase_user,1,1,1,1 From 9400b8e1d33e16929a863e47a22787829d4b8a3e Mon Sep 17 00:00:00 2001 From: oihane Date: Mon, 30 Oct 2023 12:08:50 +0100 Subject: [PATCH 3/6] [IMP] *import_wizard*: new parameter datemode + pre-commit (#2192) --- .../models/purchase_order_import.py | 243 +++++++++--------- 1 file changed, 125 insertions(+), 118 deletions(-) diff --git a/purchase_import_wizard/models/purchase_order_import.py b/purchase_import_wizard/models/purchase_order_import.py index ee8f0351fb..28c1b5969a 100644 --- a/purchase_import_wizard/models/purchase_order_import.py +++ b/purchase_import_wizard/models/purchase_order_import.py @@ -1,14 +1,17 @@ # Copyright 2022 Berezi Amubieta - AvanzOSC # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import _, api, fields, models -from odoo.addons.base_import_wizard.models.base_import import convert2str -from odoo.models import expression -from odoo.tools.safe_eval import safe_eval +import unicodedata from datetime import datetime -import xlrd + import pytz -import unicodedata +import xlrd + +from odoo import _, fields, models +from odoo.models import expression +from odoo.tools.safe_eval import safe_eval + +from odoo.addons.base_import_wizard.models.base_import import convert2str class PurchaseOrderImport(models.Model): @@ -28,14 +31,12 @@ class PurchaseOrderImport(models.Model): string="Company", index=True, ) - warehouse_id = fields.Many2one( - string="Warehouse", - comodel_name="stock.warehouse") + warehouse_id = fields.Many2one(string="Warehouse", comodel_name="stock.warehouse") - def _get_line_values(self, row_values=False): + def _get_line_values(self, row_values, datemode=False): self.ensure_one() - values = super()._get_line_values(row_values=row_values) - timezone = pytz.timezone(self._context.get('tz') or 'UTC') + values = super()._get_line_values(row_values, datemode=datemode) + timezone = pytz.timezone(self._context.get("tz") or "UTC") if row_values: purchase_supplier_code = row_values.get("codigoproveedor", "") purchase_supplier_name = row_values.get("nombreproveedor", "") @@ -43,17 +44,19 @@ def _get_line_values(self, row_values=False): if purchase_create_date: purchase_create_date = purchase_create_date[0:19] purchase_create_date = datetime.strptime( - purchase_create_date, "%Y-%m-%d %H:%M:%S") + purchase_create_date, "%Y-%m-%d %H:%M:%S" + ) if not purchase_create_date: purchase_create_date = False purchase_date_confirm = row_values.get("fechaconfirmada", "") if purchase_date_confirm: purchase_date_confirm = xlrd.xldate.xldate_as_datetime( - purchase_date_confirm, 0) + purchase_date_confirm, 0 + ) purchase_date_confirm = timezone.localize( - purchase_date_confirm).astimezone(pytz.UTC) - purchase_date_confirm = purchase_date_confirm.replace( - tzinfo=None) + purchase_date_confirm + ).astimezone(pytz.UTC) + purchase_date_confirm = purchase_date_confirm.replace(tzinfo=None) if not purchase_date_confirm: purchase_date_confirm = False purchase_origin = row_values.get("entrada", "") @@ -68,16 +71,13 @@ def _get_line_values(self, row_values=False): log_info = "" values.update( { - "purchase_supplier_code": convert2str( - purchase_supplier_code), + "purchase_supplier_code": convert2str(purchase_supplier_code), "purchase_supplier_name": purchase_supplier_name.title(), "purchase_create_date": purchase_create_date, "purchase_date_confirm": purchase_date_confirm, "purchase_origin": convert2str(purchase_origin), - "purchase_product_code": convert2str( - purchase_product_code), - "purchase_product_name": convert2str( - purchase_product_name), + "purchase_product_code": convert2str(purchase_product_code), + "purchase_product_name": convert2str(purchase_product_name), "purchase_ordered_qty": purchase_ordered_qty, "purchase_qty_done": purchase_qty_done, "purchase_price_unit": purchase_price_unit, @@ -92,7 +92,8 @@ def _get_line_values(self, row_values=False): def _compute_purchase_order_count(self): for record in self: record.purchase_order_count = len( - record.mapped("import_line_ids.purchase_order_id")) + record.mapped("import_line_ids.purchase_order_id") + ) def button_open_purchase_order(self): self.ensure_one() @@ -100,7 +101,8 @@ def button_open_purchase_order(self): action = self.env.ref("purchase.purchase_form_action") action_dict = action.read()[0] if action else {} domain = expression.AND( - [[("id", "in", orders.ids)], safe_eval(action.domain or "[]")]) + [[("id", "in", orders.ids)], safe_eval(action.domain or "[]")] + ) action_dict.update({"domain": domain}) return action_dict @@ -110,32 +112,18 @@ class PurchaseOrderImportLine(models.Model): _inherit = "base.import.line" _description = "Wizard lines to import purchase orders" - @api.model - def _get_selection_purchase_type(self): - return self.env["purchase.order"].fields_get( - allfields=["type"])["type"]["selection"] - - def default_purchase_type(self): - default_dict = self.env["purchase.order"].default_get(["type"]) - return default_dict.get("type") - import_id = fields.Many2one( comodel_name="purchase.order.import", ) action = fields.Selection( - string="Action", - selection=[ + selection_add=[ ("create", "Create"), - ("nothing", "Nothing"), ], - default="nothing", - states={"done": [("readonly", True)]}, - copy=False, - required=True, + ondelete={"create": "set default"}, ) purchase_order_id = fields.Many2one( - string="Purchase Order", - comodel_name="purchase.order") + string="Purchase Order", comodel_name="purchase.order" + ) purchase_supplier_code = fields.Char( string="Supplier Code", states={"done": [("readonly", True)]}, @@ -170,7 +158,7 @@ def default_purchase_type(self): string="Product Name", states={"done": [("readonly", True)]}, copy=False, - ) + ) purchase_ordered_qty = fields.Float( string="Ordered Qty", states={"done": [("readonly", True)]}, @@ -224,12 +212,12 @@ def default_purchase_type(self): string="Picking Type", states={"done": [("readonly", True)]}, copy=False, - ) + ) def action_validate(self): super().action_validate() line_values = [] - for line in self.filtered(lambda l: l.state != "done"): + for line in self.filtered(lambda ln: ln.state != "done"): log_info = "" origin = picking_type = product = supplier = warehouse = False if line.purchase_origin: @@ -240,7 +228,7 @@ def action_validate(self): "log_info": log_info, "state": "error", "action": "nothing", - } + } if not log_info: supplier, log_info_supplier = line._check_supplier() if log_info_supplier: @@ -252,8 +240,9 @@ def action_validate(self): if log_info_warehouse: log_info += log_info_warehouse if not log_info_warehouse and warehouse: - picking_type, log_info_picking_type = ( - line._check_picking_type(warehouse=warehouse)) + picking_type, log_info_picking_type = line._check_picking_type( + warehouse=warehouse + ) if log_info_picking_type: log_info += log_info_picking_type state = "error" if log_info else "pass" @@ -265,12 +254,11 @@ def action_validate(self): "purchase_supplier_id": supplier and supplier.id, "purchase_product_id": product and product.id, "purchase_warehouse_id": warehouse and warehouse.id, - "purchase_picking_type_id": ( - picking_type and picking_type.id), + "purchase_picking_type_id": (picking_type and picking_type.id), "log_info": log_info, "state": state, "action": action, - } + } line_values.append( ( 1, @@ -281,66 +269,65 @@ def action_validate(self): return line_values def action_process(self): - super().action_validate() - line_values = [] + line_values = super().action_validate() origins = [] - for line in self.filtered(lambda l: l.state not in ("error", "done")): + for line in self.filtered(lambda ln: ln.state not in ("error", "done")): if line.action == "create": if not line.purchase_origin: log_info = "" purchase = line._create_purchase_order() line._create_purchase_order_line(purchase_order=purchase) - if line.purchase_origin and ( - line.purchase_origin) not in ( - origins): - if self.filtered(lambda l: l.purchase_origin == ( - line.purchase_origin) and ( - l.state == "error")): + if line.purchase_origin and line.purchase_origin not in origins: + if self.filtered( + lambda ln: ln.purchase_origin == line.purchase_origin + and (ln.state == "error") + ): log_info = _( - "Error: There is another line with the same" + - " origin document with some errors.") + "Error: There is another line with the same" + + " origin document with some errors." + ) else: origin, log_info = line._check_origin() if not log_info: origins.append(origin) purchase = line._create_purchase_order() same_origin = self.filtered( - lambda l: l.purchase_origin == ( - line.purchase_origin)) + lambda ln: ln.purchase_origin == line.purchase_origin + ) for record in same_origin: record._create_purchase_order_line( - purchase_order=purchase) + purchase_order=purchase + ) if purchase: purchase.button_confirm() purchase.date_approve = line.purchase_date_confirm # pickings = self.env["stock.picking"].search( - # [("purchase_id", "=", purchase.id)]) + # [("purchase_id", "=", purchase.id)]) # pickings.write({ - # "scheduled_date": line.purchase_date_confirm, - # "origin": line.purchase_origin}) + # "scheduled_date": line.purchase_date_confirm, + # "origin": line.purchase_origin}) # pickings.button_force_done_detailed_operations() # pickings.button_validate() # for orderlines in purchase.order_line: - # move = pickings.move_ids_without_package.filtered( - # lambda c: c.purchase_line_id == orderlines) - # move.write({ - # "standard_price": orderlines.price_unit, - # "amount": ( - # orderlines.price_unit * move.quantity_done)}) - # ml = move.move_line_ids - # ml.write({ - # "qty_done": move.purchase_line_id.qty_done, - # "standard_price":orderlines.price_unit, - # "amount": ( - # move.purchase_line_id.qty_done) * ( - # orderlines.price_unit)}) + # move = pickings.move_ids_without_package.filtered( + # lambda c: c.purchase_line_id == orderlines) + # move.write({ + # "standard_price": orderlines.price_unit, + # "amount": ( + # orderlines.price_unit * move.quantity_done)}) + # ml = move.move_line_ids + # ml.write({ + # "qty_done": move.purchase_line_id.qty_done, + # "standard_price":orderlines.price_unit, + # "amount": ( + # move.purchase_line_id.qty_done) * ( + # orderlines.price_unit)}) else: continue state = "error" if log_info else "done" - line.write({ - "purchase_order_id": purchase.id, - "log_info": log_info, - "state": state}) + line.write( + {"purchase_order_id": purchase.id, "log_info": log_info, "state": state} + ) line_values.append( ( 1, @@ -376,8 +363,10 @@ def _check_supplier(self): search_domain = [("name", "=ilike", self.purchase_supplier_name)] elif self.purchase_supplier_code and self.purchase_supplier_name: search_domain = [ - '|', ("name", "=ilike", self.purchase_supplier_name), - ("ref", "=", self.purchase_supplier_code)] + "|", + ("name", "=ilike", self.purchase_supplier_name), + ("ref", "=", self.purchase_supplier_code), + ] suppliers = supplier_obj.search(search_domain) if not suppliers: suppliers = False @@ -385,8 +374,9 @@ def _check_supplier(self): elif len(suppliers) > 1: if self.purchase_supplier_code and self.purchase_supplier_name: search_domain = [ - ("name", "=ilike", self.purchase_supplier_name), - ("ref", "=", self.purchase_supplier_code)] + ("name", "=ilike", self.purchase_supplier_name), + ("ref", "=", self.purchase_supplier_code), + ] suppliers = supplier_obj.search(search_domain) if not len(suppliers) == 1: suppliers = False @@ -400,17 +390,22 @@ def _check_product(self): return self.purchase_product_id, log_info product_obj = self.env["product.product"] if self.purchase_product_name: - name = self.purchase_product_name.replace(" ","") - name = ''.join((c for c in unicodedata.normalize('NFD',name) if unicodedata.category(c) != 'Mn')) + name = self.purchase_product_name.replace(" ", "") + name = "".join( + c + for c in unicodedata.normalize("NFD", name) + if unicodedata.category(c) != "Mn" + ) if self.purchase_product_code and not self.purchase_product_name: - search_domain = [ - ("default_code", "=", self.purchase_product_code)] + search_domain = [("default_code", "=", self.purchase_product_code)] elif self.purchase_product_name and not self.purchase_product_code: search_domain = [("trim_name", "=ilike", name)] elif self.purchase_product_code and self.purchase_product_name: search_domain = [ - '|', ("trim_name", "=ilike", name), - ("default_code", "=", self.purchase_product_code)] + "|", + ("trim_name", "=ilike", name), + ("default_code", "=", self.purchase_product_code), + ] products = product_obj.search(search_domain) if not products: products = False @@ -418,15 +413,16 @@ def _check_product(self): elif len(products) > 1: if self.purchase_product_code and self.purchase_product_name: search_domain = [ - ("trim_name", "=ilike", name), - ("default_code", "=", self.purchase_product_code)] + ("trim_name", "=ilike", name), + ("default_code", "=", self.purchase_product_code), + ] products = product_obj.search(search_domain) if not len(products) == 1: products = False log_info = _( - "Error: More than one product with the same name or " + - "code found.").format(self.purchase_product_name, - self.purchase_product_code) + "Error: More than one product with the same name or " + + "code found." + ).format(self.purchase_product_name, self.purchase_product_code) return products and products[:1], log_info def _check_warehouse(self): @@ -437,18 +433,20 @@ def _check_warehouse(self): if self.purchase_warehouse_id: return self.purchase_warehouse_id, log_info warehouse_obj = self.env["stock.warehouse"] - search_domain = ['|', + search_domain = [ + "|", ("name", "=", self.purchase_warehouse), - ("code", "=", self.purchase_warehouse)] + ("code", "=", self.purchase_warehouse), + ] warehouses = warehouse_obj.search(search_domain) if not warehouses: warehouses = False log_info = _("Error: No warehouse found.") elif len(warehouses) > 1: warehouses = False - log_info = _( - "Error: More than one warehouse with name {} found." - ).format(self.purchase_warehouse) + log_info = _("Error: More than one warehouse with name {} found.").format( + self.purchase_warehouse + ) return warehouses and warehouses[:1], log_info def _check_picking_type(self, warehouse=False): @@ -460,7 +458,8 @@ def _check_picking_type(self, warehouse=False): search_domain = [("code", "=", "incoming")] if warehouse: search_domain = expression.AND( - [[("warehouse_id", "=", warehouse.id)], search_domain]) + [[("warehouse_id", "=", warehouse.id)], search_domain] + ) picking_types = picking_type_obj.search(search_domain) if not picking_types: picking_types = False @@ -469,7 +468,7 @@ def _check_picking_type(self, warehouse=False): picking_types = False log_info = _( "Error: More than one picking type with warehouse {} found." - ).format(warehouse) + ).format(warehouse) return picking_types and picking_types[:1], log_info def _create_purchase_order(self): @@ -482,19 +481,27 @@ def _create_purchase_order_line(self, purchase_order=False): if purchase_order: if not self.purchase_ordered_qty and self.purchase_qty_done: self.purchase_ordered_qty = self.purchase_qty_done - purchase_order.order_line = [(0, 0, { - "product_id": self.purchase_product_id.id, - "product_qty": self.purchase_ordered_qty, - "qty_received": self.purchase_qty_done, - "product_uom": self.purchase_product_id.uom_id.id, - "name": self.purchase_product_id.display_name, - "order_id": purchase_order, - "price_unit": self.purchase_price_unit, - "discount": self.purchase_discount})] + purchase_order.order_line = [ + ( + 0, + 0, + { + "product_id": self.purchase_product_id.id, + "product_qty": self.purchase_ordered_qty, + "qty_received": self.purchase_qty_done, + "product_uom": self.purchase_product_id.uom_id.id, + "name": self.purchase_product_id.display_name, + "order_id": purchase_order, + "price_unit": self.purchase_price_unit, + "discount": self.purchase_discount, + }, + ) + ] def _purchase_order_values(self): return { "partner_id": self.purchase_supplier_id.id, "picking_type_id": self.purchase_picking_type_id.id, "partner_ref": self.purchase_origin, - "date_order": self.purchase_create_date} + "date_order": self.purchase_create_date, + } From fc459198198303a58fc4932ef8df3159c15e8dda Mon Sep 17 00:00:00 2001 From: oihane Date: Tue, 25 Jun 2024 15:33:04 +0200 Subject: [PATCH 4/6] [IMP] pre-commit stuff (#2627) --- purchase_import_wizard/__manifest__.py | 2 +- .../purchase_import_wizard_security.xml | 2 +- .../purchase_order_import_line_views.xml | 86 +++++++++---------- .../views/purchase_order_import_views.xml | 64 +++++++------- 4 files changed, 78 insertions(+), 76 deletions(-) diff --git a/purchase_import_wizard/__manifest__.py b/purchase_import_wizard/__manifest__.py index 182d676afe..f49ac2001d 100644 --- a/purchase_import_wizard/__manifest__.py +++ b/purchase_import_wizard/__manifest__.py @@ -12,7 +12,7 @@ "purchase", "base_import_wizard", "purchase_discount", - "product_trim_name" + "product_trim_name", ], "data": [ "security/ir.model.access.csv", diff --git a/purchase_import_wizard/security/purchase_import_wizard_security.xml b/purchase_import_wizard/security/purchase_import_wizard_security.xml index 85a845021a..cfe6e938ce 100644 --- a/purchase_import_wizard/security/purchase_import_wizard_security.xml +++ b/purchase_import_wizard/security/purchase_import_wizard_security.xml @@ -2,7 +2,7 @@ Purchase order wizard company rule - + ['|', ('company_id', 'in', company_ids), ('company_id', '=', False)] diff --git a/purchase_import_wizard/views/purchase_order_import_line_views.xml b/purchase_import_wizard/views/purchase_order_import_line_views.xml index 30619624ef..bcb801522f 100644 --- a/purchase_import_wizard/views/purchase_order_import_line_views.xml +++ b/purchase_import_wizard/views/purchase_order_import_line_views.xml @@ -4,13 +4,13 @@ purchase.order.import.line - - - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + @@ -122,27 +122,27 @@ decoration-it="log_info" editable="top" > - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/purchase_import_wizard/views/purchase_order_import_views.xml b/purchase_import_wizard/views/purchase_order_import_views.xml index 46332a252d..746fa7750f 100644 --- a/purchase_import_wizard/views/purchase_order_import_views.xml +++ b/purchase_import_wizard/views/purchase_order_import_views.xml @@ -4,10 +4,10 @@ purchase.order.import - - - - + + + + @@ -62,20 +62,22 @@ - - - + + + - - + + - + You must use this column names in order to fill the table:

    -
  • CodigoProveedor: this will fill Supplier
  • -
  • NombreProveedor: this will fill Supplier
  • +
  • CodigoProveedor: this will fill Supplier
  • +
  • NombreProveedor: this will fill Supplier
  • FechaCreada: this will fill Date Order
  • -
  • FechaConfirmada: this will fill Date Confirm
  • +
  • FechaConfirmada: this will fill Date Confirm
  • Entrada: this will fill Partner Ref
  • -
  • CodigoProducto: this will fill Product
  • -
  • NombreProducto: this will fill Product
  • +
  • CodigoProducto: this will fill Product
  • +
  • NombreProducto: this will fill Product
  • KgProveedor: this will fill Product Quantity
  • KgNeto: this will fill Quantity Received
  • - -
  • PrecioUnitario: this will fill Price Unit
  • + +
  • PrecioUnitario: this will fill Price Unit
  • Descuento: this will fill Discount
  • Estado: this will fill State
  • -
  • CodigoAlmacen: this will fill Warehouse
  • +
  • CodigoAlmacen: this will fill Warehouse
@@ -128,9 +130,9 @@
- - - + + +
@@ -173,7 +175,7 @@ ir.actions.act_window purchase.order.import tree,form - + Date: Thu, 11 Sep 2025 09:39:43 +0200 Subject: [PATCH 5/6] [18.0][MIG] purchase_import_wizard: Migration to 18.0 --- purchase_import_wizard/README.rst | 46 +++++++++++++++++++ purchase_import_wizard/__manifest__.py | 3 +- purchase_import_wizard/i18n/es.po | 2 +- .../i18n/purchase_import_wizard.pot | 2 +- .../purchase_order_import_line_views.xml | 8 ++-- .../views/purchase_order_import_views.xml | 24 +++++----- 6 files changed, 65 insertions(+), 20 deletions(-) create mode 100644 purchase_import_wizard/README.rst diff --git a/purchase_import_wizard/README.rst b/purchase_import_wizard/README.rst new file mode 100644 index 0000000000..0caa68e463 --- /dev/null +++ b/purchase_import_wizard/README.rst @@ -0,0 +1,46 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +===================== +Purchase Import Wizard +===================== +Module to import Purchase Orders from Excel files, improving usability and automation in purchase operations. + +* Allows importing purchase orders and lines from structured Excel files. +* Automatically validates suppliers, products, warehouses, and picking types. +* Creates purchase orders and order lines from imported data. +* Provides log of errors and highlights issues in import lines. +* Button box for quick access to imported lines and created purchase orders. + +Key Features +============ +- Wizard to upload Excel files and import purchase orders. +- Validation of imported lines, with error reporting in **Error Log**. +- Automatic creation of **Purchase Orders** and **Order Lines** from import lines. +- Quick access buttons for **Import Lines** and **Purchase Orders**. +- Statusbar and state management for import workflow (`draft`, `2validate`, `pass`, `error`, `done`). + +Configuration +============= +1. Go to **Purchases → Configuration → Import Purchase Orders**. +2. Upload an Excel file using the column names in the **Help** tab. +3. Click **Validate** to check lines and **Process** to create purchase orders. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us improve it by providing detailed feedback. + +Credits +======= + +Contributors +------------ + +* Berezi Amubieta +* Ana Juaristi + + +Do not contact contributors directly about support or help with technical issues. diff --git a/purchase_import_wizard/__manifest__.py b/purchase_import_wizard/__manifest__.py index f49ac2001d..d5389f8b55 100644 --- a/purchase_import_wizard/__manifest__.py +++ b/purchase_import_wizard/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Purchase Import Wizard", - "version": "14.0.1.0.0", + "version": "18.0.1.0.0", "category": "Hidden/Tools", "license": "AGPL-3", "author": "AvanzOSC", @@ -11,7 +11,6 @@ "depends": [ "purchase", "base_import_wizard", - "purchase_discount", "product_trim_name", ], "data": [ diff --git a/purchase_import_wizard/i18n/es.po b/purchase_import_wizard/i18n/es.po index f456726897..32082ce588 100644 --- a/purchase_import_wizard/i18n/es.po +++ b/purchase_import_wizard/i18n/es.po @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-23 08:30+0000\n" "PO-Revision-Date: 2023-03-23 08:30+0000\n" diff --git a/purchase_import_wizard/i18n/purchase_import_wizard.pot b/purchase_import_wizard/i18n/purchase_import_wizard.pot index b6e4e7eb2c..1edb3513f0 100644 --- a/purchase_import_wizard/i18n/purchase_import_wizard.pot +++ b/purchase_import_wizard/i18n/purchase_import_wizard.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-23 08:30+0000\n" "PO-Revision-Date: 2023-03-23 08:30+0000\n" diff --git a/purchase_import_wizard/views/purchase_order_import_line_views.xml b/purchase_import_wizard/views/purchase_order_import_line_views.xml index bcb801522f..3a013e72b0 100644 --- a/purchase_import_wizard/views/purchase_order_import_line_views.xml +++ b/purchase_import_wizard/views/purchase_order_import_line_views.xml @@ -59,14 +59,14 @@ string="Validate" type="object" class="oe_read_only" - states="2validate,error" + modifiers="{'invisible': [('state','not in',['2validate','error'])]}" /> - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + - -
-

Help with Excel column names

-

You must use this column names in order to fill the table:

-
    -
  • CodigoProveedor: this will fill Supplier
  • -
  • NombreProveedor: this will fill Supplier
  • -
  • FechaCreada: this will fill Date Order
  • -
  • FechaConfirmada: this will fill Date Confirm
  • -
  • Entrada: this will fill Partner Ref
  • -
  • CodigoProducto: this will fill Product
  • -
  • NombreProducto: this will fill Product
  • -
  • KgProveedor: this will fill Product Quantity
  • -
  • KgNeto: this will fill Quantity Received
  • + +
    +

    Help with Excel column names

    +

    You must use this column names in order to fill the table:

    +
      +
    • CodigoProveedor: this will fill Supplier
    • +
    • NombreProveedor: this will fill Supplier
    • +
    • FechaCreada: this will fill Date Order
    • +
    • FechaConfirmada: this will fill Date Confirm
    • +
    • Entrada: this will fill Partner Ref
    • +
    • CodigoProducto: this will fill Product
    • +
    • NombreProducto: this will fill Product
    • +
    • KgProveedor: this will fill Product Quantity
    • +
    • KgNeto: this will fill Quantity Received
    • -
    • PrecioUnitario: this will fill Price Unit
    • -
    • Descuento: this will fill Discount
    • -
    • Estado: this will fill State
    • -
    • CodigoAlmacen: this will fill Warehouse
    • -
    -
    -
    - - - - - - - + + + - - purchase.order.import - - - - - - - - + purchase.order.import + + + + + + + + - - - - + + + + - - Import Purchase Orders - ir.actions.act_window - purchase.order.import - list,form - - + + Import Purchase Orders + ir.actions.act_window + purchase.order.import + list,form + + - - -