[tryton-debian-vcs] tryton-modules-stock-lot branch upstream created. f7b6c9e6f23b886fc1c4a461c998f60469920359

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Wed Nov 27 17:11:15 UTC 2013


The following commit has been merged in the upstream branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-stock-lot.git;a=commitdiff;h=f7b6c9e6f23b886fc1c4a461c998f60469920359
commit f7b6c9e6f23b886fc1c4a461c998f60469920359
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Sun Nov 24 17:28:26 2013 +0100

    Adding upstream version 3.0.0.

diff --git a/CHANGELOG b/CHANGELOG
index 3ac4e21..8b6585f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+Version 3.0.0 - 2013-10-21
+* Bug fixes (see mercurial logs for details)
+* Add quantity and forecast_quantity fields on Lot
+* Add lot in inventory
+* Add Period Cache per lot
+
 Version 2.8.0 - 2013-04-22
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index aa102f8..0e80546 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond_stock_lot
-Version: 2.8.0
+Version: 3.0.0
 Summary: Tryton module for lot of products
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: UNKNOWN
 License: GPL-3
-Download-URL: http://downloads.tryton.org/2.8/
+Download-URL: http://downloads.tryton.org/3.0/
 Description: trytond_stock_lot
         =================
         
@@ -60,6 +60,7 @@ Classifier: Natural Language :: English
 Classifier: Natural Language :: French
 Classifier: Natural Language :: German
 Classifier: Natural Language :: Russian
+Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Spanish
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2.6
diff --git a/__init__.py b/__init__.py
index a41bf3c..e9898f7 100644
--- a/__init__.py
+++ b/__init__.py
@@ -14,6 +14,10 @@ def register():
         ShipmentIn,
         ShipmentOut,
         ShipmentOutReturn,
+        Period,
+        PeriodCacheLot,
+        Inventory,
+        InventoryLine,
         Template,
         Product,
         TemplateLotType,
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 75605bb..da3662a 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -42,6 +42,11 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Записано от"
 
+#, fuzzy
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Партида"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Създадено на"
@@ -50,6 +55,11 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Създадено от"
 
+#, fuzzy
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Планирано количество"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +72,11 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Продукт"
 
+#, fuzzy
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Количество"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Име"
@@ -110,6 +125,65 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Партида"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Създадено на"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Създадено от"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Вътрешно количество"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Местоположение"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Партида"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Период"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Продукт"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Име на прикачен файл"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Променено на"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Променено от"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "Вида местонахождение за което е необходима партидата"
@@ -154,6 +228,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Доставчик"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr ""
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Партиди"
@@ -170,3 +248,11 @@ msgstr "Партида"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Партиди"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr ""
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index 65b0bda..538154a 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -42,6 +42,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Usuari modificació"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lot"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Data creació"
@@ -50,6 +54,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Usuari creació"
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Quantitat prevista"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +70,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Productes"
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Quantitat"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Nom"
@@ -110,6 +122,54 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lot"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Precàlculs de lot"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Data creació"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Usuari creació"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Quantitat interna"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Ubicació"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lot"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Període"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Productes"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Data modificació"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Usuari modificació"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "Tipus d'ubicació per la qual el lot és obligatori"
@@ -154,6 +214,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Proveïdor"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Període d'estoc precalculat per lot"
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lots"
@@ -169,3 +233,11 @@ msgstr "Lot"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Lots"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Període d'estoc precalculat "
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Períodes d'estoc precalculat "
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 837c670..1214beb 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -42,6 +42,11 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr ""
 
+#, fuzzy
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lot"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr ""
@@ -50,6 +55,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr ""
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr ""
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr ""
@@ -62,6 +71,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr ""
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr ""
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr ""
@@ -111,6 +124,55 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lot"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lot"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr ""
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr ""
@@ -155,6 +217,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr ""
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr ""
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr ""
@@ -171,3 +237,11 @@ msgstr "Lot"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 291ccb7..e3593a9 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -42,6 +42,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Letzte Änderung durch"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Charge"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Erstellungsdatum"
@@ -50,6 +54,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Erstellt durch"
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Voraussichtliche Anzahl"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +70,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Artikel"
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Anzahl"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Name"
@@ -110,6 +122,54 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Charge"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Caches Charge"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Erstellungsdatum"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Erstellt durch"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Interne Anzahl"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Ort"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Charge"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Periode"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Artikel"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Name"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Zuletzt geändert"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Letzte Änderung durch"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "Typ des Lagerorts, für den eine Chargen-Nummer erforderlich ist"
@@ -154,6 +214,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Lieferant"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Lager Cache Periode pro Charge"
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Chargen"
@@ -169,3 +233,11 @@ msgstr "Charge"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Chargen"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Cache Periode Charge"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Caches Perioden Chargen"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 36350f3..d1f4bb8 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -42,6 +42,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Usuario modificación"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lote"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Fecha creación"
@@ -50,6 +54,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Usuario creación"
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +70,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Producto"
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Nombre"
@@ -110,6 +122,54 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lote"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Lote precalculado"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Cantidad interna"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lote"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Período"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Productos"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "El tipo de ubicación para la cual el lote es requerido"
@@ -154,6 +214,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Proveedor"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Período de stock precalculado por lote"
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lotes"
@@ -169,3 +233,11 @@ msgstr "Lote"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Lotes"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Período lote precalculado"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Período lote precalculados"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 22e48cd..1ceec73 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -4,11 +4,11 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
 msgid "Lot is required for move of product \"%s\"."
-msgstr ""
+msgstr "EL lote es requerido para el movimiento de producto \"%s\"."
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
-msgstr "El lote es requerido"
+msgstr "Lote Requerido"
 
 msgctxt "field:product.template-stock.lot.type,create_date:"
 msgid "Create Date"
@@ -42,6 +42,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Modificado por Usuario"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lote"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Fecha de Creación"
@@ -50,6 +54,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Creado por Usuario"
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Cantidad Proyectada"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +70,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Productos"
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Nombre"
@@ -110,6 +122,54 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lote"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Caches de Lote"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Fecha de Creación"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Creado por Usuario"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Cantidad Interna"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Bodega"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lote"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Período"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Productos"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Modificado por Usuario"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Modificado por Usuario"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "El tipo de bodega para la cual el lote es requerido"
@@ -154,11 +214,14 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Proveedor"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Cache de Periodo de Inventarios por Lote"
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lotes"
 
-#, fuzzy
 msgctxt "view:product.template:"
 msgid "Lots"
 msgstr "Lotes"
@@ -170,3 +233,11 @@ msgstr "Lote"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Lotes"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Cache de Periodo Lote"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Caches de Periodo Lote"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 9341b02..c8b12e9 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -42,6 +42,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Usuario modificación"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lote"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Fecha creación"
@@ -50,6 +54,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Usuario creación"
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Cantidad prevista"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +70,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Producto"
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Cantidad"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Nombre"
@@ -110,6 +122,54 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lote"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Lote precalculado"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Fecha creación"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Usuario creación"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Cantidad interna"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Ubicación"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lote"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Período"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Productos"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Nombre"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Fecha modificación"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Usuario modificación"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "El tipo de ubicación por cada lote es requerido."
@@ -154,6 +214,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Proveedor"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Período de stock precalculado por lote"
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lotes"
@@ -169,3 +233,11 @@ msgstr "Lote"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Lotes"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Período lote precalculado"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Período lote precalculados"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index fe63cbb..dab89a9 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -42,6 +42,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Mis à jour par"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lot"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Date de création"
@@ -50,6 +54,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Créé par"
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Quantités prévisionnelles"
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -62,6 +70,10 @@ msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Produit"
 
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Quantité"
+
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Nom"
@@ -110,6 +122,54 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lot"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Caches de lot"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Date de création"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Créé par"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Quantité interne"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Emplacement"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lot"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Période"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Produit"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Nom"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Date de mise à jour"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Mis à jour par"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr "Le type d'emplacement pour lequel un lot est requis"
@@ -154,6 +214,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Fournisseur"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Caches de période de stock par lot"
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lots"
@@ -169,3 +233,11 @@ msgstr "Lot"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr "Lots"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Cache de période et lot"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Caches de période et lot"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index c05fb75..6303008 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -45,6 +45,11 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr ""
 
+#, fuzzy
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Lot"
+
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr ""
@@ -53,6 +58,10 @@ msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr ""
 
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr ""
+
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr ""
@@ -68,6 +77,11 @@ msgid "Product"
 msgstr "Producten"
 
 #, fuzzy
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#, fuzzy
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Naam bijlage"
@@ -120,6 +134,58 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr "Lot"
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Lot"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Periode"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Producten"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Naam bijlage"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr ""
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr ""
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr ""
@@ -166,6 +232,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Leverancier"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr ""
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr ""
@@ -182,3 +252,11 @@ msgstr "Lot"
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr ""
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index fc117d6..6295f6f 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -50,6 +50,10 @@ msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Изменено пользователем"
 
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr ""
+
 #, fuzzy
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
@@ -61,6 +65,11 @@ msgid "Create User"
 msgstr "Создано пользователем"
 
 #, fuzzy
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Прогноз количества"
+
+#, fuzzy
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
@@ -76,6 +85,11 @@ msgid "Product"
 msgstr "Товарно материальные ценности (ТМЦ)"
 
 #, fuzzy
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Кол-во"
+
+#, fuzzy
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Наименование"
@@ -134,6 +148,64 @@ msgctxt "field:stock.move,lot:"
 msgid "Lot"
 msgstr ""
 
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Дата создания"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Создано пользователем"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Внутреннее количество"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Местоположение"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr ""
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Период"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Товарно материальные ценности (ТМЦ)"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Полное наименование"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Дата изменения"
+
+#, fuzzy
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Изменено пользователем"
+
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
 msgstr ""
