diff --git a/delivery_gls_asm/README.rst b/delivery_gls_asm/README.rst new file mode 100644 index 00000000000..869a43e628f --- /dev/null +++ b/delivery_gls_asm/README.rst @@ -0,0 +1,222 @@ +================ +Delivery GLS-ASM +================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:e85787004ecdea18ef6f853f10b89202d2168fa27836c54ad7f7039a4d44a0b8 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--spain-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-spain/tree/18.0/delivery_gls_asm + :alt: OCA/l10n-spain +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-spain-18-0/l10n-spain-18-0-delivery_gls_asm + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-spain&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Este módulo integra la API de GLS España (antigua API de ASM) con Odoo. +No es válido para integraciones de GLS en otros países, que podrían usar +otras APIs. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +Este módulo necesita la librería python suds-py3 y depende igualmente de +los módulos de OCA/delivery-carrier delivery_package_number y +delivery_state. + +La API de GLS/ASM no provee métodos de cálculo de precio, de modo que +para poder calcular los costes de envío sería recomendable instalar el +módulo delivery_price_method. + +Configuration +============= + +Para configurar el transportista: + +1. Vaya a *Inventario > Configuración > Entrega > Método de envío* y + cree uno nuevo. +2. Escoja *GLS ASM* Como proveedor. +3. Configure los datos de servicio que tiene contratados y el producto + de envío que desea utilizar. + +Si no tiene credenciales todavía, puede poner datos inventados y dejar +el método de envío en "Entorno de prueba". Se utilizará el usuario de +pruebas de la API GLS ASM. + +Si GLS cambiase en un futuro el usuario de prueba, puede cambiarlo en +los *Parámetros del sistema* en la clave delivery_gls_asm.api_user_demo. + +Usage +===== + +Estas son las distintas operaciones posibles con este módulo: + +Grabar servicios +---------------- + + 1. Al confirmar el albarán, el servicio se grabará en GLS. + 2. Con la respuesta, se registrará en el chatter la referencia de + envío y las etiquetas correspondientes. + 3. Para gestionar los bultos del envío, se puede utilizar el campo de + número de bultos que añade delivery_package_number (ver el README + para mayor información) o bien el flujo nativo de Odoo con + paquetes de envío. El módulo mandará a la API de GLS/ASM el número + correspondiente y podremos descargar las etiquetas en PDF con su + correspondiente numeración. + +Pedir recogidas +--------------- + + 1. Al confirmar el albarán con un servicio de recogida, el envío NO + se grabará en GLS. + 2. Aparecerá un botón de "Enviar recogida" en la parte superior para + solicitarlo + 3. Con la respuesta, se registrará en el chatter la referencia de + envío + 4. Para gestionar los bultos del envío, se puede utilizar el campo de + número de bultos que añade delivery_package_number (ver el README + para mayor información) o bien el flujo nativo de Odoo con + paquetes de envío. + +Cancelar servicios +------------------ + + 1. Al igual que en otros métodos de envío, en los albaranes de salida + podemos cancelar un servicio determinado mediante la acción + correspondiente en la pestaña de *Información Adicional*, sección + *Información de entrega* una vez el pedido esté confirmado y la + expedición generada. + 2. Podremos generar una nueva expedición una vez cancelado si fuese + necesario. + +Obtener etiquetas +----------------- + + 1. Si por error hubiésemos eliminado el adjunto de las etiquetas que + obtuvimos en la grabación del servicio, podemos obtenerlas de + nuevo pulsando en el botón "Etiqueta GLS" que tenemos en la parte + superior de la vista formulario del albarán. + +Seguimiento de envíos +--------------------- + + 1. El módulo está integrado con delivery_state para poder recabar la + información de seguimiento de nuestros envíos directamente desde + la API de GLS-ASM. + 2. Para ello, vaya al albarán con un envío GLS ya grabado y en la + pestaña de *Información adicional* verá el botón *Actualizar + seguimiento* para pedir a la API de GLS que actualice el estado de + este envío en Odoo. + +Manifiesto de envíos +-------------------- + + 1. Para obtener el manifiesto de expediciones que firmaría el + repartidor, puede ir al menú *Inventario > Informes > Manifiesto + de Envíos GLS*. + 2. También puede obtener el manifiesto desde un smart button en el + formulario del transportista. + 3. En el asistente, seleccione el servicio GLS del cual quiere sacar + el manifiesto y la fecha desde la que desea listar los envíos. + 4. Pulse en el botón "Manifiesto GLS" para obtener un listado en PDF + de los envíos del servicio seleccionado. + +Depuración de errores +--------------------- + + 1. Es importante tener en cuenta que solo funcionará con códigos + postales de España. + 2. En cada servicio GLS-ASM dispone de una pestaña llamada "Técnico" + en la que puede consultar la última petición y respuesta a la API + de GLS-ASM. Esto le servirá como ayuda a la hora de depurar + posibles errores de comunicación. + 3. También puede activar Odoo con --log-level=debug para registrar + las peticiones y las respuestas en el log. + +Known issues / Roadmap +====================== + +- La API no facilita métodos para cotizar el coste real de los envíos, + por lo que siempre se cotizan a 0. Si la cotización de envíos es + necesaria, puede instalarse el módulo OCA delivery_price_method o + bien personalizar el método de cotización para este tipo de + transportista. + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Tecnativa + +Contributors +------------ + +- `Tecnativa `__: + + - David Vidal + - Víctor Martínez + +- `Studio73 `__: + + - Ethan Hildick + - David López + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-chienandalu| image:: https://github.com/chienandalu.png?size=40px + :target: https://github.com/chienandalu + :alt: chienandalu +.. |maintainer-hildickethan-S73| image:: https://github.com/hildickethan-S73.png?size=40px + :target: https://github.com/hildickethan-S73 + :alt: hildickethan-S73 + +Current `maintainers `__: + +|maintainer-chienandalu| |maintainer-hildickethan-S73| + +This module is part of the `OCA/l10n-spain `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/delivery_gls_asm/__init__.py b/delivery_gls_asm/__init__.py new file mode 100644 index 00000000000..9b4296142f4 --- /dev/null +++ b/delivery_gls_asm/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard diff --git a/delivery_gls_asm/__manifest__.py b/delivery_gls_asm/__manifest__.py new file mode 100644 index 00000000000..53e05bb94b5 --- /dev/null +++ b/delivery_gls_asm/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright 2020 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Delivery GLS-ASM", + "summary": "Delivery Carrier implementation for GLS with ASMRed API", + "version": "18.0.1.0.0", + "category": "Stock", + "website": "https://github.com/OCA/l10n-spain", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["delivery_package_number", "delivery_state"], + "external_dependencies": {"python": ["suds-py3"]}, + "data": [ + "data/delivery_asm_data.xml", + "security/ir.model.access.csv", + "views/delivery_asm_view.xml", + "views/gls_asm_manifest_template.xml", + "views/stock_picking_views.xml", + "wizard/gls_asm_manifest_wizard_views.xml", + ], + "maintainers": ["chienandalu", "hildickethan-S73"], +} diff --git a/delivery_gls_asm/api/gls_asm_api.wsdl b/delivery_gls_asm/api/gls_asm_api.wsdl new file mode 100644 index 00000000000..c1dfa803cbd --- /dev/null +++ b/delivery_gls_asm/api/gls_asm_api.wsdl @@ -0,0 +1,1482 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/delivery_gls_asm/data/delivery_asm_data.xml b/delivery_gls_asm/data/delivery_asm_data.xml new file mode 100644 index 00000000000..4ceb87f9bd0 --- /dev/null +++ b/delivery_gls_asm/data/delivery_asm_data.xml @@ -0,0 +1,8 @@ + + + + + delivery_gls_asm.api_user_demo + 6BAB7A53-3B6D-4D5A-9450-702D2FAC0B11 + + diff --git a/delivery_gls_asm/i18n/ca.po b/delivery_gls_asm/i18n/ca.po new file mode 100644 index 00000000000..88a49fa07fa --- /dev/null +++ b/delivery_gls_asm/i18n/ca.po @@ -0,0 +1,1060 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_gls_asm +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-03-22 14:46+0000\n" +"Last-Translator: brendapaniagua \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__27 +msgid "14H SOBRES" +msgstr "14H SOBRES" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__28 +msgid "24H SOBRES" +msgstr "24H SOBRES" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__29 +msgid "72H SOBRES" +msgstr "72H SOBRES" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "
(Kg.)" +msgstr "
(Kg.)" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "
(Packages)" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "" +"\n" +" Carrier Signature / Stamp\n" +" " +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "TOTAL EXPEDITIONS: " +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Company:" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Date of printing" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "GLS MANIFEST" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Manifest Date:" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Printed by" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "TOTAL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__preconfirm +msgid "A preconfirmar" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__59 +msgid "ASM BUROFAX" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__60 +msgid "ASM GO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__parcelshop_confirm +msgid "ASM PARCELSHOP CONFIRMA RECEPCIÓN" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__30 +msgid "ASM0830" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__66 +msgid "ASMTRAVELLERS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__warehouse +msgid "Almacenado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__cancel +msgid "Anualada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__cancel +msgid "Anulada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__assigned +msgid "Asignada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__5 +msgid "BICI" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__96 +msgid "BUSINESS PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__31 +msgid "CAN MUESTRAS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__6 +msgid "CARGA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__20 +msgid "CARGA MARITIMA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__52 +msgid "COMPRAS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__26 +msgid "CORREO INTERNO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__1 +msgid "COURIER" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "Cancel" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "Cancelar" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_postage_type__d +msgid "Cash On Delivery" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_cash_on_delivery +msgid "Cash on delivery" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__closed +msgid "Cerrado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__closed_final +msgid "Cerrado Definitivo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__closed_final +msgid "Cerrado definitivo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__closed +msgid "Cerrado por siniestro" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_with_return +msgid "" +"Check this field to mark the delivery as 'With return'. This means that the " +"customer receiving the delivery also has a package to return." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_is_pickup_service +#: model:ir.model.fields,help:delivery_gls_asm.field_stock_picking__gls_carrier_is_pickup_service +msgid "Checked if this service is used for pickups" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "City" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__incidence +msgid "Con incidencia" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "Couldn't find the consignee street" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "Couldn't find the sender street" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Customer" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__9 +msgid "DEVOLUCION" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__14 +msgid "DISTRIBUCION PROPIA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__18 +msgid "DISTRIBUCION  RED" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__date_from +msgid "Date From" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__destroyed +msgid "Destruido por orden del cliente" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__return_agency +msgid "Devuelta" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__return_customer +msgid "Devuelta al cliente" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__display_name +msgid "Display Name" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__25 +msgid "EASYBAG" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__37 +msgid "ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__54 +msgid "EURO ESTANDAR" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__22 +msgid "EURO SMALL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__74 +msgid "EUROBUSINESS PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__76 +msgid "EUROBUSINESS SMALL PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__16 +msgid "Economy" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__agency_transit +msgid "En delegación destino" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__origin +msgid "En delegación origen" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__returning +msgid "En devolución" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__in_platform +msgid "En plataforma de destino" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__shipping +msgid "En reparto" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__transit +msgid "En tránsito al destino" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__13 +msgid "Ent. Pto. ASM" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__18 +msgid "Entrega 24-48h (serv. 96) o 48h (serv. 37)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__cancel_returned +msgid "Entrega anulada (devuelta)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__partially_delivered +msgid "Entrega parcial" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__delivered +msgid "Entregado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__parcelshop +msgid "Entregado en ASM PARCELSHOP" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_shipment_state +msgid "Estado envío GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_pickup_state +msgid "Estado recogida GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__17 +msgid "Express" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__0 +msgid "Express 10:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__2 +msgid "Express 14:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__3 +msgid "Express 19:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__9 +msgid "Franja Horaria" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__21 +msgid "GLASS" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "" +"GLS API does no longer support the manifest creation, so keep in mind that " +"the\n" +" data will be retrieved from Odoo." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__delivery_type__gls_asm +msgid "GLS ASM" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS ASM API doesn't provide methods to compute delivery rates, so\n" +" you should relay on another price method instead or override " +"this\n" +" one in your custom code." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_asm_public_tracking_ref +msgid "GLS Barcode" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "GLS Cancellation failed with reason: %s" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_delivery_carrier_form +msgid "GLS Configuration" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.ui.menu,name:delivery_gls_asm.menu_gls_asm_manifest +msgid "GLS Deliveries Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "GLS Label" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#: model:ir.actions.act_window,name:delivery_gls_asm.action_delivery_gls_asm_manifest_wizard +#: model:ir.actions.report,name:delivery_gls_asm.gls_asm_manifest_report +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +#, python-format +msgid "GLS Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_asm_picking_ref +msgid "GLS Picking Reference" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS Pickup extra info:
Tracking number: %(codigo)s
Bultos: " +"%(bultos)s" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_service +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__carrier_id +msgid "GLS Service" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS Shipping extra info:\n" +"barcode: %s" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_uid +msgid "GLS UID" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/stock_picking.py:0 +#, python-format +msgid "GLS label for %s" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS returned an error trying to record the shipping for %(ref)s.\n" +"Error:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS-ASM API doesn't admit a reference number higher than 15 characters. In " +"order to handle it, they trim thereference and as the reference is unique to " +"every customer we soon would have duplicated reference collisions. To " +"prevent this, you should edit your picking sequence to a max of 15 " +"characters." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_with_return +msgid "GLS/ASM With return" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS: No response from server getting state from ref %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS: No response from server printing label with ref %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "Get Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_gls_asm_minifest_wizard +msgid "Get the GLS Manifest for the given date range" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__recorded +msgid "Grabado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__11 +msgid "IBEX" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__id +msgid "ID" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__34 +msgid "INT PAQUET" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__55 +msgid "INTERC. EUROESTANDAR" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__7 +msgid "INTERDIA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__13 +msgid "INTERNACIONAL ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__12 +msgid "INTERNACIONAL EXPRESS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_cash_on_delivery +msgid "" +"If checked, it means that the carrier is paid with cash. It assumes there is " +"a sale order linked and it will use that total amount as the value to be paid" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__36 +msgid "Int. WEB" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/wizard/gls_asm_manifest_wizard.py:0 +#, python-format +msgid "" +"It wasn't possible to get the manifest. Maybe there aren'tdeliveries for the " +"selected date." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard____last_update +msgid "Last Modified on" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__53 +msgid "MR1" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_delivery_carrier_form +msgid "Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__manifested +msgid "Manifestada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__10 +msgid "Maritimo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__4 +msgid "Masivo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__not_done +msgid "No Realizada" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"No response from server recording GLS delivery %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_shipping_notes +msgid "Notas de envío GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_gls_form +msgid "Notas para GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__19 +msgid "OPERACIONES RED" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__24 +msgid "OPTIPLUS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__15 +msgid "OTROS PUENTES" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__23 +msgid "PREPAGO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__16 +msgid "PROPIO AGENTE" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Packages" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__19 +msgid "ParcelShop" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__pending +msgid "Pendiente Gestión" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__held +msgid "Pendiente autorización" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__pending +msgid "Pendiente datos en delegación" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__pending_auth +msgid "Pending Autorización" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_is_pickup_service +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_carrier_is_pickup_service +msgid "Pick-up service" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__possible_return +msgid "Posible devolución" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_postage_type +msgid "Postage Type" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_postage_type +msgid "Postage type, usually 'Prepaid'" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__preconfirmed +msgid "Preconfirmada enrega" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_postage_type__p +msgid "Prepaid" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__delivery_type +msgid "Provider" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__58 +msgid "RC. PARCEL SHOP" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__32 +msgid "RC.SELLADA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__39 +msgid "REC. INT" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__51 +msgid "REC. INT WW" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__57 +msgid "REC. INTERCIUDAD ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__33 +msgid "RECANALIZA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__7 +msgid "RECOGIDA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__8 +msgid "RECOGIDA CRUZADA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__56 +msgid "RECOGIDA ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__48 +msgid "RECOGIDA MEN. CAMION" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__47 +msgid "RECOGIDA MEN. F.GRANDE" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__46 +msgid "RECOGIDA MEN. FURGONETA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__45 +msgid "RECOGIDA MEN. MOTO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__49 +msgid "RECOGIDA MENSAJERO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__17 +msgid "RECOGIDA SIN MERCANCIA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__10 +msgid "RETORNO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__incidence +msgid "Realizada con Incidencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__done +msgid "Realizada con éxito" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__11 +msgid "Rec. en agencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__extinguished +msgid "Recanalizada (A extinguir)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__picked_up_agency +msgid "Recepcionada en Agencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__received +msgid "Recibida" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__picked_up_customer +msgid "Recogido en Cliente" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Ref." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__held_order +msgid "Retenido por orden de paga" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__44 +msgid "SERVICIO LOCAL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__43 +msgid "SERVICIO LOCAL CAMION" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__42 +msgid "SERVICIO LOCAL F. GRANDE" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__41 +msgid "SERVICIO LOCAL FURGONETA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__40 +msgid "SERVICIO LOCAL MOTO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__50 +msgid "SERVICIOS ESPECIALES" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__38 +msgid "SERVICIOS RUTAS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__5 +msgid "SaturdayService" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "Send pick-up" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_service +msgid "Set the contracted GLS Service" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_shiptime +msgid "Set the desired GLS shipping time for this carrier" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_delivery_carrier +msgid "Shipping Methods" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_shiptime +msgid "Shipping Time" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__recorded +msgid "Solicitada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__requested_return +msgid "Solicitud de devolución" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"Unable to cancel GLS Expedition with reference %(ref)s as it is in state " +"%(state)s.\n" +"Please manage the cancellation of this shipment/pickup with GLS via email." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__2 +msgid "VALIJA" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Weight" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "ZIP Code" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__35 +msgid "dPRO" +msgstr "" + +#~ msgid "10:00 Service" +#~ msgstr "10:00 Servicio" + +#~ msgid "14:00 Service" +#~ msgstr "14:00 Servicio" diff --git a/delivery_gls_asm/i18n/delivery_gls_asm.pot b/delivery_gls_asm/i18n/delivery_gls_asm.pot new file mode 100644 index 00000000000..bfb87bc0ede --- /dev/null +++ b/delivery_gls_asm/i18n/delivery_gls_asm.pot @@ -0,0 +1,1047 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_gls_asm +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__27 +msgid "14H SOBRES" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__28 +msgid "24H SOBRES" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__29 +msgid "72H SOBRES" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "
(Kg.)" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "
(Packages)" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "" +"\n" +" Carrier Signature / Stamp\n" +" " +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "TOTAL EXPEDITIONS: " +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Company:" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Date of printing" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "GLS MANIFEST" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Manifest Date:" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Printed by" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "TOTAL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__preconfirm +msgid "A preconfirmar" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__59 +msgid "ASM BUROFAX" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__60 +msgid "ASM GO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__parcelshop_confirm +msgid "ASM PARCELSHOP CONFIRMA RECEPCIÓN" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__30 +msgid "ASM0830" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__66 +msgid "ASMTRAVELLERS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__warehouse +msgid "Almacenado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__cancel +msgid "Anualada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__cancel +msgid "Anulada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__assigned +msgid "Asignada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__5 +msgid "BICI" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__96 +msgid "BUSINESS PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__31 +msgid "CAN MUESTRAS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__6 +msgid "CARGA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__20 +msgid "CARGA MARITIMA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__52 +msgid "COMPRAS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__26 +msgid "CORREO INTERNO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__1 +msgid "COURIER" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "Cancel" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "Cancelar" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_postage_type__d +msgid "Cash On Delivery" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_cash_on_delivery +msgid "Cash on delivery" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__closed +msgid "Cerrado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__closed_final +msgid "Cerrado Definitivo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__closed_final +msgid "Cerrado definitivo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__closed +msgid "Cerrado por siniestro" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_with_return +msgid "" +"Check this field to mark the delivery as 'With return'. This means that the " +"customer receiving the delivery also has a package to return." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_is_pickup_service +#: model:ir.model.fields,help:delivery_gls_asm.field_stock_picking__gls_carrier_is_pickup_service +msgid "Checked if this service is used for pickups" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "City" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__incidence +msgid "Con incidencia" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "Couldn't find the consignee street" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "Couldn't find the sender street" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Customer" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__9 +msgid "DEVOLUCION" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__14 +msgid "DISTRIBUCION PROPIA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__18 +msgid "DISTRIBUCION  RED" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__date_from +msgid "Date From" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__destroyed +msgid "Destruido por orden del cliente" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__return_agency +msgid "Devuelta" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__return_customer +msgid "Devuelta al cliente" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__display_name +msgid "Display Name" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__25 +msgid "EASYBAG" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__37 +msgid "ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__54 +msgid "EURO ESTANDAR" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__22 +msgid "EURO SMALL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__74 +msgid "EUROBUSINESS PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__76 +msgid "EUROBUSINESS SMALL PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__16 +msgid "Economy" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__agency_transit +msgid "En delegación destino" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__origin +msgid "En delegación origen" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__returning +msgid "En devolución" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__in_platform +msgid "En plataforma de destino" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__shipping +msgid "En reparto" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__transit +msgid "En tránsito al destino" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__13 +msgid "Ent. Pto. ASM" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__18 +msgid "Entrega 24-48h (serv. 96) o 48h (serv. 37)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__cancel_returned +msgid "Entrega anulada (devuelta)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__partially_delivered +msgid "Entrega parcial" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__delivered +msgid "Entregado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__parcelshop +msgid "Entregado en ASM PARCELSHOP" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_shipment_state +msgid "Estado envío GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_pickup_state +msgid "Estado recogida GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__17 +msgid "Express" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__0 +msgid "Express 10:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__2 +msgid "Express 14:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__3 +msgid "Express 19:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__9 +msgid "Franja Horaria" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__21 +msgid "GLASS" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "" +"GLS API does no longer support the manifest creation, so keep in mind that the\n" +" data will be retrieved from Odoo." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__delivery_type__gls_asm +msgid "GLS ASM" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS ASM API doesn't provide methods to compute delivery rates, so\n" +" you should relay on another price method instead or override this\n" +" one in your custom code." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_asm_public_tracking_ref +msgid "GLS Barcode" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "GLS Cancellation failed with reason: %s" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_delivery_carrier_form +msgid "GLS Configuration" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.ui.menu,name:delivery_gls_asm.menu_gls_asm_manifest +msgid "GLS Deliveries Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "GLS Label" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#: model:ir.actions.act_window,name:delivery_gls_asm.action_delivery_gls_asm_manifest_wizard +#: model:ir.actions.report,name:delivery_gls_asm.gls_asm_manifest_report +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +#, python-format +msgid "GLS Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_asm_picking_ref +msgid "GLS Picking Reference" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS Pickup extra info:
Tracking number: %(codigo)s
Bultos: " +"%(bultos)s" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_service +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__carrier_id +msgid "GLS Service" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS Shipping extra info:\n" +"barcode: %s" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_uid +msgid "GLS UID" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/stock_picking.py:0 +#, python-format +msgid "GLS label for %s" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS returned an error trying to record the shipping for %(ref)s.\n" +"Error:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS-ASM API doesn't admit a reference number higher than 15 characters. In " +"order to handle it, they trim thereference and as the reference is unique to" +" every customer we soon would have duplicated reference collisions. To " +"prevent this, you should edit your picking sequence to a max of 15 " +"characters." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_with_return +msgid "GLS/ASM With return" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS: No response from server getting state from ref %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS: No response from server printing label with ref %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "Get Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_gls_asm_minifest_wizard +msgid "Get the GLS Manifest for the given date range" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__recorded +msgid "Grabado" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__11 +msgid "IBEX" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__id +msgid "ID" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__34 +msgid "INT PAQUET" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__55 +msgid "INTERC. EUROESTANDAR" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__7 +msgid "INTERDIA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__13 +msgid "INTERNACIONAL ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__12 +msgid "INTERNACIONAL EXPRESS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_cash_on_delivery +msgid "" +"If checked, it means that the carrier is paid with cash. It assumes there is" +" a sale order linked and it will use that total amount as the value to be " +"paid" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__36 +msgid "Int. WEB" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/wizard/gls_asm_manifest_wizard.py:0 +#, python-format +msgid "" +"It wasn't possible to get the manifest. Maybe there aren'tdeliveries for the" +" selected date." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__53 +msgid "MR1" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_delivery_carrier_form +msgid "Manifest" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__manifested +msgid "Manifestada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__10 +msgid "Maritimo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__4 +msgid "Masivo" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__not_done +msgid "No Realizada" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"No response from server recording GLS delivery %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_shipping_notes +msgid "Notas de envío GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_gls_form +msgid "Notas para GLS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__19 +msgid "OPERACIONES RED" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__24 +msgid "OPTIPLUS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__15 +msgid "OTROS PUENTES" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__23 +msgid "PREPAGO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__16 +msgid "PROPIO AGENTE" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Packages" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__19 +msgid "ParcelShop" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__pending +msgid "Pendiente Gestión" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__held +msgid "Pendiente autorización" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__pending +msgid "Pendiente datos en delegación" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__pending_auth +msgid "Pending Autorización" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_is_pickup_service +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_carrier_is_pickup_service +msgid "Pick-up service" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__possible_return +msgid "Posible devolución" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_postage_type +msgid "Postage Type" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_postage_type +msgid "Postage type, usually 'Prepaid'" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__preconfirmed +msgid "Preconfirmada enrega" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_postage_type__p +msgid "Prepaid" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__delivery_type +msgid "Provider" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__58 +msgid "RC. PARCEL SHOP" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__32 +msgid "RC.SELLADA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__39 +msgid "REC. INT" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__51 +msgid "REC. INT WW" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__57 +msgid "REC. INTERCIUDAD ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__33 +msgid "RECANALIZA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__7 +msgid "RECOGIDA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__8 +msgid "RECOGIDA CRUZADA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__56 +msgid "RECOGIDA ECONOMY" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__48 +msgid "RECOGIDA MEN. CAMION" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__47 +msgid "RECOGIDA MEN. F.GRANDE" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__46 +msgid "RECOGIDA MEN. FURGONETA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__45 +msgid "RECOGIDA MEN. MOTO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__49 +msgid "RECOGIDA MENSAJERO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__17 +msgid "RECOGIDA SIN MERCANCIA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__10 +msgid "RETORNO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__incidence +msgid "Realizada con Incidencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__done +msgid "Realizada con éxito" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__11 +msgid "Rec. en agencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__extinguished +msgid "Recanalizada (A extinguir)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__picked_up_agency +msgid "Recepcionada en Agencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__received +msgid "Recibida" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__picked_up_customer +msgid "Recogido en Cliente" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Ref." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__held_order +msgid "Retenido por orden de paga" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__44 +msgid "SERVICIO LOCAL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__43 +msgid "SERVICIO LOCAL CAMION" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__42 +msgid "SERVICIO LOCAL F. GRANDE" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__41 +msgid "SERVICIO LOCAL FURGONETA" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__40 +msgid "SERVICIO LOCAL MOTO" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__50 +msgid "SERVICIOS ESPECIALES" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__38 +msgid "SERVICIOS RUTAS" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__5 +msgid "SaturdayService" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "Send pick-up" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_service +msgid "Set the contracted GLS Service" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_shiptime +msgid "Set the desired GLS shipping time for this carrier" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_delivery_carrier +msgid "Shipping Methods" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_shiptime +msgid "Shipping Time" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__recorded +msgid "Solicitada" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__requested_return +msgid "Solicitud de devolución" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_stock_picking +msgid "Transfer" +msgstr "" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"Unable to cancel GLS Expedition with reference %(ref)s as it is in state %(state)s.\n" +"Please manage the cancellation of this shipment/pickup with GLS via email." +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__2 +msgid "VALIJA" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Weight" +msgstr "" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "ZIP Code" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__35 +msgid "dPRO" +msgstr "" diff --git a/delivery_gls_asm/i18n/es.po b/delivery_gls_asm/i18n/es.po new file mode 100644 index 00000000000..6ab973047e5 --- /dev/null +++ b/delivery_gls_asm/i18n/es.po @@ -0,0 +1,1125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_gls_asm +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-20 12:24+0000\n" +"PO-Revision-Date: 2023-10-09 05:30+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__27 +msgid "14H SOBRES" +msgstr "14H SOBRES" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__28 +msgid "24H SOBRES" +msgstr "24H SOBRES" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__29 +msgid "72H SOBRES" +msgstr "72H SOBRES" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "
(Kg.)" +msgstr "
(Kg.)" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "
(Packages)" +msgstr "
(Bultos)" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "" +"\n" +" Carrier Signature / Stamp\n" +" " +msgstr "" +"\n" +" Sello / Firma del " +"Transportista\n" +" " + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "TOTAL EXPEDITIONS: " +msgstr "TOTAL EXPEDICIONES: " + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Company:" +msgstr "Compañía:" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Date of printing" +msgstr "Fecha de impresión" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "GLS MANIFEST" +msgstr "MANIFIESTO GLS" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Manifest Date:" +msgstr "Fecha de manifiesto:" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Printed by" +msgstr "Imprimido por" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "TOTAL" +msgstr "TOTAL" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__preconfirm +msgid "A preconfirmar" +msgstr "A preconfirmar" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__59 +msgid "ASM BUROFAX" +msgstr "ASM BUROFAX" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__60 +msgid "ASM GO" +msgstr "ASM GO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__parcelshop_confirm +msgid "ASM PARCELSHOP CONFIRMA RECEPCIÓN" +msgstr "ASM PARCELSHOP CONFIRMA RECEPCIÓN" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__30 +msgid "ASM0830" +msgstr "ASM0830" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__66 +msgid "ASMTRAVELLERS" +msgstr "ASMTRAVELLERS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__warehouse +msgid "Almacenado" +msgstr "Almacenado" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__cancel +msgid "Anualada" +msgstr "Anualada" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__cancel +msgid "Anulada" +msgstr "Anulada" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__assigned +msgid "Asignada" +msgstr "Asignada" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__5 +msgid "BICI" +msgstr "BICI" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__96 +msgid "BUSINESS PARCEL" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__31 +msgid "CAN MUESTRAS" +msgstr "CAN MUESTRAS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__6 +msgid "CARGA" +msgstr "CARGA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__20 +msgid "CARGA MARITIMA" +msgstr "CARGA MARITIMA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__52 +msgid "COMPRAS" +msgstr "COMPRAS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__26 +msgid "CORREO INTERNO" +msgstr "CORREO INTERNO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__1 +msgid "COURIER" +msgstr "COURIER" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "Cancelar" +msgstr "Cancelar" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_postage_type__d +msgid "Cash On Delivery" +msgstr "Portes debidos" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_cash_on_delivery +msgid "Cash on delivery" +msgstr "Contra reembolso" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__closed +msgid "Cerrado" +msgstr "Cerrado" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__closed_final +msgid "Cerrado Definitivo" +msgstr "Cerrado Definitivo" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__closed_final +msgid "Cerrado definitivo" +msgstr "Cerrado definitivo" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__closed +msgid "Cerrado por siniestro" +msgstr "Cerrado por siniestro" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_with_return +msgid "" +"Check this field to mark the delivery as 'With return'. This means that the " +"customer receiving the delivery also has a package to return." +msgstr "" +"Marcar campo para indicar que el envío es 'Con recogida'. Esto significa que " +"el cliente que recibe el envío también tiene un paquete para devolver." + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_is_pickup_service +#: model:ir.model.fields,help:delivery_gls_asm.field_stock_picking__gls_carrier_is_pickup_service +msgid "Checked if this service is used for pickups" +msgstr "Marcado si este servicio se usa para recogidas" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "City" +msgstr "Ciudad" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__incidence +msgid "Con incidencia" +msgstr "Con incidencia" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "Couldn't find the consignee street" +msgstr "No se ha podido encontrar la calle del consignatario (obligatorio)" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "Couldn't find the sender street" +msgstr "No se ha podido encontrar la calle del remitente (obligatorio)" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Customer" +msgstr "Cliente" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__9 +msgid "DEVOLUCION" +msgstr "DEVOLUCION" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__14 +msgid "DISTRIBUCION PROPIA" +msgstr "DISTRIBUCION PROPIA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__18 +msgid "DISTRIBUCION  RED" +msgstr "DISTRIBUCION  RED" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__date_from +msgid "Date From" +msgstr "Fecha desde" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__destroyed +msgid "Destruido por orden del cliente" +msgstr "Destruido por orden del cliente" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__return_agency +msgid "Devuelta" +msgstr "Devuelta" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__return_customer +msgid "Devuelta al cliente" +msgstr "Devuelta al cliente" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__25 +msgid "EASYBAG" +msgstr "EASYBAG" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__37 +msgid "ECONOMY" +msgstr "ECONOMY" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__54 +msgid "EURO ESTANDAR" +msgstr "EURO ESTANDAR" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__22 +msgid "EURO SMALL" +msgstr "EURO SMALL" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__74 +msgid "EUROBUSINESS PARCEL" +msgstr "EUROBUSINESS PARCEL" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__76 +msgid "EUROBUSINESS SMALL PARCEL" +msgstr "EUROBUSINESS SMALL PARCEL" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__16 +msgid "Economy" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__agency_transit +msgid "En delegación destino" +msgstr "En delegación destino" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__origin +msgid "En delegación origen" +msgstr "En delegación origen" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__returning +msgid "En devolución" +msgstr "En devolución" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__in_platform +msgid "En plataforma de destino" +msgstr "En plataforma de destino" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__shipping +msgid "En reparto" +msgstr "En reparto" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__transit +msgid "En tránsito al destino" +msgstr "En tránsito al destino" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__13 +msgid "Ent. Pto. ASM" +msgstr "Ent. Pto. ASM" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__18 +msgid "Entrega 24-48h (serv. 96) o 48h (serv. 37)" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__cancel_returned +msgid "Entrega anulada (devuelta)" +msgstr "Entrega anulada (devuelta)" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__partially_delivered +msgid "Entrega parcial" +msgstr "Entrega parcial" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__delivered +msgid "Entregado" +msgstr "Entregado" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__parcelshop +msgid "Entregado en ASM PARCELSHOP" +msgstr "Entregado en ASM PARCELSHOP" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_shipment_state +msgid "Estado envío GLS" +msgstr "Estado envío GLS" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_pickup_state +msgid "Estado recogida GLS" +msgstr "Estado recogida GLS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__17 +msgid "Express" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__0 +msgid "Express 10:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__2 +msgid "Express 14:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__3 +msgid "Express 19:00" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__9 +msgid "Franja Horaria" +msgstr "Franja Horaria" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__21 +msgid "GLASS" +msgstr "GLASS" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "" +"GLS API does no longer support the manifest creation, so keep in mind that " +"the\n" +" data will be retrieved from Odoo." +msgstr "" +"La API GLS ya no soporta la creación de manifiestos, así que tenga en cuenta " +"que los\n" +" datos serán recuperados de Odoo." + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__delivery_type__gls_asm +msgid "GLS ASM" +msgstr "GLS ASM" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS ASM API doesn't provide methods to compute delivery rates, so\n" +" you should relay on another price method instead or override " +"this\n" +" one in your custom code." +msgstr "" +"La API ASM de GLS no proporciona métodos para calcular las tarifas de " +"entrega, así que\n" +" por lo que debe utilizar otro método de precios o sustituir " +"este método en su código personalizado.\n" +" en su código personalizado." + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_asm_public_tracking_ref +msgid "GLS Barcode" +msgstr "Código de barras GLS" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "GLS Cancellation failed with reason: %s" +msgstr "La cancelación de GLS falló por esta causa: %s" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_delivery_carrier_form +msgid "GLS Configuration" +msgstr "Configuración GLS" + +#. module: delivery_gls_asm +#: model:ir.ui.menu,name:delivery_gls_asm.menu_gls_asm_manifest +msgid "GLS Deliveries Manifest" +msgstr "Manifiesto de Envíos GLS" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "GLS Label" +msgstr "Etiqueta GLS" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#: model:ir.actions.act_window,name:delivery_gls_asm.action_delivery_gls_asm_manifest_wizard +#: model:ir.actions.report,name:delivery_gls_asm.gls_asm_manifest_report +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +#, python-format +msgid "GLS Manifest" +msgstr "Manifiesto GLS" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_asm_picking_ref +msgid "GLS Picking Reference" +msgstr "Referencia albarán GLS" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS Pickup extra info:
Tracking number: %(codigo)s
Bultos: " +"%(bultos)s" +msgstr "" +"GLS Pickup información adicional:
Número de seguimiento: %(codigo)s
Bultos: %(bultos)s" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_service +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__carrier_id +msgid "GLS Service" +msgstr "Servicio GLS" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS Shipping extra info:\n" +"barcode: %s" +msgstr "" +"Información extra de la expedición GLS:\n" +"Código de barras: %s" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_uid +msgid "GLS UID" +msgstr "UID GLS" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/stock_picking.py:0 +#, python-format +msgid "GLS label for %s" +msgstr "Etiqueta GLS para% s" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS returned an error trying to record the shipping for %(ref)s.\n" +"Error:\n" +"%(error)s" +msgstr "" +"GLS ha devuelto un error tratando de registrar la expedición para %(ref)s.\n" +"Error:\n" +"%(error)s" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"GLS-ASM API doesn't admit a reference number higher than 15 characters. In " +"order to handle it, they trim thereference and as the reference is unique to " +"every customer we soon would have duplicated reference collisions. To " +"prevent this, you should edit your picking sequence to a max of 15 " +"characters." +msgstr "" +"La API de GLS-ASM no admite un número de referencia superior a 15 " +"caracteres. Para manejarlo, recortan la referencia y como la referencia es " +"única para cada cliente pronto tendríamos colisiones de referencias " +"duplicadas. Para evitar esto, debería editar su secuencia de picking a un " +"máximo de 15 caracteres." + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_with_return +msgid "GLS/ASM With return" +msgstr "Con recogida GLS/ASM" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS: No response from server getting state from ref %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" +"GLS: Si respuesta del servidor intentando recuperar el estado de la " +"referencia %(ref)s.\n" +"Traceback:\n" +"%(error)s" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"GLS: No response from server printing label with ref %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" +"GLS: Sin respuesta del servidor trantando de imprimir la etiqueta con " +"referencia %(ref)s..\n" +"Traceback:\n" +"%(error)s" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.delivery_manifest_wizard_form +msgid "Get Manifest" +msgstr "Obtenter manifiesto" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_gls_asm_minifest_wizard +msgid "Get the GLS Manifest for the given date range" +msgstr "Obtener el Manifiesto de GLS para el rango de fechas indicado" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__recorded +msgid "Grabado" +msgstr "Grabado" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__11 +msgid "IBEX" +msgstr "IBEX" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__id +msgid "ID" +msgstr "ID" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__34 +msgid "INT PAQUET" +msgstr "INT PAQUET" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__55 +msgid "INTERC. EUROESTANDAR" +msgstr "INTERC. EUROESTANDAR" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__7 +msgid "INTERDIA" +msgstr "INTERDIA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__13 +msgid "INTERNACIONAL ECONOMY" +msgstr "INTERNACIONAL ECONOMY" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__12 +msgid "INTERNACIONAL EXPRESS" +msgstr "INTERNACIONAL EXPRESS" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_cash_on_delivery +msgid "" +"If checked, it means that the carrier is paid with cash. It assumes there is " +"a sale order linked and it will use that total amount as the value to be paid" +msgstr "" +"Si está marcada, significa que el transportista se paga en efectivo. Asume " +"que hay una orden de venta vinculada y utilizará ese importe total como " +"valor a pagar" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__36 +msgid "Int. WEB" +msgstr "Int. WEB" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/wizard/gls_asm_manifest_wizard.py:0 +#, python-format +msgid "" +"It wasn't possible to get the manifest. Maybe there aren'tdeliveries for the " +"selected date." +msgstr "" +"No fue posible obtener el manifiesto. Quizá no haya expediciones para la " +"fecha seleccionada." + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_gls_asm_minifest_wizard__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__53 +msgid "MR1" +msgstr "MR1" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_delivery_carrier_form +msgid "Manifest" +msgstr "Manifiesto" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__manifested +msgid "Manifestada" +msgstr "Manifestada" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__10 +msgid "Maritimo" +msgstr "Marítimo" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__4 +msgid "Masivo" +msgstr "Masivo" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__not_done +msgid "No Realizada" +msgstr "No Realizada" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/gls_asm_request.py:0 +#, python-format +msgid "" +"No response from server recording GLS delivery %(ref)s.\n" +"Traceback:\n" +"%(error)s" +msgstr "" +"No hay respuesta del servidor que registra la entrega de GLS %(ref)s.\n" +"Rastrear:\n" +"%(error)s" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_shipping_notes +msgid "Notas de envío GLS" +msgstr "Notas de envío GLS" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_gls_form +msgid "Notas para GLS" +msgstr "Notas para GLS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__19 +msgid "OPERACIONES RED" +msgstr "OPERACIONES RED" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__24 +msgid "OPTIPLUS" +msgstr "OPTIPLUS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__15 +msgid "OTROS PUENTES" +msgstr "OTROS PUENTES" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__23 +msgid "PREPAGO" +msgstr "PREPAGO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__16 +msgid "PROPIO AGENTE" +msgstr "PROPIO AGENTE" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Packages" +msgstr "Bultos" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__19 +msgid "ParcelShop" +msgstr "Tienda de paquetería" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__pending +msgid "Pendiente Gestión" +msgstr "Pendiente Gestión" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__held +msgid "Pendiente autorización" +msgstr "Pendiente autorización" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__pending +msgid "Pendiente datos en delegación" +msgstr "Pendiente datos en delegación" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__pending_auth +msgid "Pending Autorización" +msgstr "Pendiente de Autorización" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_is_pickup_service +#: model:ir.model.fields,field_description:delivery_gls_asm.field_stock_picking__gls_carrier_is_pickup_service +msgid "Pick-up service" +msgstr "Servicio de recogida" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__possible_return +msgid "Posible devolución" +msgstr "Posible devolución" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_postage_type +msgid "Postage Type" +msgstr "Tipo de envío" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_postage_type +msgid "Postage type, usually 'Prepaid'" +msgstr "Tipo de envío, normalmente 'Portes pagados'" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__preconfirmed +msgid "Preconfirmada enrega" +msgstr "Preconfirmada enrega" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_postage_type__p +msgid "Prepaid" +msgstr "Portes pagados" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__delivery_type +msgid "Provider" +msgstr "Proveedor" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__58 +msgid "RC. PARCEL SHOP" +msgstr "RC. PARCEL SHOP" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__32 +msgid "RC.SELLADA" +msgstr "RC.SELLADA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__39 +msgid "REC. INT" +msgstr "REC. INT" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__51 +msgid "REC. INT WW" +msgstr "REC. INT WW" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__57 +msgid "REC. INTERCIUDAD ECONOMY" +msgstr "REC. ECONOMÍA INTERCIUDAD" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__33 +msgid "RECANALIZA" +msgstr "RECANALIZA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__7 +msgid "RECOGIDA" +msgstr "RECOGIDA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__8 +msgid "RECOGIDA CRUZADA" +msgstr "RECOGIDA CRUZADA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__56 +msgid "RECOGIDA ECONOMY" +msgstr "ECONOMÍA RECOGIDA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__48 +msgid "RECOGIDA MEN. CAMION" +msgstr "RECOGIDA MEN. CAMIÓN" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__47 +msgid "RECOGIDA MEN. F.GRANDE" +msgstr "RECOGIDA MEN. F.GRANDE" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__46 +msgid "RECOGIDA MEN. FURGONETA" +msgstr "RECOGIDA MEN. FURGONETA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__45 +msgid "RECOGIDA MEN. MOTO" +msgstr "RECOGIDA MEN. MOTO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__49 +msgid "RECOGIDA MENSAJERO" +msgstr "RECOGIDA MENSAJERO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__17 +msgid "RECOGIDA SIN MERCANCIA" +msgstr "RECOGIDA SIN MERCANCIA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__10 +msgid "RETORNO" +msgstr "RETORNO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__incidence +msgid "Realizada con Incidencia" +msgstr "Realizada con Incidencia" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__done +msgid "Realizada con éxito" +msgstr "Realizada con éxito" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__11 +msgid "Rec. en agencia" +msgstr "" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__extinguished +msgid "Recanalizada (A extinguir)" +msgstr "Recanalizada (A extinguir)" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__picked_up_agency +msgid "Recepcionada en Agencia" +msgstr "Recepcionada en Agencia" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__received +msgid "Recibida" +msgstr "Recibida" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__picked_up_customer +msgid "Recogido en Cliente" +msgstr "Recogido en Cliente" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Ref." +msgstr "Ref." + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__held_order +msgid "Retenido por orden de paga" +msgstr "Retenido por orden de paga" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__44 +msgid "SERVICIO LOCAL" +msgstr "SERVICIO LOCAL" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__43 +msgid "SERVICIO LOCAL CAMION" +msgstr "SERVICIO LOCAL CAMIÓN" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__42 +msgid "SERVICIO LOCAL F. GRANDE" +msgstr "SERVICIO LOCAL F. GRANDE" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__41 +msgid "SERVICIO LOCAL FURGONETA" +msgstr "SERVICIO LOCAL FURGONETA" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__40 +msgid "SERVICIO LOCAL MOTO" +msgstr "SERVICIO LOCAL MOTO" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__50 +msgid "SERVICIOS ESPECIALES" +msgstr "SERVICIOS ESPECIALES" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__38 +msgid "SERVICIOS RUTAS" +msgstr "SERVICIOS RUTAS" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_shiptime__5 +msgid "SaturdayService" +msgstr "Servicio Sábado" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.view_picking_form +msgid "Send pick-up" +msgstr "Enviar recogida" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_service +msgid "Set the contracted GLS Service" +msgstr "Establezca el servicio GLS contratado" + +#. module: delivery_gls_asm +#: model:ir.model.fields,help:delivery_gls_asm.field_delivery_carrier__gls_asm_shiptime +msgid "Set the desired GLS shipping time for this carrier" +msgstr "Establezca el tiempo de envío de las opciones de GLS" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_delivery_carrier +msgid "Shipping Methods" +msgstr "Métodos de envío" + +#. module: delivery_gls_asm +#: model:ir.model.fields,field_description:delivery_gls_asm.field_delivery_carrier__gls_asm_shiptime +msgid "Shipping Time" +msgstr "Tiempo de envío" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_pickup_state__recorded +msgid "Solicitada" +msgstr "Solicitada" + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__stock_picking__gls_shipment_state__requested_return +msgid "Solicitud de devolución" +msgstr "Solicitud de devolución" + +#. module: delivery_gls_asm +#: model:ir.model,name:delivery_gls_asm.model_stock_picking +msgid "Transfer" +msgstr "Albarán" + +#. module: delivery_gls_asm +#. odoo-python +#: code:addons/delivery_gls_asm/models/delivery_carrier.py:0 +#, python-format +msgid "" +"Unable to cancel GLS Expedition with reference %(ref)s as it is in state " +"%(state)s.\n" +"Please manage the cancellation of this shipment/pickup with GLS via email." +msgstr "" +"No es posible cancelar la expedición GLS con la reference %(ref)s ya que " +"estáen el estado %(state)s. \n" +"Por favor gestonia la cancelación de este envío/recogida con GLS por correo." + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__2 +msgid "VALIJA" +msgstr "VALIJA" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "Weight" +msgstr "Peso" + +#. module: delivery_gls_asm +#: model_terms:ir.ui.view,arch_db:delivery_gls_asm.gls_asm_manifest_report_view +msgid "ZIP Code" +msgstr "C.P." + +#. module: delivery_gls_asm +#: model:ir.model.fields.selection,name:delivery_gls_asm.selection__delivery_carrier__gls_asm_service__35 +msgid "dPRO" +msgstr "dPRO" + +#~ msgid "10:00 Service" +#~ msgstr "10:00 Service" + +#~ msgid "14:00 Service" +#~ msgstr "14:00 Service" + +#~ msgid "BusinessParcel" +#~ msgstr "NegociosParcela" + +#~ msgid "EconomyParcel" +#~ msgstr "EconomíaParcela" + +#~ msgid "Rec. en NAVE." +#~ msgstr "Rec. en NAVE." + +#, python-format +#~ msgid "" +#~ "No response from server getting manifisto for GLS.\n" +#~ "Traceback:\n" +#~ "%(error)s" +#~ msgstr "" +#~ "No hay respuesta del servidor obteniendo manifisto para GLS.\n" +#~ "Rastrear:\n" +#~ "%(error)s" diff --git a/delivery_gls_asm/models/__init__.py b/delivery_gls_asm/models/__init__.py new file mode 100644 index 00000000000..0c424d37f19 --- /dev/null +++ b/delivery_gls_asm/models/__init__.py @@ -0,0 +1,3 @@ +from . import gls_asm_request +from . import delivery_carrier +from . import stock_picking diff --git a/delivery_gls_asm/models/delivery_carrier.py b/delivery_gls_asm/models/delivery_carrier.py new file mode 100644 index 00000000000..29e5a93414a --- /dev/null +++ b/delivery_gls_asm/models/delivery_carrier.py @@ -0,0 +1,520 @@ +# Copyright 2020 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import logging +from xml.sax.saxutils import escape + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +from .gls_asm_master_data import ( + GLS_ASM_SERVICES, + GLS_DELIVERY_STATES_STATIC, + GLS_PICKUP_STATES_STATIC, + GLS_PICKUP_TYPE_STATES, + GLS_POSTAGE_TYPE, + GLS_SHIPMENT_TYPE_STATES, + GLS_SHIPPING_TIMES, + GLS_TRACKING_LINKS, +) +from .gls_asm_request import GlsAsmRequest + +_logger = logging.getLogger(__name__) + + +class DeliveryCarrier(models.Model): + _inherit = "delivery.carrier" + + delivery_type = fields.Selection( + selection_add=[("gls_asm", "GLS ASM")], ondelete={"gls_asm": "set default"} + ) + gls_asm_uid = fields.Char(string="GLS UID") + gls_asm_service = fields.Selection( + selection=GLS_ASM_SERVICES, + string="GLS Service", + help="Set the contracted GLS Service", + default="1", # Courier + ) + gls_asm_shiptime = fields.Selection( + selection=GLS_SHIPPING_TIMES, + string="Shipping Time", + help="Set the desired GLS shipping time for this carrier", + default="0", # 10h + ) + gls_asm_postage_type = fields.Selection( + selection=GLS_POSTAGE_TYPE, + string="Postage Type", + help="Postage type, usually 'Prepaid'", + default="P", + ) + gls_is_pickup_service = fields.Boolean( + string="Pick-up service", + help="Checked if this service is used for pickups", + compute="_compute_gls_pickup_service", + ) + gls_asm_cash_on_delivery = fields.Boolean( + string="Cash on delivery", + help=( + "If checked, it means that the carrier is paid with cash. It assumes " + "there is a sale order linked and it will use that " + "total amount as the value to be paid" + ), + ) + gls_asm_with_return = fields.Boolean( + string="GLS/ASM With return", + help=( + "Check this field to mark the delivery as 'With return'. This means that " + "the customer receiving the delivery also has a package to return." + ), + ) + + @api.depends("gls_asm_service") + def _compute_gls_pickup_service(self): + for carrier in self: + carrier.gls_is_pickup_service = carrier.gls_asm_service in [ + "7", # RECOGIDA + "8", # RECOGIDA CRUZADA + "17", # RECOGIDA SIN MERCANCIA + "39", # REC. INT + "45", # RECOGIDA MEN. MOTO + "46", # RECOGIDA MEN. FURGONETA + "47", # RECOGIDA MEN. F. GRANDE + "48", # RECGOIDA CAMIÓN + "49", # RECOGIDA MENSAJERO + "51", # REC. INT WW + "56", # RECOGIDA ECONOMY + "57", # REC. INTERCIUDAD ECONOMY + ] + + def _gls_asm_uid(self): + """The carrier can be put in test mode. The tests user must be set. + A default given by GLS is put in the config parameter data""" + self.ensure_one() + uid = ( + self.gls_asm_uid + if self.prod_environment + else self.env["ir.config_parameter"] + .sudo() + .get_param("delivery_gls_asm.api_user_demo", "") + ) + return uid + + def gls_asm_get_tracking_link(self, picking): + """Provide tracking link for the customer""" + # International + if picking.gls_asm_picking_ref: + if picking.partner_id.country_id.code == "PT": + base_link = GLS_TRACKING_LINKS.get("INT_PT") + else: + base_link = GLS_TRACKING_LINKS.get("INT") + tracking_url = base_link.format(picking.gls_asm_picking_ref) + else: + tracking_url = GLS_TRACKING_LINKS.get("ASM").format( + picking.carrier_tracking_ref, picking.partner_id.zip + ) + return tracking_url + + def _prepare_gls_asm_shipping(self, picking): + """Convert picking values for asm api + :param picking record with picking to send + :returns dict values for the connector + """ + self.ensure_one() + # A picking can be delivered from any warehouse + sender_partner = ( + picking.picking_type_id.warehouse_id.partner_id + or picking.company_id.partner_id + ) + consignee = picking.partner_id + consignee_entity = picking.partner_id.commercial_partner_id + if not sender_partner.street: + raise UserError(_("Couldn't find the sender street")) + cash_amount = 0 + if self.gls_asm_cash_on_delivery: + cash_amount = picking.sale_id.amount_total + return { + "fecha": fields.Date.today().strftime("%d/%m/%Y"), + "portes": self.gls_asm_postage_type, + "servicio": self.gls_asm_service, + "horario": self.gls_asm_shiptime, + "bultos": picking.number_of_packages, + "peso": round(picking.shipping_weight, 3), + "volumen": "", # [optional] Volume, in m3 + "declarado": "", # [optional] + "dninomb": "0", # [optional] + "fechaentrega": "", # [optional] + "retorno": "1" if self.gls_asm_with_return else "0", # [optional] + "pod": "N", # [optional] + "podobligatorio": "N", # [deprecated] + "remite_plaza": "", # [optional] Origin agency + "remite_nombre": escape( + sender_partner.name or sender_partner.parent_id.name + ), + "remite_direccion": escape(sender_partner.street or ""), + "remite_poblacion": escape(sender_partner.city or ""), + "remite_provincia": escape(sender_partner.state_id.name or ""), + "remite_pais": "34", # [mandatory] always 34=Spain + "remite_cp": sender_partner.zip or "", + "remite_telefono": sender_partner.phone or "", + "remite_movil": sender_partner.mobile or "", + "remite_email": escape(sender_partner.email or ""), + "remite_departamento": "", + "remite_nif": sender_partner.vat or "", + "remite_observaciones": "", + "destinatario_codigo": "", + "destinatario_plaza": "", + "destinatario_nombre": ( + escape(consignee.name or consignee.commercial_partner_id.name or "") + ), + "destinatario_direccion": escape(consignee.street or ""), + "destinatario_poblacion": escape(consignee.city or ""), + "destinatario_provincia": escape(consignee.state_id.name or ""), + "destinatario_pais": consignee.country_id.phone_code or "", + "destinatario_cp": consignee.zip, + # For certain destinations the consignee mobile and email are required to + # make the expedition. Try to fallback to the commercial entity one + "destinatario_telefono": consignee.phone or consignee_entity.phone or "", + "destinatario_movil": consignee.mobile or consignee_entity.mobile or "", + "destinatario_email": escape( + consignee.email or consignee_entity.email or "" + ), + "destinatario_observaciones": picking.gls_shipping_notes or "", + "destinatario_att": "", + "destinatario_departamento": "", + "destinatario_nif": "", + "referencia_c": escape( + picking.name.replace("\\", "/") # It errors with \ characters + ), # Our unique reference + "referencia_0": "", # Not used if the above is set + "importes_debido": "0", # The customer pays the shipping + "importes_reembolso": cash_amount or "", + "seguro": "0", # [optional] + "seguro_descripcion": "", # [optional] + "seguro_importe": "", # [optional] + "etiqueta": "PDF", # Get Label in response + "etiqueta_devolucion": "PDF", + # [optional] GLS Customer Code + # (when customer have several codes in GLS) + "cliente_codigo": "", + "cliente_plaza": "", + "cliente_agente": "", + } + + def _prepare_gls_asm_pickup(self, picking): + """Convert picking values for asm api pickup + :param picking record with picking to send + :returns dict values for the connector + """ + self.ensure_one() + sender_partner = picking.partner_id + receiving_partner = ( + picking.picking_type_id.warehouse_id.partner_id + or picking.company_id.partner_id + ) + if not sender_partner.street: + raise UserError(_("Couldn't find the sender street")) + if not receiving_partner.street: + raise UserError(_("Couldn't find the consignee street")) + return { + "fecha": fields.Date.today().strftime("%d/%m/%Y"), + "portes": self.gls_asm_postage_type, + "servicio": self.gls_asm_service, + "horario": self.gls_asm_shiptime, + "bultos": picking.number_of_packages, + "peso": round(picking.shipping_weight, 3), + "fechaentrega": "", # [optional] + "observaciones": "", # [optional] + "remite_nombre": escape( + sender_partner.name or sender_partner.parent_id.name + ), + "remite_direccion": escape(sender_partner.street) or "", + "remite_poblacion": sender_partner.city or "", + "remite_provincia": sender_partner.state_id.name or "", + "remite_pais": (sender_partner.country_id.phone_code or ""), + "remite_cp": sender_partner.zip or "", + "remite_telefono": ( + sender_partner.phone or sender_partner.parent_id.phone or "" + ), + "remite_movil": ( + sender_partner.mobile or sender_partner.parent_id.mobile or "" + ), + "remite_email": ( + sender_partner.email or sender_partner.parent_id.email or "" + ), + "destinatario_nombre": escape( + receiving_partner.name or receiving_partner.parent_id.name + ), + "destinatario_direccion": escape(receiving_partner.street) or "", + "destinatario_poblacion": receiving_partner.city or "", + "destinatario_provincia": receiving_partner.state_id.name or "", + "destinatario_pais": (receiving_partner.country_id.phone_code or ""), + "destinatario_cp": receiving_partner.zip or "", + "destinatario_telefono": ( + receiving_partner.phone or receiving_partner.parent_id.phone or "" + ), + "destinatario_movil": ( + receiving_partner.mobile or receiving_partner.parent_id.mobile or "" + ), + "destinatario_email": ( + receiving_partner.email or receiving_partner.parent_id.email or "" + ), + "referencia_c": escape(picking.name), # Our unique reference + "referencia_a": "", # Not used if the above is set + } + + def gls_asm_send_shipping(self, pickings): + """Send the package to GLS + :param pickings: A recordset of pickings + :return list: A list of dictionaries although in practice it's + called one by one and only the first item in the dict is taken. Due + to this design, we have to inject vals in the context to be able to + add them to the message. + """ + gls_request = GlsAsmRequest(self._gls_asm_uid()) + result = [] + for picking in pickings: + if picking.carrier_id.gls_is_pickup_service: + continue + vals = self._prepare_gls_asm_shipping(picking) + if len(vals.get("referencia_c", "")) > 15: + raise UserError( + _( + "GLS-ASM API doesn't admit a reference number higher than " + "15 characters. In order to handle it, they trim the" + "reference and as the reference is unique to every " + "customer we soon would have duplicated reference " + "collisions. To prevent this, you should edit your picking " + "sequence to a max of 15 characters." + ) + ) + vals.update({"tracking_number": False, "exact_price": 0}) + response = gls_request._send_shipping(vals) + self.log_xml( + response and response.get("gls_sent_xml", ""), + "GLS ASM Shipping Request", + ) + self.log_xml(response or "", "GLS ASM Shipping Response") + if not response or response.get("_return", -1) < 0: + result.append(vals) + continue + # For compatibility we provide this number although we get + # two more codes: codbarras and uid + vals["tracking_number"] = response.get("_codexp") + gls_asm_picking_ref = "" + try: + references = response.get("Referencias", {}).get("Referencia", []) + for ref in references: + if ref.get("_tipo", "") == "N": + gls_asm_picking_ref = ref.get("value", "") + break + except Exception as e: + _logger.warning(e) + picking.write( + { + "gls_asm_public_tracking_ref": response.get("_codbarras"), + "gls_asm_picking_ref": gls_asm_picking_ref, + } + ) + # We post an extra message in the chatter with the barcode and the + # label because there's clean way to override the one sent by core. + body = _("GLS Shipping extra info:\n" "barcode: %s") % response.get( + "_codbarras" + ) + attachment = [] + if response.get("gls_label"): + attachment = [ + ( + "gls_label_{}.pdf".format(response.get("_codbarras")), + response.get("gls_label"), + ) + ] + picking.message_post(body=body, attachments=attachment) + result.append(vals) + return result + + def gls_asm_send_pickup(self, pickings): + """Send the request to GLS to pick a package up + :param pickings: A recordset of pickings + :return list: A list of dictionaries although in practice it's + called one by one and only the first item in the dict is taken. Due + to this design, we have to inject vals in the context to be able to + add them to the message. + """ + gls_request = GlsAsmRequest(self._gls_asm_uid()) + result = [] + for picking in pickings: + if not picking.carrier_id.gls_is_pickup_service: + continue + vals = self._prepare_gls_asm_pickup(picking) + vals.update({"tracking_number": False, "exact_price": 0}) + response = gls_request._send_pickup(vals) + self.log_xml( + response and response.get("gls_sent_xml", ""), "GLS ASM Pick-up Request" + ) + self.log_xml(response or "", "GLS ASM Pick-up Response") + if not response or response.get("_return", -1) < 0: + result.append(vals) + continue + # For compatibility we provide this number although we get + # two more codes: codbarras and uid + vals["tracking_number"] = response.get("_codigo") + picking.gls_asm_public_tracking_ref = response.get("_codigo") + # We post an extra message in the chatter with the barcode and the + # label because there's clean way to override the one sent by core. + body = _( + "GLS Pickup extra info:
" + "Tracking number: %(codigo)s
Bultos: %(bultos)s", + ) % {"codigo": response.get("_codigo"), "bultos": vals["bultos"]} + picking.message_post(body=body) + result.append(vals) + return result + + def gls_asm_tracking_state_update(self, picking): + """Tracking state update""" + self.ensure_one() + if not picking.carrier_tracking_ref: + return + gls_request = GlsAsmRequest(self._gls_asm_uid()) + tracking_info = {} + if not picking.carrier_id.gls_is_pickup_service: + tracking_info = gls_request._get_tracking_states( + picking.carrier_tracking_ref + ) + tracking_states = tracking_info.get("tracking_list", {}).get("tracking", []) + # If there's just one state, we'll get a single dict, otherwise we + # get a list of dicts + if isinstance(tracking_states, dict): + tracking_states = [tracking_states] + else: + tracking_states = gls_request._get_pickup_tracking_states( + picking.carrier_tracking_ref + ) + if not tracking_states: + return + self.log_xml(tracking_states or "", "GLS ASM Tracking Response") + picking.tracking_state_history = "\n".join( + [ + "{} - [{}] {}".format( + t.get("fecha") or "{} {}".format(t.get("Fecha"), t.get("Hora")), + t.get("codigo") or t.get("Codigo"), + t.get("evento") or t.get("Descripcion"), + ) + for t in tracking_states + ] + ) + tracking = tracking_states.pop() + picking.tracking_state = "[{}] {}".format( + tracking_info.get("codestado") or tracking.get("Codigo"), + tracking_info.get("estado") or tracking.get("Descripcion"), + ) + if not picking.carrier_id.gls_is_pickup_service: + states_to_check = GLS_DELIVERY_STATES_STATIC + picking.gls_shipment_state = GLS_SHIPMENT_TYPE_STATES.get( + tracking_info.get("codestado"), "incidence" + ) + else: + states_to_check = GLS_PICKUP_STATES_STATIC + # Portuguese pick-ups use the 0 code for extra states that aren't "Canceled" + # In order to not incorrectly mark as canceled, we take the most recent + # non-0 code (that isn't "Cancel") as the current state + if ( + picking.partner_id.country_id.code == "PT" + and "Anulada" not in tracking.get("Descripcion") + ): + tracking = list( + filter(lambda t: t["Codigo"] != "0", tracking_states) + ).pop() + picking.gls_pickup_state = GLS_PICKUP_TYPE_STATES.get( + tracking.get("Codigo"), "incidence" + ) + delivery_state = states_to_check.get( + tracking_info.get("codestado") or tracking.get("Codigo"), "incidence" + ) + if delivery_state == "incidence": + delivery_state = "incident" + picking.delivery_state = delivery_state + + def gls_asm_cancel_shipment(self, pickings): + """Cancel the expedition""" + gls_request = GlsAsmRequest(self._gls_asm_uid()) + for picking in pickings.filtered("carrier_tracking_ref"): + self.gls_asm_tracking_state_update(picking=picking) + if picking.delivery_state != "shipping_recorded_in_carrier": + raise UserError( + _( + "Unable to cancel GLS Expedition with reference " + "%(ref)s as it is in state %(state)s.\n" + "Please manage the cancellation of this " + "shipment/pickup with GLS via email." + ) + % { + "ref": picking.carrier_tracking_ref, + "state": picking.tracking_state, + } + ) + if picking.carrier_id.gls_is_pickup_service: + response = gls_request._cancel_pickup(picking.carrier_tracking_ref) + else: + response = gls_request._cancel_shipment(picking.carrier_tracking_ref) + self.log_xml( + response and response.get("gls_sent_xml", ""), "GLS ASM Cancel Request" + ) + self.log_xml(response or "", "GLS ASM Cancel Response") + if not response or response.get("_return") < 0: + msg = _("GLS Cancellation failed with reason: %s") % response.get( + "value", "Connection Error" + ) + picking.message_post(body=msg) + continue + picking.write( + {"gls_asm_public_tracking_ref": False, "gls_asm_picking_ref": False} + ) + self.gls_asm_tracking_state_update(picking=picking) + + def gls_asm_rate_shipment(self, order): + """There's no public API so another price method should be used + Not implemented with GLS-ASM, these values are so it works with websites""" + return { + "success": True, + "price": self.product_id.lst_price, + "error_message": _( + """GLS ASM API doesn't provide methods to compute delivery rates, so + you should relay on another price method instead or override this + one in your custom code.""" + ), + "warning_message": _( + """GLS ASM API doesn't provide methods to compute delivery rates, so + you should relay on another price method instead or override this + one in your custom code.""" + ), + } + + def gls_asm_get_label(self, gls_asm_public_tracking_ref): + """Generate label for picking + :param picking - stock.picking record + :returns pdf file + """ + self.ensure_one() + if not gls_asm_public_tracking_ref: + return False + gls_request = GlsAsmRequest(self._gls_asm_uid()) + label = gls_request._shipping_label(gls_asm_public_tracking_ref) + if not label: + return False + return label + + def action_get_manifest(self): + """Action to launch the manifest wizard""" + self.ensure_one() + wizard = self.env["gls.asm.minifest.wizard"].create({"carrier_id": self.id}) + view_id = self.env.ref("delivery_gls_asm.delivery_manifest_wizard_form").id + return { + "name": _("GLS Manifest"), + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "gls.asm.minifest.wizard", + "view_id": view_id, + "views": [(view_id, "form")], + "target": "new", + "res_id": wizard.id, + "context": self.env.context, + } diff --git a/delivery_gls_asm/models/gls_asm_master_data.py b/delivery_gls_asm/models/gls_asm_master_data.py new file mode 100644 index 00000000000..8e74ae622f6 --- /dev/null +++ b/delivery_gls_asm/models/gls_asm_master_data.py @@ -0,0 +1,342 @@ +# Copyright 2020 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +GLS_ASM_SERVICES = [ + ("1", "COURIER"), + ("2", "VALIJA"), + ("5", "BICI"), + ("6", "CARGA"), + ("7", "RECOGIDA"), + ("8", "RECOGIDA CRUZADA"), + ("9", "DEVOLUCION"), + ("10", "RETORNO"), + ("11", "IBEX"), + ("12", "INTERNACIONAL EXPRESS"), + ("13", "INTERNACIONAL ECONOMY"), + ("14", "DISTRIBUCION PROPIA"), + ("15", "OTROS PUENTES"), + ("16", "PROPIO AGENTE"), + ("17", "RECOGIDA SIN MERCANCIA"), + ("18", "DISTRIBUCION  RED"), + ("19", "OPERACIONES RED"), + ("20", "CARGA MARITIMA"), + ("21", "GLASS"), + ("22", "EURO SMALL"), + ("23", "PREPAGO"), + ("24", "OPTIPLUS"), + ("25", "EASYBAG"), + ("26", "CORREO INTERNO"), + ("27", "14H SOBRES"), + ("28", "24H SOBRES"), + ("29", "72H SOBRES"), + ("30", "ASM0830"), + ("31", "CAN MUESTRAS"), + ("32", "RC.SELLADA"), + ("33", "RECANALIZA"), + ("34", "INT PAQUET"), + ("35", "dPRO"), + ("36", "Int. WEB"), + ("37", "ECONOMY"), + ("38", "SERVICIOS RUTAS"), + ("39", "REC. INT"), + ("40", "SERVICIO LOCAL MOTO"), + ("41", "SERVICIO LOCAL FURGONETA"), + ("42", "SERVICIO LOCAL F. GRANDE"), + ("43", "SERVICIO LOCAL CAMION"), + ("44", "SERVICIO LOCAL"), + ("45", "RECOGIDA MEN. MOTO"), + ("46", "RECOGIDA MEN. FURGONETA"), + ("47", "RECOGIDA MEN. F.GRANDE"), + ("48", "RECOGIDA MEN. CAMION"), + ("49", "RECOGIDA MENSAJERO"), + ("50", "SERVICIOS ESPECIALES"), + ("51", "REC. INT WW"), + ("52", "COMPRAS"), + ("53", "MR1"), + ("54", "EURO ESTANDAR"), + ("55", "INTERC. EUROESTANDAR"), + ("56", "RECOGIDA ECONOMY"), + ("57", "REC. INTERCIUDAD ECONOMY"), + ("58", "RC. PARCEL SHOP"), + ("59", "ASM BUROFAX"), + ("60", "ASM GO"), + ("66", "ASMTRAVELLERS"), + ("74", "EUROBUSINESS PARCEL"), + ("76", "EUROBUSINESS SMALL PARCEL"), + ("96", "BUSINESS PARCEL"), +] + +GLS_SHIPPING_TIMES = [ + ("0", "Express 10:00"), + ("2", "Express 14:00"), + ("3", "Express 19:00"), + ("5", "SaturdayService"), + ("7", "INTERDIA"), + ("9", "Franja Horaria"), + ("4", "Masivo"), + ("10", "Maritimo"), + ("11", "Rec. en agencia"), + ("13", "Ent. Pto. ASM"), + ("16", "Economy"), + ("17", "Express"), + ("18", "Entrega 24-48h (serv. 96) o 48h (serv. 37)"), + ("19", "ParcelShop"), +] + +GLS_POSTAGE_TYPE = [("P", "Prepaid"), ("D", "Cash On Delivery")] + +GLS_DELIVERY_STATES_STATIC = { + "-10": "shipping_recorded_in_carrier", # GRABADO + "0": "shipping_recorded_in_carrier", # MANIFESTADA + "2": "in_transit", # EN TRANSITO A DESTINO + "3": "in_transit", # EN DELEGACION DESTINO + "20": "incidence", # PERDIDA / ROTURA + "5": "canceled_shipment", # ANULADA + "6": "in_transit", # EN REPARTO + "7": "customer_delivered", # ENTREGADO + "8": "customer_delivered", # ENTREGA PARCIAL + "9": "in_transit", # ALMACENADO + "10": "incidence", # DEVUELTA + "11": "incidence", # PENDIENTE DATOS, EN DELEGACION + "1": "incidence", # RETENIDA EN DELEGACION + "91": "incidence", # CON INCIDENCIA + "90": "incidence", # CERRADO DEFINITIVO + "50": "in_transit", # PRECONFIRMADA ENTREGA + "51": "incidence", # ENTREGA ANULADA (DEVUELTA) + "12": "incidence", # DEVUELTA AL CLIENTE + "13": "incidence", # POSIBLE DEVOLUCION + "14": "incidence", # SOLICITUD DE DEVOLUCION + "15": "incidence", # EN DEVOLUCION + "16": "in_transit", # EN DELEGACION ORIGEN + "17": "incidence", # DESTRUIDO POR ORDEN DEL CLIENTE + "18": "incidence", # RETENIDO POR ORDEN DE PAGA + "19": "in_transit", # EN PLATAFORMA DE DESTINO + "21": "incidence", # RECANALIZADA (A EXTINGUIR) + "22": "in_transit", # ENTREGADO EN ASM PARCELSHOP + "25": "in_transit", # ASM PARCELSHOP CONFIRMA RECEPCION +} + +GLS_SHIPMENT_TYPE_STATES = { + "-10": "recorded", # GRABADO + "0": "manifested", # MANIFESTADA + "2": "transit", # EN TRANSITO A DESTINO + "3": "agency_transit", # EN DELEGACION DESTINO + "20": "closed", # CERRADO POR SINIESTRO + "5": "cancel", # ANULADA + "6": "shipping", # EN REPARTO + "7": "delivered", # ENTREGADO + "8": "partially_delivered", # ENTREGA PARCIAL + "9": "warehouse", # ALMACENADO + "10": "return_agency", # DEVUELTA + "11": "pending", # PENDIENTE DATOS. EN DELEGACIÓN + "1": "held", # PENDIENTE AUTORIZACIÓN + "91": "incidence", # CON INCIDENCIA + "90": "closed_final", # CERRADO DEFINITIVO + "50": "preconfirmed", # PRECONFIRMADA ENTREGA + "51": "cancel_returned", # ENTREGA ANULADA (DEVUELTA) + "12": "return_customer", # DEVUELTA AL CLIENTE + "13": "possible_return", # POSIBLE DEVOLUCIÓN + "14": "requested_return", # SOLICITUD DE DEVOLUCIÓN + "15": "returning", # EN DEVOLUCIÓN + "16": "origin", # EN DELEGACIÓN ORIGEN + "17": "destroyed", # DESTRUIDO POR ORDEN DEL CLIENTE + "18": "held_order", # RETENIDO POR ORDEN DE PAGA + "19": "in_platform", # EN PLATAFORMA DE DESTINO + "21": "extinguished", # RECANALIZADA (A EXTINGUIR) + "22": "parcelshop", # ENTREGADO EN ASM PARCELSHOP, + "25": "parcelshop_confirm", # ASM PARCELSHOP CONFIRMA RECEPCIÓN +} + +GLS_PICKUP_STATES_STATIC = { + "0": "canceled_shipment", # ANULADA + "1": "shipping_recorded_in_carrier", # SOLICITADA + "2": "customer_delivered", # REALIZADA CON ÉXITO + "3": "in_transit", # NO REALIZADA + "4": "customer_delivered", # RECIBIDA + "5": "incidence", # REALIZADA CON INCIDENCIA + "6": "in_transit", # RECOGIDO EN CLIENTE + "7": "in_transit", # RECEPCIONADA EN AGENCIA + "9": "shipping_recorded_in_carrier", # ASIGNADA + "10": "shipping_recorded_in_carrier", # A PRECONFIRMAR + "11": "shipping_recorded_in_carrier", # PENDIENTE GESTIÓN + "12": "customer_delivered", # CERRADO + "13": "shipping_recorded_in_carrier", # PENDIENTE AUTORIZACIÓN + "20": "customer_delivered", # CERRADO DEFINITIVO +} + +GLS_PICKUP_TYPE_STATES = { + "0": "cancel", # ANULADA + "1": "recorded", # SOLICITADA + "2": "done", # REALIZADA CON ÉXITO + "3": "not_done", # NO REALIZADA + "4": "received", # RECIBIDA + "5": "incidence", # REALIZADA CON INCIDENCIA + "6": "picked_up_customer", # RECOGIDO EN CLIENTE + "7": "picked_up_agency", # RECEPCIONADA EN AGENCIA + "9": "assigned", # ASIGNADA + "10": "preconfirm", # A PRECONFIRMAR + "11": "pending", # PENDIENTE GESTIÓN + "12": "closed", # CERRADO + "13": "pending_auth", # PENDIENTE AUTORIZACIÓN + "20": "closed_final", # CERRADO DEFINITIVO +} + +GLS_SHIPMENT_ERROR_CODES = { + 36: "Error, Consignee Zipcode, wrong format.", + 38: "Error, Invalid consignee phone number.", + -36: "Error, Consignee Zipcode, wrong format.", + -38: "Error, Invalid consignee phone number.", + -1: ( + "Exception. Timeout expired." + "Se ha forzado la interrupcion de una conexion existente por el host remoto." + ), + -3: "Error, The barcode of the shipment already exists.", + -33: """Error, Various reasons: + Cp destino no existe o no es de esa plaza + El reembolso debe ser mayor o igual a 0 + Este contrato de valija no existe/esta dado de baja + Formato de codigo de barras no reconocido + Fecha expedición anterior a hoy + Los bultos no pueden ser 0 o negativos + No estas autorizado a grabar envíos de ese cliente + Sin tienda ps y horario ps + El servicio / horario es incorrecto""", + -48: "Error, EuroEstandar/EBP service: the number of parcels should always be 1.", + -49: "Error, EuroEstandar/EBP service: weight should be <= 31.5 kgs ().", + -50: "Error, EuroEstandar/EBP service: there can be no RCS (return stamped copy).", + -51: "Error, EuroEstandar/EBP service: there can be no SWAP ().", + -52: ( + "Error, EuroEstandar/EBP service:" + "reported a country that is not included on the service." + ), + -53: ( + "Error, EuroEstandar/EBP service:" + "agency is not authorized to insert EuroEstandar/EBP service." + ), + -54: ( + "Error, EuroEstandar/EBP service:" + "The consignee mail address is required (.)." + ), + -55: ( + "Error, EuroEstandar/EBP service:" + "The consignee mobile phone is required (.)." + ), + -57: ( + "Error, EuroEstandar/EBP service:" + "reported a country that is not included " + "on the service (.)." + ), + -69: "Error, I can not Channeling, wrong consignee zipcode.", + -70: "Error, The order number already exists to this date and customer code.", + -80: "EuroBusiness shipments. A mandatory field is missing.", + -81: "EuroBusiness shipments. A wrong format is transmitted in field.", + -82: ( + "EuroBusiness shipments." + "Wrong zipcode /wrong country code." + "Error in zip code or its format, " + "and maybe a bad combination of city and zip code." + ), + -83: ( + "EuroBusiness shipments." + "GLS internal error." + "No free parcel number is available within the range." + ), + -84: ( + "EuroBusiness shipments." + "GLS internal error." + "A parameter is missing within the configuration file of the UNI-BOX." + ), + -85: "EuroBusiness shipments. Is not able to make the routing.", + -86: ( + "EuroBusiness shipments." + "GLS internal error." + "A needed template-file cannot be found or opened." + ), + -87: "EuroBusiness shipments. GLS internal error. Duplicated sequence.", + -88: "EuroBusiness shipments. Other errors.", + -96: "Error, EBP service: Sequential error.", + -97: ( + "Error, EuroEstandar/EBP service:" + " can't be 'D', can't be > 0." + ), + -99: "Warning, Webservices are temporarily out of service.", + -103: "Error, plaza solicita es null (alta).", + -104: "Error, plaza origen es null (alta).", + -106: "Error, CodCli es null (alta).", + -107: "Error, CodCliRed es null (alta).", + -108: "Error, Sender Name must be at least three characters.", + -109: "Error, Sender Address must be at least three characters.", + -110: "Error, Sender City must be at least three characters.", + -111: "Error, Sender Zipcode must be at least four characters.", + -117: "Error, los locales solo en la plaza de origen para la web.", + -118: "Error, customer reference is duplicated.", + -119: "Error, exception, uncontrolled error.", + -128: "Error, Consignee Name must be at least three characters.", + -129: "Error, Consignee Address must be at least three characters.", + -130: "Error, Consignee City must be at least three characters.", + -131: "Error, Consignee Zipcode must be at least four characters.", + -6565: "Error, Volume is incorrect, remember that the unit is m3.", +} + +GLS_PICKUP_ERROR_CODES = { + -1: "Connection exception", + -103: "Impossible get the requesting agency", + -104: "Impossible get the origin agency.", + -105: "Collection date is empty o not informed.", + -106: "Impossible get the customer code (CodCli).", + -107: "Impossible get the CodCliRed.", + -108: "Collection name is empty or not informed.", + -109: "Collection Address name is empty or not informed.", + -110: "Collection City name is empty or not informed.", + -111: "Collection Zipcode is empty or not informed.", + -112: "Codsolicitud of agency is not valid.", + -113: "Generic zipcodes are not allowed.", + -114: "Collection interval must be greater than 2 hours.", + -115: "Minimum collection time is 8h.", + -116: "Maximum collection time is 22h.", + -117: "Los locales solo en la plaza de origen para la web.", + -118: "Customer reference is duplicated.", + -119: "Zonzoo no puede recoger en islas Portugal.", + -120: "Zipcode of consignee is incorrect.", + -122: "Login not exists or is deleted.", + -123: "Don't have permissions to insert on this agency.", + -125: "Can not ask a collect on festive.", + -126: ( + "When country is not Spain (34) the Phone and Celullar are mandatory" + "(tags and inside )." + ), + -128: ( + "It is mandatory to inform the Telephone or Email " + "where GLS must to collect (., . " + "or .)." + ), + -303: "Currency amounts must be allways greater than 0.", + -402: ( + "If Amount of insured goods > 0 (in Seguro), " + "then tipo and descripcion are mandatory." + ), + -504: ( + "Impossible get the last mile agency, " + "probably the consignee zipcode is wrong or not exists." + ), + -505: "Consignee name is not informed.", + -506: "Consignee address is not informed.", + -507: "Consignee city is not informed.", + -508: "Consignee zipcode is not informed.", + -602: "The reference must be informed.", + -603: "Shipment References, tipo not exists.", + -676: "Collection Zipcode is wrong, not exists.", +} + +GLS_TRACKING_LINKS = { + "ASM": ( + "http://www.asmred.com/extranet/public/ExpedicionASM.aspx?codigo={}&cpDst={}" + ), + "INT": ( + "https://www.gls-spain.es/en/receiving-parcels/shipping-tracking/" + "?match={}&international=1" + ), + "INT_PT": ( + "https://www.gls-portugal.pt/pt/seguimiento-envio/?match={}&international=1" + ), +} diff --git a/delivery_gls_asm/models/gls_asm_request.py b/delivery_gls_asm/models/gls_asm_request.py new file mode 100644 index 00000000000..0ba6ba6aa83 --- /dev/null +++ b/delivery_gls_asm/models/gls_asm_request.py @@ -0,0 +1,433 @@ +# Copyright 2020 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import binascii +import logging +import os + +from odoo import _ +from odoo.exceptions import UserError + +from .gls_asm_master_data import GLS_PICKUP_ERROR_CODES, GLS_SHIPMENT_ERROR_CODES + +_logger = logging.getLogger(__name__) + +try: + from suds.client import Client + from suds.sax.text import Raw + from suds.sudsobject import asdict +except (OSError, ImportError) as err: + _logger.debug(err) + + +class GlsAsmRequest: + """Interface between GLS-ASM SOAP API and Odoo recordset + Abstract GLS-ASM API Operations to connect them with Odoo + + Not all the features are implemented, but could be easily extended with + the provided API. We leave the operations empty for future. + """ + + def __init__(self, uidcustomer=None): + """As the wsdl isn't public, we have to load it from local""" + wsdl_path = os.path.join( + os.path.dirname(os.path.realpath(__file__)), "../api/gls_asm_api.wsdl" + ) + self.uidcustomer = uidcustomer or "" + self.client = Client(f"file:{wsdl_path}", timeout=90) + + def _recursive_asdict(self, suds_object): + """As suds response is an special object, we convert it into + a more usable python dict. Taken form: + https://stackoverflow.com/a/15678861 + """ + out = {} + for k, v in asdict(suds_object).items(): + if hasattr(v, "__keylist__"): + out[k] = self._recursive_asdict(v) + elif isinstance(v, list): + out[k] = [] + for item in v: + if hasattr(item, "__keylist__"): + out[k].append(self._recursive_asdict(item)) + else: + out[k].append(item) + else: + out[k] = v + return out + + def _prepare_cancel_shipment_docin(self, **kwargs): + """ASM API is not very standard. Prepare parameters to pass them raw in + the SOAP message""" + return """ + + + + """.format(**kwargs) + + def _prepare_cancel_pickup_docin(self, **kwargs): + return """ + + + + """.format(**kwargs) + + def _prepare_send_shipping_docin(self, **kwargs): + """ASM API is not very standard. Prepare parameters to pass them raw in + the SOAP message""" + return """ + + + {fecha} + {portes} + {servicio} + {horario} + {bultos} + {peso} + {volumen} + {declarado} + {dninomb} + {fechaentrega} + {retorno} + {pod} + {podobligatorio} + + {remite_plaza} + {remite_nombre} + {remite_direccion} + {remite_poblacion} + {remite_provincia} + {remite_pais} + {remite_cp} + {remite_telefono} + {remite_movil} + {remite_email} + {remite_departamento} + {remite_nif} + {remite_observaciones} + + + {destinatario_codigo} + {destinatario_plaza} + {destinatario_nombre} + {destinatario_direccion} + {destinatario_poblacion} + {destinatario_provincia} + {destinatario_pais} + {destinatario_cp} + {destinatario_telefono} + {destinatario_movil} + {destinatario_email} + + {destinatario_observaciones} + + {destinatario_att} + {destinatario_departamento} + {destinatario_nif} + + + {referencia_c} + {referencia_0} + + + {importes_debido} + {importes_reembolso} + + + {seguro_descripcion} + {seguro_importe} + + + + + + + + + {cliente_codigo} + {cliente_plaza} + {cliente_agente} + + + + """.format(**kwargs) + + def _prepare_send_pickup_docin(self, **kwargs): + """ASM API is not very standard. Prepare parameters to pass them raw in + the SOAP message""" + return """ + + + + + + + + + {remite_nombre} + {remite_direccion} + {remite_poblacion} + {remite_provincia} + {remite_pais} + {remite_cp} + {remite_telefono} + {remite_movil} + {remite_email} + + + + + {fechaentrega} + {portes} + {servicio} + {horario} + {bultos} + {peso} + + {destinatario_nombre} + {destinatario_direccion} + {destinatario_poblacion} + {destinatario_provincia} + {destinatario_pais} + {destinatario_cp} + {destinatario_telefono} + {destinatario_movil} + {destinatario_email} + {observaciones} + + + + + {referencia_c} + {referencia_a} + + + + """.format(**kwargs) + + def _send_shipping(self, vals): + """Create new shipment + :params vals dict of needed values + :returns dict with GLS response containing the shipping codes, labels, + an other relevant data + """ + vals.update({"uidcustomer": self.uidcustomer}) + xml = Raw(self._prepare_send_shipping_docin(**vals)) + _logger.debug(xml) + try: + res = self.client.service.GrabaServicios(docIn=xml) + except Exception as e: + raise UserError( + _( + "No response from server recording GLS delivery %(ref)s.\n" + "Traceback:\n%(error)s" + ) + % {"ref": vals.get("referencia_c", ""), "error": e} + ) from e + # Convert result suds object to dict and set the root conveniently + # GLS API Errors have codes below 0 so we have to + # convert to int as well + res = self._recursive_asdict(res)["Servicios"]["Envio"] + res["gls_sent_xml"] = xml + _logger.debug(res) + res["_return"] = int(res["Resultado"]["_return"]) + if res["_return"] < 0: + raise UserError( + _( + "GLS returned an error trying to record the shipping for %(ref)s.\n" + "Error:\n%(error)s" + ) + % { + "ref": vals.get("referencia_c", ""), + "error": GLS_SHIPMENT_ERROR_CODES.get( + res["_return"], res["_return"] + ), + } + ) + if res.get("Etiquetas", {}).get("Etiqueta", {}).get("value"): + res["gls_label"] = binascii.a2b_base64( + res["Etiquetas"]["Etiqueta"]["value"] + ) + return res + + def _send_pickup(self, vals): + """Create new pickup + :params vals dict of needed values + :returns dict with GLS response containing the shipping codes, labels, + an other relevant data + """ + vals.update({"uidcustomer": self.uidcustomer}) + xml = Raw(self._prepare_send_pickup_docin(**vals)) + _logger.debug(xml) + try: + res = self.client.service.GrabaServicios(docIn=xml) + except Exception as e: + raise UserError( + _( + "No response from server recording GLS delivery %(ref)s.\n" + "Traceback:\n%(error)s" + ) + % {"ref": vals.get("referencia_c", ""), "error": e} + ) from e + # Convert result suds object to dict and set the root conveniently + # GLS API Errors have codes below 0 so we have to + # convert to int as well + res = self._recursive_asdict(res)["Servicios"]["Recogida"] + res["gls_sent_xml"] = xml + _logger.debug(res) + res["_return"] = int(res["Resultado"]["_return"]) + if res["_return"] < 0: + raise UserError( + _( + "GLS returned an error trying to record the shipping for %(ref)s.\n" + "Error:\n%(error)s" + ) + % { + "ref": vals.get("referencia_c", ""), + "error": GLS_PICKUP_ERROR_CODES.get(res["_return"], res["_return"]), + } + ) + return res + + def _get_delivery_info(self, reference=False): + """Get delivery info recorded in GLS for the given reference + :param str reference -- GLS tracking number + :returns: shipping info dict + """ + try: + res = self.client.service.GetExpCli(codigo=reference, uid=self.uidcustomer) + _logger.debug(res) + except Exception as e: + raise UserError( + _( + "GLS: No response from server getting state from ref %(ref)s.\n" + "Traceback:\n%(error)s" + ) + % {"ref": reference, "error": e} + ) from e + res = self._recursive_asdict(res) + return res + + def _get_pickup_info(self, reference=False): + xml = Raw( + f""" + + + + """ + ) + res = self.client.service.Tracking(docIn=xml) + _logger.debug(res) + return self._recursive_asdict(res) + + def _get_tracking_states(self, reference=False): + """Get just tracking states from GLS info for the given reference + :param str reference -- GLS tracking number + :returns: list of tracking states + """ + res = self._get_delivery_info(reference) + res = (res.get("expediciones") or {}).get("exp", {}) + return res + + def _get_pickup_tracking_states(self, reference=False): + res = self._get_pickup_info(reference) + res = ( + res.get("Servicios", {}) + .get("Recogida", {}) + .get("Tracking", {}) + .get("TrackingCliente", {}) + ) + # If there's just one state, we'll get a single dict, otherwise we + # get a list of dicts + if isinstance(res, dict): + return [res] + return res + + def _shipping_label(self, reference=False): + """Get shipping label for the given ref + :param str reference -- public shipping reference + :returns: base64 with pdf label or False + """ + try: + res = self.client.service.EtiquetaEnvio(reference, "PDF") + _logger.debug(res) + except Exception as e: + raise UserError( + _( + "GLS: No response from server printing label with ref %(ref)s.\n" + "Traceback:\n%(error)s" + ) + % {"ref": reference, "error": e} + ) from e + res = self._recursive_asdict(res) + label = res.get("base64Binary") + return label and binascii.a2b_base64(str(label[0])) + + def _cancel_shipment(self, reference=False): + """Cancel shipment for a given reference + :param str reference -- shipping reference to cancel + :returns: dict -- result of operation with format + { + 'value': str - response message, + '_return': int - response status + } + Possible response values: + 0 -> Expedición anulada + -1 -> No existe envío + -2 -> Tiene tracking operativo + """ + xml = Raw( + self._prepare_cancel_shipment_docin( + uidcustomer=self.uidcustomer, referencia=reference + ) + ) + _logger.debug(xml) + try: + response = self.client.service.Anula(docIn=xml) + _logger.debug(response) + except Exception as e: + _logger.error( + f"No response from server canceling GLS ref {reference}.\n" + f"Traceback:\n{e}" + ) + return {} + response = self._recursive_asdict(response.Servicios.Envio.Resultado) + response["gls_sent_xml"] = xml + response["_return"] = int(response["_return"]) + return response + + def _cancel_pickup(self, reference=False): + """Cancel shipment for a given reference + :param str reference -- shipping reference to cancel + :returns: dict -- result of operation with format + { + 'value': str - response message, + '_return': int - response status + } + Possible response values: + 0 -> Recogida anulada + -1 -> No existe recogida + -2 -> Tiene tracking operativo + """ + xml = Raw( + self._prepare_cancel_pickup_docin( + uidcustomer=self.uidcustomer, referencia=reference + ) + ) + _logger.debug(xml) + try: + response = self.client.service.Anula(docIn=xml) + _logger.debug(response) + except Exception as e: + _logger.error( + f"No response from server canceling GLS ref {reference}.\n" + f"Traceback:\n{e}" + ) + return {} + response = self._recursive_asdict(response.Servicios.Recogida.Resultado) + response["gls_sent_xml"] = xml + response["_return"] = int(response["_return"]) + return response diff --git a/delivery_gls_asm/models/stock_picking.py b/delivery_gls_asm/models/stock_picking.py new file mode 100644 index 00000000000..11841e403bb --- /dev/null +++ b/delivery_gls_asm/models/stock_picking.py @@ -0,0 +1,100 @@ +# Copyright 2020 Tecnativa - David Vidal +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import _, fields, models + + +class StockPicking(models.Model): + _inherit = "stock.picking" + + # ASM API has two references for each delivery. This one is needed + # for some operations like getting the label + gls_asm_public_tracking_ref = fields.Char(string="GLS Barcode", copy=False) + gls_asm_picking_ref = fields.Char(string="GLS Picking Reference", copy=False) + gls_carrier_is_pickup_service = fields.Boolean( + related="carrier_id.gls_is_pickup_service" + ) + gls_pickup_state = fields.Selection( + string="Estado recogida GLS", + selection=[ + ("recorded", "Solicitada"), + ("received", "Recibida"), + ("assigned", "Asignada"), + ("picked_up_customer", "Recogido en Cliente"), + ("picked_up_agency", "Recepcionada en Agencia"), + ("done", "Realizada con éxito"), + ("not_done", "No Realizada"), + ("incidence", "Realizada con Incidencia"), + ("cancel", "Anulada"), + ("preconfirm", "A preconfirmar"), + ("pending", "Pendiente Gestión"), + ("closed", "Cerrado"), + ("pending_auth", "Pending Autorización"), + ("closed_final", "Cerrado Definitivo"), + ], + copy=False, + ) + gls_shipment_state = fields.Selection( + string="Estado envío GLS", + selection=[ + ("recorded", "Grabado"), + ("manifested", "Manifestada"), + ("transit", "En tránsito al destino"), + ("agency_transit", "En delegación destino"), + ("closed", "Cerrado por siniestro"), + ("cancel", "Anualada"), + ("shipping", "En reparto"), + ("delivered", "Entregado"), + ("partially_delivered", "Entrega parcial"), + ("warehouse", "Almacenado"), + ("return_agency", "Devuelta"), + ("pending", "Pendiente datos en delegación"), + ("held", "Pendiente autorización"), + ("incidence", "Con incidencia"), + ("closed_final", "Cerrado definitivo"), + ("preconfirmed", "Preconfirmada enrega"), + ("cancel_returned", "Entrega anulada (devuelta)"), + ("return_customer", "Devuelta al cliente"), + ("possible_return", "Posible devolución"), + ("requested_return", "Solicitud de devolución"), + ("returning", "En devolución"), + ("origin", "En delegación origen"), + ("destroyed", "Destruido por orden del cliente"), + ("held_order", "Retenido por orden de paga"), + ("in_platform", "En plataforma de destino"), + ("extinguished", "Recanalizada (A extinguir)"), + ("parcelshop", "Entregado en ASM PARCELSHOP"), + ("parcelshop_confirm", "ASM PARCELSHOP CONFIRMA RECEPCIÓN"), + ], + copy=False, + ) + gls_shipping_notes = fields.Text(string="Notas de envío GLS") + + def gls_asm_get_label(self): + """Get GLS Label for this picking expedition""" + self.ensure_one() + if self.delivery_type != "gls_asm" or not self.gls_asm_public_tracking_ref: + return + pdf = self.carrier_id.gls_asm_get_label(self.gls_asm_public_tracking_ref) + label_name = f"gls_{self.gls_asm_public_tracking_ref}.pdf" + self.message_post( + body=(_("GLS label for %s") % self.gls_asm_public_tracking_ref), + attachments=[(label_name, pdf)], + ) + + def gls_asm_send_pickup(self): + self.ensure_one() + if self.delivery_type != "gls_asm" or not self.carrier_id.gls_is_pickup_service: + return + res = self.carrier_id.gls_asm_send_pickup(self)[0] + if res.get("tracking_number", ""): + self.carrier_tracking_ref = res["tracking_number"] + msg = _( + ( + "Request sent to carrier %(carrier_name)s for pick-up with" + " tracking number %(ref)s" + ), + carrier_name=self.carrier_id.name, + ref=self.carrier_tracking_ref, + ) + self.message_post(body=msg) + self.carrier_id.gls_asm_tracking_state_update(picking=self) diff --git a/delivery_gls_asm/pyproject.toml b/delivery_gls_asm/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/delivery_gls_asm/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/delivery_gls_asm/readme/CONFIGURE.md b/delivery_gls_asm/readme/CONFIGURE.md new file mode 100644 index 00000000000..9ba412e9750 --- /dev/null +++ b/delivery_gls_asm/readme/CONFIGURE.md @@ -0,0 +1,14 @@ +Para configurar el transportista: + +1. Vaya a *Inventario \> Configuración \> Entrega \> Método de envío* y + cree uno nuevo. +2. Escoja *GLS ASM* Como proveedor. +3. Configure los datos de servicio que tiene contratados y el producto + de envío que desea utilizar. + +Si no tiene credenciales todavía, puede poner datos inventados y dejar +el método de envío en "Entorno de prueba". Se utilizará el usuario de +pruebas de la API GLS ASM. + +Si GLS cambiase en un futuro el usuario de prueba, puede cambiarlo en +los *Parámetros del sistema* en la clave delivery_gls_asm.api_user_demo. diff --git a/delivery_gls_asm/readme/CONTRIBUTORS.md b/delivery_gls_asm/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..b17710c0f4f --- /dev/null +++ b/delivery_gls_asm/readme/CONTRIBUTORS.md @@ -0,0 +1,6 @@ +- [Tecnativa](https://www.tecnativa.com): + - David Vidal + - Víctor Martínez +- [Studio73](https://www.studio73.es): + - Ethan Hildick + - David López diff --git a/delivery_gls_asm/readme/DESCRIPTION.md b/delivery_gls_asm/readme/DESCRIPTION.md new file mode 100644 index 00000000000..52414130a69 --- /dev/null +++ b/delivery_gls_asm/readme/DESCRIPTION.md @@ -0,0 +1,3 @@ +Este módulo integra la API de GLS España (antigua API de ASM) con Odoo. +No es válido para integraciones de GLS en otros países, que podrían usar +otras APIs. diff --git a/delivery_gls_asm/readme/INSTALL.md b/delivery_gls_asm/readme/INSTALL.md new file mode 100644 index 00000000000..65a1810f762 --- /dev/null +++ b/delivery_gls_asm/readme/INSTALL.md @@ -0,0 +1,7 @@ +Este módulo necesita la librería python suds-py3 y depende igualmente de +los módulos de OCA/delivery-carrier delivery_package_number y +delivery_state. + +La API de GLS/ASM no provee métodos de cálculo de precio, de modo que +para poder calcular los costes de envío sería recomendable instalar el +módulo delivery_price_method. diff --git a/delivery_gls_asm/readme/ROADMAP.md b/delivery_gls_asm/readme/ROADMAP.md new file mode 100644 index 00000000000..cc0dad04e96 --- /dev/null +++ b/delivery_gls_asm/readme/ROADMAP.md @@ -0,0 +1,4 @@ +- La API no facilita métodos para cotizar el coste real de los envíos, + por lo que siempre se cotizan a 0. Si la cotización de envíos es + necesaria, puede instalarse el módulo OCA delivery_price_method o bien + personalizar el método de cotización para este tipo de transportista. diff --git a/delivery_gls_asm/readme/USAGE.md b/delivery_gls_asm/readme/USAGE.md new file mode 100644 index 00000000000..455bd3c1b68 --- /dev/null +++ b/delivery_gls_asm/readme/USAGE.md @@ -0,0 +1,76 @@ +Estas son las distintas operaciones posibles con este módulo: + +## Grabar servicios + +> 1. Al confirmar el albarán, el servicio se grabará en GLS. +> 2. Con la respuesta, se registrará en el chatter la referencia de +> envío y las etiquetas correspondientes. +> 3. Para gestionar los bultos del envío, se puede utilizar el campo de +> número de bultos que añade delivery_package_number (ver el README +> para mayor información) o bien el flujo nativo de Odoo con +> paquetes de envío. El módulo mandará a la API de GLS/ASM el número +> correspondiente y podremos descargar las etiquetas en PDF con su +> correspondiente numeración. + +## Pedir recogidas + +> 1. Al confirmar el albarán con un servicio de recogida, el envío NO +> se grabará en GLS. +> 2. Aparecerá un botón de "Enviar recogida" en la parte superior para +> solicitarlo +> 3. Con la respuesta, se registrará en el chatter la referencia de +> envío +> 4. Para gestionar los bultos del envío, se puede utilizar el campo de +> número de bultos que añade delivery_package_number (ver el README +> para mayor información) o bien el flujo nativo de Odoo con +> paquetes de envío. + +## Cancelar servicios + +> 1. Al igual que en otros métodos de envío, en los albaranes de salida +> podemos cancelar un servicio determinado mediante la acción +> correspondiente en la pestaña de *Información Adicional*, sección +> *Información de entrega* una vez el pedido esté confirmado y la +> expedición generada. +> 2. Podremos generar una nueva expedición una vez cancelado si fuese +> necesario. + +## Obtener etiquetas + +> 1. Si por error hubiésemos eliminado el adjunto de las etiquetas que +> obtuvimos en la grabación del servicio, podemos obtenerlas de +> nuevo pulsando en el botón "Etiqueta GLS" que tenemos en la parte +> superior de la vista formulario del albarán. + +## Seguimiento de envíos + +> 1. El módulo está integrado con delivery_state para poder recabar la +> información de seguimiento de nuestros envíos directamente desde +> la API de GLS-ASM. +> 2. Para ello, vaya al albarán con un envío GLS ya grabado y en la +> pestaña de *Información adicional* verá el botón *Actualizar +> seguimiento* para pedir a la API de GLS que actualice el estado de +> este envío en Odoo. + +## Manifiesto de envíos + +> 1. Para obtener el manifiesto de expediciones que firmaría el +> repartidor, puede ir al menú *Inventario \> Informes \> Manifiesto +> de Envíos GLS*. +> 2. También puede obtener el manifiesto desde un smart button en el +> formulario del transportista. +> 3. En el asistente, seleccione el servicio GLS del cual quiere sacar +> el manifiesto y la fecha desde la que desea listar los envíos. +> 4. Pulse en el botón "Manifiesto GLS" para obtener un listado en PDF +> de los envíos del servicio seleccionado. + +## Depuración de errores + +> 1. Es importante tener en cuenta que solo funcionará con códigos +> postales de España. +> 2. En cada servicio GLS-ASM dispone de una pestaña llamada "Técnico" +> en la que puede consultar la última petición y respuesta a la API +> de GLS-ASM. Esto le servirá como ayuda a la hora de depurar +> posibles errores de comunicación. +> 3. También puede activar Odoo con --log-level=debug para registrar +> las peticiones y las respuestas en el log. diff --git a/delivery_gls_asm/security/ir.model.access.csv b/delivery_gls_asm/security/ir.model.access.csv new file mode 100644 index 00000000000..d4dac9564d7 --- /dev/null +++ b/delivery_gls_asm/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_gls_asm_manifest_wizard_user,gls.asm.manifest.wizard.user,model_gls_asm_minifest_wizard,base.group_user,1,1,1,1 diff --git a/delivery_gls_asm/static/description/icon.png b/delivery_gls_asm/static/description/icon.png new file mode 100644 index 00000000000..84c81ec4242 Binary files /dev/null and b/delivery_gls_asm/static/description/icon.png differ diff --git a/delivery_gls_asm/static/description/icon.svg b/delivery_gls_asm/static/description/icon.svg new file mode 100644 index 00000000000..bca2a61d9dd --- /dev/null +++ b/delivery_gls_asm/static/description/icon.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + diff --git a/delivery_gls_asm/static/description/index.html b/delivery_gls_asm/static/description/index.html new file mode 100644 index 00000000000..0add8a38078 --- /dev/null +++ b/delivery_gls_asm/static/description/index.html @@ -0,0 +1,591 @@ + + + + + +Delivery GLS-ASM + + + +
+

