diff --git a/l10n_es_pos/__manifest__.py b/l10n_es_pos/__manifest__.py index 93f87bbf5bf..e6f339b90ed 100644 --- a/l10n_es_pos/__manifest__.py +++ b/l10n_es_pos/__manifest__.py @@ -11,11 +11,19 @@ "license": "AGPL-3", "version": "14.0.3.0.0", "depends": ["point_of_sale"], - "data": ["views/pos_templates.xml", "views/pos_views.xml"], + "data": [ + "security/ir.model.access.csv", + "security/device_security.xml", + "views/pos_templates.xml", + "views/pos_views.xml", + "views/res_config_views.xml", + ], "qweb": [ "static/src/xml/pos.xml", "static/src/xml/Screens/OrderManagementScreen/OrderRow.xml", "static/src/xml/Screens/OrderManagementScreen/OrderList.xml", + "static/src/xml/Screens/Chrome/Chrome.xml", + "static/src/xml/Screens/Chrome/DeviceName.xml", ], "installable": True, "post_init_hook": "post_init_hook", diff --git a/l10n_es_pos/i18n/es.po b/l10n_es_pos/i18n/es.po index 77320c11bdd..547e2b7f2d5 100644 --- a/l10n_es_pos/i18n/es.po +++ b/l10n_es_pos/i18n/es.po @@ -6,23 +6,32 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-12 14:13+0000\n" -"PO-Revision-Date: 2020-07-27 09:19+0000\n" +"POT-Creation-Date: 2023-02-01 09:16+0000\n" +"PO-Revision-Date: 2023-02-01 10:22+0100\n" "Last-Translator: Daniel Martinez Vila \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10\n" +"X-Generator: Poedit 3.2.2\n" #. module: l10n_es_pos #. openerp-web #: code:addons/l10n_es_pos/static/src/xml/pos.xml:0 #, python-format msgid "" -"!env.pos.config.iface_l10n_es_simplified_invoice or receipt.is_to_invoice" +"!(env.pos.config.iface_l10n_es_simplified_invoice or env.pos.config." +"pos_sequence_by_device) or receipt.is_to_invoice" +msgstr "" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "" +"" msgstr "" #. module: l10n_es_pos @@ -35,6 +44,44 @@ msgstr "Por encima de este límite no se creará factura simplificada" msgid "Autogenerate for each POS created" msgstr "Autogenerada por cada TPV creado" +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__pos_device_ids +msgid "Available POS devices" +msgstr "Dispositivos TPV disponibles" + +#. module: l10n_es_pos +#. openerp-web +#: code:addons/l10n_es_pos/static/src/js/PaymentScreen.js:0 +#: code:addons/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js:0 +#, python-format +msgid "Cannot establish device. Clossing POS." +msgstr "No es posible establecer dispositivo. Cerrando TPV." + +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__company_id +msgid "Company" +msgstr "Compañía" + +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de configuración" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__create_date +msgid "Created on" +msgstr "" + #. module: l10n_es_pos #. openerp-web #: code:addons/l10n_es_pos/static/src/xml/pos.xml:0 @@ -42,20 +89,38 @@ msgstr "Autogenerada por cada TPV creado" msgid "Customer:" msgstr "Cliente:" +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_device_view_tree +msgid "Device locked" +msgstr "Dispositivo bloqueado" + #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_ir_sequence__display_name #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__display_name #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_session__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings__display_name msgid "Display Name" msgstr "" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_ir_sequence__id #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__id #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_session__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings__id msgid "ID" msgstr "" +#. module: l10n_es_pos +#: model:ir.model.fields,help:l10n_es_pos.field_pos_config__pos_device_ids +msgid "If left empty, all devices will be selectable" +msgstr "Si se deja vacío, se pueden seleccionar todos los dispositivos" + #. module: l10n_es_pos #: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form msgid "Invoice Journal" @@ -69,15 +134,59 @@ msgstr "Diario de facturas" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_ir_sequence____last_update #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device____last_update #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_session____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings____last_update msgid "Last Modified on" msgstr "" +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__locked +msgid "Locked" +msgstr "Bloqueado" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__name +msgid "Name" +msgstr "Nombre" + +#. module: l10n_es_pos +#. openerp-web +#: code:addons/l10n_es_pos/static/src/js/Screens/Chrome/DeviceName.js:0 +#, python-format +msgid "No device" +msgstr "Sin dispositivo" + #. module: l10n_es_pos #: model:ir.model.fields,help:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_limit msgid "Over this amount is not legally posible to create a simplified invoice" msgstr "Por encima de esta cantidad no es legal crear una factura simplificada" +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__pos_device_id +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_pos_order_filter_simplified_invoice +msgid "POS Physical Device" +msgstr "Dispositivo físico TPV" + +#. module: l10n_es_pos +#: model:ir.actions.act_window,name:l10n_es_pos.res_partner_account_brand_act_window +#: model:ir.ui.menu,name:l10n_es_pos.pos_device_menu +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form +msgid "POS Physical devices" +msgstr "Dispositivos físicos TPV" + #. module: l10n_es_pos #: model:ir.model,name:l10n_es_pos.model_pos_config msgid "Point of Sale Configuration" @@ -88,11 +197,48 @@ msgstr "Configuración Punto de Venta" msgid "Point of Sale Orders" msgstr "Pedidos del Punto de Venta" +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_pos_session +msgid "Point of Sale Session" +msgstr "Sesión del Punto de Venta" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__pos_sequence_by_device +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__pos_sequence_by_device +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company__pos_sequence_by_device +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings__pos_sequence_by_device +msgid "Pos Sequence By Device" +msgstr "Secuencia TPV por dispositivo" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "Secuencing by physical device" +msgstr "Secuencia TPV por dispositivo" + +#. module: l10n_es_pos +#. openerp-web +#: code:addons/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js:0 +#, python-format +msgid "Select Physical Device" +msgstr "Selecciona dispositivo físico" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form +msgid "Select available physical devices for this POS configuration" +msgstr "" +"Selecciona los dispositivos físicos disponibles para esta configuración TPV" + #. module: l10n_es_pos #: model:ir.model,name:l10n_es_pos.model_ir_sequence +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__sequence msgid "Sequence" msgstr "Secuencia" +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "Sequencing" +msgstr "Secuenciación" + #. module: l10n_es_pos #: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form msgid "Set simplified invoice sequence for this POS" @@ -105,6 +251,7 @@ msgstr "Límite de factura simplificada" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_number +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__device_simplified_invoice_number msgid "Sim.Inv number" msgstr "Número de factura simplificada" @@ -113,7 +260,7 @@ msgstr "Número de factura simplificada" #: code:addons/l10n_es_pos/static/src/xml/Screens/OrderManagementScreen/OrderList.xml:0 #, python-format msgid "Simplified Invoice" -msgstr "" +msgstr "Factura simplificada" #. module: l10n_es_pos #: code:addons/l10n_es_pos/models/pos_config.py:0 @@ -138,11 +285,13 @@ msgstr "Secuencia de Factura Simplificada" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_padding +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__device_simplified_invoice_padding msgid "Simplified Invoice padding" msgstr "Relleno de Factura Simplificada" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_prefix +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__device_simplified_invoice_prefix msgid "Simplified Invoice prefix" msgstr "Prefijo de Factura Simplificada" @@ -157,13 +306,19 @@ msgstr "Factura simplificada" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__l10n_es_unique_id msgid "Simplified invoice number" -msgstr "" +msgstr "Número factura simplificada" #. module: l10n_es_pos #: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_pos_order_filter_simplified_invoice msgid "Simplified invoices" msgstr "Facturas simplificadas" +#. module: l10n_es_pos +#: code:addons/l10n_es_pos/models/pos_config.py:0 +#, python-format +msgid "There are no physical devices available. Cannot start session." +msgstr "No hay dispositivos físicos disponibles. No es posible iniciar sesión." + #. module: l10n_es_pos #: code:addons/l10n_es_pos/models/ir_sequence.py:0 #, python-format @@ -174,6 +329,16 @@ msgstr "" "Ya existe una secuencia de Factura Simplificada con ese prefijo y este " "debería ser único." +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_device_view_tree +msgid "Unlock device" +msgstr "Desbloquear dispositivo" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "Use a different subsequence for each physical device on POS." +msgstr "Usar secuencia diferente para cada dispositivo físico en TPV." + #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__iface_l10n_es_simplified_invoice msgid "Use simplified invoices for this POS" @@ -186,6 +351,11 @@ msgstr "Usar Facturas Simplificadas en este Punto de Venta" msgid "on" msgstr "sobre" +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_pos_device +msgid "pos.device" +msgstr "" + #~ msgid "Unique Order ID" #~ msgstr "ID único de pedido" @@ -198,9 +368,6 @@ msgstr "sobre" #~ msgid "Customer data" #~ msgstr "Datos de cliente" -#~ msgid "Name:" -#~ msgstr "Nombre:" - #~ msgid "Product" #~ msgstr "Producto" diff --git a/l10n_es_pos/i18n/l10n_es_pos.pot b/l10n_es_pos/i18n/l10n_es_pos.pot index f7d4000ea73..0666a19027e 100644 --- a/l10n_es_pos/i18n/l10n_es_pos.pot +++ b/l10n_es_pos/i18n/l10n_es_pos.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 14.0+e\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-01 09:16+0000\n" +"PO-Revision-Date: 2023-02-01 09:16+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -18,7 +20,16 @@ msgstr "" #: code:addons/l10n_es_pos/static/src/xml/pos.xml:0 #, python-format msgid "" -"!env.pos.config.iface_l10n_es_simplified_invoice or receipt.is_to_invoice" +"!(env.pos.config.iface_l10n_es_simplified_invoice or " +"env.pos.config.pos_sequence_by_device) or receipt.is_to_invoice" +msgstr "" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "" +"" msgstr "" #. module: l10n_es_pos @@ -31,6 +42,44 @@ msgstr "" msgid "Autogenerate for each POS created" msgstr "" +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__pos_device_ids +msgid "Available POS devices" +msgstr "" + +#. module: l10n_es_pos +#. openerp-web +#: code:addons/l10n_es_pos/static/src/js/PaymentScreen.js:0 +#: code:addons/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js:0 +#, python-format +msgid "Cannot establish device. Clossing POS." +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__company_id +msgid "Company" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__create_date +msgid "Created on" +msgstr "" + #. module: l10n_es_pos #. openerp-web #: code:addons/l10n_es_pos/static/src/xml/pos.xml:0 @@ -38,20 +87,38 @@ msgstr "" msgid "Customer:" msgstr "" +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_device_view_tree +msgid "Device locked" +msgstr "" + #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_ir_sequence__display_name #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__display_name #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_session__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company__display_name +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings__display_name msgid "Display Name" msgstr "" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_ir_sequence__id #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__id #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_session__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company__id +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings__id msgid "ID" msgstr "" +#. module: l10n_es_pos +#: model:ir.model.fields,help:l10n_es_pos.field_pos_config__pos_device_ids +msgid "If left empty, all devices will be selectable" +msgstr "" + #. module: l10n_es_pos #: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form msgid "Invoice Journal" @@ -65,15 +132,59 @@ msgstr "" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_ir_sequence____last_update #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device____last_update #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_session____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company____last_update +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings____last_update msgid "Last Modified on" msgstr "" +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__locked +msgid "Locked" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__name +msgid "Name" +msgstr "" + +#. module: l10n_es_pos +#. openerp-web +#: code:addons/l10n_es_pos/static/src/js/Screens/Chrome/DeviceName.js:0 +#, python-format +msgid "No device" +msgstr "" + #. module: l10n_es_pos #: model:ir.model.fields,help:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_limit msgid "Over this amount is not legally posible to create a simplified invoice" msgstr "" +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__pos_device_id +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_pos_order_filter_simplified_invoice +msgid "POS Physical Device" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.actions.act_window,name:l10n_es_pos.res_partner_account_brand_act_window +#: model:ir.ui.menu,name:l10n_es_pos.pos_device_menu +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form +msgid "POS Physical devices" +msgstr "" + #. module: l10n_es_pos #: model:ir.model,name:l10n_es_pos.model_pos_config msgid "Point of Sale Configuration" @@ -84,11 +195,47 @@ msgstr "" msgid "Point of Sale Orders" msgstr "" +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_pos_session +msgid "Point of Sale Session" +msgstr "" + +#. module: l10n_es_pos +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__pos_sequence_by_device +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_order__pos_sequence_by_device +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_company__pos_sequence_by_device +#: model:ir.model.fields,field_description:l10n_es_pos.field_res_config_settings__pos_sequence_by_device +msgid "Pos Sequence By Device" +msgstr "" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "Secuencing by physical device" +msgstr "" + +#. module: l10n_es_pos +#. openerp-web +#: code:addons/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js:0 +#, python-format +msgid "Select Physical Device" +msgstr "" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form +msgid "Select available physical devices for this POS configuration" +msgstr "" + #. module: l10n_es_pos #: model:ir.model,name:l10n_es_pos.model_ir_sequence +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__sequence msgid "Sequence" msgstr "" +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "Sequencing" +msgstr "" + #. module: l10n_es_pos #: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_config_view_form msgid "Set simplified invoice sequence for this POS" @@ -101,6 +248,7 @@ msgstr "" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_number +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__device_simplified_invoice_number msgid "Sim.Inv number" msgstr "" @@ -135,11 +283,13 @@ msgstr "" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_padding +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__device_simplified_invoice_padding msgid "Simplified Invoice padding" msgstr "" #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__l10n_es_simplified_invoice_prefix +#: model:ir.model.fields,field_description:l10n_es_pos.field_pos_device__device_simplified_invoice_prefix msgid "Simplified Invoice prefix" msgstr "" @@ -161,6 +311,12 @@ msgstr "" msgid "Simplified invoices" msgstr "" +#. module: l10n_es_pos +#: code:addons/l10n_es_pos/models/pos_config.py:0 +#, python-format +msgid "There are no physical devices available. Cannot start session." +msgstr "" + #. module: l10n_es_pos #: code:addons/l10n_es_pos/models/ir_sequence.py:0 #, python-format @@ -169,6 +325,16 @@ msgid "" "should be unique." msgstr "" +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.pos_device_view_tree +msgid "Unlock device" +msgstr "" + +#. module: l10n_es_pos +#: model_terms:ir.ui.view,arch_db:l10n_es_pos.view_res_config_settings_pos_seq_device +msgid "Use a different subsequence for each physical device on POS." +msgstr "" + #. module: l10n_es_pos #: model:ir.model.fields,field_description:l10n_es_pos.field_pos_config__iface_l10n_es_simplified_invoice msgid "Use simplified invoices for this POS" @@ -180,3 +346,8 @@ msgstr "" #, python-format msgid "on" msgstr "" + +#. module: l10n_es_pos +#: model:ir.model,name:l10n_es_pos.model_pos_device +msgid "pos.device" +msgstr "" diff --git a/l10n_es_pos/models/__init__.py b/l10n_es_pos/models/__init__.py index 6cdbe814493..d5b921ac3ad 100644 --- a/l10n_es_pos/models/__init__.py +++ b/l10n_es_pos/models/__init__.py @@ -1,3 +1,6 @@ from . import ir_sequence from . import pos_config +from . import pos_device from . import pos_order +from . import res_company +from . import res_config_settings diff --git a/l10n_es_pos/models/pos_config.py b/l10n_es_pos/models/pos_config.py index 0e74a543514..91b99c4f34f 100644 --- a/l10n_es_pos/models/pos_config.py +++ b/l10n_es_pos/models/pos_config.py @@ -1,6 +1,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import _, api, fields, models +from odoo.exceptions import ValidationError class PosConfig(models.Model): @@ -52,6 +53,12 @@ def _compute_simplified_invoice_sequence(self): readonly=True, compute="_compute_simplified_invoice_sequence", ) + pos_sequence_by_device = fields.Boolean(related="company_id.pos_sequence_by_device") + pos_device_ids = fields.Many2many( + "pos.device", + string="Available POS devices", + help="If left empty, all devices will be selectable", + ) @api.model def create(self, vals): @@ -119,3 +126,46 @@ def _get_default_prefix(self): def _get_l10n_es_sequence_name(self): """HACK: This is done for getting the proper translation.""" return _("Simplified Invoice %s") + + def _check_available_devices(self): + self.ensure_one() + if len(self.pos_device_ids) > 0: + return + devices = self.env["pos.device"].search( + [ + ("company_id", "=", self.company_id.id), + ("locked", "=", False), + ] + ) + if len(devices) == 0: + raise ValidationError( + _("There are no physical devices available. Cannot start session.") + ) + + def open_ui(self): + for config in self: + if config.pos_sequence_by_device: + config._check_available_devices() + return super(PosConfig, self).open_ui() + + def open_session_cb(self, check_coa=True): + for config in self: + if config.pos_sequence_by_device: + config._check_available_devices() + return super(PosConfig, self).open_session_cb(check_coa) + + def _open_session(self, session_id): + for config in self: + if config.pos_sequence_by_device: + config._check_available_devices() + return super(PosConfig, self)._open_session(session_id) + + +class PosSession(models.Model): + _inherit = "pos.session" + + def open_frontend_cb(self): + for session in self: + if session.config_id.pos_sequence_by_device: + session.config_id._check_available_devices() + return super(PosSession, self).open_frontend_cb() diff --git a/l10n_es_pos/models/pos_device.py b/l10n_es_pos/models/pos_device.py new file mode 100644 index 00000000000..3c7dbfe396d --- /dev/null +++ b/l10n_es_pos/models/pos_device.py @@ -0,0 +1,53 @@ +# Copyright 2023 Landoo Sistemas de Informacion SL +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class PosDevice(models.Model): + _name = "pos.device" + + name = fields.Char(required=True) + sequence = fields.Many2one("ir.sequence", required=True) + locked = fields.Boolean(readonly=True) + company_id = fields.Many2one( + comodel_name="res.company", + string="Company", + required=True, + readonly=True, + default=lambda self: self.env.company, + ) + device_simplified_invoice_prefix = fields.Char( + "Simplified Invoice prefix", + readonly=True, + compute="_compute_simplified_invoice_sequence", + ) + device_simplified_invoice_padding = fields.Integer( + "Simplified Invoice padding", + readonly=True, + compute="_compute_simplified_invoice_sequence", + ) + device_simplified_invoice_number = fields.Integer( + "Sim.Inv number", + readonly=True, + compute="_compute_simplified_invoice_sequence", + ) + + def lock_device(self): + return self.write({"locked": True}) + + def unlock_device(self): + return self.write({"locked": False}) + + @api.depends( + "sequence.number_next_actual", + "sequence.prefix", + "sequence.padding", + ) + def _compute_simplified_invoice_sequence(self): + for dev in self: + seq = dev.sequence + dev.device_simplified_invoice_number = ( + seq._get_current_sequence().number_next_actual + ) + dev.device_simplified_invoice_prefix = seq._get_prefix_suffix()[0] + dev.device_simplified_invoice_padding = seq.padding diff --git a/l10n_es_pos/models/pos_order.py b/l10n_es_pos/models/pos_order.py index 1ae87946c04..868a15216da 100644 --- a/l10n_es_pos/models/pos_order.py +++ b/l10n_es_pos/models/pos_order.py @@ -16,6 +16,12 @@ class PosOrder(models.Model): "Simplified invoice number", copy=False, ) + pos_sequence_by_device = fields.Boolean( + related="session_id.config_id.pos_sequence_by_device" + ) + pos_device_id = fields.Many2one( + "pos.device", string="POS Physical Device", readonly=True + ) @api.model def _simplified_limit_check(self, amount_total, limit=3000): @@ -34,6 +40,8 @@ def _order_fields(self, ui_order): "is_l10n_es_simplified_invoice": True, } ) + if ui_order.get("pos_device", False): + res.update({"pos_device_id": ui_order["pos_device"]}) return res @api.model @@ -53,7 +61,15 @@ def _process_order(self, pos_order, draft, existing_order): "is_l10n_es_simplified_invoice": True, } ) - pos.l10n_es_simplified_invoice_sequence_id.next_by_id() + if not pos.pos_sequence_by_device: + pos.l10n_es_simplified_invoice_sequence_id.next_by_id() + elif order_data.get("device", False): + device_seq = self.env["ir.sequence"].browse( + order_data["device"]["sequence"][0] + ) + device_seq.next_by_id() + pos_order["data"].update({"pos_device": order_data["device"]["id"]}) + return super()._process_order(pos_order, draft, existing_order) def _get_fields_for_order_line(self): @@ -68,3 +84,9 @@ def _export_for_ui(self, order): res.update({"l10n_es_unique_id": order.l10n_es_unique_id}) return res + + def write(self, vals): + for order in self.filtered(lambda o: o.config_id.pos_sequence_by_device): + if vals.get("state") and vals["state"] == "paid" and order.name == "/": + order.name = order.l10n_es_unique_id + return super(PosOrder, self).write(vals) diff --git a/l10n_es_pos/models/res_company.py b/l10n_es_pos/models/res_company.py new file mode 100644 index 00000000000..e9ba3c2e0b0 --- /dev/null +++ b/l10n_es_pos/models/res_company.py @@ -0,0 +1,9 @@ +# Copyright 2023 Landoo Sistemas de Informacion SL +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + pos_sequence_by_device = fields.Boolean() diff --git a/l10n_es_pos/models/res_config_settings.py b/l10n_es_pos/models/res_config_settings.py new file mode 100644 index 00000000000..45e2b0ae86b --- /dev/null +++ b/l10n_es_pos/models/res_config_settings.py @@ -0,0 +1,11 @@ +# Copyright 2023 Landoo Sistemas de Informacion SL +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + pos_sequence_by_device = fields.Boolean( + related="company_id.pos_sequence_by_device", readonly=False + ) diff --git a/l10n_es_pos/readme/CONFIGURE.rst b/l10n_es_pos/readme/CONFIGURE.rst index 7f2f60a2830..1e20ad9972b 100644 --- a/l10n_es_pos/readme/CONFIGURE.rst +++ b/l10n_es_pos/readme/CONFIGURE.rst @@ -8,3 +8,13 @@ Si entramos en la configuración del TPV en modo debug, podremos también configurar la sequencia asociada al TPV. `Ver enlace de la AEAT `_ + +**Activación secuencia por dispositivo** + +* Esta configuración se activa en *Ajustes > Punto de venta > Secuenciación*. +* Acceder a Punto de venta > Configuración > Dispositivos físicos TPV + - Crear dispositivos y sus secuencias. Cada dispositivo debe tener su + propia secuencia. +* Acceder a la configuración del punto de venta + - Establecer los dispositivos disponibles en ese punto de venta. + Si se deja en blanco, se podrán seleccionar todos los dispositivos creados. diff --git a/l10n_es_pos/readme/CONTRIBUTORS.rst b/l10n_es_pos/readme/CONTRIBUTORS.rst index 4009333f2eb..55664662b69 100644 --- a/l10n_es_pos/readme/CONTRIBUTORS.rst +++ b/l10n_es_pos/readme/CONTRIBUTORS.rst @@ -19,3 +19,8 @@ * Rafael Blasco * Carlos Roca * João Marques + +* `Landoo `_: + + * Aritz Olea + * Gelo Joga diff --git a/l10n_es_pos/readme/DESCRIPTION.rst b/l10n_es_pos/readme/DESCRIPTION.rst index cb66105cfe8..95af46e9192 100644 --- a/l10n_es_pos/readme/DESCRIPTION.rst +++ b/l10n_es_pos/readme/DESCRIPTION.rst @@ -6,3 +6,5 @@ * Incluye los datos del cliente (nombre, NIF y dirección) si hay uno asignado. * Chequea que no se realice una factura simplificada con valor superior a 3.000 euros (la cantidad es configurable por TPV). +* Cubre el requerimiento legal de secuencias de facturas simplificadas del TPV + en el caso de que los dispositivos se queden sin conexión. diff --git a/l10n_es_pos/readme/ROADMAP.rst b/l10n_es_pos/readme/ROADMAP.rst index c18448cdb17..fe7bf6a3118 100644 --- a/l10n_es_pos/readme/ROADMAP.rst +++ b/l10n_es_pos/readme/ROADMAP.rst @@ -1,7 +1,2 @@ * No se comprueba el límite en operaciones separadas para un mismo cliente, algo que Hacienda proscribe. -* El soporte para usuarios concurrentes sobre una misma sesión es limitado y solo es - fiable si ambos puestos están online. En el caso de que cualquiera de ellos estuviese - offline, se correría el riesgo de solapar la secuencia de factura simplificada. Se - recomienda que en estos casos se añada mejor una configuración de punto de venta - adicional. diff --git a/l10n_es_pos/readme/USAGE.rst b/l10n_es_pos/readme/USAGE.rst new file mode 100644 index 00000000000..9c6351cdaaf --- /dev/null +++ b/l10n_es_pos/readme/USAGE.rst @@ -0,0 +1,27 @@ +En caso de la activación de secuencias por dispositivo: + +**Selección de dispositivo** + +Al entrar en la sesión se establecerá el dispositivo a utilizar. + +* En caso de que haya conexión, el dispositivo es bloqueado y no puede ser + seleccionado al entrar a la sesión desde otro dispositivo. + +* En caso de que no haya conexión, al intentar realizar el primer pedido + el dispositivo será expulsado de la sesión. Cuando se vuelva a conectar y + entre en la sesión, el pedido estará pendiente. Se podrá acabar de tramitar. + +**Transcurso de sesión** + +Se irán haciendo pedidos, y se establecerá la secuencia indicada en la +definición del dispositivo. + +En caso de pérdida de conexión: Cuando se recupere la conexión se incluirán los +pedidos en la sesión. + +En caso de pérdida de conexión + incidente en dispositivo (pérdida de batería, +cierre de ventana o navegador): El dispositivo se queda bloqueado. Tiene que +ser desbloqueado manualmente para volver a usarse. En caso entrar en la misma +sesión, los pedidos pendientes se incluirán en la misma sesión. En caso de ser +una sesión diferente, serán incluidos en una sesión de rescate siguiendo el +estándar de Odoo. diff --git a/l10n_es_pos/security/device_security.xml b/l10n_es_pos/security/device_security.xml new file mode 100644 index 00000000000..ef279293441 --- /dev/null +++ b/l10n_es_pos/security/device_security.xml @@ -0,0 +1,13 @@ + + + + + + POS Device multi-company + + + [('company_id', 'in', company_ids)] + + + diff --git a/l10n_es_pos/security/ir.model.access.csv b/l10n_es_pos/security/ir.model.access.csv new file mode 100644 index 00000000000..3111842a946 --- /dev/null +++ b/l10n_es_pos/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_pos_device_read,access_pos_device_read,model_pos_device,point_of_sale.group_pos_user,1,0,0,0 +access_pos_device_manage,access_pos_device_manage,model_pos_device,point_of_sale.group_pos_manager,1,1,1,1 diff --git a/l10n_es_pos/static/src/js/PaymentScreen.js b/l10n_es_pos/static/src/js/PaymentScreen.js index a4c15c5ab98..2725758218a 100644 --- a/l10n_es_pos/static/src/js/PaymentScreen.js +++ b/l10n_es_pos/static/src/js/PaymentScreen.js @@ -13,10 +13,22 @@ odoo.define("l10n_es_pos.PaymentScreen", function (require) { const L10nEsPosPaymentScreen = (PaymentScreen) => class extends PaymentScreen { async _finalizeValidation() { + if ( + this.env.pos.config.pos_sequence_by_device && + !this.env.pos.get_device() + ) { + await this.showPopup("ErrorPopup", { + title: this.env._t("Cannot establish device. Clossing POS."), + }); + this.trigger("close-pos"); + } const below_limit = this.currentOrder.get_total_with_tax() <= this.env.pos.config.l10n_es_simplified_invoice_limit; - if (this.env.pos.config.iface_l10n_es_simplified_invoice) { + if ( + this.env.pos.config.iface_l10n_es_simplified_invoice || + this.env.pos.config.pos_sequence_by_device + ) { const order = this.currentOrder; if (below_limit && !order.to_invoice) { await order.set_simple_inv_number(); diff --git a/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js b/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js new file mode 100644 index 00000000000..510add3190c --- /dev/null +++ b/l10n_es_pos/static/src/js/Screens/Chrome/Chrome.js @@ -0,0 +1,55 @@ +odoo.define("l10n_es_pos.chrome", function (require) { + "use strict"; + + const Chrome = require("point_of_sale.Chrome"); + const Registries = require("point_of_sale.Registries"); + + const L10nEsPosChrome = (Chrome) => + class extends Chrome { + async start() { + await super.start(); + if (this.env.pos.config.pos_sequence_by_device) { + const list = this.env.pos.pos_devices.map((pos_device) => { + return { + id: pos_device.id, + item: pos_device, + label: pos_device.name, + isSelected: false, + }; + }); + const {confirmed, payload: device} = await this.showPopup( + "SelectionPopup", + { + title: this.env._t("Select Physical Device"), + list: list, + } + ); + + if (!confirmed) { + this.trigger("close-pos"); + } + + var ret = await this.env.pos.set_device(device); + + if (!ret) { + await this.showPopup("ErrorPopup", { + title: this.env._t( + "Cannot establish device. Clossing POS." + ), + }); + this.trigger("close-pos"); + } + } + } + async _closePos() { + if (this.env.pos.config.pos_sequence_by_device) { + this.env.pos.unset_device(); + } + await super._closePos(); + } + }; + + Registries.Component.extend(Chrome, L10nEsPosChrome); + + return Chrome; +}); diff --git a/l10n_es_pos/static/src/js/Screens/Chrome/DeviceName.js b/l10n_es_pos/static/src/js/Screens/Chrome/DeviceName.js new file mode 100644 index 00000000000..e274df65ec1 --- /dev/null +++ b/l10n_es_pos/static/src/js/Screens/Chrome/DeviceName.js @@ -0,0 +1,21 @@ +odoo.define("l10n_es_pos.DeviceName", function (require) { + "use strict"; + + const PosComponent = require("point_of_sale.PosComponent"); + const Registries = require("point_of_sale.Registries"); + + class DeviceName extends PosComponent { + get devicename() { + const device = this.env.pos.get_device(); + if (device) { + return device.name; + } + return this.env._t("No device"); + } + } + DeviceName.template = "DeviceName"; + + Registries.Component.add(DeviceName); + + return DeviceName; +}); diff --git a/l10n_es_pos/static/src/js/models.js b/l10n_es_pos/static/src/js/models.js index d8593a0f7f9..94bf1235b0d 100644 --- a/l10n_es_pos/static/src/js/models.js +++ b/l10n_es_pos/static/src/js/models.js @@ -21,17 +21,23 @@ odoo.define("l10n_es_pos.models", function (require) { if (this.env.pos.db.get_orders().length) { return Promise.reject({message: {code: "pending_orders"}}); } + if (!this.env.pos.config.pos_sequence_by_device) { + return this.rpc({ + method: "search_read", + domain: [["id", "=", this.config_id]], + fields: ["l10n_es_simplified_invoice_number"], + model: "pos.config", + }); + } return this.rpc({ method: "search_read", - domain: [["id", "=", this.config_id]], - fields: ["l10n_es_simplified_invoice_number"], - model: "pos.config", + domain: [["id", "=", this.env.pos.get_device().id]], + fields: ["device_simplified_invoice_number"], + model: "pos.device", }); }, - get_padding_simple_inv: function (number) { - var diff = - this.config.l10n_es_simplified_invoice_padding - - number.toString().length; + get_padding_simple_inv: function (number, padding) { + var diff = padding - number.toString().length; var result = ""; if (diff <= 0) { result = number; @@ -48,7 +54,13 @@ odoo.define("l10n_es_pos.models", function (require) { this.pushed_simple_invoices.indexOf(order.data.l10n_es_unique_id) === -1 ) { this.pushed_simple_invoices.push(order.data.l10n_es_unique_id); - ++this.config.l10n_es_simplified_invoice_number; + if (!this.env.pos.config.pos_sequence_by_device) { + ++this.config.l10n_es_simplified_invoice_number; + } else if (this.get_device()) { + // If trying to send lost order when starting POS, + // device can still not be chosen. + ++this.get_device().device_simplified_invoice_number; + } } }, _flush_orders: function (orders) { @@ -61,6 +73,32 @@ odoo.define("l10n_es_pos.models", function (require) { }); return pos_super._flush_orders.apply(this, arguments); }, + get_device: function () { + return this.get("pos_device"); + }, + set_device: async function (device) { + var ret = await this.rpc({ + method: "lock_device", + model: "pos.device", + args: [[device.id]], + }); + if (ret) { + this.set("pos_device", device); + device.locked = true; + } + return ret; + }, + unset_device: async function () { + const device = this.get("pos_device", false); + var ret = await this.rpc({ + method: "unlock_device", + model: "pos.device", + args: [[device.id]], + }); + this.set("pos_device", false); + device.locked = false; + return ret; + }, }); var order_super = models.Order.prototype; @@ -69,7 +107,9 @@ odoo.define("l10n_es_pos.models", function (require) { var total = order_super.get_total_with_tax.apply(this, arguments); var below_limit = total <= this.pos.config.l10n_es_simplified_invoice_limit; this.is_simplified_invoice = - below_limit && this.pos.config.iface_l10n_es_simplified_invoice; + below_limit && + (this.pos.config.iface_l10n_es_simplified_invoice || + this.pos.config.pos_sequence_by_device); return total; }, set_simple_inv_number: function () { @@ -79,8 +119,13 @@ odoo.define("l10n_es_pos.models", function (require) { // We'll get the number from DB only when we're online. Otherwise // the sequence will run on the client side until the orders are // synced. - this.pos.config.l10n_es_simplified_invoice_number = - config.l10n_es_simplified_invoice_number; + if (!this.pos.config.pos_sequence_by_device) { + this.pos.config.l10n_es_simplified_invoice_number = + config.l10n_es_simplified_invoice_number; + } else { + this.pos.get_device().device_simplified_invoice_number = + config.device_simplified_invoice_number; + } }) .catch((error) => { // We'll only consider network errors (XmlHttpRequestError) or @@ -93,11 +138,23 @@ odoo.define("l10n_es_pos.models", function (require) { } }) .finally(() => { - const simplified_invoice_number = - this.pos.config.l10n_es_simplified_invoice_prefix + - this.pos.get_padding_simple_inv( - this.pos.config.l10n_es_simplified_invoice_number - ); + var simplified_invoice_number = false; + if (!this.pos.config.pos_sequence_by_device) { + simplified_invoice_number = + this.pos.config.l10n_es_simplified_invoice_prefix + + this.pos.get_padding_simple_inv( + this.pos.config.l10n_es_simplified_invoice_number, + this.pos.config.l10n_es_simplified_invoice_padding + ); + } else { + simplified_invoice_number = + this.pos.get_device().device_simplified_invoice_prefix + + this.pos.get_padding_simple_inv( + this.pos.get_device().device_simplified_invoice_number, + this.pos.get_device().device_simplified_invoice_padding + ); + } + this.l10n_es_unique_id = simplified_invoice_number; this.is_simplified_invoice = true; }); @@ -130,6 +187,7 @@ odoo.define("l10n_es_pos.models", function (require) { if (!res.to_invoice) { res.l10n_es_unique_id = this.l10n_es_unique_id; } + res.device = this.pos.get_device(); return res; }, export_for_printing: function () { @@ -150,4 +208,34 @@ odoo.define("l10n_es_pos.models", function (require) { }); models.load_fields("res.company", ["street", "city", "state_id", "zip"]); + + models.load_models([ + { + model: "pos.device", + fields: [ + "name", + "sequence", + "locked", + "company_id", + "device_simplified_invoice_prefix", + "device_simplified_invoice_padding", + "device_simplified_invoice_number", + ], + domain: function (self) { + return self.config.pos_device_ids.length > 0 + ? [ + ["company_id", "=", self.config.company_id[0]], + ["id", "in", self.config.pos_device_ids], + ["locked", "=", false], + ] + : [ + ["company_id", "=", self.config.company_id[0]], + ["locked", "=", false], + ]; + }, + loaded: function (self, pos_devices) { + self.pos_devices = pos_devices; + }, + }, + ]); }); diff --git a/l10n_es_pos/static/src/xml/Screens/Chrome/Chrome.xml b/l10n_es_pos/static/src/xml/Screens/Chrome/Chrome.xml new file mode 100644 index 00000000000..e7ae18cd532 --- /dev/null +++ b/l10n_es_pos/static/src/xml/Screens/Chrome/Chrome.xml @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/l10n_es_pos/static/src/xml/Screens/Chrome/DeviceName.xml b/l10n_es_pos/static/src/xml/Screens/Chrome/DeviceName.xml new file mode 100644 index 00000000000..275a0df9465 --- /dev/null +++ b/l10n_es_pos/static/src/xml/Screens/Chrome/DeviceName.xml @@ -0,0 +1,10 @@ + + + +
+ + + +
+
+
diff --git a/l10n_es_pos/static/src/xml/pos.xml b/l10n_es_pos/static/src/xml/pos.xml index f133d9bb23a..eb273ddc76a 100644 --- a/l10n_es_pos/static/src/xml/pos.xml +++ b/l10n_es_pos/static/src/xml/pos.xml @@ -8,7 +8,7 @@ >
Simplified invoice
@@ -48,7 +48,7 @@ !env.pos.config.iface_l10n_es_simplified_invoice or receipt.is_to_invoice + >!(env.pos.config.iface_l10n_es_simplified_invoice or env.pos.config.pos_sequence_by_device) or receipt.is_to_invoice
diff --git a/l10n_es_pos/views/pos_templates.xml b/l10n_es_pos/views/pos_templates.xml index 02895f18ed4..627c0df22dd 100644 --- a/l10n_es_pos/views/pos_templates.xml +++ b/l10n_es_pos/views/pos_templates.xml @@ -15,6 +15,14 @@ type="text/javascript" src="/l10n_es_pos/static/src/js/PaymentScreen.js" /> +