@@ -183,6 +255,10 @@ msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Поставщик"
 
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr ""
+
 msgctxt "view:product.product:"
 msgid "Lots"
 msgstr ""
@@ -198,3 +274,11 @@ msgstr ""
 msgctxt "view:stock.lot:"
 msgid "Lots"
 msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr ""
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr ""
diff --git a/locale/es_AR.po b/locale/sl_SI.po
similarity index 53%
copy from locale/es_AR.po
copy to locale/sl_SI.po
index 36350f3..817b98d 100644
--- a/locale/es_AR.po
+++ b/locale/sl_SI.po
@@ -4,19 +4,19 @@ msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
 msgid "Lot is required for move of product \"%s\"."
-msgstr "El lote es requerido para el movimiento del producto «%s»."
+msgstr "Šarža je obvezna pri prometu izdelka \"%s\"."
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
-msgstr "Lote requerido"
+msgstr "Šarža zahtevana"
 
 msgctxt "field:product.template-stock.lot.type,create_date:"
 msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Ustvarjeno"
 
 msgctxt "field:product.template-stock.lot.type,create_uid:"
 msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Ustvaril"
 
 msgctxt "field:product.template-stock.lot.type,id:"
 msgid "ID"
@@ -24,31 +24,39 @@ msgstr "ID"
 
 msgctxt "field:product.template-stock.lot.type,rec_name:"
 msgid "Name"
-msgstr "Nombre"
+msgstr "Ime"
 
 msgctxt "field:product.template-stock.lot.type,template:"
 msgid "Template"
-msgstr "Plantilla"
+msgstr "Predloga"
 
 msgctxt "field:product.template-stock.lot.type,type:"
 msgid "Type"
-msgstr "Tipo"
+msgstr "Vrsta"
 
 msgctxt "field:product.template-stock.lot.type,write_date:"
 msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Zapisano"
 
 msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Zapisal"
+
+msgctxt "field:stock.inventory.line,lot:"
+msgid "Lot"
+msgstr "Šarža"
 
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Ustvarjeno"
 
 msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Ustvaril"
+
+msgctxt "field:stock.lot,forecast_quantity:"
+msgid "Forecast Quantity"
+msgstr "Predvidena količina"
 
 msgctxt "field:stock.lot,id:"
 msgid "ID"
@@ -56,35 +64,39 @@ msgstr "ID"
 
 msgctxt "field:stock.lot,number:"
 msgid "Number"
-msgstr "Número"
+msgstr "Številka"
 
 msgctxt "field:stock.lot,product:"
 msgid "Product"
-msgstr "Producto"
+msgstr "Izdelek"
+
+msgctxt "field:stock.lot,quantity:"
+msgid "Quantity"
+msgstr "Količina"
 
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
-msgstr "Nombre"
+msgstr "Ime"
 
 msgctxt "field:stock.lot,write_date:"
 msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Zapisano"
 
 msgctxt "field:stock.lot,write_uid:"
 msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Zapisal"
 
 msgctxt "field:stock.lot.type,code:"
 msgid "Code"
-msgstr "Código"
+msgstr "Šifra"
 
 msgctxt "field:stock.lot.type,create_date:"
 msgid "Create Date"
-msgstr "Fecha creación"
+msgstr "Ustvarjeno"
 
 msgctxt "field:stock.lot.type,create_uid:"
 msgid "Create User"
-msgstr "Usuario creación"
+msgstr "Ustvaril"
 
 msgctxt "field:stock.lot.type,id:"
 msgid "ID"
@@ -92,80 +104,136 @@ msgstr "ID"
 
 msgctxt "field:stock.lot.type,name:"
 msgid "Name"
-msgstr "Nombre"
+msgstr "Naziv"
 
 msgctxt "field:stock.lot.type,rec_name:"
 msgid "Name"
-msgstr "Nombre"
+msgstr "Ime"
 
 msgctxt "field:stock.lot.type,write_date:"
 msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Zapisano"
 
 msgctxt "field:stock.lot.type,write_uid:"
 msgid "Write User"
-msgstr "Usuario modificación"
+msgstr "Zapisal"
 
 msgctxt "field:stock.move,lot:"
 msgid "Lot"
-msgstr "Lote"
+msgstr "Šarža"
+
+msgctxt "field:stock.period,lot_caches:"
+msgid "Lot Caches"
+msgstr "Predpomnjene šarže"
+
+msgctxt "field:stock.period.cache.lot,create_date:"
+msgid "Create Date"
+msgstr "Ustvarjeno"
+
+msgctxt "field:stock.period.cache.lot,create_uid:"
+msgid "Create User"
+msgstr "Ustvaril"
+
+msgctxt "field:stock.period.cache.lot,id:"
+msgid "ID"
+msgstr "ID"
+
+msgctxt "field:stock.period.cache.lot,internal_quantity:"
+msgid "Internal Quantity"
+msgstr "Notranja količina"
+
+msgctxt "field:stock.period.cache.lot,location:"
+msgid "Location"
+msgstr "Lokacija"
+
+msgctxt "field:stock.period.cache.lot,lot:"
+msgid "Lot"
+msgstr "Šarža"
+
+msgctxt "field:stock.period.cache.lot,period:"
+msgid "Period"
+msgstr "Obdobje"
+
+msgctxt "field:stock.period.cache.lot,product:"
+msgid "Product"
+msgstr "Izdelek"
+
+msgctxt "field:stock.period.cache.lot,rec_name:"
+msgid "Name"
+msgstr "Ime"
+
+msgctxt "field:stock.period.cache.lot,write_date:"
+msgid "Write Date"
+msgstr "Zapisano"
+
+msgctxt "field:stock.period.cache.lot,write_uid:"
+msgid "Write User"
+msgstr "Zapisal"
 
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
-msgstr "El tipo de ubicación para la cual el lote es requerido"
+msgstr "Tip lokacije, za katero je šarža obvezna"
 
 msgctxt "model:ir.action,name:act_lot_form"
 msgid "Lots"
-msgstr "Lotes"
+msgstr "Šarže"
 
 msgctxt "model:ir.ui.menu,name:menu_lot_form"
 msgid "Lots"
-msgstr "Lotes"
+msgstr "Šarže"
 
 msgctxt "model:product.template-stock.lot.type,name:"
 msgid "Template - Stock Lot Type"
-msgstr "Plantilla - Tipo de lote de inventario"
+msgstr "Predloga - Tip šarže"
 
 msgctxt "model:stock.lot,name:"
 msgid "Stock Lot"
-msgstr "Lote de inventario"
+msgstr "Šarža"
 
 msgctxt "model:stock.lot.type,name:"
 msgid "Stock Lot Type"
-msgstr "Tipo de lote de inventario"
+msgstr "Tip šarže"
 
 msgctxt "model:stock.lot.type,name:type_customer"
 msgid "Customer"
-msgstr "Cliente"
+msgstr "Kupec"
 
 msgctxt "model:stock.lot.type,name:type_lost_found"
 msgid "Lost and Found"
-msgstr "Perdido y encontrado"
+msgstr "Izgubljeno/najdeno"
 
 msgctxt "model:stock.lot.type,name:type_production"
 msgid "Production"
-msgstr "Producción"
+msgstr "Proizvodnja"
 
 msgctxt "model:stock.lot.type,name:type_storage"
 msgid "Storage"
-msgstr "Depósito"
+msgstr "Shramba"
 
 msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
-msgstr "Proveedor"
+msgstr "Dobavitelj"
 
-msgctxt "view:product.product:"
-msgid "Lots"
-msgstr "Lotes"
+msgctxt "model:stock.period.cache.lot,name:"
+msgid "Stock Period Cache per Lot"
+msgstr "Predpomnjena obdobja po šaržah"
 
 msgctxt "view:product.template:"
 msgid "Lots"
-msgstr "Lotes"
+msgstr "Šarže"
 
 msgctxt "view:stock.lot:"
 msgid "Lot"
-msgstr "Lote"
+msgstr "Šarža"
 
 msgctxt "view:stock.lot:"
 msgid "Lots"