Delivery GLS-ASM

+ + +

Beta License: AGPL-3 OCA/l10n-spain Translate me on Weblate Try me on Runboat

+

Este módulo integra la API de GLS España (antigua API de ASM) con Odoo. +No es válido para integraciones de GLS en otros países, que podrían usar +otras APIs.

+

Table of contents

+ +
+

Installation

+

Este módulo necesita la librería python suds-py3 y depende igualmente de +los módulos de OCA/delivery-carrier delivery_package_number y +delivery_state.

+

La API de GLS/ASM no provee métodos de cálculo de precio, de modo que +para poder calcular los costes de envío sería recomendable instalar el +módulo delivery_price_method.

+
+
+

Configuration

+

Para configurar el transportista:

+
    +
  1. Vaya a Inventario > Configuración > Entrega > Método de envío y +cree uno nuevo.
  2. +
  3. Escoja GLS ASM Como proveedor.
  4. +
  5. Configure los datos de servicio que tiene contratados y el producto +de envío que desea utilizar.
  6. +
+

Si no tiene credenciales todavía, puede poner datos inventados y dejar +el método de envío en “Entorno de prueba”. Se utilizará el usuario de +pruebas de la API GLS ASM.

+

Si GLS cambiase en un futuro el usuario de prueba, puede cambiarlo en +los Parámetros del sistema en la clave delivery_gls_asm.api_user_demo.

