diff --git a/delivery_carrier_label_batch/README.rst b/delivery_carrier_label_batch/README.rst new file mode 100644 index 0000000000..90f9d14bd2 --- /dev/null +++ b/delivery_carrier_label_batch/README.rst @@ -0,0 +1,108 @@ +=========================================== +Carrier labels - Stock Batch Picking (link) +=========================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:432ee88bf9f8309825d23c180f9076b7333338285c168442b978018d466fde9e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fdelivery--carrier-lightgray.png?logo=github + :target: https://github.com/OCA/delivery-carrier/tree/18.0/delivery_carrier_label_batch + :alt: OCA/delivery-carrier +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/delivery-carrier-18-0/delivery-carrier-18-0-delivery_carrier_label_batch + :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/delivery-carrier&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds a wizard on picking batch to generate the labels of the +packs. The labels are merged in one PDF file. + +If you want multiple labels for one picking, all the moves should have +been put in a pack before the labels can be printed. + +If you don't define your pack it will be considered a picking is a +single pack. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +If using ZPL2 file format, multiple \*.zpl can be merged either "as is" +or with "single image definition" to spare file size. Single image +definition can be used by defining ir.config_parameter with name +zpl2.assembler.single.images to True. + +Usage +===== + +To use this module, you need to: + + 1. Go to... + +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 +------- + +* Camptocamp + +Contributors +------------ + +- Yannick Vaucher + +- `Trobz `__: + + - Khoi Vo + +Other credits +------------- + +The migration of this module from 12.0 to 14.0 was financially supported +by Camptocamp + +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. + +This module is part of the `OCA/delivery-carrier `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/delivery_carrier_label_batch/__init__.py b/delivery_carrier_label_batch/__init__.py new file mode 100644 index 0000000000..9b4296142f --- /dev/null +++ b/delivery_carrier_label_batch/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard diff --git a/delivery_carrier_label_batch/__manifest__.py b/delivery_carrier_label_batch/__manifest__.py new file mode 100644 index 0000000000..877f22d559 --- /dev/null +++ b/delivery_carrier_label_batch/__manifest__.py @@ -0,0 +1,37 @@ +# Copyright 2013-2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +{ + "name": "Carrier labels - Stock Batch Picking (link)", + "version": "18.0.1.0.0", + "author": "Camptocamp,Odoo Community Association (OCA)", + "maintainer": "Camptocamp", + "category": "Carrier", + "complexity": "normal", + "depends": [ + # OCA/delivery-carrier + "delivery_carrier_option", + "delivery_carrier_shipping_label", + "delivery_postlogistics", + # OCA/stock-logistics-workflow + "stock_picking_batch_extended", + ], + "website": "https://github.com/OCA/delivery-carrier", + "data": [ + # Security + "security/ir.model.access.csv", + # Data + "data/ir.config_parameter.xml", + # Views + "views/stock_batch_picking.xml", + # Wizard + "wizard/generate_labels_view.xml", + "wizard/apply_carrier_view.xml", + ], + "installable": True, + "auto_install": True, + "license": "AGPL-3", + "application": False, + "external_dependencies": { + "python": ["PyPDF2"], + }, +} diff --git a/delivery_carrier_label_batch/data/ir.config_parameter.xml b/delivery_carrier_label_batch/data/ir.config_parameter.xml new file mode 100644 index 0000000000..c00b6233f6 --- /dev/null +++ b/delivery_carrier_label_batch/data/ir.config_parameter.xml @@ -0,0 +1,15 @@ + + + + zpl2.assembler.single.images + False + + + zpl2.batch.merge + False + + diff --git a/delivery_carrier_label_batch/i18n/de.po b/delivery_carrier_label_batch/i18n/de.po new file mode 100644 index 0000000000..7b246d669f --- /dev/null +++ b/delivery_carrier_label_batch/i18n/de.po @@ -0,0 +1,273 @@ +# German translation for carriers-deliveries +# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 +# This file is distributed under the same license as the carriers-deliveries package. +# FIRST AUTHOR , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: carriers-deliveries\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-22 11:03+0200\n" +"PO-Revision-Date: 2016-07-22 11:03+0200\n" +"Last-Translator: Rudolf Schnapka \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-06-27 07:09+0000\n" +"X-Generator: Poedit 1.8.4\n" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_picking_batch_apply_carrier +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply a carrier and its options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_stock_picking_batch +msgid "Batch Transfer" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Cancel" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__carrier_id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__carrier_id +msgid "Carrier" +msgstr "Spediteur" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Carrier Info" +msgstr "Information zum Spediteur" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Close" +msgstr "Schließen" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_uid +msgid "Created by" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_date +msgid "Created on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Delivery" +msgstr "Lieferung" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__display_name +msgid "Display Name" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_delivery_carrier_label_generate +msgid "Generate Carrier Labels" +msgstr "Paketaufkleber erzeugen" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Carriers Labels" +msgstr "Etiketten des Spediteurs erzeugen" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Labels" +msgstr "Etiketten erzeugen" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_delivery_carrier_label_generate +msgid "Generate labels from batch pickings" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "Generate new labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__id +msgid "ID" +msgstr "ID" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,help:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "" +"If this option is used, new labels will be generated for the packs even if " +"they already have one.\n" +"The default is to use the existing label." +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Impossible to generate the labels. Those pickings don't have packages:\n" +"{}" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch____last_update +msgid "Last Modified on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_date +msgid "Last Updated on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "No picking batch selected" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/apply_carrier.py:0 +#, python-format +msgid "No selected picking batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__option_ids +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Options" +msgstr "Einstellungen" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Pack: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__batch_ids +msgid "Picking Batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_picking_batch_apply_carrier +msgid "Picking Batch Apply Carrier" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Picking: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Set Options" +msgstr "Optionen setzen" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Some labels couldn't be generated. Please correct following errors and " +"generate labels again to create the ones which failed.\n" +"\n" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "" +"This wizard creates an attachement on each selected batch containing picking " +"labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "User Error !" +msgstr "Anwenderfehler!" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "" +"Warning, setting options will erase the existing ones in delivery orders" +msgstr "" +"Warnung: Diese Einstellungen zur Kommissionierung überschreiben vorherige" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "" +"You can not remove a mandatory option.\n" +"Please reset options to default." +msgstr "" + +#~ msgid "%s %s - %s" +#~ msgstr "%s %s - %s" + +#~ msgid "" +#~ "You can not remove a mandatory option.\n" +#~ "Options are reset to default." +#~ msgstr "" +#~ "Sie können eine Pflichtoption nicht entfernen.\n" +#~ "Auswahl wird auf Vorgaben zurückgesetzt." + +#~ msgid "delivery.carrier.label.generate" +#~ msgstr "delivery.carrier.label.generate" + +#~ msgid "stock.batch.picking" +#~ msgstr "stock.batch.picking" + +#~ msgid "Picking List" +#~ msgstr "Kommissionierschein" + +#~ msgid "Dispatch Picking Order" +#~ msgstr "Kommissionierung auslösen" + +#~ msgid "No picking dispatch selected" +#~ msgstr "Keine Kommissionierung ausgewählt" + +#~ msgid "Labels file" +#~ msgstr "Etikettdatei" + +#~ msgid "Picking Dispatch" +#~ msgstr "Kommissionierauftrag" + +#~ msgid "Error" +#~ msgstr "Fehler" + +#~ msgid "Labels" +#~ msgstr "Etiketten" + +#~ msgid "Delivery Orders" +#~ msgstr "Lieferaufträge" + +#~ msgid "or" +#~ msgstr "oder" diff --git a/delivery_carrier_label_batch/i18n/delivery_carrier_label_batch.pot b/delivery_carrier_label_batch/i18n/delivery_carrier_label_batch.pot new file mode 100644 index 0000000000..d71077f0f8 --- /dev/null +++ b/delivery_carrier_label_batch/i18n/delivery_carrier_label_batch.pot @@ -0,0 +1,222 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_carrier_label_batch +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.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_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_picking_batch_apply_carrier +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply a carrier and its options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_stock_picking_batch +msgid "Batch Transfer" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Cancel" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__carrier_id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__carrier_id +msgid "Carrier" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Carrier Info" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Close" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_uid +msgid "Created by" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_date +msgid "Created on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Delivery" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__display_name +msgid "Display Name" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_delivery_carrier_label_generate +msgid "Generate Carrier Labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Carriers Labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_delivery_carrier_label_generate +msgid "Generate labels from batch pickings" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "Generate new labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__id +msgid "ID" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,help:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "" +"If this option is used, new labels will be generated for the packs even if they already have one.\n" +"The default is to use the existing label." +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Impossible to generate the labels. Those pickings don't have packages:\n" +"{}" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch____last_update +msgid "Last Modified on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_date +msgid "Last Updated on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "No picking batch selected" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/apply_carrier.py:0 +#, python-format +msgid "No selected picking batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__option_ids +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Pack: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__batch_ids +msgid "Picking Batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_picking_batch_apply_carrier +msgid "Picking Batch Apply Carrier" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Picking: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Set Options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Some labels couldn't be generated. Please correct following errors and generate labels again to create the ones which failed.\n" +"\n" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "" +"This wizard creates an attachement on each selected batch containing picking" +" labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "User Error !" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "" +"Warning, setting options will erase the existing ones in delivery orders" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "" +"You can not remove a mandatory option.\n" +"Please reset options to default." +msgstr "" diff --git a/delivery_carrier_label_batch/i18n/es.po b/delivery_carrier_label_batch/i18n/es.po new file mode 100644 index 0000000000..f640e9dd6e --- /dev/null +++ b/delivery_carrier_label_batch/i18n/es.po @@ -0,0 +1,239 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_carrier_label_batch +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-20 22:33+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\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.17\n" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply" +msgstr "Aplicar" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_picking_batch_apply_carrier +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply a carrier and its options" +msgstr "Aplicar un transportista y sus opciones" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_stock_picking_batch +msgid "Batch Transfer" +msgstr "Transferencia por Lotes" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Cancel" +msgstr "Cancelar" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__carrier_id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__carrier_id +msgid "Carrier" +msgstr "Transportista" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Carrier Info" +msgstr "Info de Transportista" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Close" +msgstr "Cerrado" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Delivery" +msgstr "Entrega" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_delivery_carrier_label_generate +msgid "Generate Carrier Labels" +msgstr "Generar Etiquetas de Transportista" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Carriers Labels" +msgstr "Generar Etiquetas de Transportistas" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Labels" +msgstr "Generar Etiquetas" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_delivery_carrier_label_generate +msgid "Generate labels from batch pickings" +msgstr "Genere etiquetas a partir de selecciones por lotes" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "Generate new labels" +msgstr "Generar nuevas etiquetas" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__id +msgid "ID" +msgstr "ID" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,help:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "" +"If this option is used, new labels will be generated for the packs even if they already have one.\n" +"The default is to use the existing label." +msgstr "" +"Si se utiliza esta opción, se generarán nuevas etiquetas para los paquetes " +"aunque ya tengan una.\n" +"Por defecto se utiliza la etiqueta existente." + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Impossible to generate the labels. Those pickings don't have packages:\n" +"{}" +msgstr "" +"Imposible generar las etiquetas. Esas selecciones no tienen paquetes:\n" +"{}" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "No picking batch selected" +msgstr "No se ha seleccionado ningún lote de recogida" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/apply_carrier.py:0 +#, python-format +msgid "No selected picking batch" +msgstr "Ningún lote de recolección seleccionado" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__option_ids +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Options" +msgstr "Opciones" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Pack: %s" +msgstr "Paquete: %s" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__batch_ids +msgid "Picking Batch" +msgstr "Lote de Recolección" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_picking_batch_apply_carrier +msgid "Picking Batch Apply Carrier" +msgstr "Recogida por Lotes Aplicar Transportista" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Picking: %s" +msgstr "Selección: %s" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Set Options" +msgstr "Configurar Opciones" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Some labels couldn't be generated. Please correct following errors and generate labels again to create the ones which failed.\n" +"\n" +msgstr "" +"No se han podido generar algunas etiquetas. Por favor, corrija los " +"siguientes errores y genere etiquetas de nuevo para crear las que fallaron.\n" +"\n" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "" +"This wizard creates an attachement on each selected batch containing picking" +" labels" +msgstr "" +"Este asistente crea un archivo adjunto en cada lote seleccionado que " +"contiene etiquetas de selección" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "User Error !" +msgstr "¡Error de Usuario!" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "" +"Warning, setting options will erase the existing ones in delivery orders" +msgstr "" +"Atención, la configuración de las opciones borrará las existentes en las " +"órdenes de entrega" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "" +"You can not remove a mandatory option.\n" +"Please reset options to default." +msgstr "" +"No puede eliminar una opción obligatoria.\n" +"Por favor, restablezca las opciones por defecto." diff --git a/delivery_carrier_label_batch/i18n/fr.po b/delivery_carrier_label_batch/i18n/fr.po new file mode 100644 index 0000000000..5e46e6999c --- /dev/null +++ b/delivery_carrier_label_batch/i18n/fr.po @@ -0,0 +1,259 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * delivery_carrier_label_dispatch +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-22 10:44+0200\n" +"PO-Revision-Date: 2016-07-22 11:03+0200\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 1.8.4\n" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply" +msgstr "Appliquer" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_picking_batch_apply_carrier +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply a carrier and its options" +msgstr "Appliquer un transporteur et ses options" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_stock_picking_batch +msgid "Batch Transfer" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Cancel" +msgstr "Annuler" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__carrier_id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__carrier_id +msgid "Carrier" +msgstr "Transporteur" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Carrier Info" +msgstr "Info transporteur" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Close" +msgstr "Fermer" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Delivery" +msgstr "Livraison" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_delivery_carrier_label_generate +msgid "Generate Carrier Labels" +msgstr "Générer les étiquette d’expédition" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Carriers Labels" +msgstr "Générer les étiquettes d'expédition" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Labels" +msgstr "Générer les étiquettes" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_delivery_carrier_label_generate +msgid "Generate labels from batch pickings" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "Generate new labels" +msgstr "Générer de nouvelles étiquettes" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__id +msgid "ID" +msgstr "ID" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,help:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "" +"If this option is used, new labels will be generated for the packs even if " +"they already have one.\n" +"The default is to use the existing label." +msgstr "" +"Si cette option est utilisée, des nouvelles étiquettes seront générée pour " +"les colis même s'il y a déjà des étiquettes liées au colis.\n" +"Par défaut l'étiquette déjà existante sera utilisée." + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Impossible to generate the labels. Those pickings don't have packages:\n" +"{}" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_uid +msgid "Last Updated by" +msgstr "Mise à jour par" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_date +msgid "Last Updated on" +msgstr "Mise à jour le" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "No picking batch selected" +msgstr "Pas de lot de préparation sélectionné." + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/apply_carrier.py:0 +#, python-format +msgid "No selected picking batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__option_ids +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Options" +msgstr "Options" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Pack: %s" +msgstr "Colis: %s" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__batch_ids +msgid "Picking Batch" +msgstr "Lot de préparation" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_picking_batch_apply_carrier +msgid "Picking Batch Apply Carrier" +msgstr "Applique un transporteur sur des lots de préparation" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Picking: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Set Options" +msgstr "Appliquer les options" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Some labels couldn't be generated. Please correct following errors and " +"generate labels again to create the ones which failed.\n" +"\n" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "" +"This wizard creates an attachement on each selected batch containing picking " +"labels" +msgstr "" +"Cet assistant crée un attachement pour chaque lot séléctionné contenant des " +"étiquettes" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "User Error !" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "" +"Warning, setting options will erase the existing ones in delivery orders" +msgstr "" +"Attention, définir les options supprimera les options existantes dans les " +"livraisons du bon de préparation" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "" +"You can not remove a mandatory option.\n" +"Please reset options to default." +msgstr "" + +#~ msgid "%s %s - %s" +#~ msgstr "%s %s - %s" + +#~ msgid "delivery.carrier.label.generate" +#~ msgstr "delivery.carrier.label.generate" + +#~ msgid "stock.batch.picking" +#~ msgstr "stock.batch.picking" + +#~ msgid "Dispatch Picking Order" +#~ msgstr "Bon de préparation" + +#~ msgid "Labels" +#~ msgstr "Etiquettes" + +#~ msgid "Labels file" +#~ msgstr "Fichier d'étiquettes" + +#~ msgid "Picking Dispatch" +#~ msgstr "Bon de préparation" + +#~ msgid "Picking List" +#~ msgstr "Bon de livraison" diff --git a/delivery_carrier_label_batch/i18n/it.po b/delivery_carrier_label_batch/i18n/it.po new file mode 100644 index 0000000000..b6b7b37a76 --- /dev/null +++ b/delivery_carrier_label_batch/i18n/it.po @@ -0,0 +1,223 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * delivery_carrier_label_batch +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\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" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_picking_batch_apply_carrier +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Apply a carrier and its options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_stock_picking_batch +msgid "Batch Transfer" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "Cancel" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__carrier_id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__carrier_id +msgid "Carrier" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Carrier Info" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Close" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_uid +msgid "Created by" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__create_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__create_date +msgid "Created on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Delivery" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__display_name +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__display_name +msgid "Display Name" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.actions.act_window,name:delivery_carrier_label_batch.action_delivery_carrier_label_generate +msgid "Generate Carrier Labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Carriers Labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "Generate Labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_delivery_carrier_label_generate +msgid "Generate labels from batch pickings" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "Generate new labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__id +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__id +msgid "ID" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,help:delivery_carrier_label_batch.field_delivery_carrier_label_generate__generate_new_labels +msgid "" +"If this option is used, new labels will be generated for the packs even if they already have one.\n" +"The default is to use the existing label." +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Impossible to generate the labels. Those pickings don't have packages:\n" +"{}" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier____last_update +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch____last_update +msgid "Last Modified on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_uid +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__write_date +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_picking_batch_apply_carrier__write_date +msgid "Last Updated on" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "No picking batch selected" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/apply_carrier.py:0 +#, python-format +msgid "No selected picking batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_stock_picking_batch__option_ids +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Pack: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model.fields,field_description:delivery_carrier_label_batch.field_delivery_carrier_label_generate__batch_ids +msgid "Picking Batch" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model:ir.model,name:delivery_carrier_label_batch.model_picking_batch_apply_carrier +msgid "Picking Batch Apply Carrier" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "Picking: %s" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +msgid "Set Options" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/wizard/generate_labels.py:0 +#, python-format +msgid "" +"Some labels couldn't be generated. Please correct following errors and generate labels again to create the ones which failed.\n" +"\n" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_delivery_carrier_label_generate +msgid "" +"This wizard creates an attachement on each selected batch containing picking" +" labels" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "User Error !" +msgstr "" + +#. module: delivery_carrier_label_batch +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.stock_batch_picking_form +#: model_terms:ir.ui.view,arch_db:delivery_carrier_label_batch.view_picking_batch_apply_carrier +msgid "" +"Warning, setting options will erase the existing ones in delivery orders" +msgstr "" + +#. module: delivery_carrier_label_batch +#: code:addons/delivery_carrier_label_batch/models/stock_batch_picking.py:0 +#, python-format +msgid "" +"You can not remove a mandatory option.\n" +"Please reset options to default." +msgstr "" diff --git a/delivery_carrier_label_batch/models/__init__.py b/delivery_carrier_label_batch/models/__init__.py new file mode 100644 index 0000000000..d477460d17 --- /dev/null +++ b/delivery_carrier_label_batch/models/__init__.py @@ -0,0 +1 @@ +from . import stock_batch_picking diff --git a/delivery_carrier_label_batch/models/stock_batch_picking.py b/delivery_carrier_label_batch/models/stock_batch_picking.py new file mode 100644 index 0000000000..24ec782490 --- /dev/null +++ b/delivery_carrier_label_batch/models/stock_batch_picking.py @@ -0,0 +1,129 @@ +# Copyright 2013-2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +from odoo import Command, api, fields, models +from odoo.exceptions import UserError + + +class StockBatchPicking(models.Model): + """Add carrier and carrier options on batch + + to be able to massively set those options on related picking. + + """ + + _inherit = "stock.picking.batch" + + carrier_id = fields.Many2one( + comodel_name="delivery.carrier", + ) + option_ids = fields.Many2many( + comodel_name="delivery.carrier.option", + ) + option_ids_domain = fields.Binary( + string="Options domain", + help="Dynamic domain used for the carrier options", + compute="_compute_option_ids_domain", + ) + + @api.depends("carrier_id") + def _compute_option_ids_domain(self): + for rec in self: + options_domain = None + if available_options := self.carrier_id.available_option_ids: + options_domain = [("id", "in", available_options.ids)] + rec.option_ids_domain = options_domain + + def action_set_options(self): + """Apply options to picking of the batch + + This will replace all carrier options in picking + + """ + for rec in self: + options_datas = { + "carrier_id": rec.carrier_id.id, + "option_ids": [Command.set(rec.option_ids.ids)], + } + rec.picking_ids.write(options_datas) + + def _get_options_to_add(self, carrier=None): + carrier = carrier or self.carrier_id + options = carrier.available_option_ids + return options.filtered(lambda rec: rec.mandatory or rec.by_default) + + @api.onchange("carrier_id") + def onchange_carrier_id(self): + """Inherit this method in your module""" + if not self.carrier_id: + return + default_options = self._get_options_to_add() + self.option_ids = [Command.set(default_options.ids)] + self.carrier_code = self.carrier_id.code + + @api.onchange("option_ids") + def onchange_option_ids(self): + if not self.carrier_id: + return + + for available_option in self.carrier_id.available_option_ids: + if available_option.mandatory and available_option not in self.option_ids: + # Optionally, reset the options to the default values. + self.option_ids = self._get_options_to_add() + raise UserError( + self.env._( + "You cannot remove a mandatory option. " + "\nPlease reset options to default." + ) + ) + + def _values_with_carrier_options(self, values): + values = values.copy() + carrier_id = values.get("carrier_id") + option_ids = values.get("option_ids") + if carrier_id and not option_ids: + carrier = self.env["delivery.carrier"].browse(carrier_id) + options = self._get_options_to_add(carrier) + if options: + values.update(option_ids=[Command.set(options.ids)]) + return values + + def write(self, values): + # - Set the default options when the delivery method is changed (So we + # are sure that the options are always in line with the current + # delivery method) + # - Purge all tracking references if a new carrier is applied + values = self._values_with_carrier_options(values) + result = super().write(values) + # If a carrier is removed, tracking references are kept until next + # carrier change + if values.get("carrier_id", False): + self.purge_tracking_references() + return result + + @api.model_create_multi + def create(self, vals_list): + """Set the default options when the delivery method is set on creation + + So we are sure that the options are always in line with the + current delivery method. + + """ + for values in vals_list: + self._values_with_carrier_options(values) + return super().create(vals_list) + + def purge_tracking_references(self): + """Purge tracking for each picking and destination package""" + for batch in self: + move_lines = batch.move_line_ids + packs = move_lines.result_package_id.filtered(lambda p: p.parcel_tracking) + if packs: + packs.write({"parcel_tracking": False}) + pickings = self.env["stock.picking"].search( + [ + ("move_line_ids", "in", move_lines.ids), + ("carrier_tracking_ref", "!=", False), + ] + ) + if pickings: + pickings.write({"carrier_tracking_ref": False}) diff --git a/delivery_carrier_label_batch/pdf_utils.py b/delivery_carrier_label_batch/pdf_utils.py new file mode 100644 index 0000000000..8fa4293778 --- /dev/null +++ b/delivery_carrier_label_batch/pdf_utils.py @@ -0,0 +1,39 @@ +# Copyright 2013-2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +import logging +from io import BytesIO + +_logger = logging.getLogger(__name__) + +try: + from PyPDF2 import PdfFileReader, PdfFileWriter +except ImportError: + _logger.debug('Cannot import "PyPDF2". Please make sure it is installed.') + + +def assemble_pdf(pdf_list): + """ + Assemble a list of pdf + """ + # Even though we are using PyPDF2 we can't use PdfFileMerger + # as this issue still exists in mostly used wkhtmltohpdf reports version + # http://code.google.com/p/wkhtmltopdf/issues/detail?id=635 + # merger = PdfFileMerger() + # merger.append(fileobj=StringIO(invoice_pdf)) + # merger.append(fileobj=StringIO(bvr_pdf)) + + # with tempfile.TemporaryFile() as merged_pdf: + # merger.write(merged_pdf) + # return merged_pdf.read(), 'pdf' + + output = PdfFileWriter() + for pdf in pdf_list: + if not pdf: + continue + reader = PdfFileReader(BytesIO(pdf)) + + for page in range(reader.getNumPages()): + output.addPage(reader.getPage(page)) + s = BytesIO() + output.write(s) + return s.getvalue() diff --git a/delivery_carrier_label_batch/pyproject.toml b/delivery_carrier_label_batch/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/delivery_carrier_label_batch/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/delivery_carrier_label_batch/readme/CONFIGURE.md b/delivery_carrier_label_batch/readme/CONFIGURE.md new file mode 100644 index 0000000000..359d38c178 --- /dev/null +++ b/delivery_carrier_label_batch/readme/CONFIGURE.md @@ -0,0 +1,4 @@ +If using ZPL2 file format, multiple \*.zpl can be merged either "as is" +or with "single image definition" to spare file size. Single image +definition can be used by defining ir.config_parameter with name +zpl2.assembler.single.images to True. diff --git a/delivery_carrier_label_batch/readme/CONTRIBUTORS.md b/delivery_carrier_label_batch/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..a89ff9082b --- /dev/null +++ b/delivery_carrier_label_batch/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- Yannick Vaucher \<\> + +- [Trobz](https://trobz.com): + - Khoi Vo \<\> diff --git a/delivery_carrier_label_batch/readme/CREDITS.md b/delivery_carrier_label_batch/readme/CREDITS.md new file mode 100644 index 0000000000..6184200e1b --- /dev/null +++ b/delivery_carrier_label_batch/readme/CREDITS.md @@ -0,0 +1,2 @@ +The migration of this module from 12.0 to 14.0 was financially supported +by Camptocamp diff --git a/delivery_carrier_label_batch/readme/DESCRIPTION.md b/delivery_carrier_label_batch/readme/DESCRIPTION.md new file mode 100644 index 0000000000..c86d17cd9d --- /dev/null +++ b/delivery_carrier_label_batch/readme/DESCRIPTION.md @@ -0,0 +1,8 @@ +This module adds a wizard on picking batch to generate the labels of the +packs. The labels are merged in one PDF file. + +If you want multiple labels for one picking, all the moves should have +been put in a pack before the labels can be printed. + +If you don't define your pack it will be considered a picking is a +single pack. diff --git a/delivery_carrier_label_batch/readme/USAGE.md b/delivery_carrier_label_batch/readme/USAGE.md new file mode 100644 index 0000000000..96229bf10a --- /dev/null +++ b/delivery_carrier_label_batch/readme/USAGE.md @@ -0,0 +1,3 @@ +To use this module, you need to: + +> 1. Go to... diff --git a/delivery_carrier_label_batch/security/ir.model.access.csv b/delivery_carrier_label_batch/security/ir.model.access.csv new file mode 100644 index 0000000000..ecc7cfddd3 --- /dev/null +++ b/delivery_carrier_label_batch/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_delivery_carrier_label_generate,access_delivery_carrier_label_generate,model_delivery_carrier_label_generate,stock.group_stock_user,1,1,1,0 +access_picking_batch_apply_carrier,access_picking_batch_apply_carrier,model_picking_batch_apply_carrier,stock.group_stock_user,1,1,1,0 diff --git a/delivery_carrier_label_batch/static/description/icon.png b/delivery_carrier_label_batch/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/delivery_carrier_label_batch/static/description/icon.png differ diff --git a/delivery_carrier_label_batch/static/description/index.html b/delivery_carrier_label_batch/static/description/index.html new file mode 100644 index 0000000000..9945daf428 --- /dev/null +++ b/delivery_carrier_label_batch/static/description/index.html @@ -0,0 +1,456 @@ + + + + + +Carrier labels - Stock Batch Picking (link) + + + + + + diff --git a/delivery_carrier_label_batch/tests/__init__.py b/delivery_carrier_label_batch/tests/__init__.py new file mode 100644 index 0000000000..debab96f90 --- /dev/null +++ b/delivery_carrier_label_batch/tests/__init__.py @@ -0,0 +1,20 @@ +############################################################################## +# +# Author: Yannick Vaucher +# Copyright 2013 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import test_generate_labels diff --git a/delivery_carrier_label_batch/tests/dummy.pdf b/delivery_carrier_label_batch/tests/dummy.pdf new file mode 100644 index 0000000000..2be598a24e Binary files /dev/null and b/delivery_carrier_label_batch/tests/dummy.pdf differ diff --git a/delivery_carrier_label_batch/tests/test_generate_labels.py b/delivery_carrier_label_batch/tests/test_generate_labels.py new file mode 100644 index 0000000000..7868aa896d --- /dev/null +++ b/delivery_carrier_label_batch/tests/test_generate_labels.py @@ -0,0 +1,248 @@ +# Copyright 2013-2019 Camptocamp SA +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) +import base64 +from unittest.mock import patch + +from odoo import Command, exceptions +from odoo.tools.misc import file_path + +from odoo.addons.base.tests.common import BaseCommon + + +class TestGenerateLabels(BaseCommon): + """Test the wizard for delivery carrier label generation""" + + @classmethod + def setUpClass(cls): + super().setUpClass() + + Move = cls.env["stock.move"] + Picking = cls.env["stock.picking"] + ShippingLabel = cls.env["shipping.label"] + BatchPicking = cls.env["stock.picking.batch"] + cls.DeliveryCarrierLabelGenerate = cls.env["delivery.carrier.label.generate"] + cls.PickingBatchApplyCarrier = cls.env["picking.batch.apply.carrier"] + cls.stock_location = cls.env.ref("stock.stock_location_stock") + cls.customer_location = cls.env.ref("stock.stock_location_customers") + + cls.productA = cls.env["product.product"].create( + {"name": "Product A", "is_storable": True} + ) + cls.productB = cls.env["product.product"].create( + {"name": "Product B", "is_storable": True} + ) + cls.env["stock.quant"]._update_available_quantity( + cls.productA, cls.stock_location, 20.0 + ) + cls.env["stock.quant"]._update_available_quantity( + cls.productB, cls.stock_location, 20.0 + ) + + cls.carrier_product = cls.env["product.product"].create( + { + "name": "Test carrier product", + "type": "service", + } + ) + cls.carrier = cls.env["delivery.carrier"].create( + { + "name": "Test carrier", + "delivery_type": "fixed", + "product_id": cls.carrier_product.id, + } + ) + cls.new_carrier_product = cls.env["product.product"].create( + { + "name": "Test NEW carrier product", + "type": "service", + } + ) + cls.new_carrier = cls.env["delivery.carrier"].create( + { + "name": "Test NEW carrier", + "delivery_type": "fixed", + "product_id": cls.new_carrier_product.id, + } + ) + cls.picking_out_1 = Picking.create( + { + "partner_id": cls.env.ref("base.res_partner_12").id, + "location_id": cls.stock_location.id, + "location_dest_id": cls.customer_location.id, + "picking_type_id": cls.env.ref("stock.picking_type_out").id, + "carrier_id": cls.carrier.id, + } + ) + + cls.picking_out_2 = Picking.create( + { + "partner_id": cls.env.ref("base.res_partner_12").id, + "location_id": cls.stock_location.id, + "location_dest_id": cls.customer_location.id, + "picking_type_id": cls.env.ref("stock.picking_type_out").id, + "carrier_id": cls.carrier.id, + } + ) + + move1 = Move.create( + { + "name": "/", + "picking_id": cls.picking_out_1.id, + "product_id": cls.productA.id, + "product_uom": cls.env.ref("uom.product_uom_unit").id, + "product_uom_qty": 2, + "location_id": cls.stock_location.id, + "location_dest_id": cls.customer_location.id, + } + ) + + move2 = Move.create( + { + "name": "/", + "picking_id": cls.picking_out_2.id, + "product_id": cls.productB.id, + "product_uom": cls.env.ref("uom.product_uom_unit").id, + "product_uom_qty": 1, + "location_id": cls.stock_location.id, + "location_dest_id": cls.customer_location.id, + } + ) + + cls.batch = BatchPicking.create( + { + "name": "demo_prep001", + "picking_ids": [ + Command.link(cls.picking_out_1.id), + Command.link(cls.picking_out_2.id), + ], + "use_oca_batch_validation": True, + } + ) + + cls.batch.action_confirm() + cls.batch.action_assign() + + move1.move_line_ids[0].write({"quantity": 2, "picked": True}) + move2.move_line_ids[0].write({"quantity": 2, "picked": True}) + + cls.picking_out_1._set_a_default_package() + cls.picking_out_2._set_a_default_package() + dummy_pdf_path = file_path("delivery_carrier_label_batch/tests/dummy.pdf") + with open(dummy_pdf_path, "rb") as dummy_pdf: + label = dummy_pdf.read() + cls.shipping_label_1 = ShippingLabel.create( + { + "name": "picking_out_1", + "res_id": cls.picking_out_1.id, + "package_id": move1.move_line_ids[0].result_package_id.id, + "res_model": "stock.picking", + "datas": base64.b64encode(label), + "file_type": "pdf", + } + ) + + cls.shipping_label_2 = ShippingLabel.create( + { + "name": "picking_out_2", + "res_id": cls.picking_out_2.id, + "package_id": move2.move_line_ids[0].result_package_id.id, + "res_model": "stock.picking", + "datas": base64.b64encode(label), + "file_type": "pdf", + } + ) + + def test_00_action_generate_labels(self): + """Check merging of pdf labels + + Test pdf generation without multiple threading + + """ + wizard = self.DeliveryCarrierLabelGenerate.with_context( + active_ids=self.batch.ids, active_model="stock.picking.batch" + ).create({"generate_new_labels": True}) + + wizard.action_generate_labels() + + attachment = self.env["ir.attachment"].search( + [("res_model", "=", "stock.picking.batch"), ("res_id", "=", self.batch.id)] + ) + + self.assertEqual(len(attachment), 1) + self.assertTrue(attachment.datas) + self.assertTrue(attachment.name, "demo_prep001.pdf") + self.assertTrue(attachment.mimetype, "application/pdf") + + def test_01_action_generate_labels_no_pack(self): + """Check merging of pdf labels + + It shouldn't be possible to print labels when packages are missing + """ + self.batch.picking_ids.move_line_ids.write( + {"result_package_id": False, "package_id": False} + ) + wizard = self.DeliveryCarrierLabelGenerate.with_context( + active_ids=self.batch.ids, active_model="stock.picking.batch" + ).create({}) + with self.assertRaises(exceptions.UserError): + wizard.action_generate_labels() + + def test_02_action_regenerate_labels(self): + """Check re-generating labels""" + wizard = self.DeliveryCarrierLabelGenerate.with_context( + active_ids=self.batch.ids, active_model="stock.picking.batch" + ).create({"generate_new_labels": True}) + with patch.object( + type(self.carrier), "fixed_send_shipping" + ) as fixed_send_shipping: + fixed_send_shipping.return_value = [ + { + "exact_price": 1.0, + "tracking_number": "TEST00001", + } + ] + with patch.object( + type(self.batch), "purge_tracking_references" + ) as purge_tracking_references: + wizard.action_generate_labels() + purge_tracking_references.assert_called() + + attachment = self.env["ir.attachment"].search( + [ + ("res_model", "=", "stock.picking.batch"), + ("res_id", "=", self.batch.id), + ] + ) + + self.assertEqual(len(attachment), 1) + self.assertTrue(attachment.datas) + self.assertEqual(attachment.name, "demo_prep001.pdf") + self.assertEqual(attachment.mimetype, "application/pdf") + self.assertEqual(self.picking_out_1.carrier_tracking_ref, "TEST00001") + self.assertEqual(self.picking_out_2.carrier_tracking_ref, "TEST00001") + + def test_03_batch_purge_tracking_reference(self): + """Unittest: check that tracking reference purge work as expected""" + self.batch.purge_tracking_references() + self.assertTrue( + all( + [ + not p.parcel_tracking + for p in self.batch.move_line_ids.result_package_id + ] + ) + ) + pickings = [self.picking_out_1, self.picking_out_2] + self.assertTrue(all([not p.carrier_tracking_ref for p in pickings])) + + def test_04_action_change_carrier_purge_tracking_reference(self): + """Functional: Check purge_tracking_reference is called as carrier is + changed from wizard""" + wizard = self.PickingBatchApplyCarrier.with_context( + active_ids=self.batch.ids + ).create({"carrier_id": self.new_carrier.id}) + with patch.object( + type(self.batch), "purge_tracking_references" + ) as purge_tracking_references: + wizard.apply() + purge_tracking_references.assert_called() diff --git a/delivery_carrier_label_batch/views/stock_batch_picking.xml b/delivery_carrier_label_batch/views/stock_batch_picking.xml new file mode 100644 index 0000000000..adfd0d9652 --- /dev/null +++ b/delivery_carrier_label_batch/views/stock_batch_picking.xml @@ -0,0 +1,33 @@ + + + + stock.picking.batch.form + stock.picking.batch + + + + + + + + + + +