-msgstr "Lotes"
+msgstr "Šarže"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Cache"
+msgstr "Predpomnjena šarža po obdobjih"
+
+msgctxt "view:stock.period.cache.lot:"
+msgid "Period Lot Caches"
+msgstr "Predpomnjene šarže po obdobjih"
diff --git a/setup.py b/setup.py
index 46abc2d..983b0f3 100644
--- a/setup.py
+++ b/setup.py
@@ -66,6 +66,7 @@ setup(name='trytond_stock_lot',
         'Natural Language :: French',
         'Natural Language :: German',
         'Natural Language :: Russian',
+        'Natural Language :: Slovenian',
         'Natural Language :: Spanish',
         'Operating System :: OS Independent',
         'Programming Language :: Python :: 2.6',
diff --git a/stock.py b/stock.py
index 73bdc51..27915c6 100644
--- a/stock.py
+++ b/stock.py
@@ -1,20 +1,43 @@
 #This file is part of Tryton.  The COPYRIGHT file at the top level of
 #this repository contains the full copyright notices and license terms.
+from collections import defaultdict
+
 from trytond.model import ModelView, ModelSQL, Workflow, fields
 from trytond.pyson import Eval
 from trytond.pool import Pool, PoolMeta
+from trytond.transaction import Transaction
+from trytond.modules.stock import StockMixin
 
 __all__ = ['Lot', 'LotType', 'Move', 'ShipmentIn', 'ShipmentOut',
-    'ShipmentOutReturn']
+    'ShipmentOutReturn',
+    'Period', 'PeriodCacheLot',
+    'Inventory', 'InventoryLine']
 __metaclass__ = PoolMeta
 
 
-class Lot(ModelSQL, ModelView):
+class Lot(ModelSQL, ModelView, StockMixin):
     "Stock Lot"
     __name__ = 'stock.lot'
     _rec_name = 'number'
     number = fields.Char('Number', required=True, select=True)
     product = fields.Many2One('product.product', 'Product', required=True)
+    quantity = fields.Function(fields.Float('Quantity'), 'get_quantity',
+        searcher='search_quantity')
+    forecast_quantity = fields.Function(fields.Float('Forecast Quantity'),
+        'get_quantity', searcher='search_quantity')
+
+    @classmethod
+    def get_quantity(cls, lots, name):
+        location_ids = Transaction().context.get('locations')
+        products = list(set(l.product for l in lots))
+        return cls._get_quantity(lots, name, location_ids, products,
+            grouping=('product', 'lot'))
+
+    @classmethod
+    def search_quantity(cls, name, domain=None):
+        location_ids = Transaction().context.get('locations')
+        return cls._search_quantity(name, location_ids, domain,
+            grouping=('product', 'lot'))
 
 
 class LotType(ModelSQL, ModelView):
@@ -42,27 +65,20 @@ class Move:
                 'lot_required': 'Lot is required for move of product "%s".',
                 })
 
-    @classmethod
-    def check_lot(cls, moves):
+    def check_lot(self):
         "Check if lot is required"
-        for move in moves:
-            if (move.state == 'done'
-                    and move.internal_quantity
-                    and not move.lot
-                    and move.product.lot_is_required(
-                        move.from_location, move.to_location)):
-                cls.raise_user_error('lot_required', (move.product.rec_name,))
-
-    @classmethod
-    def create(cls, vlist):
-        moves = super(Move, cls).create(vlist)
-        cls.check_lot(moves)
-        return moves
+        if (self.state == 'done'
+                and self.internal_quantity
+                and not self.lot
+                and self.product.lot_is_required(
+                    self.from_location, self.to_location)):
+            self.raise_user_error('lot_required', self.product.rec_name)
 
     @classmethod
-    def write(cls, moves, values):
-        super(Move, cls).write(moves, values)
-        cls.check_lot(moves)
+    def validate(cls, moves):
+        super(Move, cls).validate(moves)
+        for move in moves:
+            move.check_lot()
 
 
 class ShipmentIn:
@@ -134,3 +150,133 @@ class ShipmentOutReturn:
         if move and incoming_move.lot:
             move.lot = incoming_move.lot
         return move
+
+
+class Period:
+    __name__ = 'stock.period'
+    lot_caches = fields.One2Many('stock.period.cache.lot', 'period',
+        'Lot Caches', readonly=True)
+
+    @classmethod
+    def groupings(cls):
+        return super(Period, cls).groupings() + [('product', 'lot')]
+
+    @classmethod
+    def get_cache(cls, grouping):
+        pool = Pool()
+        Cache = super(Period, cls).get_cache(grouping)
+        if grouping == ('product', 'lot'):
+            return pool.get('stock.period.cache.lot')
+        return Cache
+
+
+class PeriodCacheLot(ModelSQL, ModelView):
+    '''
+    Stock Period Cache per Lot
+
+    It is used to store cached computation of stock quantities per lot.
+    '''
+    __name__ = 'stock.period.cache.lot'
+    period = fields.Many2One('stock.period', 'Period', required=True,
+        readonly=True, select=True, ondelete='CASCADE')
+    location = fields.Many2One('stock.location', 'Location', required=True,
+        readonly=True, select=True, ondelete='CASCADE')
+    product = fields.Many2One('product.product', 'Product', required=True,
+        readonly=True, ondelete='CASCADE')
+    lot = fields.Many2One('stock.lot', 'Lot', readonly=True,
+        ondelete='CASCADE')
+    internal_quantity = fields.Float('Internal Quantity', readonly=True)
+
+
+class Inventory:
+    __name__ = 'stock.inventory'
+
+    @classmethod
+    def complete_lines(cls, inventories):
+        pool = Pool()
+        Product = pool.get('product.product')
+        Line = pool.get('stock.inventory.line')
+
+        super(Inventory, cls).complete_lines(inventories)
+
+        # Create and/or update lines with product that will require lot for
+        # their moves.
+        to_create = []
+        for inventory in inventories:
+            product2lines = defaultdict(list)
+            for line in inventory.lines:
+                if (line.product.lot_is_required(inventory.location,
+                            inventory.lost_found)
+                        or line.product.lot_is_required(inventory.lost_found,
+                            inventory.location)):
+                    product2lines[line.product.id].append(line)
+            if product2lines:
+                with Transaction().set_context(stock_date_end=inventory.date):
+                    pbl = Product.products_by_location([inventory.location.id],
+                        product_ids=product2lines.keys(),
+                        grouping=('product', 'lot'))
+                product_qty = defaultdict(dict)
+                for (location_id, product_id, lot_id), quantity \
+                        in pbl.iteritems():
+                    product_qty[product_id][lot_id] = quantity
+
+                products = Product.browse(product_qty.keys())
+                product2uom = dict((p.id, p.default_uom.id) for p in products)
+
+                for product_id, lines in product2lines.iteritems():
+                    quantities = product_qty[product_id]
+                    uom_id = product2uom[product_id]
+                    for line in lines:
+                        lot_id = line.lot.id if line.lot else None
+                        if lot_id in quantities:
+                            quantity = quantities.pop(lot_id)
+                        elif lot_id is None and quantities:
+                            lot_id = quantities.keys()[0]
+                            quantity = quantities.pop(lot_id)
+                        else:
+                            lot_id = None
+                            quantity = 0.0
+
+                        values = line.update_values4complete(quantity, uom_id)
+                        if (values or lot_id != (line.lot.id
+                                    if line.lot else None)):
+                            values['lot'] = lot_id
+                            Line.write([line], values)
+                    if quantities:
+                        for lot_id, quantity in quantities.iteritems():
+                            values = Line.create_values4complete(product_id,
+                                inventory, quantity, uom_id)
+                            values['lot'] = lot_id
+                            to_create.append(values)
+        if to_create:
+            Line.create(to_create)
+
+
+class InventoryLine:
+    __name__ = 'stock.inventory.line'
+    lot = fields.Many2One('stock.lot', 'Lot',
+        domain=[
+            ('product', '=', Eval('product')),
+            ],
+        depends=['product'])
+
+    @classmethod
+    def __setup__(cls):
+        super(InventoryLine, cls).__setup__()
+        cls._order.insert(1, ('lot', 'ASC'))
+
+    def get_rec_name(self, name):
+        rec_name = super(InventoryLine, self).get_rec_name(name)
+        if self.lot:
+            rec_name += ' - %s' % self.lot.rec_name
+        return rec_name
+
+    @property
+    def unique_key(self):
+        return super(InventoryLine, self).unique_key + (self.lot,)
+
+    def _get_move(self):
+        move = super(InventoryLine, self)._get_move()
+        if move:
+            move.lot = self.lot
+        return move
diff --git a/stock.xml b/stock.xml
index e7b2d80..d12ca2b 100644
--- a/stock.xml
+++ b/stock.xml
@@ -90,5 +90,52 @@ this repository contains the full copyright notices and license terms. -->
             <field name="name">move_tree</field>
         </record>
 