+
+
+

Usage

+

Estas son las distintas operaciones posibles con este módulo:

+
+

Grabar servicios

+
+
    +
  1. Al confirmar el albarán, el servicio se grabará en GLS.
  2. +
  3. Con la respuesta, se registrará en el chatter la referencia de +envío y las etiquetas correspondientes.
  4. +
  5. Para gestionar los bultos del envío, se puede utilizar el campo de +número de bultos que añade delivery_package_number (ver el README +para mayor información) o bien el flujo nativo de Odoo con +paquetes de envío. El módulo mandará a la API de GLS/ASM el número +correspondiente y podremos descargar las etiquetas en PDF con su +correspondiente numeración.
  6. +
+
+
+
+

Pedir recogidas

+
+
    +
  1. Al confirmar el albarán con un servicio de recogida, el envío NO +se grabará en GLS.
  2. +
  3. Aparecerá un botón de “Enviar recogida” en la parte superior para +solicitarlo
  4. +
  5. Con la respuesta, se registrará en el chatter la referencia de +envío
  6. +
  7. Para gestionar los bultos del envío, se puede utilizar el campo de +número de bultos que añade delivery_package_number (ver el README +para mayor información) o bien el flujo nativo de Odoo con +paquetes de envío.
  8. +
+
+
+
+

