Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
========================
Sale Order Lot Selection
========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:54c6c0fd10f923ad642fcd47e1956cc1ad3d5888ebc83a8301c3841517ff7871
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/license-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/18.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-18-0/sale-workflow-18-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=18.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 <https://github.com/OCA/sale-workflow/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 <https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_order_lot_selection%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* Agile Business Group
Contributors
------------
- Nicola Malcontenti <nicola.malcontenti@agilebg.com>
- Lorenzo Battistini <lorenzo.battistini@agilebg.com>
- Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
- Bhavesh Odedra <bodedra@opensourceintegrators.com>
- François Honoré <francois.honore@acsone.eu>
- Florian da Costa <florian.dacosta@akretion.com>
- Sander Lienaerts <sander.lienaerts@codeforward.nl>
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 <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-bodedra|
This module is part of the `OCA/sale-workflow <https://github.com/OCA/sale-workflow/tree/18.0/sale_order_lot_selection>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,13 @@
{
"name": "Sale Order Lot Selection",
"version": "18.0.1.1.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,
}

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="lot_cable_demo" model="stock.lot">
<field name="product_id" ref="stock.product_cable_management_box" />
<field name="name">cbl mng</field>
<field name="company_id" ref="base.main_company" />
</record>
<record id="sale_order_demo" model="sale.order">
<field name="partner_id" ref="base.res_partner_1" />
<field name="user_id" ref="base.user_admin" />
</record>
<record id="sale_order_line_1_demo" model="sale.order.line">
<field name="order_id" ref="sale_order_lot_selection.sale_order_demo" />
<field name="product_id" ref="stock.product_cable_management_box" />
<field name="product_uom_qty">1</field>
<field name="lot_id" ref="sale_order_lot_selection.lot_cable_demo" />
</record>
<record id="sale_order_line_2_demo" model="sale.order.line">
<field name="order_id" ref="sale_order_lot_selection.sale_order_demo" />
<field name="product_id" ref="stock.product_cable_management_box" />
<field name="product_uom_qty">1</field>
<field name="lot_id" ref="sale_order_lot_selection.lot_cable_demo" />
</record>
</odoo>

View File

@@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Carles Antoli <carlesantoli@hotmail.com>, 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 <daniel.martinez@qubiq.es>\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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. 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"

View File

@@ -0,0 +1,50 @@
# 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 <maria.sparenberg@gmx.net>\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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. 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"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Kostas Goutoudis <goutoudis@gmail.com>, 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 <goutoudis@gmail.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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 "Εντολή Πώλησης"

View File

@@ -0,0 +1,52 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <daniel.martinez@qubiq.es>\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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"
#, 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"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Javi Melendez <javimelex@gmail.com>, 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 <javimelex@gmail.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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 "Pedido de venta"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Juan González <bifomania@protonmail.com>, 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 <bifomania@protonmail.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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 "Myyntitilaus"
#~ msgid "Stock Move"
#~ msgstr "Varastosiirto"

View File

@@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# guillaume bauer <guillaume.bauer@syentys.com>, 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 <guillaume.bauer@syentys.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. 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"

View File

@@ -0,0 +1,37 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# César Castro Cruz <ulmroan@gmail.com>, 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 <ulmroan@gmail.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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 "Movemento de existencias"

View File

@@ -0,0 +1,51 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# Bole <bole@dajmi5.com>, 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 <bole@dajmi5.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. 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"

View File

@@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Bole <bole@dajmi5.com>, 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 <bole@dajmi5.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,41 @@
# 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: 2025-10-07 10:43+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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 5.10.4\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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr "Tracciamento prodotto"
#. 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"

View File

@@ -0,0 +1,38 @@
# 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,40 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 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: 2025-04-11 22:24+0000\n"
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\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"
"X-Generator: Weblate 5.10.4\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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Daniel Reis <dreis.pt@gmail.com>, 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 <dreis.pt@gmail.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. 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"

View File

@@ -0,0 +1,35 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Pedro Castro Silva <pedrocs@sossia.pt>, 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 <pedrocs@sossia.pt>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. module: sale_order_lot_selection
#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line
msgid "Sales Order Line"
msgstr ""

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Dorin Hongu <dhongu@gmail.com>, 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 <dhongu@gmail.com>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,29 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. module: sale_order_lot_selection
#: model:ir.model,name:sale_order_lot_selection.model_sale_order_line
msgid "Sales Order Line"
msgstr ""

View File

@@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
msgstr ""
#. 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"

View File

@@ -0,0 +1,43 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# Ivan BARAYEV <ivanbarayev@hotmail.com>, 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: 2025-05-08 14:23+0000\n"
"Last-Translator: Betül Öğmen <betulo@eska.biz>\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"
"X-Generator: Weblate 5.10.4\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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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şı"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# Ozge Altinisik <ozge@altinkaya.com.tr>, 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 <ozge@altinkaya.com.tr>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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 "Đơn hàng Bán"
#~ msgid "Stock Move"
#~ msgstr "Dịch chuyển kho"

View File

@@ -0,0 +1,39 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_order_lot_selection
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 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 <transbot@odoo-community.org>, 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.fields,field_description:sale_order_lot_selection.field_sale_order_line__product_tracking
msgid "Product Tracking"
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 "销售订单"

View File

@@ -0,0 +1 @@
from . import sale_order_line

View File

@@ -0,0 +1,41 @@
from odoo import api, fields, models
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
def _selection_product_tracking(self):
return self.env["product.product"].fields_get(
allfields=["tracking"],
)["tracking"]["selection"]
product_tracking = fields.Selection(
selection=_selection_product_tracking,
compute="_compute_product_tracking",
)
lot_id = fields.Many2one(
"stock.lot",
"Lot",
copy=False,
compute="_compute_lot_id",
store=True,
readonly=False,
precompute=True,
)
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_product_tracking(self):
for sol in self:
sol.product_tracking = sol.product_id.tracking or sol.product_tracking
@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

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,7 @@
- Nicola Malcontenti \<<nicola.malcontenti@agilebg.com>\>
- Lorenzo Battistini \<<lorenzo.battistini@agilebg.com>\>
- Serpent Consulting Services Pvt. Ltd. \<<support@serpentcs.com>\>
- Bhavesh Odedra \<<bodedra@opensourceintegrators.com>\>
- François Honoré \<<francois.honore@acsone.eu>\>
- Florian da Costa \<<florian.dacosta@akretion.com>\>
- Sander Lienaerts \<<sander.lienaerts@codeforward.nl>\>

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,463 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="sale-order-lot-selection">
<h1>Sale Order Lot Selection</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:54c6c0fd10f923ad642fcd47e1956cc1ad3d5888ebc83a8301c3841517ff7871
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/sale-workflow/tree/18.0/sale_order_lot_selection"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-18-0/sale-workflow-18-0-sale_order_lot_selection"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>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.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-2">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
<ul class="simple">
<li>Create/edit a product and set traceability by By Lots option.</li>
<li>Create a new lot number and assign product.</li>
<li>Update quantity for that product and assign lot number.</li>
<li>Go to Sales &gt; Orders &gt; Quotations.</li>
<li>Create a new quotation and add recently above configured product.</li>
<li>Select lot number and confirm it.</li>
<li>Delivery order will reserve the lot when available</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h2>
<p>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.</p>
<p>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.</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-workflow/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_order_lot_selection%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
<ul class="simple">
<li>Agile Business Group</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
<ul class="simple">
<li>Nicola Malcontenti &lt;<a class="reference external" href="mailto:nicola.malcontenti&#64;agilebg.com">nicola.malcontenti&#64;agilebg.com</a>&gt;</li>
<li>Lorenzo Battistini &lt;<a class="reference external" href="mailto:lorenzo.battistini&#64;agilebg.com">lorenzo.battistini&#64;agilebg.com</a>&gt;</li>
<li>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="mailto:support&#64;serpentcs.com">support&#64;serpentcs.com</a>&gt;</li>
<li>Bhavesh Odedra &lt;<a class="reference external" href="mailto:bodedra&#64;opensourceintegrators.com">bodedra&#64;opensourceintegrators.com</a>&gt;</li>
<li>François Honoré &lt;<a class="reference external" href="mailto:francois.honore&#64;acsone.eu">francois.honore&#64;acsone.eu</a>&gt;</li>
<li>Florian da Costa &lt;<a class="reference external" href="mailto:florian.dacosta&#64;akretion.com">florian.dacosta&#64;akretion.com</a>&gt;</li>
<li>Sander Lienaerts &lt;<a class="reference external" href="mailto:sander.lienaerts&#64;codeforward.nl">sander.lienaerts&#64;codeforward.nl</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/bodedra"><img alt="bodedra" src="https://github.com/bodedra.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-workflow/tree/18.0/sale_order_lot_selection">OCA/sale-workflow</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -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

View File

@@ -0,0 +1,367 @@
# © 2015 Agile Business Group
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo.fields import Command
from odoo.addons.base.tests.common import BaseCommon
class TestSaleOrderLotSelection(BaseCommon):
@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.partner = cls.env["res.partner"].create(
{
"name": "Partner Test",
}
)
cls.prd_cable = cls.env["product.product"].create(
{
"name": "Cable Test",
"tracking": "lot",
"is_storable": True,
}
)
cls.product_46 = cls.env["product.product"].create(
{
"name": "Product 46",
"is_storable": True,
}
)
cls.product_12 = cls.env["product.product"].create(
{
"name": "Product 12",
"is_storable": True,
}
)
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["stock.lot"].create(
{
"name": "cable test lot",
"product_id": cls.prd_cable.id,
}
)
cls.sale = cls.env["sale.order"].create(
{
"partner_id": cls.partner.id,
"order_line": [
Command.create(
{
"product_id": cls.prd_cable.id,
"product_uom_qty": 1.0,
"lot_id": cls.lot_cable.id,
}
),
Command.create(
{
"product_id": cls.prd_cable.id,
"product_uom_qty": 1.0,
"lot_id": cls.lot_cable.id,
}
),
],
}
)
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": "consu"})
self.product_12.write({"tracking": "lot", "type": "consu"})
# 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")

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="view_order_tree_lot" model="ir.ui.view">
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath
expr="//field[@name='order_line']/list/field[@name='product_template_id']"
position="after"
>
<field
name="lot_id"
domain="[('product_id','=', product_id)]"
invisible="not product_id or product_tracking=='none'"
context="{'default_product_id': product_id}"
groups="stock.group_production_lot"
optional="show"
/>
</xpath>
<xpath
expr="//field[@name='order_line']/form/group/group/div/field[@name='product_id']"
position="after"
>
<field
name="lot_id"
domain="[('product_id','=', product_id)]"
invisible="not product_id or product_tracking=='none'"
context="{'default_product_id': product_id}"
groups="stock.group_production_lot"
/>
</xpath>
</field>
</record>
</odoo>