+        <record model="ir.ui.view" id="period_cache_lot_view_form">
+            <field name="model">stock.period.cache.lot</field>
+            <field name="type">form</field>
+            <field name="name">period_cache_lot_form</field>
+        </record>
+        <record model="ir.ui.view" id="period_cache_lot_view_list">
+            <field name="model">stock.period.cache.lot</field>
+            <field name="type">tree</field>
+            <field name="name">period_cache_lot_list</field>
+        </record>
+
+        <record model="ir.model.access" id="access_period_cache_lot">
+            <field name="model" search="[('model', '=', 'stock.period.cache.lot')]"/>
+            <field name="perm_read" eval="False"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
+        <record model="ir.model.access" id="access_period_cache_lot_stock">
+            <field name="model" search="[('model', '=', 'stock.period.cache.lot')]"/>
+            <field name="group" ref="stock.group_stock"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="False"/>
+            <field name="perm_create" eval="False"/>
+            <field name="perm_delete" eval="False"/>
+        </record>
+        <record model="ir.model.access" id="access_period_cache_lot_admin">
+            <field name="model" search="[('model', '=', 'stock.period.cache.lot')]"/>
+            <field name="group" ref="stock.group_stock_admin"/>
+            <field name="perm_read" eval="True"/>
+            <field name="perm_write" eval="True"/>
+            <field name="perm_create" eval="True"/>
+            <field name="perm_delete" eval="True"/>
+        </record>
+
+        <record model="ir.ui.view" id="inventory_line_view_form">
+            <field name="model">stock.inventory.line</field>
+            <field name="inherit" ref="stock.inventory_line_view_form"/>
+            <field name="name">inventory_line_form</field>
+        </record>
+
+        <record model="ir.ui.view" id="inventory_line_view_tree">
+            <field name="model">stock.inventory.line</field>
+            <field name="inherit" ref="stock.inventory_line_view_tree"/>
+            <field name="name">inventory_line_tree</field>
+        </record>
+
     </data>
 </tryton>
diff --git a/tests/__init__.py b/tests/__init__.py
index 96d4ef9..cf849d9 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -2,3 +2,5 @@
 #this repository contains the full copyright notices and license terms.
 
 from .test_stock_lot import suite
+
+__all__ = ['suite']
diff --git a/tests/test_stock_lot.py b/tests/test_stock_lot.py
index a137b11..0a0abce 100644
--- a/tests/test_stock_lot.py
+++ b/tests/test_stock_lot.py
@@ -11,10 +11,15 @@ if os.path.isdir(DIR):
 
 import unittest
 import doctest
+import datetime
+from dateutil.relativedelta import relativedelta
+from decimal import Decimal
 
 import trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view, test_depends
+from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view,\
+    test_depends
 from trytond.backend.sqlite.database import Database as SQLiteDatabase
+from trytond.transaction import Transaction
 
 
 class StockLotTestCase(unittest.TestCase):
@@ -24,6 +29,16 @@ class StockLotTestCase(unittest.TestCase):
 
     def setUp(self):
         trytond.tests.test_tryton.install_module('stock_lot')
+        self.template = POOL.get('product.template')
+        self.product = POOL.get('product.product')
+        self.uom = POOL.get('product.uom')
+        self.lot = POOL.get('stock.lot')
+        self.location = POOL.get('stock.location')
+        self.move = POOL.get('stock.move')
+        self.company = POOL.get('company.company')
+        self.user = POOL.get('res.user')
+        self.period = POOL.get('stock.period')
+        self.cache = POOL.get('stock.period.cache')
 
     def test0005views(self):
         '''
@@ -37,6 +52,203 @@ class StockLotTestCase(unittest.TestCase):
         '''
         test_depends()
 
