[tryton-debian-vcs] tryton-modules-stock branch upstream updated. upstream/3.4.1-1-g491257f
Mathias Behrle
tryton-debian-vcs at alioth.debian.org
Thu Apr 23 16:06:48 UTC 2015
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.git;a=commitdiff;h=upstream/3.4.1-1-g491257f
commit 491257fd51187c377349517d42ed22cfb2f7b5fe
Author: Mathias Behrle <mathiasb at m9s.biz>
Date: Thu Apr 23 17:00:06 2015 +0200
Adding upstream version 3.6.0.
Signed-off-by: Mathias Behrle <mathiasb at m9s.biz>
diff --git a/CHANGELOG b/CHANGELOG
index 7643166..cb35add 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,10 @@
-Version 3.4.1 - 2015-02-19
+Version 3.6.0 - 2015-04-20
* Bug fixes (see mercurial logs for details)
+* Add support for PyPy
+* Add 'staging' state to stock move
+* Apply stock_assign of compute_quantity_query only on outgoing moves
+* Add domain on location's parent and childs
+* Do not filter out inactive products from stock computation
Version 3.4.0 - 2014-10-20
* Bug fixes (see mercurial logs for details)
diff --git a/PKG-INFO b/PKG-INFO
index e28c6d1..3c871f4 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond_stock
-Version: 3.4.1
+Version: 3.6.0
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/3.4/
+Download-URL: http://downloads.tryton.org/3.6/
Description: trytond_stock
=============
@@ -65,4 +65,6 @@ Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Office/Business
diff --git a/__init__.py b/__init__.py
index 53d577c..518f590 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of this
-#repository contains the full copyright notices and license terms.
+# 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 trytond.pool import Pool
from .location import *
diff --git a/configuration.py b/configuration.py
index c62473b..c0e1b42 100644
--- a/configuration.py
+++ b/configuration.py
@@ -1,7 +1,7 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 trytond.model import ModelView, ModelSQL, ModelSingleton, fields
-from trytond.pyson import Eval, Get
+from trytond.pyson import Eval
__all__ = ['Configuration']
diff --git a/customer_return_restocking_list.odt b/customer_return_restocking_list.odt
index d9a9ff4..c9429d0 100644
Binary files a/customer_return_restocking_list.odt and b/customer_return_restocking_list.odt differ
diff --git a/delivery_note.odt b/delivery_note.odt
index 0e83fb3..ebe4b93 100644
Binary files a/delivery_note.odt and b/delivery_note.odt differ
diff --git a/doc/index.rst b/doc/index.rst
index 8c92d51..bc2fb0c 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -82,6 +82,11 @@ A move can be in one of this states:
Assigned move can be cancelled. To revert a move in state Done, an
opposite move must be created.
+* Staging
+
+ A phantom state used to create in advance move that should not be taken for
+ stock computation.
+
Product Quantities
++++++++++++++++++
diff --git a/internal_shipment.odt b/internal_shipment.odt
index 8eabf98..0824965 100644
Binary files a/internal_shipment.odt and b/internal_shipment.odt differ
diff --git a/inventory.py b/inventory.py
index d7526d3..e7e9065 100644
--- a/inventory.py
+++ b/inventory.py
@@ -1,5 +1,7 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level
-#of this repository contains the full copyright notices and license terms.
+# 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 sql import Null
+
from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.pyson import Not, Equal, Eval, Or, Bool
from trytond import backend
@@ -115,7 +117,7 @@ class Inventory(Workflow, ModelSQL, ModelView):
@classmethod
@ModelView.button
@Workflow.transition('done')
- def confirm(self, inventories):
+ def confirm(cls, inventories):
Move = Pool().get('stock.move')
moves = []
for inventory in inventories:
@@ -123,20 +125,20 @@ class Inventory(Workflow, ModelSQL, ModelView):
for line in inventory.lines:
key = line.unique_key
if key in keys:
- self.raise_user_error('unique_line',
+ cls.raise_user_error('unique_line',
(line.rec_name, inventory.rec_name))
keys.add(key)
move = line.get_move()
if move:
moves.append(move)
if moves:
- moves = Move.create([m._save_values for m in moves])
+ Move.save(moves)
Move.do(moves)
@classmethod
@ModelView.button
@Workflow.transition('cancel')
- def cancel(self, inventories):
+ def cancel(cls, inventories):
Line = Pool().get("stock.inventory.line")
Line.cancel_move([l for i in inventories for l in i.lines])
@@ -273,7 +275,7 @@ class InventoryLine(ModelSQL, ModelView):
# Migration from 3.0: use Move origin
if table.column_exist('move'):
cursor.execute(*sql_table.select(sql_table.id, sql_table.move,
- where=sql_table.move != None))
+ where=sql_table.move != Null))
for line_id, move_id in cursor.fetchall():
cursor.execute(*move_table.update(
columns=[move_table.origin],
@@ -291,13 +293,10 @@ class InventoryLine(ModelSQL, ModelView):
@fields.depends('product')
def on_change_product(self):
- change = {}
- change['unit_digits'] = 2
+ self.unit_digits = 2
if self.product:
- change['uom'] = self.product.default_uom.id
- change['uom.rec_name'] = self.product.default_uom.rec_name
- change['unit_digits'] = self.product.default_uom.digits
- return change
+ self.uom = self.product.default_uom
+ self.unit_digits = self.product.default_uom.digits
def get_rec_name(self, name):
return self.product.rec_name
diff --git a/inventory.xml b/inventory.xml
index 6446b99..e39cecf 100644
--- a/inventory.xml
+++ b/inventory.xml
@@ -17,7 +17,9 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_inventory_form">
<field name="name">Inventories</field>
<field name="res_model">stock.inventory</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"
+ eval="[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]"
+ pyson="1"/>
</record>
<record model="ir.action.act_window.view"
id="act_inventory_form_view1">
@@ -34,7 +36,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window.domain" id="act_inventory_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="act_window" ref="act_inventory_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_inventory_form_domain_all">
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 7b832b8..5ed32bc 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -1871,6 +1871,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Проект"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr ""
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Приключен"
@@ -2297,7 +2301,7 @@ msgid "Open"
msgstr "Отваряне"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Добре"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2305,7 +2309,7 @@ msgid "Force Assign"
msgstr "Създай изрично назначение"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Добре"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2313,7 +2317,7 @@ msgid "Force Assign"
msgstr "Създай изрично назначение"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Добре"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index 53ca3ed..970a839 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -64,7 +64,7 @@ msgid ""
"You can not delete stock move \"%s\" because it is not in draft or cancelled"
" state."
msgstr ""
-"No podeu esborrar el moviment d'estoc \"%s\" perquè no està en estat "
+"No podeu eliminar el moviment d'estoc \"%s\" perquè no està en estat "
"esborrany o cancel·lat."
msgctxt "error:stock.move:"
@@ -85,7 +85,7 @@ msgid ""
" state."
msgstr ""
"No podeu canviar el moviment d'estoc \"%s\" perquè es troba en l'estat "
-"\"Realitzat\" o \"Cancel·lat\"."
+"\"Finalitzat\" o \"Cancel·lat\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -93,7 +93,7 @@ msgstr "No podeu canviar el moviment d'estoc \"%s\" a estat reservat."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to done state."
-msgstr "No podeu canviar el moviment d'estoc \"%s\" a estat realitzat."
+msgstr "No podeu canviar el moviment d'estoc \"%s\" a estat finalitzat."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to draft state."
@@ -492,7 +492,7 @@ msgstr "A la ubicació"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "Decimals d'unitat"
+msgstr "Decimals de la unitat"
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
@@ -1859,6 +1859,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Esborrany"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "En procés"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Tancat"
@@ -2089,7 +2093,7 @@ msgstr "Cancel·la"
msgctxt "view:stock.shipment.in.return:"
msgid "Done"
-msgstr "Finalitzat"
+msgstr "Finalitza"
msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
@@ -2113,7 +2117,7 @@ msgstr "Cancel·la"
msgctxt "view:stock.shipment.in:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitza"
msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
@@ -2157,7 +2161,7 @@ msgstr "Cancel·la"
msgctxt "view:stock.shipment.internal:"
msgid "Done"
-msgstr "Finalitzat"
+msgstr "Finalitza"
msgctxt "view:stock.shipment.internal:"
msgid "Draft"
@@ -2197,7 +2201,7 @@ msgstr "Albarans devolució client"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
-msgstr "Finalitzat"
+msgstr "Finalitza"
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
@@ -2233,7 +2237,7 @@ msgstr "Albarans client"
msgctxt "view:stock.shipment.out:"
msgid "Done"
-msgstr "Acabat"
+msgstr "Finalitza"
msgctxt "view:stock.shipment.out:"
msgid "Draft"
@@ -2245,7 +2249,7 @@ msgstr "Moviments interns"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
-msgstr "Realitza enviament"
+msgstr "Empaqueta"
msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
@@ -2280,7 +2284,7 @@ msgid "Open"
msgstr "Obre"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Accepta"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2288,7 +2292,7 @@ msgid "Force Assign"
msgstr "Força reserva"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Accepta"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2296,7 +2300,7 @@ msgid "Force Assign"
msgstr "Força reserva"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Accepta"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 08de1ed..d815dc1 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -1827,6 +1827,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr ""
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr ""
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr ""
@@ -2248,7 +2252,7 @@ msgid "Open"
msgstr ""
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr ""
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2256,7 +2260,7 @@ msgid "Force Assign"
msgstr ""
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr ""
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2264,7 +2268,7 @@ msgid "Force Assign"
msgstr ""
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr ""
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 9edfb02..1a6986d 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -588,7 +588,7 @@ msgstr "Lagerort"
msgctxt "field:stock.period.cache,period:"
msgid "Period"
-msgstr "Periode"
+msgstr "Lagerperiode"
msgctxt "field:stock.period.cache,product:"
msgid "Product"
@@ -1869,6 +1869,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Entwurf"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "Vorläufig"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Geschlossen"
@@ -2047,11 +2051,11 @@ msgstr "Lagerbewegungen"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr "Perioden Cache"
+msgstr "Lagerperiode Cache"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr "Perioden Cache"
+msgstr "Lagerperioden Caches"
msgctxt "view:stock.period:"
msgid "Close"
@@ -2063,7 +2067,7 @@ msgstr "Entwurf"
msgctxt "view:stock.period:"
msgid "Period"
-msgstr "Periode"
+msgstr "Lagerperiode"
msgctxt "view:stock.period:"
msgid "Periods"
@@ -2135,7 +2139,7 @@ msgstr "Bestandsänderungen"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr "Einlagerung"
+msgstr "Einlagern"
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
@@ -2290,7 +2294,7 @@ msgid "Open"
msgstr "Öffnen"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "OK"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2298,7 +2302,7 @@ msgid "Force Assign"
msgstr "Zuweisung erzwingen"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "OK"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2306,7 +2310,7 @@ msgid "Force Assign"
msgstr "Zuweisung erzwingen"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "OK"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 7e6ac4b..7df6967 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -319,7 +319,7 @@ msgstr "Nombre"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
@@ -491,7 +491,7 @@ msgstr "A ubicación"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
@@ -719,7 +719,7 @@ msgstr "Almacén de entrada"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de almacenamiento"
+msgstr "Ubicación de almacenamiento"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
@@ -947,7 +947,7 @@ msgstr "Almacén de salida"
msgctxt "field:stock.shipment.out,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de almacenamiento"
+msgstr "Ubicación de almacenamiento"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
@@ -1043,7 +1043,7 @@ msgstr "Almacén de entrada"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de almacenamiento"
+msgstr "Ubicación de almacenamiento"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
@@ -1859,6 +1859,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "En proceso"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
@@ -2280,7 +2284,7 @@ msgid "Open"
msgstr "Abrir"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2288,7 +2292,7 @@ msgid "Force Assign"
msgstr "Forzar asignación"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2296,7 +2300,7 @@ msgid "Force Assign"
msgstr "Forzar asignación"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 616c189..524b2f4 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -1859,6 +1859,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "Preparación"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
@@ -2280,7 +2284,7 @@ msgid "Open"
msgstr "Abrir"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2288,7 +2292,7 @@ msgid "Force Assign"
msgstr "Forzar Asignación"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2296,7 +2300,7 @@ msgid "Force Assign"
msgstr "Forzar Asignación"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/es_EC.po b/locale/es_EC.po
index 38dc91f..2fb1338 100644
--- a/locale/es_EC.po
+++ b/locale/es_EC.po
@@ -7,23 +7,23 @@ msgid ""
"You cannot change the default uom for a product which is associated to stock"
" moves."
msgstr ""
-"No puede cambiar la UdM predeterminada de un producto que está asociado con "
-"movimientos de existencias."
+"No puede cambiar la UdM por defecto de un producto que está asociado con "
+"movimientos de stock."
msgctxt "error:product.template:"
msgid ""
"You cannot change the type for a product which is associated to stock moves."
msgstr ""
-"No puede cambiar el tipo de un producto el cual está asociado a movimientos "
-"de existencias."
+"No puede cambiar el tipo de un producto el cual está asociado con "
+"movimientos de stock."
msgctxt "error:stock.inventory.line:"
msgid "Line quantity must be positive."
-msgstr "La cantidad en la línea debe ser positiva."
+msgstr "La cantidad de la línea debe ser positiva."
msgctxt "error:stock.inventory:"
msgid "Inventory \"%s\" must be cancelled before deletion."
-msgstr "El inventario \"%s\" debe ser cancelado antes de ser eliminado."
+msgstr "Debe cancelar el inventario \"%s\" antes de eliminarlo."
msgctxt "error:stock.inventory:"
msgid "Line \"%s\" is not unique on Inventory \"%s\"."
@@ -49,7 +49,7 @@ msgstr "La cantidad del movimiento interno debe ser positiva"
msgctxt "error:stock.move:"
msgid "Move quantity must be positive"
-msgstr "La cantidad a mover tiene que ser positiva"
+msgstr "La cantidad del movimiento debe ser positiva"
msgctxt "error:stock.move:"
msgid "Source and destination location must be different"
@@ -57,7 +57,7 @@ msgstr "Las bodegas origen y destino deben ser distintas"
msgctxt "error:stock.move:"
msgid "The stock move \"%s\" has no origin."
-msgstr "El movimiento de inventario \"%s\" no tiene origen."
+msgstr "El movimiento de stock \"%s\" no tiene origen."
msgctxt "error:stock.move:"
msgid ""
@@ -76,16 +76,16 @@ msgstr ""
msgctxt "error:stock.move:"
msgid "You can not modify stock move \"%s\" because it is in \"Assigned\" state."
msgstr ""
-"No puede modificar el movimiento de stock \"%s\" porque está en estado "
-"\"Asignado\"."
+"No puede modificar el movimiento de stock \"%s\" porque se encuentra en "
+"estado \"Asignado\"."
msgctxt "error:stock.move:"
msgid ""
"You can not modify stock move \"%s\" because it is in \"Done\" or \"Cancel\""
" state."
msgstr ""
-"No puede modificar el movimiento de stock \"%s\" porque está en estado "
-"\"Realizado\" o \"Cancelado\"."
+"No puede modificar el movimiento de stock \"%s\" porque se encuentra en "
+"estado \"Realizado\" o \"Cancelado\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -101,11 +101,12 @@ msgstr "No puede establecer el movimiento de stock \"%s\" a estado borrador."
msgctxt "error:stock.period:"
msgid "You can not close a period in the future or today."
-msgstr "No puede cerrar un período de hoy o del futuro."
+msgstr "No puede cerrar un período con fecha futura o de hoy."
msgctxt "error:stock.period:"
msgid "You can not close a period when there still are assigned moves."
-msgstr "No puede cerrar un período cuando todavía hay movimientos asignados."
+msgstr ""
+"No puede cerrar un período cuando todavía dispone de movimientos asignados."
msgctxt "error:stock.shipment.in.return:"
msgid "Supplier Return Shipment \"%s\" must be cancelled before deletion."
@@ -118,14 +119,14 @@ msgid ""
"Incoming Moves must have the warehouse input location as destination "
"location."
msgstr ""
-"Los movimientos de entrada deben tener el almacén de entrada como bodega "
+"Los movimientos de entrada deben tener un almacén de entrada como bodega "
"destino."
msgctxt "error:stock.shipment.in:"
msgid ""
"Inventory Moves must have the warehouse input location as source location."
msgstr ""
-"Los movimientos de inventario deben tener el almacén de entrada como bodega "
+"Los movimientos de inventario deben tener un almacén de entrada como bodega "
"de origen."
msgctxt "error:stock.shipment.in:"
@@ -134,7 +135,7 @@ msgstr "El envío de proveedor \"%s\" debe ser cancelado antes de ser eliminado!
msgctxt "error:stock.shipment.internal:"
msgid "Internal Shipment \"%s\" must be cancelled before deletion."
-msgstr "El envío interno \"%s\" debe ser cancelado antes de ser eliminado."
+msgstr "Debe cancelar el envío interno \"%s\" antes de eliminarlo."
msgctxt "error:stock.shipment.out.return:"
msgid "Customer Return Shipment \"%s\" must be cancelled before deletion."
@@ -152,15 +153,15 @@ msgstr "Entrega"
msgctxt "field:party.party,customer_location:"
msgid "Customer Location"
-msgstr "Bodega del Cliente"
+msgstr "Bodega del cliente"
msgctxt "field:party.party,supplier_location:"
msgid "Supplier Location"
-msgstr "Bodega del Proveedor"
+msgstr "Bodega del proveedor"
msgctxt "field:product.by_location.start,forecast_date:"
msgid "At Date"
-msgstr "En la fecha"
+msgstr "A fecha"
msgctxt "field:product.by_location.start,id:"
msgid "ID"
@@ -168,7 +169,7 @@ msgstr "ID"
msgctxt "field:product.product,cost_value:"
msgid "Cost Value"
-msgstr "Valor de Costo"
+msgstr "Valor de costo"
msgctxt "field:product.product,forecast_quantity:"
msgid "Forecast Quantity"
@@ -180,7 +181,7 @@ msgstr "Cantidad"
msgctxt "field:product.template,cost_value:"
msgid "Cost Value"
-msgstr "Valor de Costo"
+msgstr "Valor de costo"
msgctxt "field:product.template,forecast_quantity:"
msgid "Forecast Quantity"
@@ -192,11 +193,11 @@ msgstr "Cantidad"
msgctxt "field:stock.configuration,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.configuration,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.configuration,id:"
msgid "ID"
@@ -208,31 +209,31 @@ msgstr "Nombre"
msgctxt "field:stock.configuration,shipment_in_return_sequence:"
msgid "Supplier Return Shipment Sequence"
-msgstr "Secuencia de Envío de Devolución a Proveedor"
+msgstr "Secuencia de envío de devolución a proveedor"
msgctxt "field:stock.configuration,shipment_in_sequence:"
msgid "Supplier Shipment Sequence"
-msgstr "Secuencia de Envío de Proveedor"
+msgstr "Secuencia de envío de proveedor"
msgctxt "field:stock.configuration,shipment_internal_sequence:"
msgid "Internal Shipment Sequence"
-msgstr "Secuencia de Envío Interno"
+msgstr "Secuencia de envío interno"
msgctxt "field:stock.configuration,shipment_out_return_sequence:"
msgid "Customer Return Shipment Sequence"
-msgstr "Secuencia de Devolución de Cliente"
+msgstr "Secuencia de devolución de cliente"
msgctxt "field:stock.configuration,shipment_out_sequence:"
msgid "Customer Shipment Sequence"
-msgstr "Secuencia de Envío a Cliente"
+msgstr "Secuencia de envío a cliente"
msgctxt "field:stock.configuration,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.configuration,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.inventory,company:"
msgid "Company"
@@ -240,11 +241,11 @@ msgstr "Empresa"
msgctxt "field:stock.inventory,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.inventory,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.inventory,date:"
msgid "Date"
@@ -264,7 +265,7 @@ msgstr "Bodega"
msgctxt "field:stock.inventory,lost_found:"
msgid "Lost and Found"
-msgstr "Perdido y Encontrado"
+msgstr "Perdido y encontrado"
msgctxt "field:stock.inventory,rec_name:"
msgid "Name"
@@ -276,23 +277,23 @@ msgstr "Estado"
msgctxt "field:stock.inventory,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.inventory,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.inventory.line,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.inventory.line,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.inventory.line,expected_quantity:"
msgid "Expected Quantity"
-msgstr "Cantidad Esperada"
+msgstr "Cantidad esperada"
msgctxt "field:stock.inventory.line,id:"
msgid "ID"
@@ -320,7 +321,7 @@ msgstr "Nombre"
msgctxt "field:stock.inventory.line,unit_digits:"
msgid "Unit Digits"
-msgstr "Decimales de Unidad"
+msgstr "Decimales de unidad"
msgctxt "field:stock.inventory.line,uom:"
msgid "UOM"
@@ -328,11 +329,11 @@ msgstr "UdM"
msgctxt "field:stock.inventory.line,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.inventory.line,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.location,active:"
msgid "Active"
@@ -352,19 +353,19 @@ msgstr "Código"
msgctxt "field:stock.location,cost_value:"
msgid "Cost Value"
-msgstr "Valor de Costo"
+msgstr "Valor de costo"
msgctxt "field:stock.location,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.location,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.location,forecast_quantity:"
msgid "Forecast Quantity"
-msgstr "Cantidad Prevista"
+msgstr "Cantidad prevista"
msgctxt "field:stock.location,id:"
msgid "ID"
@@ -408,15 +409,15 @@ msgstr "Almacén"
msgctxt "field:stock.location,type:"
msgid "Location type"
-msgstr "Tipo de Bodega"
+msgstr "Tipo de bodega"
msgctxt "field:stock.location,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.location,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.move,company:"
msgid "Company"
@@ -424,15 +425,15 @@ msgstr "Empresa"
msgctxt "field:stock.move,cost_price:"
msgid "Cost Price"
-msgstr "Costo"
+msgstr "Precio de costo"
msgctxt "field:stock.move,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.move,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.move,currency:"
msgid "Currency"
@@ -440,11 +441,11 @@ msgstr "Moneda"
msgctxt "field:stock.move,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.move,from_location:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "field:stock.move,id:"
msgid "ID"
@@ -452,7 +453,7 @@ msgstr "ID"
msgctxt "field:stock.move,internal_quantity:"
msgid "Internal Quantity"
-msgstr "Cantidad Interna"
+msgstr "Cantidad interna"
msgctxt "field:stock.move,origin:"
msgid "Origin"
@@ -460,7 +461,7 @@ msgstr "Origen"
msgctxt "field:stock.move,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planificada"
+msgstr "Fecha planificada"
msgctxt "field:stock.move,product:"
msgid "Product"
@@ -468,7 +469,7 @@ msgstr "Producto"
msgctxt "field:stock.move,product_uom_category:"
msgid "Product Uom Category"
-msgstr "Categoría UdM del Producto"
+msgstr "Categoría de UdM del producto"
msgctxt "field:stock.move,quantity:"
msgid "Quantity"
@@ -492,15 +493,15 @@ msgstr "A Bodega"
msgctxt "field:stock.move,unit_digits:"
msgid "Unit Digits"
-msgstr "Decimales de Unidad"
+msgstr "Decimales de unidad"
msgctxt "field:stock.move,unit_price:"
msgid "Unit Price"
-msgstr "Precio Unitario"
+msgstr "Precio unitario"
msgctxt "field:stock.move,unit_price_required:"
msgid "Unit Price Required"
-msgstr "Precio Unitario Requerido"
+msgstr "Precio unitario requerido"
msgctxt "field:stock.move,uom:"
msgid "Uom"
@@ -508,15 +509,15 @@ msgstr "UdM"
msgctxt "field:stock.move,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.move,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.period,caches:"
msgid "Caches"
-msgstr "Cachés"
+msgstr "Precalculado"
msgctxt "field:stock.period,company:"
msgid "Company"
@@ -524,11 +525,11 @@ msgstr "Empresa"
msgctxt "field:stock.period,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.period,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.period,date:"
msgid "Date"
@@ -548,19 +549,19 @@ msgstr "Estado"
msgctxt "field:stock.period,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.period,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.period.cache,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.period.cache,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.period.cache,id:"
msgid "ID"
@@ -568,7 +569,7 @@ msgstr "ID"
msgctxt "field:stock.period.cache,internal_quantity:"
msgid "Internal Quantity"
-msgstr "Cantidad Interna"
+msgstr "Cantidad interna"
msgctxt "field:stock.period.cache,location:"
msgid "Location"
@@ -588,19 +589,19 @@ msgstr "Nombre"
msgctxt "field:stock.period.cache,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.period.cache,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.product_quantities_warehouse,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.product_quantities_warehouse,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.product_quantities_warehouse,date:"
msgid "Date"
@@ -620,11 +621,11 @@ msgstr "Nombre"
msgctxt "field:stock.product_quantities_warehouse,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.product_quantities_warehouse,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.product_quantities_warehouse.start,id:"
msgid "ID"
@@ -636,7 +637,7 @@ msgstr "Almacén"
msgctxt "field:stock.products_by_locations.start,forecast_date:"
msgid "At Date"
-msgstr "En la fecha"
+msgstr "A fecha"
msgctxt "field:stock.products_by_locations.start,id:"
msgid "ID"
@@ -652,19 +653,19 @@ msgstr "Empresa"
msgctxt "field:stock.shipment.in,contact_address:"
msgid "Contact Address"
-msgstr "Dirección de Contacto"
+msgstr "Dirección de contacto"
msgctxt "field:stock.shipment.in,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.shipment.in,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.shipment.in,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.in,id:"
msgid "ID"
@@ -672,11 +673,11 @@ msgstr "ID"
msgctxt "field:stock.shipment.in,incoming_moves:"
msgid "Incoming Moves"
-msgstr "Movimientos de Entrada"
+msgstr "Movimientos de entrada"
msgctxt "field:stock.shipment.in,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.in,moves:"
msgid "Moves"
@@ -688,7 +689,7 @@ msgstr "Orígenes"
msgctxt "field:stock.shipment.in,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planificada"
+msgstr "Fecha planificada"
msgctxt "field:stock.shipment.in,rec_name:"
msgid "Name"
@@ -708,7 +709,7 @@ msgstr "Proveedor"
msgctxt "field:stock.shipment.in,supplier_location:"
msgid "Supplier Location"
-msgstr "Bodega del Proveedor"
+msgstr "Bodega del proveedor"
msgctxt "field:stock.shipment.in,warehouse:"
msgid "Warehouse"
@@ -716,19 +717,19 @@ msgstr "Depósito"
msgctxt "field:stock.shipment.in,warehouse_input:"
msgid "Warehouse Input"
-msgstr "Almacén de Entrada"
+msgstr "Almacén de entrada"
msgctxt "field:stock.shipment.in,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de Almacenamiento"
+msgstr "Depósito de almacenamiento"
msgctxt "field:stock.shipment.in,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.shipment.in,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.shipment.in.return,code:"
msgid "Code"
@@ -740,19 +741,19 @@ msgstr "Empresa"
msgctxt "field:stock.shipment.in.return,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.shipment.in.return,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.shipment.in.return,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.in.return,from_location:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "field:stock.shipment.in.return,id:"
msgid "ID"
@@ -768,7 +769,7 @@ msgstr "Orígenes"
msgctxt "field:stock.shipment.in.return,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planificada"
+msgstr "Fecha planificada"
msgctxt "field:stock.shipment.in.return,rec_name:"
msgid "Name"
@@ -784,15 +785,15 @@ msgstr "Estado"
msgctxt "field:stock.shipment.in.return,to_location:"
msgid "To Location"
-msgstr "A Bodega"
+msgstr "A bodega"
msgctxt "field:stock.shipment.in.return,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.shipment.in.return,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.shipment.in.return.assign.failed,id:"
msgid "ID"
@@ -812,19 +813,19 @@ msgstr "Empresa"
msgctxt "field:stock.shipment.internal,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.shipment.internal,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.shipment.internal,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.internal,from_location:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "field:stock.shipment.internal,id:"
msgid "ID"
@@ -836,7 +837,7 @@ msgstr "Movimientos"
msgctxt "field:stock.shipment.internal,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planificada"
+msgstr "Fecha planificada"
msgctxt "field:stock.shipment.internal,rec_name:"
msgid "Name"
@@ -856,11 +857,11 @@ msgstr "A Bodega"
msgctxt "field:stock.shipment.internal,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.shipment.internal,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.shipment.internal.assign.failed,id:"
msgid "ID"
@@ -880,11 +881,11 @@ msgstr "Empresa"
msgctxt "field:stock.shipment.out,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.shipment.out,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.shipment.out,customer:"
msgid "Customer"
@@ -892,15 +893,15 @@ msgstr "Cliente"
msgctxt "field:stock.shipment.out,customer_location:"
msgid "Customer Location"
-msgstr "Bodega del Cliente"
+msgstr "Bodega del cliente"
msgctxt "field:stock.shipment.out,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de Envío"
+msgstr "Dirección de entrega"
msgctxt "field:stock.shipment.out,effective_date:"
msgid "Effective Date"
-msgstr "Fecha Efectiva"
+msgstr "Fecha efectiva"
msgctxt "field:stock.shipment.out,id:"
msgid "ID"
@@ -908,7 +909,7 @@ msgstr "ID"
msgctxt "field:stock.shipment.out,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.out,moves:"
msgid "Moves"
@@ -920,7 +921,7 @@ msgstr "Orígenes"
msgctxt "field:stock.shipment.out,outgoing_moves:"
msgid "Outgoing Moves"
-msgstr "Movimientos de Salida"
+msgstr "Movimientos de salida"
msgctxt "field:stock.shipment.out,planned_date:"
msgid "Planned Date"
@@ -952,11 +953,11 @@ msgstr "Depósito de Almacenamiento"
msgctxt "field:stock.shipment.out,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.shipment.out,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "field:stock.shipment.out.assign.failed,id:"
msgid "ID"
@@ -964,7 +965,7 @@ msgstr "ID"
msgctxt "field:stock.shipment.out.assign.failed,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.out.return,code:"
msgid "Code"
@@ -976,11 +977,11 @@ msgstr "Empresa"
msgctxt "field:stock.shipment.out.return,create_date:"
msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
msgctxt "field:stock.shipment.out.return,create_uid:"
msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
msgctxt "field:stock.shipment.out.return,customer:"
msgid "Customer"
@@ -988,11 +989,11 @@ msgstr "Cliente"
msgctxt "field:stock.shipment.out.return,customer_location:"
msgid "Customer Location"
-msgstr "Bodega del Cliente"
+msgstr "Bodega del cliente"
msgctxt "field:stock.shipment.out.return,delivery_address:"
msgid "Delivery Address"
-msgstr "Dirección de Envío"
+msgstr "Dirección de entrega"
msgctxt "field:stock.shipment.out.return,effective_date:"
msgid "Effective Date"
@@ -1004,11 +1005,11 @@ msgstr "ID"
msgctxt "field:stock.shipment.out.return,incoming_moves:"
msgid "Incoming Moves"
-msgstr "Movimientos de Entrada"
+msgstr "Movimientos de entrada"
msgctxt "field:stock.shipment.out.return,inventory_moves:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "field:stock.shipment.out.return,moves:"
msgid "Moves"
@@ -1020,7 +1021,7 @@ msgstr "Orígenes"
msgctxt "field:stock.shipment.out.return,planned_date:"
msgid "Planned Date"
-msgstr "Fecha Planificada"
+msgstr "Fecha planificada"
msgctxt "field:stock.shipment.out.return,rec_name:"
msgid "Name"
@@ -1040,19 +1041,19 @@ msgstr "Almacén"
msgctxt "field:stock.shipment.out.return,warehouse_input:"
msgid "Warehouse Input"
-msgstr "Almacén de Entrada"
+msgstr "Almacén de entrada"
msgctxt "field:stock.shipment.out.return,warehouse_storage:"
msgid "Warehouse Storage"
-msgstr "Depósito de Almacenamiento"
+msgstr "Depósito de almacenamiento"
msgctxt "field:stock.shipment.out.return,write_date:"
msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
msgctxt "field:stock.shipment.out.return,write_uid:"
msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
msgctxt "help:party.party,customer_location:"
msgid "The default destination location when sending products to the party."
@@ -1070,7 +1071,7 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-"Permite calcular las cantidades de stock previstas para esta fecha.\n"
+"Permite calcular las cantidades de stock previstas para esta fecha.\n"
"* Un valor vacío es una fecha infinita en el futuro.\n"
"* Una fecha del pasado proporcionará valores históricos."
@@ -1080,13 +1081,13 @@ msgid ""
"* An empty value is an infinite date in the future.\n"
"* A date in the past will provide historical values."
msgstr ""
-"Permite calcular las cantidades de stock previstas para esta fecha.\n"
+"Permite calcular las cantidades de stock previstas para esta fecha.\n"
"* Un valor vacío es una fecha infinita en el futuro.\n"
"* Una fecha del pasado proporcionará valores históricos."
msgctxt "model:ir.action,name:"
msgid "Create Return Shipment"
-msgstr "Crear Devolución"
+msgstr "Crear devolución"
msgctxt "model:ir.action,name:act_inventory_form"
msgid "Inventories"
@@ -1094,11 +1095,11 @@ msgstr "Inventarios"
msgctxt "model:ir.action,name:act_location_form"
msgid "Locations"
-msgstr "Editar Bodegas"
+msgstr "Editar bodegas"
msgctxt "model:ir.action,name:act_location_quantity_tree"
msgid "Locations"
-msgstr "Consultar Bodegas"
+msgstr "Consultar bodegas"
msgctxt "model:ir.action,name:act_location_tree"
msgid "Locations"
@@ -1114,7 +1115,7 @@ msgstr "Períodos"
msgctxt "model:ir.action,name:act_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr "Cantidades de Producto por Almacén"
+msgstr "Cantidades de producto por almacén"
msgctxt "model:ir.action,name:act_products_by_locations"
msgid "Products"
@@ -1122,79 +1123,79 @@ msgstr "Productos"
msgctxt "model:ir.action,name:act_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "Envíos de Proveedores"
+msgstr "Envíos de proveedores"
msgctxt "model:ir.action,name:act_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Devoluciones a Proveedores"
+msgstr "Devoluciones a proveedor"
msgctxt "model:ir.action,name:act_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "Envíos Internos"
+msgstr "Envíos internos"
msgctxt "model:ir.action,name:act_shipment_out_form"
msgid "Customer Shipments"
-msgstr "Envíos a Clientes"
+msgstr "Envíos a cliente"
msgctxt "model:ir.action,name:act_shipment_out_form2"
msgid "Customer Shipments"
-msgstr "Envíos a Clientes"
+msgstr "Envíos a cliente"
msgctxt "model:ir.action,name:act_shipment_out_form3"
msgid "Supplier Shipments"
-msgstr "Envíos de Proveedores"
+msgstr "Envíos de proveedor"
msgctxt "model:ir.action,name:act_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Devoluciones de Clientes"
+msgstr "Devoluciones de cliente"
msgctxt "model:ir.action,name:act_stock_configuration_form"
msgid "Stock Configuration"
-msgstr "Configuración Inventarios"
+msgstr "Configuración de stock"
msgctxt "model:ir.action,name:report_shipment_in_restocking_list"
msgid "Restocking List"
-msgstr "Lista de Reabastecimiento"
+msgstr "Lista de reabastecimiento"
msgctxt "model:ir.action,name:report_shipment_internal"
msgid "Internal Shipment"
-msgstr "Envío Interno"
+msgstr "Envío interno"
msgctxt "model:ir.action,name:report_shipment_out_delivery_note"
msgid "Delivery Note"
-msgstr "Nota de Entrega"
+msgstr "Nota de entrega"
msgctxt "model:ir.action,name:report_shipment_out_picking_list"
msgid "Picking List"
-msgstr "Lista de Selección"
+msgstr "Lista de selección"
msgctxt "model:ir.action,name:report_shipment_out_return_restocking_list"
msgid "Restocking List"
-msgstr "Lista de Reabastecimiento"
+msgstr "Lista de reabastecimiento"
msgctxt "model:ir.action,name:wizard_product_by_location"
msgid "Product by Locations"
-msgstr "Producto por Bodegas"
+msgstr "Producto por bodegas"
msgctxt "model:ir.action,name:wizard_product_quantities_warehouse"
msgid "Product Quantities By Warehouse"
-msgstr "Cantidades de Producto por Almacén"
+msgstr "Cantidades de producto por almacén"
msgctxt "model:ir.action,name:wizard_products_by_locations"
msgid "Products by Locations"
-msgstr "Productos por Bodegas"
+msgstr "Productos por bodegas"
msgctxt "model:ir.action,name:wizard_shipment_in_return_assign"
msgid "Assign Purchase Return Shipment"
-msgstr "Asignar Envío de Devolución de Compra"
+msgstr "Asignar envío de devolución de compra"
msgctxt "model:ir.action,name:wizard_shipment_internal_assign"
msgid "Assign Shipment Internal"
-msgstr "Asignar Envío Interno"
+msgstr "Asignar envío interno"
msgctxt "model:ir.action,name:wizard_shipment_out_assign"
msgid "Assign Shipment Out"
-msgstr "Asignar Salida de Envío"
+msgstr "Asignar salida de envío"
msgctxt "model:ir.action.act_window.domain,name:act_inventory_form_domain_all"
msgid "All"
@@ -1212,17 +1213,17 @@ msgstr "Todo"
msgctxt ""
"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier"
msgid "From Suppliers"
-msgstr "Desde Proveedores"
+msgstr "Desde proveedores"
msgctxt ""
"model:ir.action.act_window.domain,name:act_move_form_domain_from_supplier_waiting"
msgid "From Suppliers Waiting"
-msgstr "Desde Proveedores en Espera"
+msgstr "En espera desde proveedores"
msgctxt ""
"model:ir.action.act_window.domain,name:act_move_form_domain_to_customer"
msgid "To Customers"
-msgstr "A Clientes"
+msgstr "A clientes"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_in_form_domain_all"
@@ -1277,7 +1278,7 @@ msgstr "Borrador"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_internal_form_domain_waiting"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_all"
@@ -1302,7 +1303,7 @@ msgstr "Empacado"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_form_domain_waiting"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt ""
"model:ir.action.act_window.domain,name:act_shipment_out_return_form_domain_all"
@@ -1321,43 +1322,43 @@ msgstr "Recibido"
msgctxt "model:ir.sequence,name:sequence_shipment_in"
msgid "Supplier Shipment"
-msgstr "Envío de Proveedor"
+msgstr "Envío de proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envío de Devolución a Proveedor"
+msgstr "Devolución a proveedor"
msgctxt "model:ir.sequence,name:sequence_shipment_internal"
msgid "Internal Shipment"
-msgstr "Envío Interno"
+msgstr "Envío interno"
msgctxt "model:ir.sequence,name:sequence_shipment_out"
msgid "Customer Shipment"
-msgstr "Envío a Cliente"
+msgstr "Envío a cliente"
msgctxt "model:ir.sequence,name:sequence_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Devolución de Cliente"
+msgstr "Devolución de cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in"
msgid "Supplier Shipment"
-msgstr "Envío de Proveedor"
+msgstr "Envío de proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_in_return"
msgid "Supplier Return Shipment"
-msgstr "Envío de Devolución a Proveedor"
+msgstr "Devolución a proveedor"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_internal"
msgid "Internal Shipment"
-msgstr "Envío Interno"
+msgstr "Envío interno"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out"
msgid "Customer Shipment"
-msgstr "Envío a Cliente"
+msgstr "Envío a cliente"
msgctxt "model:ir.sequence.type,name:sequence_type_shipment_out_return"
msgid "Customer Return Shipment"
-msgstr "Devolución de Cliente"
+msgstr "Devolución de cliente"
msgctxt "model:ir.ui.menu,name:menu_configuration"
msgid "Configuration"
@@ -1369,11 +1370,11 @@ msgstr "Inventarios"
msgctxt "model:ir.ui.menu,name:menu_location_form"
msgid "Locations"
-msgstr "Editar Bodegas"
+msgstr "Editar bodegas"
msgctxt "model:ir.ui.menu,name:menu_location_tree"
msgid "Locations"
-msgstr "Consultar Bodegas"
+msgstr "Consultar bodegas"
msgctxt "model:ir.ui.menu,name:menu_move_form"
msgid "Moves"
@@ -1389,63 +1390,63 @@ msgstr "Informes"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_form"
msgid "Supplier Shipments"
-msgstr "Envíos de Proveedores"
+msgstr "Envíos de proveedores"
msgctxt "model:ir.ui.menu,name:menu_shipment_in_return_form"
msgid "Supplier Return Shipments"
-msgstr "Devoluciones a Proveedores"
+msgstr "Devoluciones a proveedores"
msgctxt "model:ir.ui.menu,name:menu_shipment_internal_form"
msgid "Internal Shipments"
-msgstr "Envíos Internos"
+msgstr "Envíos internos"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_form"
msgid "Customer Shipments"
-msgstr "Envíos a Clientes"
+msgstr "Envíos a clientes"
msgctxt "model:ir.ui.menu,name:menu_shipment_out_return_form"
msgid "Customer Return Shipments"
-msgstr "Devoluciones de Clientes"
+msgstr "Devoluciones de clientes"
msgctxt "model:ir.ui.menu,name:menu_stock"
msgid "Inventory & Stock"
-msgstr "Logística"
+msgstr "Inventarios"
msgctxt "model:ir.ui.menu,name:menu_stock_configuration"
msgid "Stock Configuration"
-msgstr "Configuración de Inventarios"
+msgstr "Stock"
msgctxt "model:product.by_location.start,name:"
msgid "Product by Location"
-msgstr "Producto por Bodega"
+msgstr "Producto por bodega"
msgctxt "model:res.group,name:group_stock"
msgid "Stock"
-msgstr "Existencias"
+msgstr "Stock"
msgctxt "model:res.group,name:group_stock_admin"
msgid "Stock Administration"
-msgstr "Administración de Existencias"
+msgstr "Administración de Stock"
msgctxt "model:res.group,name:group_stock_force_assignment"
msgid "Stock Force Assignment"
-msgstr "Asignación Forzada de Existencias"
+msgstr "Asignación Forzada de Stock"
msgctxt "model:stock.configuration,name:"
msgid "Stock Configuration"
-msgstr "Configuración de Stock"
+msgstr "Configuración de stock"
msgctxt "model:stock.inventory,name:"
msgid "Stock Inventory"
-msgstr "Inventario de Existencias"
+msgstr "Inventario de stock"
msgctxt "model:stock.inventory.line,name:"
msgid "Stock Inventory Line"
-msgstr "Línea de Inventario de Existencias"
+msgstr "Línea de inventario de stock"
msgctxt "model:stock.location,name:"
msgid "Stock Location"
-msgstr "Bodega de Existencias"
+msgstr "Bodega de stock"
msgctxt "model:stock.location,name:location_customer"
msgid "Customer"
@@ -1453,19 +1454,19 @@ msgstr "Cliente"
msgctxt "model:stock.location,name:location_input"
msgid "Input Zone"
-msgstr "Zona de Entrada"
+msgstr "Zona de entrada"
msgctxt "model:stock.location,name:location_lost_found"
msgid "Lost and Found"
-msgstr "Perdido y Encontrado"
+msgstr "Perdido y encontrado"
msgctxt "model:stock.location,name:location_output"
msgid "Output Zone"
-msgstr "Zona de Salida"
+msgstr "Zona de salida"
msgctxt "model:stock.location,name:location_storage"
msgid "Storage Zone"
-msgstr "Zona de Almacenamiento"
+msgstr "Zona de almacenamiento"
msgctxt "model:stock.location,name:location_supplier"
msgid "Supplier"
@@ -1473,63 +1474,63 @@ msgstr "Proveedor"
msgctxt "model:stock.location,name:location_warehouse"
msgid "Warehouse"
-msgstr "Depósito Principal"
+msgstr "Depósito principal"
msgctxt "model:stock.move,name:"
msgid "Stock Move"
-msgstr "Movimiento de Existencias"
+msgstr "Movimiento de stock"
msgctxt "model:stock.period,name:"
msgid "Stock Period"
-msgstr "Período de Existencias"
+msgstr "Período de stock"
msgctxt "model:stock.period.cache,name:"
msgid "Stock Period Cache"
-msgstr "Caché de Período de Existencias"
+msgstr "Período de stock precalculado"
msgctxt "model:stock.product_quantities_warehouse,name:"
msgid "Product Quantities By Warehouse"
-msgstr "Cantidades de Producto por Almacén"
+msgstr "Cantidades de producto por almacén"
msgctxt "model:stock.product_quantities_warehouse.start,name:"
msgid "Product Quantities By Warehouse"
-msgstr "Cantidades de Producto por Almacén"
+msgstr "Cantidades de producto por almacén"
msgctxt "model:stock.products_by_locations.start,name:"
msgid "Products by Locations"
-msgstr "Productos por Bodegas"
+msgstr "Productos por bodegas"
msgctxt "model:stock.shipment.in,name:"
msgid "Supplier Shipment"
-msgstr "Envío de Proveedor"
+msgstr "Envío de proveedor"
msgctxt "model:stock.shipment.in.return,name:"
msgid "Supplier Return Shipment"
-msgstr "Envío de Devolución a Proveedor"
+msgstr "Envío de devolución a proveedor"
msgctxt "model:stock.shipment.in.return.assign.failed,name:"
msgid "Assign Supplier Return Shipment"
-msgstr "Asignar Envío de Devolución de Proveedor"
+msgstr "Asignar envío de devolución de proveedor"
msgctxt "model:stock.shipment.internal,name:"
msgid "Internal Shipment"
-msgstr "Envío Interno"
+msgstr "Envío interno"
msgctxt "model:stock.shipment.internal.assign.failed,name:"
msgid "Assign Shipment Internal"
-msgstr "Asignar Envío Interno"
+msgstr "Asignar envío interno"
msgctxt "model:stock.shipment.out,name:"
msgid "Customer Shipment"
-msgstr "Envío a Cliente"
+msgstr "Envío a cliente"
msgctxt "model:stock.shipment.out.assign.failed,name:"
msgid "Assign Shipment Out"
-msgstr "Asignación de Salida de Envío"
+msgstr "Asignación de salida de envío"
msgctxt "model:stock.shipment.out.return,name:"
msgid "Customer Return Shipment"
-msgstr "Envío de Devolución de Cliente"
+msgstr "Envío de devolución de cliente"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "/"
@@ -1545,7 +1546,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Phone:"
@@ -1553,7 +1554,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Planned Date:"
-msgstr "Fecha Planificada:"
+msgstr "Fecha planificada:"
msgctxt "odt:stock.shipment.in.restocking_list:"
msgid "Product"
@@ -1601,15 +1602,15 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "odt:stock.shipment.internal.report:"
msgid "From Location:"
-msgstr "Desde Bodega:"
+msgstr "Desde bodega:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Internal Shipment"
-msgstr "Envío Interno"
+msgstr "Envío interno"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Phone:"
@@ -1617,7 +1618,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Planned Date:"
-msgstr "Fecha Planificada:"
+msgstr "Fecha planificada:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "Product"
@@ -1633,11 +1634,11 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location"
-msgstr "A Bodega"
+msgstr "A bodega"
msgctxt "odt:stock.shipment.internal.report:"
msgid "To Location:"
-msgstr "A Bodega:"
+msgstr "A bodega:"
msgctxt "odt:stock.shipment.internal.report:"
msgid "VAT Number:"
@@ -1649,7 +1650,7 @@ msgstr "/"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Customer Code:"
-msgstr "Código de Cliente:"
+msgstr "Código de cliente:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Date:"
@@ -1657,7 +1658,7 @@ msgstr "Fecha:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Delivery Note"
-msgstr "Nota de Entrega"
+msgstr "Nota de entrega"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "E-Mail:"
@@ -1681,7 +1682,7 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "Shipment Number:"
-msgstr "Número de Envío:"
+msgstr "Número de envío:"
msgctxt "odt:stock.shipment.out.delivery_note:"
msgid "VAT Number:"
@@ -1705,7 +1706,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Phone:"
@@ -1713,11 +1714,11 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Picking List"
-msgstr "Lista de Selección"
+msgstr "Lista de selección"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Planned Date:"
-msgstr "Fecha Planificada:"
+msgstr "Fecha planificada:"
msgctxt "odt:stock.shipment.out.picking_list:"
msgid "Product"
@@ -1765,7 +1766,7 @@ msgstr "Correo electrónico:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "From Location"
-msgstr "Desde Bodega"
+msgstr "Desde bodega"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Phone:"
@@ -1773,7 +1774,7 @@ msgstr "Teléfono:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Planned Date:"
-msgstr "Fecha Planificada:"
+msgstr "Fecha planificada:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Product"
@@ -1789,11 +1790,11 @@ msgstr "Referencia:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Restocking List"
-msgstr "Lista de Reabastecimiento"
+msgstr "Lista de reabastecimiento"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "To Location"
-msgstr "A Bodega"
+msgstr "A bodega"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "VAT Number:"
@@ -1821,7 +1822,7 @@ msgstr "Cliente"
msgctxt "selection:stock.location,type:"
msgid "Lost and Found"
-msgstr "Perdido y Encontrado"
+msgstr "Perdido y encontrado"
msgctxt "selection:stock.location,type:"
msgid "Production"
@@ -1859,6 +1860,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "Preparación"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
@@ -1901,7 +1906,7 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Assigned"
@@ -1921,7 +1926,7 @@ msgstr "Borrador"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "selection:stock.shipment.out,state:"
msgid "Assigned"
@@ -1945,7 +1950,7 @@ msgstr "Empacado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Waiting"
-msgstr "En Espera"
+msgstr "En espera"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Canceled"
@@ -1965,15 +1970,15 @@ msgstr "Recibido"
msgctxt "view:party.party:"
msgid "Stock"
-msgstr "Existencias"
+msgstr "Stock"
msgctxt "view:product.by_location.start:"
msgid "Product by Location"
-msgstr "Producto por Bodega"
+msgstr "Producto por bodega"
msgctxt "view:product.product:"
msgid "Cost Value"
-msgstr "Valor de Costo"
+msgstr "Valor de costo"
msgctxt "view:product.product:"
msgid "Products"
@@ -1985,11 +1990,11 @@ msgstr "Configuración de Stock"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Line"
-msgstr "Línea de Inventario"
+msgstr "Línea de inventario"
msgctxt "view:stock.inventory.line:"
msgid "Inventory Lines"
-msgstr "Líneas de Inventario"
+msgstr "Líneas de inventario"
msgctxt "view:stock.inventory:"
msgid "Add an inventory line for each missing products"
@@ -2001,7 +2006,7 @@ msgstr "Cancelar"
msgctxt "view:stock.inventory:"
msgid "Complete Inventory"
-msgstr "Inventario Completo"
+msgstr "Inventario completo"
msgctxt "view:stock.inventory:"
msgid "Confirm"
@@ -2021,7 +2026,7 @@ msgstr "Bodega"
msgctxt "view:stock.location:"
msgid "Location Quantity"
-msgstr "Cantidad en Bodega"
+msgstr "Cantidad en bodega"
msgctxt "view:stock.location:"
msgid "Locations"
@@ -2037,11 +2042,11 @@ msgstr "Movimientos"
msgctxt "view:stock.period.cache:"
msgid "Period Cache"
-msgstr "Caché de Período"
+msgstr "Período precalculado"
msgctxt "view:stock.period.cache:"
msgid "Period Caches"
-msgstr "Cachés de Periodo"
+msgstr "Periodo precalculado"
msgctxt "view:stock.period:"
msgid "Close"
@@ -2061,15 +2066,15 @@ msgstr "Períodos"
msgctxt "view:stock.product_quantities_warehouse.start:"
msgid "Product Quantities By Warehouse"
-msgstr "Cantidades de Producto por Almacén"
+msgstr "Cantidades de producto por almacén"
msgctxt "view:stock.product_quantities_warehouse:"
msgid "Product Quantities By Warehouse"
-msgstr "Cantidades de Producto por Almacén"
+msgstr "Cantidades de producto por almacén"
msgctxt "view:stock.products_by_locations.start:"
msgid "Products by Locations"
-msgstr "Productos por Bodegas"
+msgstr "Productos por bodegas"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to Assign"
@@ -2077,7 +2082,7 @@ msgstr "No se puede asignar"
msgctxt "view:stock.shipment.in.return.assign.failed:"
msgid "Unable to assign those products:"
-msgstr "No se puede asignar estos productos:"
+msgstr "No se pueden asignar estos productos:"
msgctxt "view:stock.shipment.in.return:"
msgid "Assign"
@@ -2097,15 +2102,15 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipment"
-msgstr "Envío de Devolución a Proveedor"
+msgstr "Envío de devolución a proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Supplier Return Shipments"
-msgstr "Envío de Devoluciones a Proveedores"
+msgstr "Envío de devolución a proveedor"
msgctxt "view:stock.shipment.in.return:"
msgid "Wait"
-msgstr "Espera"
+msgstr "Esperando"
msgctxt "view:stock.shipment.in:"
msgid "Cancel"
@@ -2117,31 +2122,31 @@ msgstr "Realizado"
msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
-msgstr "Movimientos de Entrada"
+msgstr "Movimientos de entrada"
msgctxt "view:stock.shipment.in:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "view:stock.shipment.in:"
msgid "Receive"
-msgstr "Recibe"
+msgstr "Recibir"
msgctxt "view:stock.shipment.in:"
msgid "Reset to Draft"
-msgstr "Restablecer a Borrador"
+msgstr "Restablecer a borrador"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipment"
-msgstr "Envío de Proveedor"
+msgstr "Envío de proveedor"
msgctxt "view:stock.shipment.in:"
msgid "Supplier Shipments"
-msgstr "Envíos de Proveedor"
+msgstr "Envíos de proveedor"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to Assign"
-msgstr "No se puede Asignar"
+msgstr "No se puede asignar"
msgctxt "view:stock.shipment.internal.assign.failed:"
msgid "Unable to assign those products:"
@@ -2165,19 +2170,19 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipment"
-msgstr "Envío Interno"
+msgstr "Envío interno"
msgctxt "view:stock.shipment.internal:"
msgid "Internal Shipments"
-msgstr "Envíos Internos"
+msgstr "Envíos internos"
msgctxt "view:stock.shipment.internal:"
msgid "Wait"
-msgstr "Espera"
+msgstr "Esperando"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to Assign"
-msgstr "No se puede Asignar"
+msgstr "No se puede asignar"
msgctxt "view:stock.shipment.out.assign.failed:"
msgid "Unable to assign those products:"
@@ -2189,11 +2194,11 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipment"
-msgstr "Devolución de Cliente"
+msgstr "Devolución de cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Customer Return Shipments"
-msgstr "Devoluciones de Clientes"
+msgstr "Devoluciones de clientes"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
@@ -2205,11 +2210,11 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.out.return:"
msgid "Incoming Moves"
-msgstr "Movimientos de Entrada"
+msgstr "Movimientos de entrada"
msgctxt "view:stock.shipment.out.return:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "view:stock.shipment.out.return:"
msgid "Received"
@@ -2225,11 +2230,11 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipment"
-msgstr "Envío a Cliente"
+msgstr "Envío a cliente"
msgctxt "view:stock.shipment.out:"
msgid "Customer Shipments"
-msgstr "Envíos al Cliente"
+msgstr "Envíos al cliente"
msgctxt "view:stock.shipment.out:"
msgid "Done"
@@ -2241,7 +2246,7 @@ msgstr "Borrador"
msgctxt "view:stock.shipment.out:"
msgid "Inventory Moves"
-msgstr "Movimientos de Inventario"
+msgstr "Movimientos de inventario"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
@@ -2249,11 +2254,11 @@ msgstr "Realizar envío"
msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
-msgstr "Movimientos de Salida"
+msgstr "Movimientos de salida"
msgctxt "view:stock.shipment.out:"
msgid "Wait"
-msgstr "Espera"
+msgstr "Esperando"
msgctxt "wizard_button:product.by_location,start,end:"
msgid "Cancel"
@@ -2280,25 +2285,25 @@ msgid "Open"
msgstr "Abrir"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forzar Asignación"
+msgstr "Forzar asignación"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forzar Asignación"
+msgstr "Forzar asignación"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
-msgstr "Forzar Asignación"
+msgstr "Forzar asignación"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 274f174..da28784 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -61,7 +61,7 @@ msgid ""
"You can not delete stock move \"%s\" because it is not in draft or cancelled"
" state."
msgstr ""
-"No puede borrar el movimiento de stock \"%s\" porque no está en estado "
+"No puede eliminar el movimiento de stock \"%s\" porque no está en estado "
"borrador o cancelado."
msgctxt "error:stock.move:"
@@ -82,7 +82,7 @@ msgid ""
" state."
msgstr ""
"No puede cambiar el movimiento de stock \"%s\" porque se encuentra en estado"
-" \"Realizado\" o \"Cancelado\"."
+" \"Finalizado\" o \"Cancelado\"."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to assigned state."
@@ -90,7 +90,7 @@ msgstr "No puede cambiar el movimiento de stock \"%s\" a estado reservado."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to done state."
-msgstr "No puede cambiar el movimiento de stock \"%s\" a estado realizado."
+msgstr "No puede cambiar el movimiento de stock \"%s\" a estado finalizado."
msgctxt "error:stock.move:"
msgid "You can not set stock move \"%s\" to draft state."
@@ -1802,7 +1802,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.inventory,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.inventory,state:"
msgid "Draft"
@@ -1846,12 +1846,16 @@ msgstr "Cancelado"
msgctxt "selection:stock.move,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Borrador"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "En proceso"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Cerrado"
@@ -1866,7 +1870,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.in,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.shipment.in,state:"
msgid "Draft"
@@ -1886,7 +1890,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.shipment.in.return,state:"
msgid "Draft"
@@ -1906,7 +1910,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.shipment.internal,state:"
msgid "Draft"
@@ -1926,7 +1930,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.shipment.out,state:"
msgid "Draft"
@@ -1946,7 +1950,7 @@ msgstr "Cancelado"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizado"
msgctxt "selection:stock.shipment.out.return,state:"
msgid "Draft"
@@ -2082,7 +2086,7 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.in.return:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizar"
msgctxt "view:stock.shipment.in.return:"
msgid "Draft"
@@ -2106,7 +2110,7 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.in:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizar"
msgctxt "view:stock.shipment.in:"
msgid "Incoming Moves"
@@ -2150,7 +2154,7 @@ msgstr "Cancelar"
msgctxt "view:stock.shipment.internal:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizar"
msgctxt "view:stock.shipment.internal:"
msgid "Draft"
@@ -2190,7 +2194,7 @@ msgstr "Albaranes devolución cliente"
msgctxt "view:stock.shipment.out.return:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizar"
msgctxt "view:stock.shipment.out.return:"
msgid "Draft"
@@ -2226,7 +2230,7 @@ msgstr "Albaranes cliente"
msgctxt "view:stock.shipment.out:"
msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizar"
msgctxt "view:stock.shipment.out:"
msgid "Draft"
@@ -2238,7 +2242,7 @@ msgstr "Movimientos internos"
msgctxt "view:stock.shipment.out:"
msgid "Make shipment"
-msgstr "Realizar envío"
+msgstr "Empaquetar"
msgctxt "view:stock.shipment.out:"
msgid "Outgoing Moves"
@@ -2273,7 +2277,7 @@ msgid "Open"
msgstr "Abrir"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2281,7 +2285,7 @@ msgid "Force Assign"
msgstr "Forzar reserva"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2289,7 +2293,7 @@ msgid "Force Assign"
msgstr "Forzar reserva"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Aceptar"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index 434d5d5..96092d8 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -1860,6 +1860,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Brouillon"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "Intermédiaire"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Clôturée"
@@ -2281,24 +2285,24 @@ msgid "Open"
msgstr "Ouvrir"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
-msgstr "Ok"
+msgid "OK"
+msgstr "OK"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
-msgstr "Ok"
+msgid "OK"
+msgstr "OK"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
msgid "Force Assign"
msgstr "Forcer l'assignation"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
-msgstr "Ok"
+msgid "OK"
+msgstr "OK"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
msgid "Force Assign"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index f49f041..b86fca1 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -1976,6 +1976,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Concept"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr ""
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr ""
@@ -2448,7 +2452,7 @@ msgstr "Open"
#, fuzzy
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Oké"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2457,7 +2461,7 @@ msgstr ""
#, fuzzy
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Oké"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2466,7 +2470,7 @@ msgstr ""
#, fuzzy
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Oké"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index 098b37e..f0b3c37 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -1850,6 +1850,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "Черновик"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr ""
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Закрыто"
@@ -2274,7 +2278,7 @@ msgid "Open"
msgstr "Открыть"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Ок"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2282,7 +2286,7 @@ msgid "Force Assign"
msgstr "Принудительно назначить"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Ок"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2290,7 +2294,7 @@ msgid "Force Assign"
msgstr "Принудительно назначить"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "Ок"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index 740477a..d57e522 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -1438,7 +1438,7 @@ msgstr "Kupec"
msgctxt "model:stock.location,name:location_input"
msgid "Input Zone"
-msgstr "Prevzem"
+msgstr "Vhodna cona"
msgctxt "model:stock.location,name:location_lost_found"
msgid "Lost and Found"
@@ -1446,7 +1446,7 @@ msgstr "Izgubljeno/najdeno"
msgctxt "model:stock.location,name:location_output"
msgid "Output Zone"
-msgstr "Izdaja"
+msgstr "Izhodna cona"
msgctxt "model:stock.location,name:location_storage"
msgid "Storage Zone"
@@ -1742,7 +1742,7 @@ msgstr "Šifra:"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "Customer"
-msgstr "Terjatve do kupcev"
+msgstr "Kupec"
msgctxt "odt:stock.shipment.out.return.restocking_list:"
msgid "E-Mail:"
@@ -1844,6 +1844,10 @@ msgctxt "selection:stock.move,state:"
msgid "Draft"
msgstr "V pripravi"
+msgctxt "selection:stock.move,state:"
+msgid "Staging"
+msgstr "Zbiranje"
+
msgctxt "selection:stock.period,state:"
msgid "Closed"
msgstr "Zaprto"
@@ -2265,7 +2269,7 @@ msgid "Open"
msgstr "Odpri"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "V redu"
msgctxt "wizard_button:stock.shipment.in.return.assign,failed,force:"
@@ -2273,7 +2277,7 @@ msgid "Force Assign"
msgstr "Rezervacija"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "V redu"
msgctxt "wizard_button:stock.shipment.internal.assign,failed,force:"
@@ -2281,7 +2285,7 @@ msgid "Force Assign"
msgstr "Rezervacija"
msgctxt "wizard_button:stock.shipment.out.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
msgstr "V redu"
msgctxt "wizard_button:stock.shipment.out.assign,failed,force:"
diff --git a/location.py b/location.py
index 8374c47..7de0529 100644
--- a/location.py
+++ b/location.py
@@ -1,11 +1,11 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
import datetime
from decimal import Decimal
from trytond.model import ModelView, ModelSQL, fields
from trytond.wizard import Wizard, StateView, Button, StateAction
from trytond import backend
-from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date
+from trytond.pyson import Not, Bool, Eval, Equal, PYSONEncoder, Date, If
from trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
from trytond.tools import grouped_slice
@@ -44,7 +44,11 @@ class Location(ModelSQL, ModelView):
('view', 'View'),
], 'Location type', states=STATES, depends=DEPENDS)
parent = fields.Many2One("stock.location", "Parent", select=True,
- left="left", right="right")
+ left="left", right="right",
+ states={
+ 'invisible': Eval('type') == 'warehouse',
+ },
+ depends=['type'])
left = fields.Integer('Left', required=True, select=True)
right = fields.Integer('Right', required=True, select=True)
childs = fields.One2Many("stock.location", "parent", "Children")
@@ -104,6 +108,41 @@ class Location(ModelSQL, ModelView):
'child of warehouse "%(warehouse)s".'),
})
+ parent_domain = []
+ childs_domain = []
+ childs_mapping = cls._childs_domain()
+ for type_, allowed_parents in cls._parent_domain().iteritems():
+ parent_domain.append(If(Eval('type') == type_,
+ ('type', 'in', allowed_parents), ()))
+ childs_domain.append(If(Eval('type') == type_,
+ ('type', 'in', childs_mapping[type_]), ()))
+ cls.parent.domain = parent_domain
+ cls.childs.domain = childs_domain
+ cls.childs.depends.append('type')
+
+ @classmethod
+ def _parent_domain(cls):
+ '''Returns a dict with location types as keys and a list of allowed
+ parent location types as values'''
+ return {
+ 'customer': ['customer'],
+ 'supplier': ['supplier'],
+ 'production': ['production'],
+ 'lost_found': ['lost_found'],
+ 'view': ['warehouse', 'view', 'storage'],
+ 'storage': ['warehouse', 'view', 'storage'],
+ 'warehouse': [''],
+ }
+
+ @classmethod
+ def _childs_domain(cls):
+ childs_domain = {}
+ for type_, allowed_parents in cls._parent_domain().iteritems():
+ for parent in allowed_parents:
+ childs_domain.setdefault(parent, [])
+ childs_domain[parent].append(type_)
+ return childs_domain
+
@classmethod
def __register__(cls, module_name):
TableHandler = backend.get('TableHandler')
diff --git a/location.xml b/location.xml
index 99c7050..007acfc 100644
--- a/location.xml
+++ b/location.xml
@@ -25,7 +25,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_location_tree">
<field name="name">Locations</field>
<field name="res_model">stock.location</field>
- <field name="domain">[('parent', '=', None)]</field>
+ <field name="domain" eval="[('parent', '=', None)]" pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_location_tree_view1">
<field name="sequence" eval="10"/>
@@ -61,7 +61,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="name">Products</field>
<field name="res_model">product.product</field>
<field name="window_name" eval="False"/>
- <field name="domain">['OR', ('quantity', '!=', 0.0), ('forecast_quantity', '!=', 0.0)]</field>
+ <field name="domain"
+ eval="['OR', ('quantity', '!=', 0.0), ('forecast_quantity', '!=', 0.0)]"
+ pyson="1"/>
<field name="window_name" eval="True"/>
</record>
<record model="ir.action.act_window.view" id="act_product_form_view2">
diff --git a/move.py b/move.py
index ee7a483..d82aa52 100644
--- a/move.py
+++ b/move.py
@@ -1,10 +1,11 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
import datetime
import operator
from decimal import Decimal
from functools import partial
-from sql import Literal, Union, Column
+
+from sql import Literal, Union, Column, Null
from sql.aggregate import Sum
from sql.conditionals import Coalesce
from sql.operators import Concat
@@ -16,6 +17,8 @@ from trytond.tools import reduce_ids
from trytond.transaction import Transaction
from trytond.pool import Pool
+from trytond.modules.product import price_digits
+
__all__ = ['StockMixin', 'Move']
STATES = {
@@ -194,6 +197,7 @@ class Move(Workflow, ModelSQL, ModelView):
},
depends=['state'])
state = fields.Selection([
+ ('staging', 'Staging'),
('draft', 'Draft'),
('assigned', 'Assigned'),
('done', 'Done'),
@@ -208,14 +212,15 @@ class Move(Workflow, ModelSQL, ModelView):
Eval('context', {}).get('company', -1)),
],
depends=['state'])
- unit_price = fields.Numeric('Unit Price', digits=(16, 4),
+ unit_price = fields.Numeric('Unit Price', digits=price_digits,
states={
'invisible': Not(Bool(Eval('unit_price_required'))),
'required': Bool(Eval('unit_price_required')),
'readonly': Not(Equal(Eval('state'), 'draft')),
},
depends=['unit_price_required', 'state'])
- cost_price = fields.Numeric('Cost Price', digits=(16, 4), readonly=True)
+ cost_price = fields.Numeric('Cost Price', digits=price_digits,
+ readonly=True)
currency = fields.Many2One('currency.currency', 'Currency',
states={
'invisible': Not(Bool(Eval('unit_price_required'))),
@@ -223,7 +228,8 @@ class Move(Workflow, ModelSQL, ModelView):
'readonly': Not(Equal(Eval('state'), 'draft')),
},
depends=['unit_price_required', 'state'])
- unit_price_required = fields.Function(fields.Boolean('Unit Price Required'),
+ unit_price_required = fields.Function(
+ fields.Boolean('Unit Price Required'),
'on_change_with_unit_price_required')
@classmethod
@@ -264,6 +270,7 @@ class Move(Workflow, ModelSQL, ModelView):
'no_origin': 'The stock move "%s" has no origin.',
})
cls._transitions |= set((
+ ('staging', 'draft'),
('draft', 'assigned'),
('draft', 'done'),
('draft', 'cancel'),
@@ -345,7 +352,7 @@ class Move(Workflow, ModelSQL, ModelView):
columns=[sql_table.shipment],
values=[Concat(model + ',',
Column(sql_table, column))],
- where=Column(sql_table, column) != None))
+ where=Column(sql_table, column) != Null))
table.drop_column(column)
# Add index on create_date
@@ -388,13 +395,10 @@ class Move(Workflow, ModelSQL, ModelView):
Uom = pool.get('product.uom')
Currency = pool.get('currency.currency')
- res = {
- 'unit_price': Decimal('0.0'),
- }
+ self.unit_price = Decimal('0.0')
if self.product:
- res['uom'] = self.product.default_uom.id
- res['uom.rec_name'] = self.product.default_uom.rec_name
- res['unit_digits'] = self.product.default_uom.digits
+ self.uom = self.product.default_uom
+ self.unit_digits = self.product.default_uom.digits
unit_price = None
if self.from_location and self.from_location.type in ('supplier',
'production'):
@@ -408,8 +412,7 @@ class Move(Workflow, ModelSQL, ModelView):
if self.currency and self.company:
unit_price = Currency.compute(self.company.currency,
unit_price, self.currency, round=False)
- res['unit_price'] = unit_price
- return res
+ self.unit_price = unit_price
@fields.depends('product')
def on_change_with_product_uom_category(self, name=None):
@@ -423,9 +426,7 @@ class Move(Workflow, ModelSQL, ModelView):
Uom = pool.get('product.uom')
Currency = pool.get('currency.currency')
- res = {
- 'unit_price': Decimal('0.0'),
- }
+ self.unit_price = Decimal('0.0')
if self.product:
if self.to_location and self.to_location.type == 'storage':
unit_price = self.product.cost_price
@@ -435,8 +436,7 @@ class Move(Workflow, ModelSQL, ModelView):
if self.currency and self.company:
unit_price = Currency.compute(self.company.currency,
unit_price, self.currency, round=False)
- res['unit_price'] = unit_price
- return res
+ self.unit_price = unit_price
@fields.depends('from_location', 'to_location')
def on_change_with_unit_price_required(self, name=None):
@@ -645,7 +645,8 @@ class Move(Workflow, ModelSQL, ModelView):
vlist = [x.copy() for x in vlist]
for vals in vlist:
- assert vals.get('state', 'draft') == 'draft'
+ assert vals.get('state', cls.default_state()
+ ) in ['draft', 'staging']
product = Product(vals['product'])
uom = Uom(vals['uom'])
@@ -778,6 +779,8 @@ class Move(Workflow, ModelSQL, ModelView):
success = True
for move in moves:
if move.state != 'draft':
+ if move.state == 'staging':
+ success = False
continue
to_location = move.to_location
location_qties = {}
@@ -800,18 +803,19 @@ class Move(Workflow, ModelSQL, ModelView):
for _, qty in to_pick:
picked_qties += qty
- if picked_qties < move.quantity:
+ if move.quantity - picked_qties >= move.uom.rounding:
success = False
first = False
cls.write([move], {
- 'quantity': move.quantity - picked_qties,
+ 'quantity': Uom.round(
+ move.quantity - picked_qties, move.uom.rounding),
})
else:
first = True
for from_location, qty in to_pick:
values = {
'from_location': from_location.id,
- 'quantity': qty,
+ 'quantity': Uom.round(qty, move.uom.rounding),
}
if first:
cls.write([move], values)
@@ -839,7 +843,8 @@ class Move(Workflow, ModelSQL, ModelView):
stock_date_end: if set the date of the stock computation.
stock_date_start: if set return the delta of the stock between the
two dates, (ignored if stock_date_end is missing).
- stock_assign: if set compute also the assigned moves as done.
+ stock_assign: if set compute also the assigned outgoing moves as
+ done.
forecast: if set compute the forecast quantity.
stock_destinations: A list of location ids. If set, restrict the
computation to moves from and to those locations.
@@ -864,13 +869,8 @@ class Move(Workflow, ModelSQL, ModelView):
Date = pool.get('ir.date')
Period = pool.get('stock.period')
Move = pool.get('stock.move')
- Product = pool.get('product.product')
- Template = pool.get('product.template')
move = Move.__table__()
- product = Product.__table__()
- template = Template.__table__()
-
today = Date.today()
if not location_ids:
@@ -896,28 +896,30 @@ class Move(Workflow, ModelSQL, ModelView):
if (context['stock_date_end'] < today
or (context['stock_date_end'] == today
and not context.get('forecast'))):
- state_date_clause = (
+ state_date_clause = lambda stock_assign: (
move.state.in_(['done',
- context.get('stock_assign') and 'assigned' or 'done'])
+ 'assigned' if stock_assign else 'done'])
& (
(
- (move.effective_date == None)
+ (move.effective_date == Null)
& (move.planned_date <= context['stock_date_end'])
)
| (move.effective_date <= context['stock_date_end'])
)
)
+ state_date_clause_in = state_date_clause(False)
+ state_date_clause_out = state_date_clause(
+ context.get('stock_assign'))
# future date end: filter move on state done and date
# before today, or on all state and date between today and
# date_end.
else:
- state_date_clause = (
+ state_date_clause = lambda stock_assign: (
(move.state.in_(['done',
- context.get('stock_assign') and 'assigned'
- or 'done'])
+ 'assigned' if stock_assign else 'done'])
& (
(
- (move.effective_date == None)
+ (move.effective_date == Null)
& (move.planned_date <= today)
)
| (move.effective_date <= today)
@@ -926,7 +928,7 @@ class Move(Workflow, ModelSQL, ModelView):
| (move.state.in_(['done', 'assigned', 'draft'])
& (
(
- (move.effective_date == None)
+ (move.effective_date == Null)
& (Coalesce(move.planned_date, datetime.date.max)
<= context['stock_date_end'])
& (Coalesce(move.planned_date, datetime.date.max)
@@ -939,33 +941,38 @@ class Move(Workflow, ModelSQL, ModelView):
)
)
)
+ state_date_clause_in = state_date_clause(False)
+ state_date_clause_out = state_date_clause(
+ context.get('stock_assign'))
if context.get('stock_date_start'):
if context['stock_date_start'] > today:
- state_date_clause &= (
+ state_date_clause = lambda: (
move.state.in_(['done', 'assigned', 'draft'])
& (
(
- (move.effective_date == None)
+ (move.effective_date == Null)
& (
(move.planned_date >=
context['stock_date_start'])
- | (move.planned_date == None)
+ | (move.planned_date == Null)
)
)
| (move.effective_date >= context['stock_date_start'])
)
)
+ state_date_clause_in &= state_date_clause()
+ state_date_clause_out &= state_date_clause()
else:
- state_date_clause &= (
+ state_date_clause = lambda stock_assign: (
(
move.state.in_(['done', 'assigned', 'draft'])
& (
(
- (move.effective_date == None)
+ (move.effective_date == Null)
& (
(move.planned_date >= today)
- | (move.planned_date == None)
+ | (move.planned_date == Null)
)
)
| (move.effective_date >= today)
@@ -973,18 +980,17 @@ class Move(Workflow, ModelSQL, ModelView):
)
| (
move.state.in_(['done',
- context.get('stock_assign') and 'assigned'
- or 'done'])
+ 'assigned' if stock_assign else 'done'])
& (
(
- (move.effective_date == None)
+ (move.effective_date == Null)
& (
(
(move.planned_date >=
context['stock_date_start'])
& (move.planned_date < today)
)
- | (move.planned_date == None)
+ | (move.planned_date == Null)
)
)
| (
@@ -995,6 +1001,9 @@ class Move(Workflow, ModelSQL, ModelView):
)
)
)
+ state_date_clause_in &= state_date_clause(False)
+ state_date_clause_out &= state_date_clause(
+ context.get('stock_assign'))
elif PeriodCache:
periods = Period.search([
('date', '<', context['stock_date_end']),
@@ -1002,9 +1011,11 @@ class Move(Workflow, ModelSQL, ModelView):
], order=[('date', 'DESC')], limit=1)
if periods:
period, = periods
- state_date_clause &= (
+ state_date_clause = lambda: (
Coalesce(move.effective_date, move.planned_date,
datetime.date.max) > period.date)
+ state_date_clause_in &= state_date_clause()
+ state_date_clause_out &= state_date_clause()
if with_childs:
location_query = Location.search([
@@ -1013,11 +1024,10 @@ class Move(Workflow, ModelSQL, ModelView):
else:
location_query = location_ids[:]
- from_ = move
if PeriodCache:
from_period = period_cache
+ where = where_period = Literal(True)
if grouping_filter and any(grouping_filter):
- where = where_period = Literal(True)
for fieldname, grouping_ids in zip(grouping, grouping_filter):
if not grouping_ids:
continue
@@ -1032,16 +1042,6 @@ class Move(Workflow, ModelSQL, ModelView):
where &= column.in_(grouping_ids)
if PeriodCache:
where_period &= cache_column.in_(grouping_ids)
- else:
- where = where_period = template.active == True
- from_ = from_.join(product, condition=move.product == product.id)
- from_ = from_.join(template,
- condition=product.template == template.id)
- if PeriodCache:
- from_period = from_period.join(product,
- condition=period_cache.product == product.id)
- from_period = from_period.join(template,
- condition=product.template == template.id)
if context.get('stock_destinations'):
destinations = context['stock_destinations']
@@ -1059,21 +1059,22 @@ class Move(Workflow, ModelSQL, ModelView):
# One that sums incoming moves towards locations, one that sums
# outgoing moves and one for the period cache. UNION ALL is used
# because we already know that there will be no duplicates.
- move_keys = [Column(move, key).as_(key) for key in grouping]
- query = from_.select(move.to_location.as_('location'),
+ move_keys_alias = [Column(move, key).as_(key) for key in grouping]
+ move_keys = [Column(move, key) for key in grouping]
+ query = move.select(move.to_location.as_('location'),
Sum(move.internal_quantity).as_('quantity'),
- *move_keys,
- where=state_date_clause
+ *move_keys_alias,
+ where=state_date_clause_in
& where
& move.to_location.in_(location_query)
& (move.id.in_(move_rule_query) if move_rule_query
else Literal(True))
& dest_clause_from,
group_by=[move.to_location] + move_keys)
- query = Union(query, from_.select(move.from_location.as_('location'),
+ query = Union(query, move.select(move.from_location.as_('location'),
(-Sum(move.internal_quantity)).as_('quantity'),
- *move_keys,
- where=state_date_clause
+ *move_keys_alias,
+ where=state_date_clause_out
& where
& move.from_location.in_(location_query)
& (move.id.in_(move_rule_query) if move_rule_query
diff --git a/move.xml b/move.xml
index 11d7ecd..a999a4d 100644
--- a/move.xml
+++ b/move.xml
@@ -25,7 +25,9 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_move_form">
<field name="name">Moves</field>
<field name="res_model">stock.move</field>
- <field name="search_value">[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]</field>
+ <field name="search_value"
+ eval="[('create_date', '>=', DateTime(hour=0, minute=0, second=0, microsecond=0, delta_years=-1))]"
+ pyson="1"/>
</record>
<record model="ir.action.act_window.view" id="act_move_form_view1">
<field name="sequence" eval="1"/>
@@ -46,19 +48,24 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window.domain" id="act_move_form_domain_from_supplier">
<field name="name">From Suppliers</field>
<field name="sequence" eval="20"/>
- <field name="domain">[('from_location.type', '=', 'supplier')]</field>
+ <field name="domain"
+ eval="[('from_location.type', '=', 'supplier')]" pyson="1"/>
<field name="act_window" ref="act_move_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_move_form_domain_from_supplier_waiting">
<field name="name">From Suppliers Waiting</field>
<field name="sequence" eval="30"/>
- <field name="domain">[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('shipment', '=', None)]</field>
+ <field name="domain"
+ eval="[('from_location.type', '=', 'supplier'), ('state', '=', 'draft'), ('shipment', '=', None)]"
+ pyson="1"/>
<field name="act_window" ref="act_move_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_move_form_domain_to_customer">
<field name="name">To Customers</field>
<field name="sequence" eval="40"/>
- <field name="domain">[('to_location.type', '=', 'customer')]</field>
+ <field name="domain"
+ eval="[('to_location.type', '=', 'customer')]"
+ pyson="1"/>
<field name="act_window" ref="act_move_form"/>
</record>
<menuitem parent="menu_stock" sequence="40"
@@ -74,7 +81,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_move">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_move"/>
</record>
diff --git a/party.xml b/party.xml
index 9892d32..582d6a7 100644
--- a/party.xml
+++ b/party.xml
@@ -6,7 +6,8 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form2">
<field name="name">Customer Shipments</field>
<field name="res_model">stock.shipment.out</field>
- <field name="domain">[('customer', 'in', Eval('active_ids'))]</field>
+ <field name="domain"
+ eval="[('customer', 'in', Eval('active_ids'))]" pyson="1"/>
</record>
<record model="ir.action.keyword"
id="act_open_purchase_keyword1">
@@ -23,7 +24,8 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_shipment_out_form3">
<field name="name">Supplier Shipments</field>
<field name="res_model">stock.shipment.in</field>
- <field name="domain">[('supplier', 'in', Eval('active_ids'))]</field>
+ <field name="domain"
+ eval="[('supplier', 'in', Eval('active_ids'))]" pyson="1"/>
</record>
<record model="ir.action.keyword"
id="act_open_purchase_keyword2">
diff --git a/period.py b/period.py
index e478e65..1961e54 100644
--- a/period.py
+++ b/period.py
@@ -1,8 +1,8 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 itertools import chain
from trytond.model import Workflow, ModelView, ModelSQL, fields
-from trytond.pyson import Equal, Eval, If, In, Get
+from trytond.pyson import Equal, Eval, If, In
from trytond.transaction import Transaction
from trytond.pool import Pool
from trytond.tools import grouped_slice
@@ -53,6 +53,10 @@ class Period(Workflow, ModelSQL, ModelView):
})
@staticmethod
+ def default_company():
+ return Transaction().context.get('company')
+
+ @staticmethod
def default_state():
return 'draft'
diff --git a/picking_list.odt b/picking_list.odt
index 6edecd1..aceef03 100644
Binary files a/picking_list.odt and b/picking_list.odt differ
diff --git a/product.py b/product.py
index daccac9..c72bbdc 100644
--- a/product.py
+++ b/product.py
@@ -1,8 +1,9 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
import datetime
from decimal import Decimal
-from sql import Literal
+
+from sql import Literal, Null
from sql.aggregate import Max
from sql.functions import Now
from sql.conditionals import Coalesce
@@ -263,7 +264,7 @@ class ProductQuantitiesByWarehouse(ModelSQL, ModelView):
where=(move.product == product_id)
& (move.from_location.in_(warehouse_query)
| move.to_location.in_(warehouse_query))
- & (Coalesce(move.effective_date, move.planned_date) != None),
+ & (Coalesce(move.effective_date, move.planned_date) != Null),
group_by=(date_column, move.product))
@classmethod
diff --git a/product.xml b/product.xml
index 5b72e34..cb9892f 100644
--- a/product.xml
+++ b/product.xml
@@ -21,7 +21,7 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window" id="act_location_quantity_tree">
<field name="name">Locations</field>
<field name="res_model">stock.location</field>
- <field name="domain">[('parent', '=', None)]</field>
+ <field name="domain" eval="[('parent', '=', None)]" pyson="1"/>
<field name="window_name" eval="True"/>
</record>
<record model="ir.action.act_window.view" id="act_location_quantity_tree_view">
diff --git a/setup.py b/setup.py
index 064a3de..ca878f4 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 setuptools import setup
import re
@@ -41,7 +41,7 @@ if minor_version % 2:
'hg+http://hg.tryton.org/modules/%s#egg=%s-%s' % (
name[8:], name, version))
-requires = ['python-sql']
+requires = ['python-sql >= 0.4']
for dep in info.get('depends', []):
if not re.match(r'(ir|res|webdav)(\W|$)', dep):
requires.append(get_require_version('trytond_%s' % dep))
@@ -93,6 +93,8 @@ setup(name=name,
'Natural Language :: Spanish',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: Implementation :: CPython',
+ 'Programming Language :: Python :: Implementation :: PyPy',
'Topic :: Office/Business',
],
license='GPL-3',
diff --git a/shipment.py b/shipment.py
index 1b839f2..b0fc56c 100644
--- a/shipment.py
+++ b/shipment.py
@@ -1,7 +1,8 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
import operator
import itertools
+import functools
import datetime
from sql import Table
from sql.functions import Overlay, Position
@@ -12,7 +13,7 @@ from trytond.model import Workflow, ModelView, ModelSQL, fields
from trytond.modules.company import CompanyReport
from trytond.wizard import Wizard, StateTransition, StateView, Button
from trytond import backend
-from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Get, Id
+from trytond.pyson import Eval, Not, Equal, If, Or, And, Bool, In, Id
from trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
from trytond.tools import reduce_ids, grouped_slice
@@ -246,6 +247,10 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
table.index_action('create_date', action='add')
@staticmethod
+ def default_planned_date():
+ return Pool().get('ir.date').today()
+
+ @staticmethod
def default_state():
return 'draft'
@@ -262,10 +267,9 @@ class ShipmentIn(Workflow, ModelSQL, ModelView):
@fields.depends('supplier')
def on_change_supplier(self):
- address = None
+ self.contact_address = None
if self.supplier:
- address = self.supplier.address_get()
- return {'contact_address': address.id if address else None}
+ self.contact_address = self.supplier.address_get()
@fields.depends('supplier')
def on_change_with_supplier_location(self, name=None):
@@ -966,10 +970,9 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
@fields.depends('customer')
def on_change_customer(self):
- address = None
+ self.delivery_address = None
if self.customer:
- address = self.customer.address_get(type='delivery')
- return {'delivery_address': address.id if address else None}
+ self.delivery_address = self.customer.address_get(type='delivery')
@fields.depends('customer')
def on_change_with_customer_location(self, name=None):
@@ -1031,6 +1034,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
def get_origins(self, name):
return ', '.join(set(itertools.ifilter(None,
(m.origin_name for m in self.moves))))
+
@classmethod
@ModelView.button
@Workflow.transition('draft')
@@ -1060,7 +1064,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
continue
to_create.append(shipment._get_inventory_move(move))
if to_create:
- Move.create([m._save_values for m in to_create])
+ Move.save(to_create)
def _get_inventory_move(self, move):
'Return inventory move for the outgoing move'
@@ -1077,12 +1081,13 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
company=move.company,
currency=move.currency,
unit_price=move.unit_price,
+ state='staging' if move.state == 'staging' else 'draft',
)
@classmethod
@Workflow.transition('assigned')
def assign(cls, shipments):
- pass
+ cls._sync_inventory_to_outgoing(shipments, create=True, write=False)
@classmethod
@ModelView.button
@@ -1112,7 +1117,7 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
)
@classmethod
- def _sync_inventory_to_outgoing(cls, shipments):
+ def _sync_inventory_to_outgoing(cls, shipments, create=True, write=True):
'Synchronise outgoing moves with inventory moves'
pool = Pool()
Move = pool.get('stock.move')
@@ -1150,15 +1155,17 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
else:
out_quantity = move.quantity
+ if not out_quantity:
+ continue
unit_price = Uom.compute_price(move.product.default_uom,
move.product.list_price, move.uom)
to_create.append(shipment._get_outgoing_move(move))
to_create[-1].quantity = out_quantity
to_create[-1].unit_price = unit_price
- if to_create:
- Move.create([m._save_values for m in to_create])
+ if create and to_create:
+ Move.save(to_create)
- #Re-read the shipment and remove exceeding quantities
+ # Re-read the shipment and remove exceeding quantities
for move in shipment.outgoing_moves:
if move.state == 'cancel':
continue
@@ -1168,9 +1175,10 @@ class ShipmentOut(Workflow, ModelSQL, ModelView):
removed_qty = Uom.compute_qty(move.uom,
min(exc_qty, move.quantity), move.product.default_uom,
round=False)
- Move.write([move], {
- 'quantity': max(0.0, move.quantity - exc_qty),
- })
+ if write:
+ Move.write([move], {
+ 'quantity': max(0.0, move.quantity - exc_qty),
+ })
outgoing_qty[move.product.id] -= removed_qty
@classmethod
@@ -1482,12 +1490,9 @@ class ShipmentOutReturn(Workflow, ModelSQL, ModelView):
@fields.depends('customer')
def on_change_customer(self):
- address = None
+ self.delivery_address = None
if self.customer:
- address = self.customer.address_get(type='delivery')
- return {
- 'delivery_address': address.id if address else None,
- }
+ self.delivery_address = self.customer.address_get(type='delivery')
@fields.depends('customer')
def on_change_with_customer_location(self, name=None):
@@ -1715,7 +1720,7 @@ class AssignShipmentOut(Wizard):
'group_stock_force_assignment').in_(
Eval('context', {}).get('groups', [])),
}),
- Button('Ok', 'end', 'tryton-ok', True),
+ Button('OK', 'end', 'tryton-ok', True),
])
force = StateTransition()
@@ -2032,7 +2037,7 @@ class AssignShipmentInternal(Wizard):
'group_stock_force_assignment').in_(
Eval('context', {}).get('groups', [])),
}),
- Button('Ok', 'end', 'tryton-ok', True),
+ Button('OK', 'end', 'tryton-ok', True),
])
force = StateTransition()
@@ -2080,7 +2085,7 @@ class AssignShipmentInReturn(Wizard):
'group_stock_force_assignment').in_(
Eval('context', {}).get('groups', [])),
}),
- Button('Ok', 'end', 'tryton-ok', True),
+ Button('OK', 'end', 'tryton-ok', True),
])
force = StateTransition()
@@ -2105,11 +2110,11 @@ class DeliveryNote(CompanyReport):
__name__ = 'stock.shipment.out.delivery_note'
@classmethod
- def parse(cls, report, objects, data, localcontext):
- localcontext['product_name'] = lambda product_id, language: \
+ def get_context(cls, records, data):
+ report_context = super(DeliveryNote, cls).get_context(records, data)
+ report_context['product_name'] = lambda product_id, language: \
cls.product_name(product_id, language)
- return super(DeliveryNote, cls).parse(report, objects, data,
- localcontext)
+ return report_context
@classmethod
def product_name(cls, product_id, language):
@@ -2118,189 +2123,61 @@ class DeliveryNote(CompanyReport):
return Product(product_id).rec_name
-class PickingList(CompanyReport):
- 'Picking List'
- __name__ = 'stock.shipment.out.picking_list'
+class ShipmentReport(CompanyReport):
+ move_attribute = 'inventory_moves'
@classmethod
- def parse(cls, report, objects, data, localcontext):
- compare_context = cls.get_compare_context(report, objects, data)
+ def get_context(cls, records, data):
+ report_context = super(ShipmentReport, cls).get_context(records, data)
+ compare_context = cls.get_compare_context(records, data)
sorted_moves = {}
- for shipment in objects:
+ for shipment in records:
sorted_moves[shipment.id] = sorted(
- shipment.inventory_moves,
- lambda x, y: cmp(cls.get_compare_key(x, compare_context),
- cls.get_compare_key(y, compare_context))
- )
+ getattr(shipment, cls.move_attribute),
+ key=functools.partial(cls.get_compare_key, compare_context))
+ report_context['moves'] = sorted_moves
- localcontext['moves'] = sorted_moves
+ return report_context
- return super(PickingList, cls).parse(report, objects, data,
- localcontext)
-
- @staticmethod
- def get_compare_context(report, objects, data):
- Location = Pool().get('stock.location')
+ @classmethod
+ def get_compare_context(cls, objects, data):
from_location_ids = set()
to_location_ids = set()
for obj in objects:
- for move in obj.inventory_moves:
+ for move in getattr(obj, cls.move_attribute):
from_location_ids.add(move.from_location.id)
to_location_ids.add(move.to_location.id)
- from_locations = Location.browse(list(from_location_ids))
- to_locations = Location.browse(list(to_location_ids))
-
return {
- 'from_location_ids': [l.id for l in from_locations],
- 'to_location_ids': [l.id for l in to_locations],
+ 'from_location_ids': list(from_location_ids),
+ 'to_location_ids': list(to_location_ids),
}
@staticmethod
- def get_compare_key(move, compare_context):
+ def get_compare_key(compare_context, move):
from_location_ids = compare_context['from_location_ids']
to_location_ids = compare_context['to_location_ids']
return [from_location_ids.index(move.from_location.id),
to_location_ids.index(move.to_location.id)]
-class SupplierRestockingList(CompanyReport):
- 'Supplier Restocking List'
- __name__ = 'stock.shipment.in.restocking_list'
-
- @classmethod
- def parse(cls, report, objects, data, localcontext):
- compare_context = cls.get_compare_context(report, objects, data)
-
- sorted_moves = {}
- for shipment in objects:
- sorted_moves[shipment.id] = sorted(
- shipment.inventory_moves,
- lambda x, y: cmp(cls.get_compare_key(x, compare_context),
- cls.get_compare_key(y, compare_context))
- )
-
- localcontext['moves'] = sorted_moves
-
- return super(SupplierRestockingList, cls).parse(report, objects,
- data, localcontext)
-
- @staticmethod
- def get_compare_context(report, objects, data):
- Location = Pool().get('stock.location')
- from_location_ids = set()
- to_location_ids = set()
- for obj in objects:
- for move in obj.inventory_moves:
- from_location_ids.add(move.from_location.id)
- to_location_ids.add(move.to_location.id)
-
- from_locations = Location.browse(list(from_location_ids))
- to_locations = Location.browse(list(to_location_ids))
+class PickingList(ShipmentReport):
+ 'Picking List'
+ __name__ = 'stock.shipment.out.picking_list'
- return {
- 'from_location_ids': [l.id for l in from_locations],
- 'to_location_ids': [l.id for l in to_locations],
- }
- @staticmethod
- def get_compare_key(move, compare_context):
- from_location_ids = compare_context['from_location_ids']
- to_location_ids = compare_context['to_location_ids']
- return [from_location_ids.index(move.from_location.id),
- to_location_ids.index(move.to_location.id)]
+class SupplierRestockingList(ShipmentReport):
+ 'Supplier Restocking List'
+ __name__ = 'stock.shipment.in.restocking_list'
-class CustomerReturnRestockingList(CompanyReport):
+class CustomerReturnRestockingList(ShipmentReport):
'Customer Return Restocking List'
__name__ = 'stock.shipment.out.return.restocking_list'
- @classmethod
- def parse(cls, report, objects, data, localcontext):
- compare_context = cls.get_compare_context(report, objects, data)
-
- sorted_moves = {}
- for shipment in objects:
- sorted_moves[shipment.id] = sorted(
- shipment.inventory_moves,
- lambda x, y: cmp(cls.get_compare_key(x, compare_context),
- cls.get_compare_key(y, compare_context))
- )
- localcontext['moves'] = sorted_moves
-
- return super(CustomerReturnRestockingList, cls).parse(report,
- objects, data, localcontext)
-
- @staticmethod
- def get_compare_context(report, objects, data):
- Location = Pool().get('stock.location')
- from_location_ids = set()
- to_location_ids = set()
- for obj in objects:
- for move in obj.inventory_moves:
- from_location_ids.add(move.from_location.id)
- to_location_ids.add(move.to_location.id)
-
- from_locations = Location.browse(list(from_location_ids))
- to_locations = Location.browse(list(to_location_ids))
-
- return {
- 'from_location_ids': [l.id for l in from_locations],
- 'to_location_ids': [l.id for l in to_locations],
- }
-
- @staticmethod
- def get_compare_key(move, compare_context):
- from_location_ids = compare_context['from_location_ids']
- to_location_ids = compare_context['to_location_ids']
- return [from_location_ids.index(move.from_location.id),
- to_location_ids.index(move.to_location.id)]
-
-
-class InteralShipmentReport(CompanyReport):
+class InteralShipmentReport(ShipmentReport):
'Interal Shipment Report'
__name__ = 'stock.shipment.internal.report'
-
- @classmethod
- def parse(cls, report, objects, data, localcontext=None):
- compare_context = cls.get_compare_context(report, objects, data)
-
- sorted_moves = {}
- for shipment in objects:
- sorted_moves[shipment.id] = sorted(
- shipment.moves,
- lambda x, y: cmp(cls.get_compare_key(x, compare_context),
- cls.get_compare_key(y, compare_context))
- )
-
- localcontext['moves'] = sorted_moves
-
- return super(InteralShipmentReport, cls).parse(report, objects,
- data, localcontext)
-
- @staticmethod
- def get_compare_context(report, objects, data):
- Location = Pool().get('stock.location')
- from_location_ids = set()
- to_location_ids = set()
- for obj in objects:
- for move in obj.moves:
- from_location_ids.add(move.from_location.id)
- to_location_ids.add(move.to_location.id)
-
- from_locations = Location.browse(list(from_location_ids))
- to_locations = Location.browse(list(to_location_ids))
-
- return {
- 'from_location_ids': [l.id for l in from_locations],
- 'to_location_ids': [l.id for l in to_locations],
- }
-
- @staticmethod
- def get_compare_key(move, compare_context):
- from_location_ids = compare_context['from_location_ids']
- to_location_ids = compare_context['to_location_ids']
- return [from_location_ids.index(move.from_location.id),
- to_location_ids.index(move.to_location.id)]
+ move_attribute = 'moves'
diff --git a/shipment.xml b/shipment.xml
index b2268c1..076cbe2 100644
--- a/shipment.xml
+++ b/shipment.xml
@@ -34,13 +34,13 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window.domain" id="act_shipment_in_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="act_window" ref="act_shipment_in_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_shipment_in_form_domain_received">
<field name="name">Received</field>
<field name="sequence" eval="20"/>
- <field name="domain">[('state', '=', 'received')]</field>
+ <field name="domain" eval="[('state', '=', 'received')]" pyson="1"/>
<field name="act_window" ref="act_shipment_in_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_shipment_in_form_domain_all">
@@ -89,21 +89,21 @@ this repository contains the full copyright notices and license terms. -->
id="act_shipment_in_return_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="act_window" ref="act_shipment_in_return_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_shipment_in_return_form_domain_assigned">
<field name="name">Assigned</field>
<field name="sequence" eval="20"/>
- <field name="domain">[('state', '=', 'assigned')]</field>
+ <field name="domain" eval="[('state', '=', 'assigned')]" pyson="1"/>
<field name="act_window" ref="act_shipment_in_return_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_shipment_in_return_form_domain_waiting">
<field name="name">Waiting</field>
<field name="sequence" eval="30"/>
- <field name="domain">[('state', '=', 'waiting')]</field>
+ <field name="domain" eval="[('state', '=', 'waiting')]" pyson="1"/>
<field name="act_window" ref="act_shipment_in_return_form"/>
</record>
<record model="ir.action.act_window.domain"
@@ -160,25 +160,25 @@ this repository contains the full copyright notices and license terms. -->
<record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="act_window" ref="act_shipment_out_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_waiting">
<field name="name">Waiting</field>
<field name="sequence" eval="20"/>
- <field name="domain">[('state', '=', 'waiting')]</field>
+ <field name="domain" eval="[('state', '=', 'waiting')]" pyson="1"/>
<field name="act_window" ref="act_shipment_out_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_assigned">
<field name="name">Assigned</field>
<field name="sequence" eval="30"/>
- <field name="domain">[('state', '=', 'assigned')]</field>
+ <field name="domain" eval="[('state', '=', 'assigned')]" pyson="1"/>
<field name="act_window" ref="act_shipment_out_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_packed">
<field name="name">Packed</field>
<field name="sequence" eval="40"/>
- <field name="domain">[('state', '=', 'packed')]</field>
+ <field name="domain" eval="[('state', '=', 'packed')]" pyson="1"/>
<field name="act_window" ref="act_shipment_out_form"/>
</record>
<record model="ir.action.act_window.domain" id="act_shipment_out_form_domain_all">
@@ -233,21 +233,21 @@ this repository contains the full copyright notices and license terms. -->
id="act_shipment_internal_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="act_window" ref="act_shipment_internal_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_shipment_internal_form_domain_waiting">
<field name="name">Waiting</field>
<field name="sequence" eval="20"/>
- <field name="domain">[('state', '=', 'waiting')]</field>
+ <field name="domain" eval="[('state', '=', 'waiting')]" pyson="1"/>
<field name="act_window" ref="act_shipment_internal_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_shipment_internal_form_domain_assigned">
<field name="name">Assigned</field>
<field name="sequence" eval="30"/>
- <field name="domain">[('state', '=', 'assigned')]</field>
+ <field name="domain" eval="[('state', '=', 'assigned')]" pyson="1"/>
<field name="act_window" ref="act_shipment_internal_form"/>
</record>
<record model="ir.action.act_window.domain"
@@ -299,14 +299,14 @@ this repository contains the full copyright notices and license terms. -->
id="act_shipment_out_return_form_domain_draft">
<field name="name">Draft</field>
<field name="sequence" eval="10"/>
- <field name="domain">[('state', '=', 'draft')]</field>
+ <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
<field name="act_window" ref="act_shipment_out_return_form"/>
</record>
<record model="ir.action.act_window.domain"
id="act_shipment_out_return_form_domain_received">
<field name="name">Received</field>
<field name="sequence" eval="20"/>
- <field name="domain">[('state', '=', 'received')]</field>
+ <field name="domain" eval="[('state', '=', 'received')]" pyson="1"/>
<field name="act_window" ref="act_shipment_out_return_form"/>
</record>
<record model="ir.action.act_window.domain"
@@ -926,7 +926,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_in">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_shipment_in"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_in_return">
@@ -934,7 +936,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_in_return">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_shipment_in_return"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_out">
@@ -942,7 +946,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_out">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_shipment_out"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_out_return">
@@ -950,7 +956,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_out_return">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_shipment_out_return"/>
</record>
<record model="ir.rule.group" id="rule_group_shipment_internal">
@@ -958,7 +966,9 @@ this repository contains the full copyright notices and license terms. -->
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_shipment_internal">
- <field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
+ <field name="domain"
+ eval="[('company', '=', Eval('user', {}).get('company', None))]"
+ pyson="1"/>
<field name="rule_group" ref="rule_group_shipment_internal"/>
</record>
</data>
diff --git a/supplier_restocking_list.odt b/supplier_restocking_list.odt
index cfa779b..4f7ac44 100644
Binary files a/supplier_restocking_list.odt and b/supplier_restocking_list.odt differ
diff --git a/tests/__init__.py b/tests/__init__.py
index 2349560..aa4b1e3 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,5 +1,5 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# 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 .test_stock import suite
diff --git a/tests/scenario_stock_average_cost_price.rst b/tests/scenario_stock_average_cost_price.rst
index 27eb5ed..a87b516 100644
--- a/tests/scenario_stock_average_cost_price.rst
+++ b/tests/scenario_stock_average_cost_price.rst
@@ -2,16 +2,14 @@
Stock Average Cost Price
========================
-=============
-General Setup
-=============
-
Imports::
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> from decimal import Decimal
>>> from proteus import config, Model, Wizard
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
>>> today = datetime.date.today()
Create database::
@@ -22,35 +20,14 @@ Create database::
Install stock Module::
>>> Module = Model.get('ir.module.module')
- >>> modules = Module.find([('name', '=', 'stock')])
- >>> Module.install([x.id for x in modules], config.context)
+ >>> module, = Module.find([('name', '=', 'stock')])
+ >>> module.click('install')
>>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
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
- >>> party = Party(name='Dunder Mifflin')
- >>> party.save()
- >>> company.party = party
- >>> currencies = Currency.find([('code', '=', 'USD')])
- >>> if not currencies:
- ... currency = Currency(name='US Dollar', symbol='$', code='USD',
- ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
- ... mon_decimal_point='.')
- ... currency.save()
- ... CurrencyRate(date=today + relativedelta(month=1, day=1),
- ... rate=Decimal('1.0'), currency=currency).save()
- ... else:
- ... currency, = currencies
- >>> company.currency = currency
- >>> company_config.execute('add')
- >>> company, = Company.find()
+ >>> _ = create_company()
+ >>> company = get_company()
Reload the context::
@@ -94,9 +71,8 @@ Make 1 unit of the product available @ 100 ::
>>> incoming_move.effective_date = today
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('100')
- >>> incoming_move.currency = currency
- >>> incoming_move.save()
- >>> StockMove.do([incoming_move.id], config.context)
+ >>> incoming_move.currency = company.currency
+ >>> incoming_move.click('do')
Check Cost Price is 100::
@@ -116,9 +92,8 @@ Add 1 more unit @ 200::
>>> incoming_move.effective_date = today
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('200')
- >>> incoming_move.currency = currency
- >>> incoming_move.save()
- >>> StockMove.do([incoming_move.id], config.context)
+ >>> incoming_move.currency = company.currency
+ >>> incoming_move.click('do')
Check Cost Price Average is 150::
@@ -139,7 +114,7 @@ Add twice 1 more unit @ 200::
>>> incoming_move.effective_date = today
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('200')
- >>> incoming_move.currency = currency
+ >>> incoming_move.currency = company.currency
>>> incoming_move.save()
>>> incoming_moves.append(incoming_move)
@@ -153,11 +128,11 @@ Add twice 1 more unit @ 200::
>>> incoming_move.effective_date = today
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('200')
- >>> incoming_move.currency = currency
+ >>> incoming_move.currency = company.currency
>>> incoming_move.save()
>>> incoming_moves.append(incoming_move)
- >>> StockMove.do([m.id for m in incoming_moves], config.context)
+ >>> StockMove.click(incoming_moves, 'do')
Check Cost Price Average is 125::
diff --git a/tests/scenario_stock_inventory.rst b/tests/scenario_stock_inventory.rst
index d0ff250..f64211a 100644
--- a/tests/scenario_stock_inventory.rst
+++ b/tests/scenario_stock_inventory.rst
@@ -2,16 +2,14 @@
Stock Inventory Scenario
========================
-=============
-General Setup
-=============
-
Imports::
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> from decimal import Decimal
>>> from proteus import config, Model, Wizard
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
>>> today = datetime.date.today()
Create database::
@@ -28,29 +26,8 @@ Install stock Module::
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
- >>> party = Party(name='Dunder Mifflin')
- >>> party.save()
- >>> company.party = party
- >>> currencies = Currency.find([('code', '=', 'USD')])
- >>> if not currencies:
- ... currency = Currency(name='US Dollar', symbol='$', code='USD',
- ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
- ... mon_decimal_point='.')
- ... currency.save()
- ... CurrencyRate(date=today + relativedelta(month=1, day=1),
- ... rate=Decimal('1.0'), currency=currency).save()
- ... else:
- ... currency, = currencies
- >>> company.currency = currency
- >>> company_config.execute('add')
- >>> company, = Company.find()
+ >>> _ = create_company()
+ >>> company = get_company()
Reload the context::
@@ -95,8 +72,7 @@ Fill storage::
>>> incoming_move.effective_date = today
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('100')
- >>> incoming_move.currency = currency
- >>> incoming_move.save()
+ >>> incoming_move.currency = company.currency
>>> incoming_move.click('do')
Create an inventory::
@@ -134,7 +110,7 @@ Empty storage::
>>> outgoing_move.effective_date = today
>>> outgoing_move.company = company
>>> outgoing_move.unit_price = Decimal('100')
- >>> outgoing_move.currency = currency
+ >>> outgoing_move.currency = company.currency
>>> outgoing_move.click('do')
Create an inventory that should be empty after completion::
diff --git a/tests/scenario_stock_reporting.rst b/tests/scenario_stock_reporting.rst
new file mode 100644
index 0000000..9c980e1
--- /dev/null
+++ b/tests/scenario_stock_reporting.rst
@@ -0,0 +1,188 @@
+=================================
+Stock Shipment Reporting Scenario
+=================================
+
+Imports::
+
+ >>> import datetime
+ >>> from dateutil.relativedelta import relativedelta
+ >>> from decimal import Decimal
+ >>> from proteus import config, Model, Wizard, Report
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
+ >>> today = datetime.date.today()
+ >>> yesterday = today - relativedelta(days=1)
+
+Create database::
+
+ >>> config = config.set_trytond()
+ >>> config.pool.test = True
+
+Install stock Module::
+
+ >>> Module = Model.get('ir.module.module')
+ >>> module, = Module.find([('name', '=', 'stock')])
+ >>> module.click('install')
+ >>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
+
+Create company::
+
+ >>> _ = create_company()
+ >>> company = get_company()
+
+Reload the context::
+
+ >>> User = Model.get('res.user')
+ >>> config._context = User.get_preferences(True, config.context)
+
+Create customer & supplier::
+
+ >>> Party = Model.get('party.party')
+ >>> customer = Party(name='Customer')
+ >>> customer.save()
+ >>> supplier = Party(name='Supplier')
+ >>> supplier.save()
+
+Create category::
+
+ >>> ProductCategory = Model.get('product.category')
+ >>> category = ProductCategory(name='Category')
+ >>> category.save()
+
+Create product::
+
+ >>> ProductUom = Model.get('product.uom')
+ >>> ProductTemplate = Model.get('product.template')
+ >>> Product = Model.get('product.product')
+ >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+ >>> product = Product()
+ >>> template = ProductTemplate()
+ >>> template.name = 'Product'
+ >>> template.category = category
+ >>> 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::
+
+ >>> Location = Model.get('stock.location')
+ >>> warehouse_loc, = Location.find([('code', '=', 'WH')])
+ >>> supplier_loc, = Location.find([('code', '=', 'SUP')])
+ >>> customer_loc, = Location.find([('code', '=', 'CUS')])
+ >>> input_loc, = Location.find([('code', '=', 'IN')])
+ >>> output_loc, = Location.find([('code', '=', 'OUT')])
+ >>> storage_loc, = Location.find([('code', '=', 'STO')])
+ >>> lost_loc, = Location.find([('type', '=', 'lost_found')])
+
+Create Shipment In::
+
+ >>> ShipmentIn = Model.get('stock.shipment.in')
+ >>> shipment_in = ShipmentIn()
+ >>> shipment_in.planned_date = today
+ >>> shipment_in.supplier = supplier
+ >>> shipment_in.warehouse = warehouse_loc
+ >>> shipment_in.company = company
+
+Receive a bunch of products::
+
+ >>> move = shipment_in.incoming_moves.new()
+ >>> move.product = product
+ >>> move.uom = unit
+ >>> move.quantity = 100
+ >>> move.from_location = supplier_loc
+ >>> move.to_location = input_loc
+ >>> move.company = company
+ >>> move.unit_price = Decimal('1')
+ >>> move.currency = company.currency
+ >>> shipment_in.save()
+ >>> shipment_in.click('receive')
+ >>> shipment_in.click('done')
+
+Testing the report::
+
+ >>> supplier_restocking_list = Report('stock.shipment.in.restocking_list')
+ >>> ext, _, _, name = supplier_restocking_list.execute([shipment_in], {})
+ >>> ext
+ u'odt'
+ >>> name
+ u'Restocking List'
+
+Create Shipment Out::
+
+ >>> ShipmentOut = Model.get('stock.shipment.out')
+ >>> shipment_out = ShipmentOut()
+ >>> shipment_out.planned_date = today
+ >>> shipment_out.customer = customer
+ >>> shipment_out.warehouse = warehouse_loc
+ >>> shipment_out.company = company
+
+Add two shipment lines of same product and go through the workflow::
+
+ >>> move = shipment_out.outgoing_moves.new()
+ >>> move.product = product
+ >>> move.uom = unit
+ >>> move.quantity = 1
+ >>> move.from_location = output_loc
+ >>> move.to_location = customer_loc
+ >>> move.company = company
+ >>> move.unit_price = Decimal('1')
+ >>> move.currency = company.currency
+ >>> shipment_out.save()
+ >>> shipment_out.click('wait')
+ >>> shipment_out.click('assign_try')
+ True
+ >>> shipment_out.click('pack')
+ >>> shipment_out.click('done')
+
+Testing the reports::
+
+ >>> delivery_note = Report('stock.shipment.out.delivery_note')
+ >>> ext, _, _, name = delivery_note.execute([shipment_out], {})
+ >>> ext
+ u'odt'
+ >>> name
+ u'Delivery Note'
+
+ >>> picking_list = Report('stock.shipment.out.picking_list')
+ >>> ext, _, _, name = picking_list.execute([shipment_out], {})
+ >>> ext
+ u'odt'
+ >>> name
+ u'Picking List'
+
+Create an internal shipment::
+
+ >>> ShipmentInternal = Model.get('stock.shipment.internal')
+ >>> shipment_internal = ShipmentInternal()
+ >>> shipment_internal.planned_date = today
+ >>> shipment_internal.company = company
+ >>> shipment_internal.from_location = storage_loc
+ >>> shipment_internal.to_location = lost_loc
+ >>> move = shipment_internal.moves.new()
+ >>> move.product = product
+ >>> move.uom = unit
+ >>> move.quantity = 1
+ >>> move.from_location = storage_loc
+ >>> move.to_location = lost_loc
+ >>> move.company = company
+ >>> move.unit_price = Decimal('1')
+ >>> move.currency = company.currency
+ >>> shipment_internal.save()
+ >>> shipment_internal.click('wait')
+ >>> shipment_internal.click('assign_try')
+ True
+ >>> shipment_internal.click('done')
+
+Testing the report::
+
+ >>> internal_report = Report('stock.shipment.internal.report')
+ >>> ext, _, _, name = internal_report.execute([shipment_internal], {})
+ >>> ext
+ u'odt'
+ >>> name
+ u'Internal Shipment'
+
diff --git a/tests/scenario_stock_shipment_internal.rst b/tests/scenario_stock_shipment_internal.rst
index 5a76307..2bae38a 100644
--- a/tests/scenario_stock_shipment_internal.rst
+++ b/tests/scenario_stock_shipment_internal.rst
@@ -2,16 +2,14 @@
Stock Shipment Internal Scenario
================================
-=============
-General Setup
-=============
-
Imports::
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> from decimal import Decimal
>>> from proteus import config, Model, Wizard
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
>>> today = datetime.date.today()
>>> yesterday = today - relativedelta(days=1)
@@ -23,35 +21,14 @@ Create database::
Install stock Module::
>>> Module = Model.get('ir.module.module')
- >>> modules = Module.find([('name', '=', 'stock')])
- >>> Module.install([x.id for x in modules], config.context)
+ >>> module, = Module.find([('name', '=', 'stock')])
+ >>> module.click('install')
>>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
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
- >>> party = Party(name='Dunder Mifflin')
- >>> party.save()
- >>> company.party = party
- >>> currencies = Currency.find([('code', '=', 'USD')])
- >>> if not currencies:
- ... currency = Currency(name='U.S. Dollar', symbol='$', code='USD',
- ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
- ... mon_decimal_point='.', mon_thousands_sep=',')
- ... currency.save()
- ... CurrencyRate(date=today + relativedelta(month=1, day=1),
- ... rate=Decimal('1.0'), currency=currency).save()
- ... else:
- ... currency, = currencies
- >>> company.currency = currency
- >>> company_config.execute('add')
- >>> company, = Company.find()
+ >>> _ = create_company()
+ >>> company = get_company()
Reload the context::
@@ -108,7 +85,7 @@ Create Internal Shipment::
>>> move.quantity = 1
>>> move.from_location = internal_loc
>>> move.to_location = storage_loc
- >>> move.currency = currency
+ >>> move.currency = company.currency
>>> shipment.click('wait')
>>> shipment.state
u'waiting'
@@ -129,7 +106,7 @@ Create Internal Shipment from lost_found location::
>>> move.quantity = 1
>>> move.from_location = lost_found_loc
>>> move.to_location = internal_loc
- >>> move.currency = currency
+ >>> move.currency = company.currency
>>> lost_found_shipment.click('wait')
>>> lost_found_shipment.click('assign_try')
True
diff --git a/tests/scenario_stock_shipment_out.rst b/tests/scenario_stock_shipment_out.rst
index 144c3c6..9554c37 100644
--- a/tests/scenario_stock_shipment_out.rst
+++ b/tests/scenario_stock_shipment_out.rst
@@ -2,16 +2,14 @@
Stock Shipment Out Scenario
===========================
-=============
-General Setup
-=============
-
Imports::
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> from decimal import Decimal
>>> from proteus import config, Model, Wizard
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
>>> today = datetime.date.today()
>>> yesterday = today - relativedelta(days=1)
@@ -23,35 +21,14 @@ Create database::
Install stock Module::
>>> Module = Model.get('ir.module.module')
- >>> modules = Module.find([('name', '=', 'stock')])
- >>> Module.install([x.id for x in modules], config.context)
+ >>> module, = Module.find([('name', '=', 'stock')])
+ >>> module.click('install')
>>> Wizard('ir.module.module.install_upgrade').execute('upgrade')
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
- >>> party = Party(name='Dunder Mifflin')
- >>> party.save()
- >>> company.party = party
- >>> currencies = Currency.find([('code', '=', 'USD')])
- >>> if not currencies:
- ... currency = Currency(name='U.S. Dollar', symbol='$', code='USD',
- ... rounding=Decimal('0.01'), mon_grouping='[3, 3, 0]',
- ... mon_decimal_point='.', mon_thousands_sep=',')
- ... currency.save()
- ... CurrencyRate(date=today + relativedelta(month=1, day=1),
- ... rate=Decimal('1.0'), currency=currency).save()
- ... else:
- ... currency, = currencies
- >>> company.currency = currency
- >>> company_config.execute('add')
- >>> company, = Company.find()
+ >>> _ = create_company()
+ >>> company = get_company()
Reload the context::
@@ -118,13 +95,12 @@ Add two shipment lines of same product::
... move.to_location = customer_loc
... move.company = company
... move.unit_price = Decimal('1')
- ... move.currency = currency
+ ... move.currency = company.currency
>>> shipment_out.save()
Set the shipment state to waiting::
- >>> ShipmentOut.wait([shipment_out.id], config.context)
- >>> shipment_out.reload()
+ >>> shipment_out.click('wait')
>>> len(shipment_out.outgoing_moves)
2
>>> len(shipment_out.inventory_moves)
@@ -142,13 +118,12 @@ Make 1 unit of the product available::
>>> incoming_move.effective_date = today
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('1')
- >>> incoming_move.currency = currency
- >>> incoming_move.save()
- >>> StockMove.do([incoming_move.id], config.context)
+ >>> incoming_move.currency = company.currency
+ >>> incoming_move.click('do')
Assign the shipment now::
- >>> ShipmentOut.assign_try([shipment_out.id], config.context)
+ >>> shipment_out.click('assign_try')
False
>>> shipment_out.reload()
>>> len(shipment_out.outgoing_moves)
@@ -174,11 +149,9 @@ Delete the draft move, assign and pack shipment::
... if move.state == 'draft':
... break
>>> shipment_out.inventory_moves.remove(move)
- >>> shipment_out.save()
- >>> ShipmentOut.assign_try([shipment_out.id], config.context)
+ >>> shipment_out.click('assign_try')
True
- >>> ShipmentOut.pack([shipment_out.id], config.context)
- >>> shipment_out.reload()
+ >>> shipment_out.click('pack')
>>> set([m.state for m in shipment_out.outgoing_moves])
set([u'assigned'])
>>> len(shipment_out.outgoing_moves)
@@ -193,8 +166,7 @@ Delete the draft move, assign and pack shipment::
Set the state as Done::
- >>> ShipmentOut.done([shipment_out.id], config.context)
- >>> shipment_out.reload()
+ >>> shipment_out.click('done')
>>> set([m.state for m in shipment_out.outgoing_moves])
set([u'done'])
>>> planned_dates = [m.planned_date for m in
@@ -232,7 +204,7 @@ Create Shipment Out with effective date::
>>> move.to_location = customer_loc
>>> move.company = company
>>> move.unit_price = Decimal('1')
- >>> move.currency = currency
+ >>> move.currency = company.currency
>>> shipment_out.click('wait')
Make 1 unit of the product available::
@@ -247,17 +219,15 @@ Make 1 unit of the product available::
>>> incoming_move.effective_date = yesterday
>>> incoming_move.company = company
>>> incoming_move.unit_price = Decimal('1')
- >>> incoming_move.currency = currency
- >>> incoming_move.save()
- >>> StockMove.do([incoming_move.id], config.context)
+ >>> incoming_move.currency = company.currency
+ >>> incoming_move.click('do')
Finish the shipment::
- >>> ShipmentOut.assign_try([shipment_out.id], config.context)
+ >>> shipment_out.click('assign_try')
True
>>> shipment_out.click('pack')
>>> shipment_out.click('done')
- >>> shipment_out.reload()
>>> shipment_out.state
u'done'
>>> outgoing_move, = shipment_out.outgoing_moves
diff --git a/tests/test_stock.py b/tests/test_stock.py
index e59f6c8..949c25a 100644
--- a/tests/test_stock.py
+++ b/tests/test_stock.py
@@ -1,24 +1,29 @@
-#This file is part of Tryton. The COPYRIGHT file at the top level of
-#this repository contains the full copyright notices and license terms.
+# This file is part of Tryton. The COPYRIGHT file at the top level of
+# this repository contains the full copyright notices and license terms.
import unittest
import doctest
import datetime
from decimal import Decimal
from dateutil.relativedelta import relativedelta
from functools import partial
+from collections import defaultdict
+
import trytond.tests.test_tryton
-from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view,\
- test_depends
+from trytond.tests.test_tryton import ModuleTestCase
+from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT
from trytond.tests.test_tryton import doctest_setup, doctest_teardown
from trytond.transaction import Transaction
from trytond.exceptions import UserWarning
+from trytond.pool import Pool
-class StockTestCase(unittest.TestCase):
+class StockTestCase(ModuleTestCase):
'Test Stock module'
+ module = 'stock'
+ longMessage = True
def setUp(self):
- trytond.tests.test_tryton.install_module('stock')
+ super(StockTestCase, self).setUp()
self.template = POOL.get('product.template')
self.product = POOL.get('product.product')
self.category = POOL.get('product.category')
@@ -30,14 +35,6 @@ class StockTestCase(unittest.TestCase):
self.period = POOL.get('stock.period')
self.cache = POOL.get('stock.period.cache')
- def test0005views(self):
- 'Test views'
- test_view('stock')
-
- def test0006depends(self):
- 'Test depends'
- test_depends()
-
def test0010move_internal_quantity(self):
'Test Move.internal_quantity'
with Transaction().start(DB_NAME, USER, context=CONTEXT):
@@ -660,6 +657,86 @@ class StockTestCase(unittest.TestCase):
self.assertRaises(UserWarning, self.move.check_origin, moves,
{'customer'})
+ def test_assign_try(self):
+ 'Test Move assign_try'
+ for quantity, quantities, success, result in [
+ (10, [2], True, {'assigned': [2]}),
+ (5, [10], False, {'assigned': [5], 'draft': [5]}),
+ (0, [3], False, {'draft': [3]}),
+ (6.8, [2.1, 1.7, 1.2, 1.8], True,
+ {'assigned': sorted([2.1, 1.7, 1.2, 1.8])}),
+ ]:
+ self._test_assign_try(quantity, quantities, success, result)
+
+ def _test_assign_try(self, quantity, quantities, success, result):
+ with Transaction().start(DB_NAME, USER, context=CONTEXT):
+ pool = Pool()
+ Template = pool.get('product.template')
+ Product = pool.get('product.product')
+ Uom = pool.get('product.uom')
+ Location = pool.get('stock.location')
+ Company = pool.get('company.company')
+ Move = pool.get('stock.move')
+
+ uom, = Uom.search([('name', '=', 'Meter')])
+ template = Template(
+ name='Test Move.assign_try',
+ type='goods',
+ list_price=Decimal(1),
+ cost_price=Decimal(0),
+ cost_price_method='fixed',
+ default_uom=uom,
+ )
+ template.save()
+ product = Product(template=template.id)
+ product.save()
+
+ supplier, = Location.search([('code', '=', 'SUP')])
+ storage, = Location.search([('code', '=', 'STO')])
+ customer, = Location.search([('code', '=', 'CUS')])
+
+ company, = Company.search([
+ ('rec_name', '=', 'Dunder Mifflin'),
+ ])
+
+ move, = Move.create([{
+ 'product': product.id,
+ 'uom': uom.id,
+ 'quantity': quantity,
+ 'from_location': supplier.id,
+ 'to_location': storage.id,
+ 'company': company.id,
+ 'unit_price': Decimal(1),
+ 'currency': company.currency.id,
+ }])
+ Move.do([move])
+
+ moves = Move.create([{
+ 'product': product.id,
+ 'uom': uom.id,
+ 'quantity': qty,
+ 'from_location': storage.id,
+ 'to_location': customer.id,
+ 'company': company.id,
+ 'unit_price': Decimal(1),
+ 'currency': company.currency.id,
+ } for qty in quantities])
+
+ msg = 'quantity: %s, quantities: %s' % (quantity, quantities)
+ self.assertEqual(Move.assign_try(moves), success, msg=msg)
+ moves = Move.search([
+ ('product', '=', product.id),
+ ('from_location', '=', storage.id),
+ ('to_location', '=', customer.id),
+ ('company', '=', company.id),
+ ])
+ states = defaultdict(list)
+ for move in moves:
+ states[move.state].append(move.quantity)
+ for state in states:
+ states[state].sort()
+ self.assertEqual(states, result, msg=msg)
+
def suite():
suite = trytond.tests.test_tryton.suite()
@@ -682,4 +759,7 @@ def suite():
suite.addTests(doctest.DocFileSuite('scenario_stock_shipment_internal.rst',
setUp=doctest_setup, tearDown=doctest_teardown, encoding='utf-8',
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
+ suite.addTests(doctest.DocFileSuite('scenario_stock_reporting.rst',
+ setUp=doctest_setup, tearDown=doctest_teardown, encoding='utf-8',
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
return suite
diff --git a/tryton.cfg b/tryton.cfg
index 24b710d..9df5be0 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
[tryton]
-version=3.4.1
+version=3.6.0
depends:
company
currency
diff --git a/trytond_stock.egg-info/PKG-INFO b/trytond_stock.egg-info/PKG-INFO
index 70a4d9f..34f1843 100644
--- a/trytond_stock.egg-info/PKG-INFO
+++ b/trytond_stock.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
Metadata-Version: 1.1
Name: trytond-stock
-Version: 3.4.1
+Version: 3.6.0
Summary: Tryton module for stock and inventory
Home-page: http://www.tryton.org/
Author: Tryton
Author-email: issue_tracker at tryton.org
License: GPL-3
-Download-URL: http://downloads.tryton.org/3.4/
+Download-URL: http://downloads.tryton.org/3.6/
Description: trytond_stock
=============
@@ -65,4 +65,6 @@ Classifier: Natural Language :: Slovenian
Classifier: Natural Language :: Spanish
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.7
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Office/Business
diff --git a/trytond_stock.egg-info/SOURCES.txt b/trytond_stock.egg-info/SOURCES.txt
index e19e7bb..00d2623 100644
--- a/trytond_stock.egg-info/SOURCES.txt
+++ b/trytond_stock.egg-info/SOURCES.txt
@@ -59,6 +59,7 @@ tryton.cfg
./tests/__init__.py
./tests/scenario_stock_average_cost_price.rst
./tests/scenario_stock_inventory.rst
+./tests/scenario_stock_reporting.rst
./tests/scenario_stock_shipment_internal.rst
./tests/scenario_stock_shipment_out.rst
./tests/test_stock.py
@@ -116,6 +117,7 @@ locale/ru_RU.po
locale/sl_SI.po
tests/scenario_stock_average_cost_price.rst
tests/scenario_stock_inventory.rst
+tests/scenario_stock_reporting.rst
tests/scenario_stock_shipment_internal.rst
tests/scenario_stock_shipment_out.rst
trytond_stock.egg-info/PKG-INFO
diff --git a/trytond_stock.egg-info/requires.txt b/trytond_stock.egg-info/requires.txt
index a8d32a8..7b48706 100644
--- a/trytond_stock.egg-info/requires.txt
+++ b/trytond_stock.egg-info/requires.txt
@@ -1,6 +1,6 @@
-python-sql
-trytond_company >= 3.4, < 3.5
-trytond_currency >= 3.4, < 3.5
-trytond_party >= 3.4, < 3.5
-trytond_product >= 3.4, < 3.5
-trytond >= 3.4, < 3.5
\ No newline at end of file
+python-sql >= 0.4
+trytond_company >= 3.6, < 3.7
+trytond_currency >= 3.6, < 3.7
+trytond_party >= 3.6, < 3.7
+trytond_product >= 3.6, < 3.7
+trytond >= 3.6, < 3.7
\ No newline at end of file
--
tryton-modules-stock
More information about the tryton-debian-vcs
mailing list