diff --git a/sale_order_lot_selection/README.rst b/sale_order_lot_selection/README.rst new file mode 100644 index 00000000000..0a46d8f8feb --- /dev/null +++ b/sale_order_lot_selection/README.rst @@ -0,0 +1,115 @@ +======================== +Sale Order Lot Selection +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:cb69fa963bca91e66d50c98d87322af722603b8a08a0fa87d77c971423ce49cb + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fsale--workflow-lightgray.png?logo=github + :target: https://github.com/OCA/sale-workflow/tree/17.0/sale_order_lot_selection + :alt: OCA/sale-workflow +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/sale-workflow-17-0/sale-workflow-17-0-sale_order_lot_selection + :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/sale-workflow&target_branch=17.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to select a lot number on sale order line. This +selected lot number will be the one delivered to the Customer. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +- Create/edit a product and set traceability by 'By Lots' option. +- Create a new lot number and assign product. +- Update quantity for that product and assign lot number. +- Go to Sales > Orders > Quotations. +- Create a new quotation and add recently above configured product. +- Select lot number and confirm it. +- Delivery order will reserve the lot when available + +Known issues / Roadmap +====================== + +Block sale order validation on confirmation if the selected lot has been +removed of this module Indeed nobody seems to know what it had been +implemented on early versions and it is really blocking other generic +use case. One may want to validate a sale order restricting it to a lot +that will be produced for instance and does not exist yet. + +This feature may be easyly put it back, in a separated module, if a use +case requires it. The removal of this feature was made on this commit : +3234b2ccccf1dffafbe0a8fa8efaaea44f2e47ef. + +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 +------- + +* Agile Business Group + +Contributors +------------ + +- Nicola Malcontenti +- Lorenzo Battistini +- Serpent Consulting Services Pvt. Ltd. +- Bhavesh Odedra +- François Honoré +- Florian da Costa +- Sander Lienaerts + +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-bodedra| image:: https://github.com/bodedra.png?size=40px + :target: https://github.com/bodedra + :alt: bodedra + +Current `maintainer `__: + +|maintainer-bodedra| + +This module is part of the `OCA/sale-workflow `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/sale_order_lot_selection/__init__.py b/sale_order_lot_selection/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/sale_order_lot_selection/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/sale_order_lot_selection/__manifest__.py b/sale_order_lot_selection/__manifest__.py new file mode 100644 index 00000000000..10b0f7ee14c --- /dev/null +++ b/sale_order_lot_selection/__manifest__.py @@ -0,0 +1,13 @@ +{ + "name": "Sale Order Lot Selection", + "version": "17.0.1.0.0", + "category": "Sales Management", + "author": "Odoo Community Association (OCA), Agile Business Group", + "website": "https://github.com/OCA/sale-workflow", + "license": "AGPL-3", + "depends": ["sale_stock", "stock_restrict_lot"], + "data": ["views/sale_order_views.xml"], + "demo": ["demo/sale_demo.xml"], + "maintainers": ["bodedra"], + "installable": True, +} diff --git a/sale_order_lot_selection/demo/sale_demo.xml b/sale_order_lot_selection/demo/sale_demo.xml new file mode 100644 index 00000000000..40e5c4fa7c1 --- /dev/null +++ b/sale_order_lot_selection/demo/sale_demo.xml @@ -0,0 +1,28 @@ + + + + + + cbl mng + + + + + + + + + + + + 1 + + + + + + 1 + + + + diff --git a/sale_order_lot_selection/i18n/ca.po b/sale_order_lot_selection/i18n/ca.po new file mode 100644 index 00000000000..fb3286b38b2 --- /dev/null +++ b/sale_order_lot_selection/i18n/ca.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +# Carles Antoli , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-17 16:49+0000\n" +"PO-Revision-Date: 2021-01-20 12:44+0000\n" +"Last-Translator: Daniel Martinez Vila \n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lot" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línia de comanda de vendes" + +#, python-format +#~ msgid "Can't reserve products for lot %s" +#~ msgstr "No es poden reservar productes per al lot %s" + +#, python-format +#~ msgid "Can't retrieve lot on stock" +#~ msgstr "No es pot recuperar el lot en estoc" + +#~ msgid "Sales Order" +#~ msgstr "Comandes de Venda" + +#~ msgid "Stock Move" +#~ msgstr "Moure l'estoc" diff --git a/sale_order_lot_selection/i18n/de.po b/sale_order_lot_selection/i18n/de.po new file mode 100644 index 00000000000..da78d7d118b --- /dev/null +++ b/sale_order_lot_selection/i18n/de.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: sale-workflow (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 09:59+0000\n" +"PO-Revision-Date: 2021-07-09 15:48+0000\n" +"Last-Translator: Maria Sparenberg \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-sale-workflow-8-0/" +"language/de/)\n" +"Language: de\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Charge / Seriennummer" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Auftragsposition" + +#, python-format +#~ msgid "Can't reserve products for lot %s" +#~ msgstr "" +#~ "Es können keine Produkt mit der Charge / Seriennummer %s reserviert " +#~ "werden." + +#~ msgid "Sales Order" +#~ msgstr "Verkaufsauftrag" + +#~ msgid "Stock Move" +#~ msgstr "Lagerbuchung" + +#~ msgid "Procurement Group" +#~ msgstr "Beschaffungsgruppe" diff --git a/sale_order_lot_selection/i18n/el_GR.po b/sale_order_lot_selection/i18n/el_GR.po new file mode 100644 index 00000000000..7f7c2f41495 --- /dev/null +++ b/sale_order_lot_selection/i18n/el_GR.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Kostas Goutoudis , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: Kostas Goutoudis , 2016\n" +"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/" +"el_GR/)\n" +"Language: el_GR\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Εντολή Πώλησης" diff --git a/sale_order_lot_selection/i18n/es.po b/sale_order_lot_selection/i18n/es.po new file mode 100644 index 00000000000..eca7ba300e8 --- /dev/null +++ b/sale_order_lot_selection/i18n/es.po @@ -0,0 +1,47 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-23 01:51+0000\n" +"PO-Revision-Date: 2020-07-27 10:19+0000\n" +"Last-Translator: Daniel Martinez Vila \n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\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 3.10\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lote" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de venta" + +#, python-format +#~ msgid "Can't reserve products for lot %s" +#~ msgstr "No puede reservar productos para el lote %s" + +#, python-format +#~ msgid "Can't retrieve lot on stock" +#~ msgstr "No se puede obtener el lote en las existencias" + +#~ msgid "Sales Order" +#~ msgstr "Órdenes de venta" + +#~ msgid "Stock Move" +#~ msgstr "Movimiento de existencia" + +#~ msgid "Procurement Group" +#~ msgstr "Grupo de Abastecimiento" diff --git a/sale_order_lot_selection/i18n/es_ES.po b/sale_order_lot_selection/i18n/es_ES.po new file mode 100644 index 00000000000..ccd12d4bff2 --- /dev/null +++ b/sale_order_lot_selection/i18n/es_ES.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Javi Melendez , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: Javi Melendez , 2016\n" +"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/" +"es_ES/)\n" +"Language: es_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" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lote" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Pedido de venta" diff --git a/sale_order_lot_selection/i18n/es_MX.po b/sale_order_lot_selection/i18n/es_MX.po new file mode 100644 index 00000000000..35b46d360bb --- /dev/null +++ b/sale_order_lot_selection/i18n/es_MX.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Juan González , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-29 19:24+0000\n" +"PO-Revision-Date: 2016-11-29 19:24+0000\n" +"Last-Translator: Juan González , 2016\n" +"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/" +"es_MX/)\n" +"Language: es_MX\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#~ msgid "Stock Move" +#~ msgstr "Movimiento bursátil" diff --git a/sale_order_lot_selection/i18n/es_VE.po b/sale_order_lot_selection/i18n/es_VE.po new file mode 100644 index 00000000000..43e98f894ef --- /dev/null +++ b/sale_order_lot_selection/i18n/es_VE.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Spanish (Venezuela) (https://www.transifex.com/oca/" +"teams/23907/es_VE/)\n" +"Language: es_VE\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de venta" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Pedidos de venta" diff --git a/sale_order_lot_selection/i18n/fi.po b/sale_order_lot_selection/i18n/fi.po new file mode 100644 index 00000000000..2219eb25440 --- /dev/null +++ b/sale_order_lot_selection/i18n/fi.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-20 11:44+0000\n" +"PO-Revision-Date: 2016-12-20 11:44+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"Language: fi\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Erä" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Myyntitilaus" + +#~ msgid "Stock Move" +#~ msgstr "Varastosiirto" diff --git a/sale_order_lot_selection/i18n/fr.po b/sale_order_lot_selection/i18n/fr.po new file mode 100644 index 00000000000..f59b1414e6e --- /dev/null +++ b/sale_order_lot_selection/i18n/fr.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2017 +# guillaume bauer , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-23 01:51+0000\n" +"PO-Revision-Date: 2017-11-23 01:51+0000\n" +"Last-Translator: guillaume bauer , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" +"Language: fr\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lot" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Sales Order Line" + +#, python-format +#~ msgid "Can't reserve products for lot %s" +#~ msgstr "Impossible de réserver de produits pour le lot %s" + +#, python-format +#~ msgid "Can't retrieve lot on stock" +#~ msgstr "Impossible de récupérer le lot en stock" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Bon de commande" + +#~ msgid "Stock Move" +#~ msgstr "Mouvement de stock" diff --git a/sale_order_lot_selection/i18n/gl.po b/sale_order_lot_selection/i18n/gl.po new file mode 100644 index 00000000000..4b10c398a13 --- /dev/null +++ b/sale_order_lot_selection/i18n/gl.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# César Castro Cruz , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: César Castro Cruz , 2016\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"Language: gl\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lote" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#~ msgid "Stock Move" +#~ msgstr "Movemento de existencias" diff --git a/sale_order_lot_selection/i18n/hr.po b/sale_order_lot_selection/i18n/hr.po new file mode 100644 index 00000000000..959fe1666bc --- /dev/null +++ b/sale_order_lot_selection/i18n/hr.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2017 +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-23 01:51+0000\n" +"PO-Revision-Date: 2017-11-23 01:51+0000\n" +"Last-Translator: Bole , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lot" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Stavka ponude" + +#, python-format +#~ msgid "Can't reserve products for lot %s" +#~ msgstr "Nije moguće rezervirati proizvode za lot %s" + +#, python-format +#~ msgid "Can't retrieve lot on stock" +#~ msgstr "Nije moguće dohvatiti lot na skladištu" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Prodajni nalog" + +#~ msgid "Stock Move" +#~ msgstr "Skladišni prenos" diff --git a/sale_order_lot_selection/i18n/hr_HR.po b/sale_order_lot_selection/i18n/hr_HR.po new file mode 100644 index 00000000000..578417d27b5 --- /dev/null +++ b/sale_order_lot_selection/i18n/hr_HR.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Bole , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: Bole , 2016\n" +"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/" +"hr_HR/)\n" +"Language: hr_HR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Prodjani nalog" diff --git a/sale_order_lot_selection/i18n/hu.po b/sale_order_lot_selection/i18n/hu.po new file mode 100644 index 00000000000..c2cbf9b92b5 --- /dev/null +++ b/sale_order_lot_selection/i18n/hu.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Hungarian (https://www.transifex.com/oca/teams/23907/hu/)\n" +"Language: hu\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Vevői megrendelés" diff --git a/sale_order_lot_selection/i18n/it.po b/sale_order_lot_selection/i18n/it.po new file mode 100644 index 00000000000..7efd7498537 --- /dev/null +++ b/sale_order_lot_selection/i18n/it.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: sale-workflow (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 09:59+0000\n" +"PO-Revision-Date: 2022-12-28 20:44+0000\n" +"Last-Translator: mymage \n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-sale-workflow-8-0/" +"language/it/)\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" +"X-Generator: Weblate 4.14.1\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lotto" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Riga ordine di vendita" + +#~ msgid "Sales Order" +#~ msgstr "Ordine di vendita" + +#~ msgid "Stock Move" +#~ msgstr "Movimenti magazzino" diff --git a/sale_order_lot_selection/i18n/nl.po b/sale_order_lot_selection/i18n/nl.po new file mode 100644 index 00000000000..0906359df66 --- /dev/null +++ b/sale_order_lot_selection/i18n/nl.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: sale-workflow (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-02-26 09:59+0000\n" +"PO-Revision-Date: 2016-02-26 10:01+0000\n" +"Last-Translator: <>\n" +"Language-Team: Dutch (http://www.transifex.com/oca/OCA-sale-workflow-8-0/" +"language/nl/)\n" +"Language: nl\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Verkooporder" diff --git a/sale_order_lot_selection/i18n/nl_NL.po b/sale_order_lot_selection/i18n/nl_NL.po new file mode 100644 index 00000000000..a0f0c01a3e1 --- /dev/null +++ b/sale_order_lot_selection/i18n/nl_NL.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-06 13:17+0000\n" +"PO-Revision-Date: 2017-06-06 13:17+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" +"teams/23907/nl_NL/)\n" +"Language: nl_NL\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Verkooporderregel" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Verkooporder" diff --git a/sale_order_lot_selection/i18n/pt.po b/sale_order_lot_selection/i18n/pt.po new file mode 100644 index 00000000000..58a58dff4d8 --- /dev/null +++ b/sale_order_lot_selection/i18n/pt.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Daniel Reis , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: Daniel Reis , 2016\n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n" +"Language: pt\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Ordem de Venda" + +#~ msgid "Stock Move" +#~ msgstr "Movimento Stock" diff --git a/sale_order_lot_selection/i18n/pt_BR.po b/sale_order_lot_selection/i18n/pt_BR.po new file mode 100644 index 00000000000..70d7cad5682 --- /dev/null +++ b/sale_order_lot_selection/i18n/pt_BR.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-11-23 01:51+0000\n" +"PO-Revision-Date: 2017-11-23 01:51+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" +"teams/23907/pt_BR/)\n" +"Language: pt_BR\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lote" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha Pedido de Venda" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Pedido de Venda" + +#~ msgid "Stock Move" +#~ msgstr "Movimentação de estoque" diff --git a/sale_order_lot_selection/i18n/pt_PT.po b/sale_order_lot_selection/i18n/pt_PT.po new file mode 100644 index 00000000000..7a8e778fc29 --- /dev/null +++ b/sale_order_lot_selection/i18n/pt_PT.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Pedro Castro Silva , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-07 06:07+0000\n" +"PO-Revision-Date: 2017-01-07 06:07+0000\n" +"Last-Translator: Pedro Castro Silva , 2017\n" +"Language-Team: Portuguese (Portugal) (https://www.transifex.com/oca/" +"teams/23907/pt_PT/)\n" +"Language: pt_PT\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" diff --git a/sale_order_lot_selection/i18n/ro.po b/sale_order_lot_selection/i18n/ro.po new file mode 100644 index 00000000000..98256a0d033 --- /dev/null +++ b/sale_order_lot_selection/i18n/ro.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Dorin Hongu , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: Dorin Hongu , 2016\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?" +"2:1));\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linie comandă vânzare" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Comandă vânzare" + +#~ msgid "Stock Move" +#~ msgstr "Mișcare stoc" diff --git a/sale_order_lot_selection/i18n/sale_order_lot_selection.pot b/sale_order_lot_selection/i18n/sale_order_lot_selection.pot new file mode 100644 index 00000000000..5f6a3fe33bf --- /dev/null +++ b/sale_order_lot_selection/i18n/sale_order_lot_selection.pot @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" diff --git a/sale_order_lot_selection/i18n/sk.po b/sale_order_lot_selection/i18n/sk.po new file mode 100644 index 00000000000..2a69dccb4e1 --- /dev/null +++ b/sale_order_lot_selection/i18n/sk.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-27 03:53+0000\n" +"PO-Revision-Date: 2018-01-27 03:53+0000\n" +"Last-Translator: OCA Transbot , 2018\n" +"Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Objednávka predaja" diff --git a/sale_order_lot_selection/i18n/sl.po b/sale_order_lot_selection/i18n/sl.po new file mode 100644 index 00000000000..53cf0bf8e76 --- /dev/null +++ b/sale_order_lot_selection/i18n/sl.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-04-25 02:44+0000\n" +"PO-Revision-Date: 2017-04-25 02:44+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" +"%100==4 ? 2 : 3);\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lot" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Postavka prodajnega naloga" + +#, python-format +#~ msgid "Can't reserve products for lot %s" +#~ msgstr "Ni mogoče rezervirati proizvodov za lot %s" + +#, python-format +#~ msgid "Can't retrieve lot on stock" +#~ msgstr "Lota ni mogoče pridobiti na zalogi" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Prodajni nalog" + +#~ msgid "Stock Move" +#~ msgstr "Premik zaloge" diff --git a/sale_order_lot_selection/i18n/tr.po b/sale_order_lot_selection/i18n/tr.po new file mode 100644 index 00000000000..dbf6b62cd6f --- /dev/null +++ b/sale_order_lot_selection/i18n/tr.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +# Ivan BARAYEV , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-01-07 06:07+0000\n" +"PO-Revision-Date: 2017-01-07 06:07+0000\n" +"Last-Translator: Ivan BARAYEV , 2017\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"Language: tr\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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Satış Siparişi Hattı" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Sipariş Emri" + +#~ msgid "Stock Move" +#~ msgstr "Stok Taşı" diff --git a/sale_order_lot_selection/i18n/tr_TR.po b/sale_order_lot_selection/i18n/tr_TR.po new file mode 100644 index 00000000000..1b8627edfea --- /dev/null +++ b/sale_order_lot_selection/i18n/tr_TR.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# Ozge Altinisik , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-31 07:50+0000\n" +"PO-Revision-Date: 2016-12-31 07:50+0000\n" +"Last-Translator: Ozge Altinisik , 2017\n" +"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/" +"tr_TR/)\n" +"Language: tr_TR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Sipariş emri satırı " + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Satış emri" + +#~ msgid "Stock Move" +#~ msgstr "Stok hareketi" diff --git a/sale_order_lot_selection/i18n/vi_VN.po b/sale_order_lot_selection/i18n/vi_VN.po new file mode 100644 index 00000000000..616e47502e7 --- /dev/null +++ b/sale_order_lot_selection/i18n/vi_VN.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-09-29 03:03+0000\n" +"PO-Revision-Date: 2016-09-29 03:03+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/" +"teams/23907/vi_VN/)\n" +"Language: vi_VN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "Lô" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "Đơn hàng Bán" + +#~ msgid "Stock Move" +#~ msgstr "Dịch chuyển kho" diff --git a/sale_order_lot_selection/i18n/zh_CN.po b/sale_order_lot_selection/i18n/zh_CN.po new file mode 100644 index 00000000000..83c5b1576ba --- /dev/null +++ b/sale_order_lot_selection/i18n/zh_CN.po @@ -0,0 +1,34 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +# Translators: +# OCA Transbot , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-20 11:44+0000\n" +"PO-Revision-Date: 2016-12-20 11:44+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/" +"zh_CN/)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__lot_id +msgid "Lot" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#, fuzzy +#~ msgid "Sales Order" +#~ msgstr "销售订单" diff --git a/sale_order_lot_selection/models/__init__.py b/sale_order_lot_selection/models/__init__.py new file mode 100644 index 00000000000..8eb9d1d4046 --- /dev/null +++ b/sale_order_lot_selection/models/__init__.py @@ -0,0 +1 @@ +from . import sale_order_line diff --git a/sale_order_lot_selection/models/sale_order_line.py b/sale_order_lot_selection/models/sale_order_line.py new file mode 100644 index 00000000000..3d13da86fcb --- /dev/null +++ b/sale_order_lot_selection/models/sale_order_line.py @@ -0,0 +1,26 @@ +from odoo import api, fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + lot_id = fields.Many2one( + "stock.lot", + "Lot", + copy=False, + compute="_compute_lot_id", + store=True, + readonly=False, + ) + + def _prepare_procurement_values(self, group_id=False): + vals = super()._prepare_procurement_values(group_id=group_id) + if self.lot_id: + vals["restrict_lot_id"] = self.lot_id.id + return vals + + @api.depends("product_id") + def _compute_lot_id(self): + for sol in self: + if sol.product_id != sol.lot_id.product_id: + sol.lot_id = False diff --git a/sale_order_lot_selection/pyproject.toml b/sale_order_lot_selection/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/sale_order_lot_selection/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/sale_order_lot_selection/readme/CONTRIBUTORS.md b/sale_order_lot_selection/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..ebb5541b3a9 --- /dev/null +++ b/sale_order_lot_selection/readme/CONTRIBUTORS.md @@ -0,0 +1,7 @@ +- Nicola Malcontenti \<\> +- Lorenzo Battistini \<\> +- Serpent Consulting Services Pvt. Ltd. \<\> +- Bhavesh Odedra \<\> +- François Honoré \<\> +- Florian da Costa \<\> +- Sander Lienaerts \<\> diff --git a/sale_order_lot_selection/readme/DESCRIPTION.md b/sale_order_lot_selection/readme/DESCRIPTION.md new file mode 100644 index 00000000000..a32f8c6d4e0 --- /dev/null +++ b/sale_order_lot_selection/readme/DESCRIPTION.md @@ -0,0 +1,2 @@ +This module allows you to select a lot number on sale order line. This +selected lot number will be the one delivered to the Customer. diff --git a/sale_order_lot_selection/readme/ROADMAP.md b/sale_order_lot_selection/readme/ROADMAP.md new file mode 100644 index 00000000000..23c63992976 --- /dev/null +++ b/sale_order_lot_selection/readme/ROADMAP.md @@ -0,0 +1,9 @@ +Block sale order validation on confirmation if the selected lot has been +removed of this module Indeed nobody seems to know what it had been +implemented on early versions and it is really blocking other generic +use case. One may want to validate a sale order restricting it to a lot +that will be produced for instance and does not exist yet. + +This feature may be easyly put it back, in a separated module, if a use +case requires it. The removal of this feature was made on this commit : +3234b2ccccf1dffafbe0a8fa8efaaea44f2e47ef. diff --git a/sale_order_lot_selection/readme/USAGE.md b/sale_order_lot_selection/readme/USAGE.md new file mode 100644 index 00000000000..28c45d1b305 --- /dev/null +++ b/sale_order_lot_selection/readme/USAGE.md @@ -0,0 +1,7 @@ +- Create/edit a product and set traceability by 'By Lots' option. +- Create a new lot number and assign product. +- Update quantity for that product and assign lot number. +- Go to Sales \> Orders \> Quotations. +- Create a new quotation and add recently above configured product. +- Select lot number and confirm it. +- Delivery order will reserve the lot when available diff --git a/sale_order_lot_selection/static/description/icon.png b/sale_order_lot_selection/static/description/icon.png new file mode 100644 index 00000000000..3a0328b516c Binary files /dev/null and b/sale_order_lot_selection/static/description/icon.png differ diff --git a/sale_order_lot_selection/static/description/index.html b/sale_order_lot_selection/static/description/index.html new file mode 100644 index 00000000000..12ca3080d44 --- /dev/null +++ b/sale_order_lot_selection/static/description/index.html @@ -0,0 +1,457 @@ + + + + + +Sale Order Lot Selection + + + +
+