+    def test0010products_by_location(self):
+        '''
+        Test products_by_location.
+        '''
+        with Transaction().start(DB_NAME, USER, context=CONTEXT):
+            kg, = self.uom.search([('name', '=', 'Kilogram')])
+            g, = self.uom.search([('name', '=', 'Gram')])
+            template, = self.template.create([{
+                        'name': 'Test products_by_location',
+                        'type': 'goods',
+                        'list_price': Decimal(0),
+                        'cost_price': Decimal(0),
+                        'cost_price_method': 'fixed',
+                        'default_uom': kg.id,
+                        }])
+            product, = self.product.create([{
+                        'template': template.id,
+                        }])
+            supplier, = self.location.search([('code', '=', 'SUP')])
+            customer, = self.location.search([('code', '=', 'CUS')])
+            storage, = self.location.search([('code', '=', 'STO')])
+            company, = self.company.search([('rec_name', '=', 'B2CK')])
+            currency = company.currency
+            self.user.write([self.user(USER)], {
+                'main_company': company.id,
+                'company': company.id,
+                })
+
+            lot1, lot2 = self.lot.create([{
+                        'number': '1',
+                        'product': product.id,
+                        }, {
+                        'number': '2',
+                        'product': product.id,
+                        }])
+
+            moves = self.move.create([{
+                        'product': product.id,
+                        'lot': lot1.id,
+                        'uom': kg.id,
+                        'quantity': 5,
+                        'from_location': supplier.id,
+                        'to_location': storage.id,
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }, {
+                        'product': product.id,
+                        'lot': lot2.id,
+                        'uom': kg.id,
+                        'quantity': 10,
+                        'from_location': supplier.id,
+                        'to_location': storage.id,
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }, {
+                        'product': product.id,
+                        'lot': lot2.id,
+                        'uom': kg.id,
+                        'quantity': 2,
+                        'from_location': storage.id,
+                        'to_location': customer.id,
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }, {
+                        'product': product.id,
+                        'lot': None,
+                        'uom': kg.id,
+                        'quantity': 3,
+                        'from_location': supplier.id,
+                        'to_location': storage.id,
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }])
+            self.move.do(moves)
+
+            self.assertEqual(self.product.products_by_location([storage.id],
+                    [product.id]), {
+                    (storage.id, product.id): 16,
+                    })
+            self.assertEqual(self.product.products_by_location([storage.id],
+                    [product.id], grouping=('product', 'lot')), {
+                    (storage.id, product.id, lot1.id): 5,
+                    (storage.id, product.id, lot2.id): 8,
+                    (storage.id, product.id, None): 3,
+                    })
+            with Transaction().set_context(locations=[storage.id]):
+                self.assertEqual(lot1.quantity, 5)
+                self.assertEqual(lot2.quantity, 8)
+
+    def test0020period(self):
+        '''
+        Test period.
+        '''
+        with Transaction().start(DB_NAME, USER, context=CONTEXT):
+            unit, = self.uom.search([('name', '=', 'Unit')])
+            template, = self.template.create([{
+                        'name': 'Test period',
+                        'type': 'goods',
+                        'cost_price_method': 'fixed',
+                        'default_uom': unit.id,
+                        'list_price': Decimal(0),
+                        'cost_price': Decimal(0),
+                        }])
+            product, = self.product.create([{
+                        'template': template.id,
+                        }])
+            supplier, = self.location.search([('code', '=', 'SUP')])
+            storage, = self.location.search([('code', '=', 'STO')])
+            company, = self.company.search([('rec_name', '=', 'B2CK')])
+            currency = company.currency
+            self.user.write([self.user(USER)], {
+                'main_company': company.id,
+                'company': company.id,
+                })
+
+            lot1, lot2 = self.lot.create([{
+                        'number': '1',
+                        'product': product.id,
+                        }, {
+                        'number': '2',
+                        'product': product.id,
+                        }])
+
+            today = datetime.date.today()
+
+            moves = self.move.create([{
+                        'product': product.id,
+                        'lot': lot1.id,
+                        'uom': unit.id,
+                        'quantity': 5,
+                        'from_location': supplier.id,
+                        'to_location': storage.id,
+                        'planned_date': today - relativedelta(days=1),
+                        'effective_date': today - relativedelta(days=1),
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }, {
+                        'product': product.id,
+                        'lot': lot2.id,
+                        'uom': unit.id,
+                        'quantity': 10,
+                        'from_location': supplier.id,
+                        'to_location': storage.id,
+                        'planned_date': today - relativedelta(days=1),
+                        'effective_date': today - relativedelta(days=1),
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }, {
+                        'product': product.id,
+                        'lot': None,
+                        'uom': unit.id,
+                        'quantity': 3,
+                        'from_location': supplier.id,
+                        'to_location': storage.id,
+                        'planned_date': today - relativedelta(days=1),
+                        'effective_date': today - relativedelta(days=1),
+                        'company': company.id,
+                        'unit_price': Decimal('1'),
+                        'currency': currency.id,
+                        }])
+            self.move.do(moves)
+
+            period, = self.period.create([{
+                        'date': today - relativedelta(days=1),
+                        'company': company.id,
+                        }])
+            self.period.close([period])
+            self.assertEqual(period.state, 'closed')
+
+            quantities = {
+                supplier: -18,
+                storage: 18,
+                }
+            for cache in period.caches:
+                self.assertEqual(cache.product, product)
+                self.assertEqual(cache.internal_quantity,
+                    quantities[cache.location])
+
+            quantities = {
+                (supplier, lot1): -5,
+                (storage, lot1): 5,
+                (supplier, lot2): -10,
+                (storage, lot2): 10,
+                (supplier, None): -3,
+                (storage, None): 3,
+                }
+            for lot_cache in period.lot_caches:
+                self.assertEqual(lot_cache.product, product)
+                self.assertEqual(lot_cache.internal_quantity,
+                    quantities[(lot_cache.location, lot_cache.lot)])
+
 
 def doctest_dropdb(test):
     '''
@@ -53,6 +265,10 @@ def doctest_dropdb(test):
 
 def suite():
     suite = trytond.tests.test_tryton.suite()
+    from trytond.modules.company.tests import test_company
+    for test in test_company.suite():
+        if test not in suite:
+            suite.addTest(test)
     suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
             StockLotTestCase))
     suite.addTests(doctest.DocFileSuite('scenario_stock_lot_shipment_out.rst',
diff --git a/tryton.cfg b/tryton.cfg
index 1d48d02..d6d3790 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
 [tryton]
-version=2.8.0
+version=3.0.0
 depends:
     ir
     product
diff --git a/trytond_stock_lot.egg-info/PKG-INFO b/trytond_stock_lot.egg-info/PKG-INFO
index 1d54c97..ebdd1f9 100644
--- a/trytond_stock_lot.egg-info/PKG-INFO
+++ b/trytond_stock_lot.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond-stock-lot
-Version: 2.8.0
+Version: 3.0.0
 Summary: Tryton module for lot of products
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: UNKNOWN
 License: GPL-3
-Download-URL: http://downloads.tryton.org/2.8/
+Download-URL: http://downloads.tryton.org/3.0/
 Description: trytond_stock_lot
         =================
         
@@ -60,6 +60,7 @@ Classifier: Natural Language :: English
 Classifier: Natural Language :: French
 Classifier: Natural Language :: German
 Classifier: Natural Language :: Russian
+Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Spanish
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 2.6
diff --git a/trytond_stock_lot.egg-info/SOURCES.txt b/trytond_stock_lot.egg-info/SOURCES.txt
index 5b81fd1..68da135 100644
--- a/trytond_stock_lot.egg-info/SOURCES.txt
+++ b/trytond_stock_lot.egg-info/SOURCES.txt
@@ -24,6 +24,7 @@ locale/es_ES.po
 locale/fr_FR.po
 locale/nl_NL.po
 locale/ru_RU.po
+locale/sl_SI.po
 tests/scenario_stock_lot_shipment_out.rst
 trytond_stock_lot.egg-info/PKG-INFO
 trytond_stock_lot.egg-info/SOURCES.txt
@@ -32,8 +33,12 @@ trytond_stock_lot.egg-info/entry_points.txt
 trytond_stock_lot.egg-info/not-zip-safe
 trytond_stock_lot.egg-info/requires.txt
 trytond_stock_lot.egg-info/top_level.txt
+view/inventory_line_form.xml
+view/inventory_line_tree.xml
 view/lot_form.xml
 view/lot_tree.xml
 view/move_form.xml
 view/move_tree.xml
+view/period_cache_lot_form.xml
+view/period_cache_lot_list.xml
 view/template_form.xml
\ No newline at end of file
diff --git a/trytond_stock_lot.egg-info/requires.txt b/trytond_stock_lot.egg-info/requires.txt
index eb4aa19..943e3c2 100644
--- a/trytond_stock_lot.egg-info/requires.txt
+++ b/trytond_stock_lot.egg-info/requires.txt
@@ -1,3 +1,3 @@
-trytond_product >= 2.8, < 2.9
-trytond_stock >= 2.8, < 2.9
-trytond >= 2.8, < 2.9
\ No newline at end of file
+trytond_product >= 3.0, < 3.1
+trytond_stock >= 3.0, < 3.1
+trytond >= 3.0, < 3.1
\ No newline at end of file
diff --git a/view/inventory_line_form.xml b/view/inventory_line_form.xml
new file mode 100644
index 0000000..6882aa4
--- /dev/null
+++ b/view/inventory_line_form.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+    <xpath expr="/form/field[@name='product']" position="after">
+        <label name="lot"/>
+        <field name="lot"/>
+    </xpath>
+</data>
diff --git a/view/inventory_line_tree.xml b/view/inventory_line_tree.xml
new file mode 100644
index 0000000..0d6460f
--- /dev/null
+++ b/view/inventory_line_tree.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+    <xpath expr="/tree/field[@name='product']" position="after">
+        <field name="lot"/>
+    </xpath>
+</data>
diff --git a/view/period_cache_lot_form.xml b/view/period_cache_lot_form.xml
new file mode 100644
index 0000000..02e525a
--- /dev/null
+++ b/view/period_cache_lot_form.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form string="Period Lot Cache" col="8">
+    <label name="period"/>
+    <field name="period" colspan="6"/>
+    <label name="location"/>
+    <field name="location"/>
+    <label name="product"/>
+    <field name="product"/>
+    <label name="lot"/>
+    <field name="lot"/>
+    <label name="internal_quantity"/>
+    <field name="internal_quantity"/>
+</form>
diff --git a/view/period_cache_lot_list.xml b/view/period_cache_lot_list.xml
new file mode 100644
index 0000000..060418d
--- /dev/null
+++ b/view/period_cache_lot_list.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Period Lot Caches">
+    <field name="period"/>
+    <field name="location"/>
+    <field name="product"/>
+    <field name="lot"/>
+    <field name="internal_quantity"/>
+</tree>
commit d611d86f41089a2023021f76852e2d2c5c590b69
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Thu May 2 00:38:03 2013 +0200

    Adding upstream version 2.8.0.

diff --git a/CHANGELOG b/CHANGELOG
index 210505e..3ac4e21 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,6 @@
+Version 2.8.0 - 2013-04-22
+* Bug fixes (see mercurial logs for details)
+
 Version 2.6.0 - 2012-10-22
 * Bug fixes (see mercurial logs for details)
 
diff --git a/COPYRIGHT b/COPYRIGHT
index 747ae18..7668cfa 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,5 +1,5 @@
-Copyright (C) 2012 Cédric Krier.
-Copyright (C) 2012 B2CK SPRL.
+Copyright (C) 2012-2013 Cédric Krier.
+Copyright (C) 2012-2013 B2CK SPRL.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/MANIFEST.in b/MANIFEST.in
index 501657d..f040e5e 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,6 +6,7 @@ include CHANGELOG
 include LICENSE
 include tryton.cfg
 include *.xml
+include view/*.xml
 include *.odt
 include locale/*.po
 include doc/*
diff --git a/PKG-INFO b/PKG-INFO
index a38a3d5..aa102f8 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: trytond_stock_lot
-Version: 2.6.0
+Version: 2.8.0
 Summary: Tryton module for lot of products
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: UNKNOWN
 License: GPL-3
-Download-URL: http://downloads.tryton.org/2.6/
+Download-URL: http://downloads.tryton.org/2.8/
 Description: trytond_stock_lot
         =================
         
@@ -53,6 +53,7 @@ Classifier: Intended Audience :: Legal Industry
 Classifier: Intended Audience :: Manufacturing
 Classifier: License :: OSI Approved :: GNU General Public License (GPL)
 Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Catalan
 Classifier: Natural Language :: Czech
 Classifier: Natural Language :: Dutch
 Classifier: Natural Language :: English
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index c1368b5..75605bb 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -3,8 +3,8 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
-msgstr "За движение на прокудт \"%s\" е неоходима партида!"
+msgid "Lot is required for move of product \"%s\"."
+msgstr ""
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
@@ -158,6 +158,11 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Партиди"
 
+#, fuzzy
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Партиди"
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr "Партида"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index 8120692..65b0bda 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -3,194 +3,169 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
-msgstr ""
+msgid "Lot is required for move of product \"%s\"."
+msgstr "El lot es requerit pel moviment del producte \"%s\"."
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
-msgstr ""
+msgstr "Lot obligatori"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,create_date:"
 msgid "Create Date"
 msgstr "Data creació"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,create_uid:"
 msgid "Create User"
 msgstr "Usuari creació"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,id:"
 msgid "ID"
 msgstr "ID"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,template:"
 msgid "Template"
 msgstr "Plantilla"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,type:"
 msgid "Type"
 msgstr "Tipus"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,write_date:"
 msgid "Write Date"
 msgstr "Data modificació"
 
-#, fuzzy
 msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Usuari modificació"
 
-#, fuzzy
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
 msgstr "Data creació"
 
-#, fuzzy
 msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
 msgstr "Usuari creació"
 
-#, fuzzy
 msgctxt "field:stock.lot,id:"
 msgid "ID"
 msgstr "ID"
 
-#, fuzzy
 msgctxt "field:stock.lot,number:"
 msgid "Number"
 msgstr "Número"
 
-#, fuzzy
 msgctxt "field:stock.lot,product:"
 msgid "Product"
 msgstr "Productes"
 
-#, fuzzy
 msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
-#, fuzzy
 msgctxt "field:stock.lot,write_date:"
 msgid "Write Date"
 msgstr "Data modificació"
 
-#, fuzzy
 msgctxt "field:stock.lot,write_uid:"
 msgid "Write User"
 msgstr "Usuari modificació"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,code:"
 msgid "Code"
 msgstr "Codi"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,create_date:"
 msgid "Create Date"
 msgstr "Data creació"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,create_uid:"
 msgid "Create User"
 msgstr "Usuari creació"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,id:"
 msgid "ID"
 msgstr "ID"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,name:"
 msgid "Name"
 msgstr "Nom"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,rec_name:"
 msgid "Name"
 msgstr "Nom"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,write_date:"
 msgid "Write Date"
 msgstr "Data modificació"
 
-#, fuzzy
 msgctxt "field:stock.lot.type,write_uid:"
 msgid "Write User"
 msgstr "Usuari modificació"
 
 msgctxt "field:stock.move,lot:"
 msgid "Lot"
-msgstr ""
+msgstr "Lot"
 
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
-msgstr ""
+msgstr "Tipus d'ubicació per la qual el lot és obligatori"
 
 msgctxt "model:ir.action,name:act_lot_form"
 msgid "Lots"
-msgstr ""
+msgstr "Lots"
 
 msgctxt "model:ir.ui.menu,name:menu_lot_form"
 msgid "Lots"
-msgstr ""
+msgstr "Lots"
 
 msgctxt "model:product.template-stock.lot.type,name:"
 msgid "Template - Stock Lot Type"
-msgstr ""
+msgstr "Plantilla - Tipus de lot"
 
 msgctxt "model:stock.lot,name:"
 msgid "Stock Lot"
-msgstr ""
+msgstr "Lot"
 
 msgctxt "model:stock.lot.type,name:"
 msgid "Stock Lot Type"
-msgstr ""
+msgstr "Tipus de lot"
 
-#, fuzzy
 msgctxt "model:stock.lot.type,name:type_customer"
 msgid "Customer"
 msgstr "Client"
 
-#, fuzzy
 msgctxt "model:stock.lot.type,name:type_lost_found"
 msgid "Lost and Found"
 msgstr "Perdut/trobat"
 
-#, fuzzy
 msgctxt "model:stock.lot.type,name:type_production"
 msgid "Production"
 msgstr "Producció"
 
-#, fuzzy
 msgctxt "model:stock.lot.type,name:type_storage"
 msgid "Storage"
-msgstr "Magatzem"
+msgstr "Emmagatzemament"
 
-#, fuzzy
 msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
 msgstr "Proveïdor"
 
 msgctxt "view:product.product:"
 msgid "Lots"
-msgstr ""
+msgstr "Lots"
+
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Lots"
 
 msgctxt "view:stock.lot:"
 msgid "Lot"
-msgstr ""
+msgstr "Lot"
 
 msgctxt "view:stock.lot:"
 msgid "Lots"
-msgstr ""
+msgstr "Lots"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 8583d0f..837c670 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -3,7 +3,7 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
+msgid "Lot is required for move of product \"%s\"."
 msgstr ""
 
 msgctxt "field:product.template,lot_required:"
@@ -159,6 +159,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr ""
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr ""
+
 #, fuzzy
 msgctxt "view:stock.lot:"
 msgid "Lot"
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 40d6979..291ccb7 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -3,8 +3,8 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
-msgstr "Chargen-Nummer ist erforderlich für Lagerbewegung von Artikel \"%s\"!"
+msgid "Lot is required for move of product \"%s\"."
+msgstr "Chargen-Nummer erforderlich für Lagerbewegung von Artikel \"%s\"."
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
@@ -112,7 +112,7 @@ msgstr "Charge"
 
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
-msgstr "Typ Lagerort, für den eine Chargen-Nummer erforderlich ist"
+msgstr "Typ des Lagerorts, für den eine Chargen-Nummer erforderlich ist"
 
 msgctxt "model:ir.action,name:act_lot_form"
 msgid "Lots"
@@ -158,6 +158,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Chargen"
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Chargen"
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr "Charge"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 8c84060..36350f3 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -3,8 +3,8 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
-msgstr "¡El lote es requerido para mover el producto «%s»! "
+msgid "Lot is required for move of product \"%s\"."
+msgstr "El lote es requerido para el movimiento del producto «%s»."
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
@@ -112,7 +112,7 @@ msgstr "Lote"
 
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
-msgstr "El tipo de locación para la cual el lote es requerido"
+msgstr "El tipo de ubicación para la cual el lote es requerido"
 
 msgctxt "model:ir.action,name:act_lot_form"
 msgid "Lots"
@@ -124,15 +124,15 @@ msgstr "Lotes"
 
 msgctxt "model:product.template-stock.lot.type,name:"
 msgid "Template - Stock Lot Type"
-msgstr "Plantilla - Tipo de Lote de Inventario"
+msgstr "Plantilla - Tipo de lote de inventario"
 
 msgctxt "model:stock.lot,name:"
 msgid "Stock Lot"
-msgstr "Lote de Inventario"
+msgstr "Lote de inventario"
 
 msgctxt "model:stock.lot.type,name:"
 msgid "Stock Lot Type"
-msgstr "Tipo de Lote de Inventario"
+msgstr "Tipo de lote de inventario"
 
 msgctxt "model:stock.lot.type,name:type_customer"
 msgid "Customer"
@@ -148,7 +148,7 @@ msgstr "Producción"
 
 msgctxt "model:stock.lot.type,name:type_storage"
 msgid "Storage"
-msgstr "Almacén"
+msgstr "Depósito"
 
 msgctxt "model:stock.lot.type,name:type_supplier"
 msgid "Supplier"
@@ -158,6 +158,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lotes"
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Lotes"
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr "Lote"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index d6c1a6c..22e48cd 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -3,8 +3,8 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
-msgstr "El lote es requerido para mover el producto \"%s\"! "
+msgid "Lot is required for move of product \"%s\"."
+msgstr ""
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
@@ -24,7 +24,7 @@ msgstr "ID"
 
 msgctxt "field:product.template-stock.lot.type,rec_name:"
 msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
 
 msgctxt "field:product.template-stock.lot.type,template:"
 msgid "Template"
@@ -36,7 +36,7 @@ msgstr "Tipo"
 
 msgctxt "field:product.template-stock.lot.type,write_date:"
 msgid "Write Date"
-msgstr "Fecha modificación"
+msgstr "Fecha de Modificación"
 
 msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
@@ -96,7 +96,7 @@ msgstr "Nombre"
 
 msgctxt "field:stock.lot.type,rec_name:"
 msgid "Name"
-msgstr "Nombre del campo"
+msgstr "Nombre"
 
 msgctxt "field:stock.lot.type,write_date:"
 msgid "Write Date"
@@ -112,7 +112,7 @@ msgstr "Lote"
 
 msgctxt "help:product.template,lot_required:"
 msgid "The type of location for which lot is required"
-msgstr "El tipo de locación para la cual el lote es requerido"
+msgstr "El tipo de bodega para la cual el lote es requerido"
 
 msgctxt "model:ir.action,name:act_lot_form"
 msgid "Lots"
@@ -124,7 +124,7 @@ msgstr "Lotes"
 
 msgctxt "model:product.template-stock.lot.type,name:"
 msgid "Template - Stock Lot Type"
-msgstr "Plantilla - Tipo de Lote de Inventario"
+msgstr "Plantilla - Tipo Lote de Inventario"
 
 msgctxt "model:stock.lot,name:"
 msgid "Stock Lot"
@@ -158,6 +158,11 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lotes"
 
+#, fuzzy
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Lotes"
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr "Lote"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index ac84f24..9341b02 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -3,7 +3,7 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
+msgid "Lot is required for move of product \"%s\"."
 msgstr "El lote es requerido para el movimiento del producto \"%s\"."
 
 msgctxt "field:product.template,lot_required:"
@@ -158,6 +158,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lotes"
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Lotes"
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr "Lote"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index b2fbf91..fe63cbb 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -3,8 +3,8 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
-msgstr "Un lot est requis pour les mouvements du produit \"%s\""
+msgid "Lot is required for move of product \"%s\"."
+msgstr "Un lot est requis pour les mouvements du produit \"%s\"."
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
@@ -158,6 +158,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr "Lots"
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr "Lots"
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr "Lot"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index 3711f76..c05fb75 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -3,7 +3,7 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
+msgid "Lot is required for move of product \"%s\"."
 msgstr ""
 
 msgctxt "field:product.template,lot_required:"
@@ -170,6 +170,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr ""
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr ""
+
 #, fuzzy
 msgctxt "view:stock.lot:"
 msgid "Lot"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index 3fd080c..fc117d6 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -3,62 +3,72 @@ msgid ""
 msgstr "Content-Type: text/plain; charset=utf-8\n"
 
 msgctxt "error:stock.move:"
-msgid "Lot is required for move of product \"%s\"!"
+msgid "Lot is required for move of product \"%s\"."
 msgstr ""
 
 msgctxt "field:product.template,lot_required:"
 msgid "Lot Required"
 msgstr ""
 
+#, fuzzy
 msgctxt "field:product.template-stock.lot.type,create_date:"
 msgid "Create Date"
-msgstr ""
+msgstr "Дата создания"
 
+#, fuzzy
 msgctxt "field:product.template-stock.lot.type,create_uid:"
 msgid "Create User"
-msgstr ""
+msgstr "Создано пользователем"
 
+#, fuzzy
 msgctxt "field:product.template-stock.lot.type,id:"
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
 #, fuzzy
 msgctxt "field:product.template-stock.lot.type,rec_name:"
 msgid "Name"
 msgstr "Наименование"
 
+#, fuzzy
 msgctxt "field:product.template-stock.lot.type,template:"
 msgid "Template"
-msgstr ""
+msgstr "Шаблон"
 
 #, fuzzy
 msgctxt "field:product.template-stock.lot.type,type:"
 msgid "Type"
 msgstr "Тип"
 
+#, fuzzy
 msgctxt "field:product.template-stock.lot.type,write_date:"
 msgid "Write Date"
-msgstr ""
+msgstr "Дата изменения"
 
+#, fuzzy
 msgctxt "field:product.template-stock.lot.type,write_uid:"
 msgid "Write User"
-msgstr ""
+msgstr "Изменено пользователем"
 
+#, fuzzy
 msgctxt "field:stock.lot,create_date:"
 msgid "Create Date"
-msgstr ""
+msgstr "Дата создания"
 
+#, fuzzy
 msgctxt "field:stock.lot,create_uid:"
 msgid "Create User"
-msgstr ""
+msgstr "Создано пользователем"
 
+#, fuzzy
 msgctxt "field:stock.lot,id:"
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
+#, fuzzy
 msgctxt "field:stock.lot,number:"
 msgid "Number"
-msgstr ""
+msgstr "Номер"
 
 #, fuzzy
 msgctxt "field:stock.lot,product:"
@@ -70,30 +80,35 @@ msgctxt "field:stock.lot,rec_name:"
 msgid "Name"
 msgstr "Наименование"
 
+#, fuzzy
 msgctxt "field:stock.lot,write_date:"
 msgid "Write Date"
-msgstr ""
+msgstr "Дата изменения"
 
+#, fuzzy
 msgctxt "field:stock.lot,write_uid:"
 msgid "Write User"
-msgstr ""
+msgstr "Изменено пользователем"
 
 #, fuzzy
 msgctxt "field:stock.lot.type,code:"
 msgid "Code"
 msgstr "Код страны"
 
+#, fuzzy
 msgctxt "field:stock.lot.type,create_date:"
 msgid "Create Date"
-msgstr ""
+msgstr "Дата создания"
 
+#, fuzzy
 msgctxt "field:stock.lot.type,create_uid:"
 msgid "Create User"
-msgstr ""
+msgstr "Создано пользователем"
 
+#, fuzzy
 msgctxt "field:stock.lot.type,id:"
 msgid "ID"
-msgstr ""
+msgstr "ID"
 
 #, fuzzy
 msgctxt "field:stock.lot.type,name:"
@@ -105,13 +120,15 @@ msgctxt "field:stock.lot.type,rec_name:"
 msgid "Name"
 msgstr "Наименование"
 
+#, fuzzy
 msgctxt "field:stock.lot.type,write_date:"
 msgid "Write Date"
-msgstr ""
+msgstr "Дата изменения"
 
+#, fuzzy
 msgctxt "field:stock.lot.type,write_uid:"
 msgid "Write User"
-msgstr ""
+msgstr "Изменено пользователем"
 
 msgctxt "field:stock.move,lot:"
 msgid "Lot"
@@ -170,6 +187,10 @@ msgctxt "view:product.product:"
 msgid "Lots"
 msgstr ""
 
+msgctxt "view:product.template:"
+msgid "Lots"
+msgstr ""
+
 msgctxt "view:stock.lot:"
 msgid "Lot"
 msgstr ""
diff --git a/product.xml b/product.xml
index 7137702..70184cd 100644
--- a/product.xml
+++ b/product.xml
@@ -3,22 +3,10 @@
 this repository contains the full copyright notices and license terms. -->
 <tryton>
     <data>
-        <record model="ir.ui.view" id="product_view_form">
-            <field name="model">product.product</field>
-            <field name="inherit" ref="product.product_view_form"/>
-            <field name="arch" type="xml">
-                <![CDATA[
-                <data>
-                    <xpath expr="/form/notebook/page[@id='general']"
-                        position="after">
-                        <page string="Lots" id="lots"
-                            states="{'invisible': ~Eval('type').in_(['goods', 'assets'])}">
-                            <field name="lot_required" colspan="4"/>
-                        </page>
-                    </xpath>
-                </data>
-                ]]>
-            </field>
+        <record model="ir.ui.view" id="template_view_form">
+            <field name="model">product.template</field>
+            <field name="inherit" ref="product.template_view_form"/>
+            <field name="name">template_form</field>
         </record>
     </data>
 </tryton>
diff --git a/setup.py b/setup.py
index 5523a8e..46abc2d 100644
--- a/setup.py
+++ b/setup.py
@@ -25,10 +25,10 @@ requires = []
 for dep in info.get('depends', []):
     if not re.match(r'(ir|res|webdav)(\W|$)', dep):
         requires.append('trytond_%s >= %s.%s, < %s.%s' %
-                (dep, major_version, minor_version, major_version,
-                    minor_version + 1))
+            (dep, major_version, minor_version, major_version,
+                minor_version + 1))
 requires.append('trytond >= %s.%s, < %s.%s' %
-        (major_version, minor_version, major_version, minor_version + 1))
+    (major_version, minor_version, major_version, minor_version + 1))
 tests_require = ['proteus >= %s.%s, < %s.%s' %
     (major_version, minor_version, major_version, minor_version + 1)]
 
@@ -38,17 +38,16 @@ setup(name='trytond_stock_lot',
     long_description=read('README'),
     author='Tryton',
     url='http://www.tryton.org/',
-    download_url="http://downloads.tryton.org/" + \
-        info.get('version', '0.0.1').rsplit('.', 1)[0] + '/',
+    download_url=("http://downloads.tryton.org/" +
+        info.get('version', '0.0.1').rsplit('.', 1)[0] + '/'),
     package_dir={'trytond.modules.stock_lot': '.'},
     packages=[
         'trytond.modules.stock_lot',
         'trytond.modules.stock_lot.tests',
         ],
     package_data={
-        'trytond.modules.stock_lot': info.get('xml', []) \
-            + ['tryton.cfg', 'locale/*.po', '*.odt', 'icons/*.svg',
-                  'tests/*.rst'],
+        'trytond.modules.stock_lot': (info.get('xml', [])
+            + ['tryton.cfg', 'view/*.xml', 'locale/*.po', 'tests/*.rst']),
         },
     classifiers=[
         'Development Status :: 5 - Production/Stable',
@@ -60,6 +59,7 @@ setup(name='trytond_stock_lot',
         'Intended Audience :: Manufacturing',
         'License :: OSI Approved :: GNU General Public License (GPL)',
         'Natural Language :: Bulgarian',
+        'Natural Language :: Catalan',
         'Natural Language :: Czech',
         'Natural Language :: Dutch',
         'Natural Language :: English',
diff --git a/stock.py b/stock.py
index 3a9bfb1..73bdc51 100644
--- a/stock.py
+++ b/stock.py
@@ -39,7 +39,7 @@ class Move:
     def __setup__(cls):
         super(Move, cls).__setup__()
         cls._error_messages.update({
-                'lot_required': 'Lot is required for move of product "%s"!',
+                'lot_required': 'Lot is required for move of product "%s".',
                 })
 
     @classmethod
@@ -47,16 +47,17 @@ class Move:
         "Check if lot is required"
         for move in moves:
             if (move.state == 'done'
+                    and move.internal_quantity
                     and not move.lot
                     and move.product.lot_is_required(
                         move.from_location, move.to_location)):
                 cls.raise_user_error('lot_required', (move.product.rec_name,))
 
     @classmethod
-    def create(cls, values):
-        move = super(Move, cls).create(values)
-        cls.check_lot([move])
-        return move
+    def create(cls, vlist):
+        moves = super(Move, cls).create(vlist)
+        cls.check_lot(moves)
+        return moves
 
     @classmethod
     def write(cls, moves, values):
@@ -69,10 +70,10 @@ class ShipmentIn:
 
     @classmethod
     def _get_inventory_moves(cls, incoming_move):
-        result = super(ShipmentIn, cls)._get_inventory_moves(incoming_move)
-        if result and incoming_move.lot:
-            result['lot'] = incoming_move.lot.id
-        return result
+        move = super(ShipmentIn, cls)._get_inventory_moves(incoming_move)
+        if move and incoming_move.lot:
+            move.lot = incoming_move.lot
+        return move
 
 
 class ShipmentOut:
@@ -89,10 +90,7 @@ class ShipmentOut:
         super(ShipmentOut, cls).pack(shipments)
 
         # Unassign move to allow update
-        Move.write([m for s in shipments for m in s.outgoing_moves
-                if m.state not in ('done', 'cancel')], {
-                'state': 'draft',
-                })
+        Move.draft([m for s in shipments for m in s.outgoing_moves])
 
         for shipment in shipments:
             outgoing_by_product = {}
@@ -123,10 +121,7 @@ class ShipmentOut:
                     quantity -= out_quantity
                 assert quantity <= 0
 
-        Move.write([m for s in shipments for m in s.outgoing_moves
-                if m.state != 'cancel'], {
-                'state': 'assigned',
-                })
+        Move.assign([m for s in shipments for m in s.outgoing_moves])
 
 
 class ShipmentOutReturn:
@@ -134,8 +129,8 @@ class ShipmentOutReturn:
 
     @classmethod
     def _get_inventory_moves(cls, incoming_move):
-        result = super(ShipmentOutReturn,
+        move = super(ShipmentOutReturn,
             cls)._get_inventory_moves(incoming_move)
-        if result and incoming_move.lot:
-            result['lot'] = incoming_move.lot.id
-        return result
+        if move and incoming_move.lot:
+            move.lot = incoming_move.lot
+        return move
diff --git a/stock.xml b/stock.xml
index 612080c..e7b2d80 100644
--- a/stock.xml
+++ b/stock.xml
@@ -6,29 +6,13 @@ this repository contains the full copyright notices and license terms. -->
         <record model="ir.ui.view" id="lot_view_form">
             <field name="model">stock.lot</field>
             <field name="type">form</field>
-            <field name="arch" type="xml">
-                <![CDATA[
-                <form string="Lot">
-                    <label name="number"/>
-                    <field name="number"/>
-                    <label name="product"/>
-                    <field name="product"/>
-                </form>
-                ]]>
-            </field>
+            <field name="name">lot_form</field>
         </record>
 
         <record model="ir.ui.view" id="lot_view_tree">
             <field name="model">stock.lot</field>
             <field name="type">tree</field>
-            <field name="arch" type="xml">
-                <![CDATA[
-                <tree string="Lots">
-                    <field name="number"/>
-                    <field name="product"/>
-                </tree>
-                ]]>
-            </field>
+            <field name="name">lot_tree</field>
         </record>
 
         <record model="ir.action.act_window" id="act_lot_form">
@@ -97,33 +81,13 @@ this repository contains the full copyright notices and license terms. -->
         <record model="ir.ui.view" id="move_view_form">
             <field name="model">stock.move</field>
             <field name="inherit" ref="stock.move_view_form"/>
-            <field name="arch" type="xml">
-                <![CDATA[
-                <data>
-                    <xpath expr="/form/field[@name='company']"
-                        position="after">
-                        <label name="lot"/>
-                        <field name="lot"/>
-                        <newline/>
-                    </xpath>
-                </data>
-                ]]>
-            </field>
+            <field name="name">move_form</field>
         </record>
 
         <record model="ir.ui.view" id="move_view_tree">
             <field name="model">stock.move</field>
             <field name="inherit" ref="stock.move_view_tree"/>
-            <field name="arch" type="xml">
-                <![CDATA[
-                <data>
-                    <xpath expr="/tree/field[@name='product']"
-                        position="after">
-                        <field name="lot"/>
-                    </xpath>
-                </data>
-                ]]>
-            </field>
+            <field name="name">move_tree</field>
         </record>
 
     </data>
diff --git a/tests/scenario_stock_lot_shipment_out.rst b/tests/scenario_stock_lot_shipment_out.rst
index ab7cfca..8a8b2e2 100644
--- a/tests/scenario_stock_lot_shipment_out.rst
+++ b/tests/scenario_stock_lot_shipment_out.rst
@@ -31,10 +31,13 @@ Create company::
     >>> Currency = Model.get('currency.currency')
     >>> CurrencyRate = Model.get('currency.currency.rate')
     >>> Company = Model.get('company.company')
+    >>> Party = Model.get('party.party')
     >>> company_config = Wizard('company.company.config')
     >>> company_config.execute('company')
     >>> company = company_config.form
-    >>> company.name = 'B2CK'
+    >>> party = Party(name='B2CK')
+    >>> party.save()
+    >>> company.party = party
     >>> currencies = Currency.find([('code', '=', 'EUR')])
     >>> if not currencies:
     ...     currency = Currency(name='Euro', symbol=u'€', code='EUR',
@@ -63,14 +66,18 @@ Create customer::
 Create product::
 
     >>> ProductUom = Model.get('product.uom')
+    >>> ProductTemplate = Model.get('product.template')
     >>> Product = Model.get('product.product')
     >>> unit, = ProductUom.find([('name', '=', 'Unit')])
     >>> product = Product()
-    >>> product.name = 'Product'
-    >>> product.default_uom = unit
-    >>> product.type = 'goods'
-    >>> product.list_price = Decimal('20')
-    >>> product.cost_price = Decimal('8')
+    >>> template = ProductTemplate()
+    >>> template.name = 'Product'
+    >>> template.default_uom = unit
+    >>> template.type = 'goods'
+    >>> template.list_price = Decimal('20')
+    >>> template.cost_price = Decimal('8')
+    >>> template.save()
+    >>> product.template = template
     >>> product.save()
 
 Get stock locations::
diff --git a/tryton.cfg b/tryton.cfg
index c26f57d..1d48d02 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
 [tryton]
-version=2.6.0
+version=2.8.0
 depends:
     ir
     product
diff --git a/trytond_stock_lot.egg-info/PKG-INFO b/trytond_stock_lot.egg-info/PKG-INFO
index f3cce79..1d54c97 100644
--- a/trytond_stock_lot.egg-info/PKG-INFO
+++ b/trytond_stock_lot.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: trytond-stock-lot
-Version: 2.6.0
+Version: 2.8.0
 Summary: Tryton module for lot of products
 Home-page: http://www.tryton.org/
 Author: Tryton
 Author-email: UNKNOWN
 License: GPL-3
-Download-URL: http://downloads.tryton.org/2.6/
+Download-URL: http://downloads.tryton.org/2.8/
 Description: trytond_stock_lot
         =================
         
@@ -53,6 +53,7 @@ Classifier: Intended Audience :: Legal Industry
 Classifier: Intended Audience :: Manufacturing
 Classifier: License :: OSI Approved :: GNU General Public License (GPL)
 Classifier: Natural Language :: Bulgarian
+Classifier: Natural Language :: Catalan
 Classifier: Natural Language :: Czech
 Classifier: Natural Language :: Dutch
 Classifier: Natural Language :: English
diff --git a/trytond_stock_lot.egg-info/SOURCES.txt b/trytond_stock_lot.egg-info/SOURCES.txt
index aeda6a6..5b81fd1 100644
--- a/trytond_stock_lot.egg-info/SOURCES.txt
+++ b/trytond_stock_lot.egg-info/SOURCES.txt
@@ -31,4 +31,9 @@ trytond_stock_lot.egg-info/dependency_links.txt
 trytond_stock_lot.egg-info/entry_points.txt
 trytond_stock_lot.egg-info/not-zip-safe
 trytond_stock_lot.egg-info/requires.txt
-trytond_stock_lot.egg-info/top_level.txt
\ No newline at end of file
+trytond_stock_lot.egg-info/top_level.txt
+view/lot_form.xml
+view/lot_tree.xml
+view/move_form.xml
+view/move_tree.xml
+view/template_form.xml
\ No newline at end of file
diff --git a/trytond_stock_lot.egg-info/requires.txt b/trytond_stock_lot.egg-info/requires.txt
index 2480e97..eb4aa19 100644
--- a/trytond_stock_lot.egg-info/requires.txt
+++ b/trytond_stock_lot.egg-info/requires.txt
@@ -1,3 +1,3 @@
-trytond_product >= 2.6, < 2.7
-trytond_stock >= 2.6, < 2.7
-trytond >= 2.6, < 2.7
\ No newline at end of file
+trytond_product >= 2.8, < 2.9
+trytond_stock >= 2.8, < 2.9
+trytond >= 2.8, < 2.9
\ No newline at end of file
diff --git a/view/lot_form.xml b/view/lot_form.xml
new file mode 100644
index 0000000..4a57473
--- /dev/null
+++ b/view/lot_form.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form string="Lot">
+    <label name="number"/>
+    <field name="number"/>
+    <label name="product"/>
+    <field name="product"/>
+</form>
diff --git a/view/lot_tree.xml b/view/lot_tree.xml
new file mode 100644
index 0000000..d721d9c
--- /dev/null
+++ b/view/lot_tree.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree string="Lots">
+    <field name="number"/>
+    <field name="product"/>
+</tree>
diff --git a/view/move_form.xml b/view/move_form.xml
new file mode 100644
index 0000000..dc45fe4
--- /dev/null
+++ b/view/move_form.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+    <xpath expr="/form/field[@name='company']" position="after">
+        <label name="lot"/>
+        <field name="lot"/>
+        <newline/>
+    </xpath>
+</data>
diff --git a/view/move_tree.xml b/view/move_tree.xml
new file mode 100644
index 0000000..0d6460f
--- /dev/null
+++ b/view/move_tree.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+    <xpath expr="/tree/field[@name='product']" position="after">
+        <field name="lot"/>
+    </xpath>
+</data>
diff --git a/view/template_form.xml b/view/template_form.xml
new file mode 100644
index 0000000..df0c3f5
--- /dev/null
+++ b/view/template_form.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<data>
+    <xpath expr="/form/notebook/page[@id='general']" position="after">
+        <page string="Lots" id="lots"
+            states="{'invisible': ~Eval('type').in_(['goods', 'assets'])}">
+            <field name="lot_required" colspan="4"/>
+        </page>
+    </xpath>
+</data>
-- 
tryton-modules-stock-lot



More information about the tryton-debian-vcs mailing list