Cancelar servicios

+
+
    +
  1. Al igual que en otros métodos de envío, en los albaranes de salida +podemos cancelar un servicio determinado mediante la acción +correspondiente en la pestaña de Información Adicional, sección +Información de entrega una vez el pedido esté confirmado y la +expedición generada.
  2. +
  3. Podremos generar una nueva expedición una vez cancelado si fuese +necesario.
  4. +
+
+
+
+

Obtener etiquetas

+
+
    +
  1. Si por error hubiésemos eliminado el adjunto de las etiquetas que +obtuvimos en la grabación del servicio, podemos obtenerlas de +nuevo pulsando en el botón “Etiqueta GLS” que tenemos en la parte +superior de la vista formulario del albarán.
  2. +
+
+
+
+

Seguimiento de envíos

+
+
    +
  1. El módulo está integrado con delivery_state para poder recabar la +información de seguimiento de nuestros envíos directamente desde +la API de GLS-ASM.
  2. +
  3. Para ello, vaya al albarán con un envío GLS ya grabado y en la +pestaña de Información adicional verá el botón Actualizar +seguimiento para pedir a la API de GLS que actualice el estado de +este envío en Odoo.
  4. +
+
+
+
+

Manifiesto de envíos

+
+
    +
  1. Para obtener el manifiesto de expediciones que firmaría el +repartidor, puede ir al menú Inventario > Informes > Manifiesto +de Envíos GLS.
  2. +
  3. También puede obtener el manifiesto desde un smart button en el +formulario del transportista.
  4. +
  5. En el asistente, seleccione el servicio GLS del cual quiere sacar +el manifiesto y la fecha desde la que desea listar los envíos.
  6. +
  7. Pulse en el botón “Manifiesto GLS” para obtener un listado en PDF +de los envíos del servicio seleccionado.
  8. +