Sale Order Lot Selection

+ + +

Beta License: AGPL-3 OCA/sale-workflow Translate me on Weblate Try me on Runboat

+

This module allows you to select a lot number on sale order line. This +selected lot number will be the one delivered to the Customer.

+

Table of contents

+ +
+

Usage

+
    +
  • Create/edit a product and set traceability by ‘By Lots’ option.
  • +
  • Create a new lot number and assign product.
  • +
  • Update quantity for that product and assign lot number.
  • +
  • Go to Sales > Orders > Quotations.
  • +
  • Create a new quotation and add recently above configured product.
  • +
  • Select lot number and confirm it.
  • +
  • Delivery order will reserve the lot when available
  • +
+
+
+

Known issues / Roadmap

+

Block sale order validation on confirmation if the selected lot has been +removed of this module Indeed nobody seems to know what it had been +implemented on early versions and it is really blocking other generic +use case. One may want to validate a sale order restricting it to a lot +that will be produced for instance and does not exist yet.

+

This feature may be easyly put it back, in a separated module, if a use +case requires it. The removal of this feature was made on this commit : +3234b2ccccf1dffafbe0a8fa8efaaea44f2e47ef.

+
+
+

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

+
    +
  • Agile Business Group
  • +
+
+
+

Contributors

+ +
+
+

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 maintainer:

+

bodedra

+

This module is part of the OCA/sale-workflow project on GitHub.

+

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

+
+
+
+ + diff --git a/sale_order_lot_selection/tests/__init__.py b/sale_order_lot_selection/tests/__init__.py new file mode 100644 index 00000000000..d802aae8818 --- /dev/null +++ b/sale_order_lot_selection/tests/__init__.py @@ -0,0 +1,4 @@ +# © 2015 Agile Business Group +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_sale_order_lot_selection diff --git a/sale_order_lot_selection/tests/test_sale_order_lot_selection.py b/sale_order_lot_selection/tests/test_sale_order_lot_selection.py new file mode 100644 index 00000000000..805b464d259 --- /dev/null +++ b/sale_order_lot_selection/tests/test_sale_order_lot_selection.py @@ -0,0 +1,321 @@ +# © 2015 Agile Business Group +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import TransactionCase + + +class TestSaleOrderLotSelection(TransactionCase): + @classmethod + def setUpClass(cls): + """ + Set up a sale order a particular lot. + + I confirm it, transfer the delivery order and check lot on picking + + Set up a sale order with two lines with different products and lots. + + I confirm it, transfer the delivery order and check lots on picking + + """ + super().setUpClass() + cls.prd_cable = cls.env.ref("stock.product_cable_management_box") + cls.prd_cable.tracking = "lot" + cls.product_46 = cls.env.ref("product.product_product_13") + cls.product_12 = cls.env.ref("product.product_product_12") + cls.supplier_location = cls.env.ref("stock.stock_location_suppliers") + cls.customer_location = cls.env.ref("stock.stock_location_customers") + cls.stock_location = cls.env.ref("stock.stock_location_stock") + cls.product_model = cls.env["product.product"] + cls.lot_model = cls.env["stock.lot"] + cls.lot_cable = cls.env.ref("sale_order_lot_selection.lot_cable_demo") + cls.sale = cls.env.ref("sale_order_lot_selection.sale_order_demo") + + def _retrieve_stock_quantity(self, product, lot, location): + return product.with_context(lot_id=lot.id, location=location.id).qty_available + + def test_00_stock_available_wrong_lot(self): + # We should not be able to reserve if some stock is available but with another + # lot + self._update_stock_quantity(self.prd_cable, self.lot_cable, 1) + other_lot = self.env["stock.lot"].create( + { + "name": "test2", + "product_id": self.prd_cable.id, + "company_id": self.env.ref("base.main_company").id, + } + ) + self._update_stock_quantity(self.prd_cable, other_lot, 1) + self.sale.action_confirm() + self.sale.picking_ids.action_assign() + # one of 2 moves should be reserved + available_move = self.sale.picking_ids.move_ids.filtered( + lambda m: m.state == "assigned" + ) + unavailable_move = self.sale.picking_ids.move_ids.filtered( + lambda m: m.state == "confirmed" + ) + self.assertEqual(len(available_move), 1) + self.assertEqual(len(unavailable_move), 1) + + def _update_stock_quantity(self, product, lot, qty): + self.env["stock.quant"]._update_available_quantity( + product, self.stock_location, lot_id=lot, quantity=qty + ) + + def test_01_several_lines_with_same_lot(self): + """You may want split your order in several lines + even if lot/product are the same + use cases: price is different or any shipping information + """ + self._update_stock_quantity(self.prd_cable, self.lot_cable, 10) + self.sale.action_confirm() + + def test_02_sale_order_lot_selection(self): + # INIT stock of products to 0 + picking_out = self.env["stock.picking"].create( + { + "picking_type_id": self.env.ref("stock.picking_type_out").id, + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + } + ) + self.env["stock.move"].create( + { + "name": self.product_12.name, + "product_id": self.product_12.id, + "product_uom_qty": self.product_12.qty_available, + "product_uom": self.product_12.uom_id.id, + "picking_id": picking_out.id, + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + } + ) + self.env["stock.move"].create( + { + "name": self.product_46.name, + "product_id": self.product_46.id, + "product_uom_qty": self.product_46.qty_available, + "product_uom": self.product_46.uom_id.id, + "picking_id": picking_out.id, + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + } + ) + picking_out.action_confirm() + picking_out.action_assign() + picking_out._action_done() + + self.product_46.write({"tracking": "lot", "type": "product"}) + self.product_12.write({"tracking": "lot", "type": "product"}) + + # make products enter + picking_in = self.env["stock.picking"].create( + { + "partner_id": self.env.ref("base.res_partner_1").id, + "picking_type_id": self.env.ref("stock.picking_type_in").id, + "location_id": self.supplier_location.id, + "location_dest_id": self.stock_location.id, + } + ) + self.env["stock.move"].create( + { + "name": self.prd_cable.name, + "product_id": self.prd_cable.id, + "product_uom_qty": 1, + "product_uom": self.prd_cable.uom_id.id, + "picking_id": picking_in.id, + "location_id": self.supplier_location.id, + "location_dest_id": self.stock_location.id, + } + ) + self.env["stock.move"].create( + { + "name": self.product_12.name, + "product_id": self.product_12.id, + "product_uom_qty": 1, + "product_uom": self.product_12.uom_id.id, + "picking_id": picking_in.id, + "location_id": self.supplier_location.id, + "location_dest_id": self.stock_location.id, + } + ) + self.env["stock.move"].create( + { + "name": self.product_46.name, + "product_id": self.product_46.id, + "product_uom_qty": 2, + "product_uom": self.product_46.uom_id.id, + "picking_id": picking_in.id, + "location_id": self.supplier_location.id, + "location_dest_id": self.stock_location.id, + } + ) + for move in picking_in.move_ids: + self.assertEqual(move.state, "draft", "Wrong state of move line.") + picking_in.action_confirm() + for move in picking_in.move_ids: + self.assertEqual(move.state, "assigned", "Wrong state of move line.") + lot10 = False + lot11 = False + lot12 = False + for move in picking_in.move_ids_without_package: + if move.product_id == self.prd_cable: + lot10 = self.lot_model.create( + { + "name": "0000010", + "product_id": self.prd_cable.id, + "product_qty": move.product_qty, + "company_id": self.env.company.id, + } + ) + move.move_line_ids.write( + {"lot_id": lot10.id, "quantity": move.product_qty} + ) + if move.product_id == self.product_46: + lot11 = self.lot_model.create( + { + "name": "0000011", + "product_id": self.product_46.id, + "product_qty": move.product_qty, + "company_id": self.env.company.id, + } + ) + move.move_line_ids.write( + {"lot_id": lot11.id, "quantity": move.product_qty} + ) + if move.product_id == self.product_12: + lot12 = self.lot_model.create( + { + "name": "0000012", + "product_id": self.product_12.id, + "product_qty": move.product_qty, + "company_id": self.env.company.id, + } + ) + move.move_line_ids.write( + {"lot_id": lot12.id, "quantity": move.product_qty} + ) + picking_in.button_validate() + + # check quantities + lot10_qty_available = self._retrieve_stock_quantity( + self.prd_cable, lot10, self.stock_location + ) + self.assertEqual(lot10_qty_available, 1) + lot11_qty_available = self._retrieve_stock_quantity( + self.product_46, lot11, self.stock_location + ) + self.assertEqual(lot11_qty_available, 2) + lot12_qty_available = self._retrieve_stock_quantity( + self.product_12, lot12, self.stock_location + ) + self.assertEqual(lot12_qty_available, 1) + + # create order + self.order1 = self.env["sale.order"].create( + {"partner_id": self.env.ref("base.res_partner_1").id} + ) + self.sol1 = self.env["sale.order.line"].create( + { + "name": "sol1", + "order_id": self.order1.id, + "lot_id": lot10.id, + "product_id": self.prd_cable.id, + "product_uom_qty": 1, + } + ) + self.order2 = self.env["sale.order"].create( + {"partner_id": self.env.ref("base.res_partner_1").id} + ) + self.sol2a = self.env["sale.order.line"].create( + { + "name": "sol2a", + "order_id": self.order2.id, + "lot_id": lot11.id, + "product_id": self.product_46.id, + "product_uom_qty": 1, + } + ) + self.sol2b = self.env["sale.order.line"].create( + { + "name": "sol2b", + "order_id": self.order2.id, + "lot_id": lot12.id, + "product_id": self.product_12.id, + "product_uom_qty": 1, + } + ) + self.order3 = self.env["sale.order"].create( + {"partner_id": self.env.ref("base.res_partner_1").id} + ) + self.sol3 = self.env["sale.order.line"].create( + { + "name": "sol_test_1", + "order_id": self.order3.id, + "lot_id": lot10.id, + "product_id": self.prd_cable.id, + "product_uom_qty": 1, + } + ) + self.order4 = self.env["sale.order"].create( + {"partner_id": self.env.ref("base.res_partner_1").id} + ) + self.sol4 = self.env["sale.order.line"].create( + { + "name": "sol4", + "order_id": self.order4.id, + "lot_id": lot11.id, + "product_id": self.product_46.id, + "product_uom_qty": 2, + } + ) + + # confirm orders + self.order1.action_confirm() + picking = self.order1.picking_ids + + picking_move_line_ids = picking.move_ids_without_package[0].move_line_ids + picking_move_line_ids[0].quantity = 1 + picking_move_line_ids[0].location_id = self.stock_location + picking.button_validate() + + # put back the lot because it is removed by onchange + self.sol3.lot_id = lot10.id + # I'll try to confirm it to check lot reservation: + # lot10 was delivered by order1 + lot10_qty_available = self._retrieve_stock_quantity( + self.prd_cable, lot10, self.stock_location + ) + self.order3.action_confirm() + self.assertEqual(self.order3.state, "sale") + # products are not available for reservation (lot unavailable) + self.assertEqual(self.order3.picking_ids[0].state, "confirmed") + + # onchange remove lot_id, we put it back + self.sol2a.lot_id = lot11.id + self.order2.action_confirm() + picking = self.order2.picking_ids + picking.action_assign() + + picking.move_ids_without_package.mapped("move_line_ids").write({"quantity": 1}) + picking.button_validate() + + # check quantities + lot10_qty_available = self._retrieve_stock_quantity( + self.prd_cable, lot10, self.stock_location + ) + self.assertEqual(lot10_qty_available, 0) + lot11_qty_available = self._retrieve_stock_quantity( + self.product_46, lot11, self.stock_location + ) + self.assertEqual(lot11_qty_available, 1) + lot12_qty_available = self._retrieve_stock_quantity( + self.product_12, lot12, self.stock_location + ) + self.assertEqual(lot12_qty_available, 0) + # I'll try to confirm it to check lot reservation: + # lot11 has 1 availability and order4 has quantity 2 + self.order4.action_confirm() + self.assertEqual(self.order4.state, "sale") + # products are reserved + self.assertEqual(self.order4.picking_ids[0].state, "assigned") diff --git a/sale_order_lot_selection/views/sale_order_views.xml b/sale_order_lot_selection/views/sale_order_views.xml new file mode 100644 index 00000000000..5cda53ea23d --- /dev/null +++ b/sale_order_lot_selection/views/sale_order_views.xml @@ -0,0 +1,31 @@ + + + + sale.order + + + + + + + + + + +