diff --git a/sale_order_lot_selection/README.rst b/sale_order_lot_selection/README.rst new file mode 100644 index 00000000000..ee0fa7592a3 --- /dev/null +++ b/sale_order_lot_selection/README.rst @@ -0,0 +1,108 @@ +======================== +Sale Order Lot Selection +======================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/14.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-14-0/sale-workflow-14-0-sale_order_lot_selection + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/167/14.0 + :alt: Try me on Runbot + +|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 smashing 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 + +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..8348aa3880a --- /dev/null +++ b/sale_order_lot_selection/__manifest__.py @@ -0,0 +1,13 @@ +{ + "name": "Sale Order Lot Selection", + "version": "15.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": ["view/sale_view.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..8cdd3f2c8c0 --- /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..ae570f9d856 --- /dev/null +++ b/sale_order_lot_selection/i18n/ca.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "No es poden reservar productes per al lot %s" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "No es pot recuperar el lot en estoc" + +#. 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 +msgid "Sales Order" +msgstr "Comandes de Venda" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..0a3ed0964a9 --- /dev/null +++ b/sale_order_lot_selection/i18n/de.po @@ -0,0 +1,56 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" +"Es können keine Produkt mit der Charge / Seriennummer %s reserviert werden." + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +msgid "Sales Order" +msgstr "Verkaufsauftrag" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Auftragsposition" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..4ff5b3015be --- /dev/null +++ b/sale_order_lot_selection/i18n/el_GR.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Εντολή Πώλησης" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/sale_order_lot_selection/i18n/en.po b/sale_order_lot_selection/i18n/en.po new file mode 100644 index 00000000000..2b8047a9f56 --- /dev/null +++ b/sale_order_lot_selection/i18n/en.po @@ -0,0 +1,57 @@ +# 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-03-12 01:52+0000\n" +"PO-Revision-Date: 2016-02-26 10:01+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-sale-workflow-8-0/" +"language/en/)\n" +"Language: en\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 +#: code:addons/sale_order_lot_selection/model/sale.py:67 +#: code:addons/sale_order_lot_selection/model/sale.py:73 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "Can't reserve products for lot %s" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/model/sale.py:56 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "Can't retrieve lot on stock" + +#. 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_procurement_group +msgid "Procurement Group" +msgstr "Procurement Group" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order +msgid "Sales Order" +msgstr "Sales Order" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "Stock Move" diff --git a/sale_order_lot_selection/i18n/es.po b/sale_order_lot_selection/i18n/es.po new file mode 100644 index 00000000000..99dacd1fcf3 --- /dev/null +++ b/sale_order_lot_selection/i18n/es.po @@ -0,0 +1,55 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "No puede reservar productos para el lote %s" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "No se puede obtener el lote en las existencias" + +#. 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 +msgid "Sales Order" +msgstr "Órdenes de venta" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..b5b97169613 --- /dev/null +++ b/sale_order_lot_selection/i18n/es_ES.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Pedido de venta" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" 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..50fbed79164 --- /dev/null +++ b/sale_order_lot_selection/i18n/es_MX.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +msgid "Sales Order" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..f1c97485fdd --- /dev/null +++ b/sale_order_lot_selection/i18n/es_VE.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Pedidos de venta" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/sale_order_lot_selection/i18n/fi.po b/sale_order_lot_selection/i18n/fi.po new file mode 100644 index 00000000000..0103d081902 --- /dev/null +++ b/sale_order_lot_selection/i18n/fi.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Myyntitilaus" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..07469d13d15 --- /dev/null +++ b/sale_order_lot_selection/i18n/fr.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "Impossible de réserver de produits pour le lot %s" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "Impossible de récupérer le lot en stock" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Bon de commande" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..c1a5e813498 --- /dev/null +++ b/sale_order_lot_selection/i18n/gl.po @@ -0,0 +1,51 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +msgid "Sales Order" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..3608992f090 --- /dev/null +++ b/sale_order_lot_selection/i18n/hr.po @@ -0,0 +1,54 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "Nije moguće rezervirati proizvode za lot %s" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "Nije moguće dohvatiti lot na skladištu" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Prodajni nalog" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Stavka ponude" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..d279e044991 --- /dev/null +++ b/sale_order_lot_selection/i18n/hr_HR.po @@ -0,0 +1,54 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Prodjani nalog" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/sale_order_lot_selection/i18n/hu.po b/sale_order_lot_selection/i18n/hu.po new file mode 100644 index 00000000000..2f87ecf6fda --- /dev/null +++ b/sale_order_lot_selection/i18n/hu.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Vevői megrendelés" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/sale_order_lot_selection/i18n/it.po b/sale_order_lot_selection/i18n/it.po new file mode 100644 index 00000000000..dd4aa0cdd8b --- /dev/null +++ b/sale_order_lot_selection/i18n/it.po @@ -0,0 +1,52 @@ +# 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-06-24 10:05+0000\n" +"Last-Translator: Francesco Foresti \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.3.2\n" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +msgid "Sales Order" +msgstr "Ordine di vendita" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..0a3c892a238 --- /dev/null +++ b/sale_order_lot_selection/i18n/nl.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Verkooporder" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" 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..67d494b3e93 --- /dev/null +++ b/sale_order_lot_selection/i18n/nl_NL.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Verkooporder" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "Verkooporderregel" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/sale_order_lot_selection/i18n/pt.po b/sale_order_lot_selection/i18n/pt.po new file mode 100644 index 00000000000..9f5423007d4 --- /dev/null +++ b/sale_order_lot_selection/i18n/pt.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Ordem de Venda" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..3d4a2415bc4 --- /dev/null +++ b/sale_order_lot_selection/i18n/pt_BR.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Pedido de Venda" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..aa940a77025 --- /dev/null +++ b/sale_order_lot_selection/i18n/pt_PT.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +msgid "Sales Order" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +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..e334526d9d8 --- /dev/null +++ b/sale_order_lot_selection/i18n/ro.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Comandă vânzare" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..aae56fabde9 --- /dev/null +++ b/sale_order_lot_selection/i18n/sale_order_lot_selection.pot @@ -0,0 +1,39 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_order_lot_selection +# +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: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__display_name +msgid "Display Name" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line__id +msgid "ID" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model.fields,field_description:sale_order_lot_selection.field_sale_order_line____last_update +msgid "Last Modified on" +msgstr "" + +#. 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..b79ff023645 --- /dev/null +++ b/sale_order_lot_selection/i18n/sk.po @@ -0,0 +1,52 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Objednávka predaja" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +msgstr "" diff --git a/sale_order_lot_selection/i18n/sl.po b/sale_order_lot_selection/i18n/sl.po new file mode 100644 index 00000000000..c55f6251efc --- /dev/null +++ b/sale_order_lot_selection/i18n/sl.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "Ni mogoče rezervirati proizvodov za lot %s" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "Lota ni mogoče pridobiti na zalogi" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Prodajni nalog" + +#. 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" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..4bef445a22e --- /dev/null +++ b/sale_order_lot_selection/i18n/tr.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Sipariş Emri" + +#. 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ı" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..fd64e04c689 --- /dev/null +++ b/sale_order_lot_selection/i18n/tr_TR.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Satış emri" + +#. 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ı " + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..ed6aa252030 --- /dev/null +++ b/sale_order_lot_selection/i18n/vi_VN.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "Đơn hàng Bán" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +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..4526c74f92b --- /dev/null +++ b/sale_order_lot_selection/i18n/zh_CN.po @@ -0,0 +1,53 @@ +# 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 +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't reserve products for lot %s" +msgstr "" + +#. module: sale_order_lot_selection +#: code:addons/sale_order_lot_selection/models/sale_order.py:0 +#, python-format +msgid "Can't retrieve lot on stock" +msgstr "" + +#. 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 +#, fuzzy +msgid "Sales Order" +msgstr "销售订单" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line +msgid "Sales Order Line" +msgstr "" + +#. module: sale_order_lot_selection +#: model:ir.model,name:sale_order_lot_selection.model_stock_move +msgid "Stock Move" +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..93de0501701 --- /dev/null +++ b/sale_order_lot_selection/models/sale_order_line.py @@ -0,0 +1,23 @@ +from odoo import api, fields, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + lot_id = fields.Many2one("stock.production.lot", "Lot", copy=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.onchange("product_id") + def product_id_change(self): + res = super().product_id_change() + self.lot_id = False + if isinstance(res, dict): + res.update( + {"domain": {"lot_id": [("product_id", "=", self.product_id.id)]}} + ) + return res diff --git a/sale_order_lot_selection/readme/CONTRIBUTORS.rst b/sale_order_lot_selection/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..6499829ac94 --- /dev/null +++ b/sale_order_lot_selection/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* Nicola Malcontenti +* Lorenzo Battistini +* Serpent Consulting Services Pvt. Ltd. +* Bhavesh Odedra +* François Honoré +* Florian da Costa diff --git a/sale_order_lot_selection/readme/DESCRIPTION.rst b/sale_order_lot_selection/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..ac599569f98 --- /dev/null +++ b/sale_order_lot_selection/readme/DESCRIPTION.rst @@ -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.rst b/sale_order_lot_selection/readme/ROADMAP.rst new file mode 100644 index 00000000000..72df6afd766 --- /dev/null +++ b/sale_order_lot_selection/readme/ROADMAP.rst @@ -0,0 +1,6 @@ +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.rst b/sale_order_lot_selection/readme/USAGE.rst new file mode 100644 index 00000000000..0369eda5eef --- /dev/null +++ b/sale_order_lot_selection/readme/USAGE.rst @@ -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..19a9e64db75 --- /dev/null +++ b/sale_order_lot_selection/static/description/index.html @@ -0,0 +1,449 @@ + + + + + + +Sale Order Lot Selection + + + +
+

Sale Order Lot Selection

+ + +

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

+

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 smashing 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..0d6f87a3f22 --- /dev/null +++ b/sale_order_lot_selection/tests/test_sale_order_lot_selection.py @@ -0,0 +1,326 @@ +# © 2015 Agile Business Group +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import odoo.tests.common as test_common + + +class TestSaleOrderLotSelection(test_common.SingleTransactionCase): + def setUp(self): + """ + 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(TestSaleOrderLotSelection, self).setUp() + self.prd_cable = self.env.ref("stock.product_cable_management_box") + self.prd_cable.tracking = "lot" + self.product_46 = self.env.ref("product.product_product_13") + self.product_12 = self.env.ref("product.product_product_12") + self.supplier_location = self.env.ref("stock.stock_location_suppliers") + self.customer_location = self.env.ref("stock.stock_location_customers") + self.stock_location = self.env.ref("stock.stock_location_stock") + self.product_model = self.env["product.product"] + self.production_lot_model = self.env["stock.production.lot"] + self.lot_cable = self.env.ref("sale_order_lot_selection.lot_cable") + self.sale = self.env.ref("sale_order_lot_selection.sale1") + + def _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._inventory_products(self.prd_cable, self.lot_cable, 1) + other_lot = self.env["stock.production.lot"].create( + { + "name": "test2", + "product_id": self.prd_cable.id, + "company_id": self.env.ref("base.main_company").id, + } + ) + self._inventory_products(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_lines.filtered( + lambda m: m.state == "assigned" + ) + unavailable_move = self.sale.picking_ids.move_lines.filtered( + lambda m: m.state == "confirmed" + ) + self.assertEqual(len(available_move), 1) + self.assertEqual(len(unavailable_move), 1) + + def _inventory_products(self, product, lot, qty): + quant = self.env["stock.quant"].create( + { + "product_id": product.id, + "location_id": self.stock_location.id, + "lot_id": lot.id, + "inventory_quantity": qty, + } + ) + quant.action_apply_inventory() + + 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._inventory_products(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_lines: + self.assertEqual(move.state, "draft", "Wrong state of move line.") + picking_in.action_confirm() + for move in picking_in.move_lines: + self.assertEqual(move.state, "assigned", "Wrong state of move line.") + lot10 = False + lot11 = False + lot12 = False + for ops in picking_in.move_ids_without_package: + if ops.product_id == self.prd_cable: + lot10 = self.production_lot_model.create( + { + "name": "0000010", + "product_id": self.prd_cable.id, + "product_qty": ops.product_qty, + "company_id": self.env.company.id, + } + ) + ops.move_line_ids.write( + {"lot_id": lot10.id, "qty_done": ops.product_qty} + ) + if ops.product_id == self.product_46: + lot11 = self.production_lot_model.create( + { + "name": "0000011", + "product_id": self.product_46.id, + "product_qty": ops.product_qty, + "company_id": self.env.company.id, + } + ) + ops.move_line_ids.write( + {"lot_id": lot11.id, "qty_done": ops.product_qty} + ) + if ops.product_id == self.product_12: + lot12 = self.production_lot_model.create( + { + "name": "0000012", + "product_id": self.product_12.id, + "product_qty": ops.product_qty, + "company_id": self.env.company.id, + } + ) + ops.move_line_ids.write( + {"lot_id": lot12.id, "qty_done": ops.product_qty} + ) + picking_in._action_done() + + # check quantities + lot10_qty_available = self._stock_quantity( + self.prd_cable, lot10, self.stock_location + ) + self.assertEqual(lot10_qty_available, 1) + lot11_qty_available = self._stock_quantity( + self.product_46, lot11, self.stock_location + ) + self.assertEqual(lot11_qty_available, 2) + lot12_qty_available = self._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].qty_done = 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._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({"qty_done": 1}) + picking.button_validate() + + # check quantities + lot10_qty_available = self._stock_quantity( + self.prd_cable, lot10, self.stock_location + ) + self.assertEqual(lot10_qty_available, 0) + lot11_qty_available = self._stock_quantity( + self.product_46, lot11, self.stock_location + ) + self.assertEqual(lot11_qty_available, 1) + lot12_qty_available = self._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/view/sale_view.xml b/sale_order_lot_selection/view/sale_view.xml new file mode 100644 index 00000000000..af262e21ae5 --- /dev/null +++ b/sale_order_lot_selection/view/sale_view.xml @@ -0,0 +1,31 @@ + + + + sale.order + + + + + + + + + + + diff --git a/setup/sale_order_lot_selection/odoo/addons/sale_order_lot_selection b/setup/sale_order_lot_selection/odoo/addons/sale_order_lot_selection new file mode 120000 index 00000000000..28fdf8bbe19 --- /dev/null +++ b/setup/sale_order_lot_selection/odoo/addons/sale_order_lot_selection @@ -0,0 +1 @@ +../../../../sale_order_lot_selection \ No newline at end of file diff --git a/setup/sale_order_lot_selection/setup.py b/setup/sale_order_lot_selection/setup.py new file mode 100644 index 00000000000..28c57bb6403 --- /dev/null +++ b/setup/sale_order_lot_selection/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)