+
+
+
+

Depuración de errores

+
+
    +
  1. Es importante tener en cuenta que solo funcionará con códigos +postales de España.
  2. +
  3. En cada servicio GLS-ASM dispone de una pestaña llamada “Técnico” +en la que puede consultar la última petición y respuesta a la API +de GLS-ASM. Esto le servirá como ayuda a la hora de depurar +posibles errores de comunicación.
  4. +
  5. También puede activar Odoo con –log-level=debug para registrar +las peticiones y las respuestas en el log.
  6. +
+
+
+
+
+

Known issues / Roadmap

+
    +
  • La API no facilita métodos para cotizar el coste real de los envíos, +por lo que siempre se cotizan a 0. Si la cotización de envíos es +necesaria, puede instalarse el módulo OCA delivery_price_method o +bien personalizar el método de cotización para este tipo de +transportista.
  • +
+
+
+

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

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • David Vidal
    • +
    • Víctor Martínez
    • +
    +
  • +
  • Studio73:
      +
    • Ethan Hildick
    • +
    • David López
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainers:

+

chienandalu hildickethan-S73

+

This module is part of the OCA/l10n-spain project on GitHub.

+

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

+
+
+
+ + diff --git a/delivery_gls_asm/tests/__init__.py b/delivery_gls_asm/tests/__init__.py new file mode 100644 index 00000000000..8baccbee7ea --- /dev/null +++ b/delivery_gls_asm/tests/__init__.py @@ -0,0 +1 @@ +# from . import test_delivery_gls_asm diff --git a/delivery_gls_asm/tests/test_delivery_gls_asm.py b/delivery_gls_asm/tests/test_delivery_gls_asm.py new file mode 100644 index 00000000000..30000453fa5 --- /dev/null +++ b/delivery_gls_asm/tests/test_delivery_gls_asm.py @@ -0,0 +1,78 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +# Copyright 2020 Tecnativa - David Vidal +# Copyright 2021 Tecnativa - Víctor Martínez +import time + +from odoo.exceptions import UserError +from odoo.tests import Form + +from odoo.addons.base.tests.common import BaseCommon + + +class TestDeliveryGlsAsm(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.shipping_product = cls.env["product.product"].create( + {"type": "service", "name": "Test Shipping costs", "list_price": 10.0} + ) + cls.carrier_gls_asm = cls.env["delivery.carrier"].create( + { + "name": "GLS ASM", + "delivery_type": "gls_asm", + "product_id": cls.shipping_product.id, + "prod_environment": False, + } + ) + cls.product = cls.env["product.product"].create( + {"is_storable": True, "name": "Test product"} + ) + cls.partner = cls.env["res.partner"].create( + { + "name": "Mr. Odoo & Co.", + "city": "Odoo Ville", + "zip": "28001", + "street": "Calle de La Rua, 3", + } + ) + order_form = Form(cls.env["sale.order"].with_context(tracking_disable=True)) + order_form.partner_id = cls.partner + with order_form.order_line.new() as line: + line.product_id = cls.product + line.product_uom_qty = 20.0 + cls.sale_order = order_form.save() + cls.sale_order.carrier_id = cls.carrier_gls_asm.id + cls.sale_order.action_confirm() + cls.picking = cls.sale_order.picking_ids + cls.picking.move_ids.quantity = 20 + cls.picking.number_of_packages = 1 + + def test_01_gls_picking_confirm_simple(self): + """The picking is confirm and the shipping is recorded to GLS""" + # GLS API prevents duplicated references so in order to test we need a + # unique key that doesn't collide with any CI around, as every test really + # records an expedition + self.picking.name = f"ODOO-TEST-{time.time()}" + with self.assertRaises(UserError): + self.picking.button_validate() + self.picking.name = f"ODOO-{int(time.time())}" + self.picking.button_validate() + self.assertTrue(self.picking.carrier_tracking_ref) + self.assertTrue(self.picking.gls_asm_public_tracking_ref) + self.picking.cancel_shipment() + self.assertFalse(self.picking.carrier_tracking_ref) + self.assertFalse(self.picking.gls_asm_public_tracking_ref) + + def test_02_gls_manifest(self): + """API work although without data""" + wizard = self.env["gls.asm.minifest.wizard"].create( + {"carrier_id": self.carrier_gls_asm.id, "date_from": "2050-05-31"} + ) + with self.assertRaises(UserError): + wizard.get_manifest() + + def test_03_gls_escaping(self): + """We must ensure that the values we'll be putting into the XML are + properly escaped""" + vals = self.carrier_gls_asm._prepare_gls_asm_shipping(self.picking) + self.assertEqual(vals.get("destinatario_nombre"), "Mr. Odoo & Co.") diff --git a/delivery_gls_asm/views/delivery_asm_view.xml b/delivery_gls_asm/views/delivery_asm_view.xml new file mode 100644 index 00000000000..c18e0d3ec3b --- /dev/null +++ b/delivery_gls_asm/views/delivery_asm_view.xml @@ -0,0 +1,47 @@ + + + + + delivery.carrier + + + + + + + + + + + + + + + + + +