[tryton-debian-vcs] tryton-modules-production branch debian updated. debian/3.4.1-1-2-gb809790

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Thu Apr 23 16:04:55 UTC 2015


The following commit has been merged in the debian branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-modules-production.git;a=commitdiff;h=debian/3.4.1-1-2-gb809790

commit b809790dab36fbbea510cb1f0c90d32d6c630768
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Thu Apr 23 17:00:01 2015 +0200

    Merging upstream version 3.6.0.

diff --git a/CHANGELOG b/CHANGELOG
index 3c86c2e..7bf4160 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,6 @@
-Version 3.4.1 - 2015-02-22
+Version 3.6.0 - 2015-04-20
 * Bug fixes (see mercurial logs for details)
-
+* Add support for PyPy
 Version 3.4.0 - 2014-10-20
 * Bug fixes (see mercurial logs for details)
 
diff --git a/PKG-INFO b/PKG-INFO
index d28253f..da93ca4 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond_production
-Version: 3.4.1
+Version: 3.6.0
 Summary: Tryton module for production
 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_production
         ==================
         
@@ -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 7e10c20..0540b43 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 .configuration import *
diff --git a/bom.py b/bom.py
index 7ce8a29..45e421a 100644
--- a/bom.py
+++ b/bom.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.model import ModelView, ModelSQL, fields
 from trytond.wizard import Wizard, StateView, Button
 from trytond.transaction import Transaction
@@ -87,18 +87,14 @@ class BOMInput(ModelSQL, ModelView):
 
     @fields.depends('product', 'uom')
     def on_change_product(self):
-        res = {}
         if self.product:
             uoms = self.product.default_uom.category.uoms
             if (not self.uom or self.uom not in uoms):
-                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
         else:
-            res['uom'] = None
-            res['uom.rec_name'] = ''
-            res['unit_digits'] = 2
-        return res
+            self.uom = None
+            self.unit_digits = 2
 
     @fields.depends('product')
     def on_change_with_uom_category(self, name=None):
@@ -227,7 +223,7 @@ class OpenBOMTree(Wizard):
     start = StateView('production.bom.tree.open.start',
         'production.bom_tree_open_start_view_form', [
             Button('Cancel', 'end', 'tryton-cancel'),
-            Button('Ok', 'tree', 'tryton-ok', True),
+            Button('OK', 'tree', 'tryton-ok', True),
             ])
     tree = StateView('production.bom.tree.open.tree',
         'production.bom_tree_open_tree_view_form', [
diff --git a/configuration.py b/configuration.py
index eb35e63..ac0588e 100644
--- a/configuration.py
+++ b/configuration.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.model import ModelView, ModelSQL, ModelSingleton, fields
 from trytond.pyson import Eval
 
diff --git a/locale/bg_BG.po b/locale/bg_BG.po
index 6719634..0b26dd3 100644
--- a/locale/bg_BG.po
+++ b/locale/bg_BG.po
@@ -690,7 +690,7 @@ msgid "Wait"
 msgstr "Очаквано"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Добре"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -702,7 +702,7 @@ msgid "Cancel"
 msgstr "Отказ"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Добре"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/ca_ES.po b/locale/ca_ES.po
index eeaecd2..22c3ed9 100644
--- a/locale/ca_ES.po
+++ b/locale/ca_ES.po
@@ -453,12 +453,12 @@ msgstr "Arbre de la llista de materials"
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_all"
 msgid "All"
-msgstr "Tot"
+msgstr "Totes"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_assigned"
 msgid "Assigned"
-msgstr "Reservat"
+msgstr "Reservada"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_draft"
@@ -574,7 +574,7 @@ msgstr "Cancel·lada"
 
 msgctxt "selection:production,state:"
 msgid "Done"
-msgstr "Realitzada"
+msgstr "Finalitzada"
 
 msgctxt "selection:production,state:"
 msgid "Draft"
@@ -654,7 +654,7 @@ msgstr "Cancel·la"
 
 msgctxt "view:production:"
 msgid "Done"
-msgstr "Realitzat"
+msgstr "Finalitza"
 
 msgctxt "view:production:"
 msgid "Draft"
@@ -677,6 +677,10 @@ msgid "Productions"
 msgstr "Produccions"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Reestableix amb la LdM"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Executa"
 
@@ -685,7 +689,7 @@ msgid "Wait"
 msgstr "En espera"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Accepta"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -697,7 +701,7 @@ msgid "Cancel"
 msgstr "Cancel·la"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Accepta"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/cs_CZ.po b/locale/cs_CZ.po
index 7e96a5c..0f39587 100644
--- a/locale/cs_CZ.po
+++ b/locale/cs_CZ.po
@@ -681,7 +681,7 @@ msgid "Wait"
 msgstr ""
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr ""
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -693,7 +693,7 @@ msgid "Cancel"
 msgstr ""
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr ""
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 540021a..03428c9 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -676,6 +676,10 @@ msgid "Productions"
 msgstr "Produktionen"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Auf Stückliste zurücksetzen"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Ausführen"
 
@@ -684,7 +688,7 @@ msgid "Wait"
 msgstr "Warten"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "OK"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -696,7 +700,7 @@ msgid "Cancel"
 msgstr "Abbrechen"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "OK"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/es_AR.po b/locale/es_AR.po
index 0799d59..1d5143f 100644
--- a/locale/es_AR.po
+++ b/locale/es_AR.po
@@ -152,7 +152,7 @@ msgstr "Estado"
 
 msgctxt "field:production,unit_digits:"
 msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
 
 msgctxt "field:production,uom:"
 msgid "Uom"
@@ -164,7 +164,7 @@ msgstr "Categoría UdM"
 
 msgctxt "field:production,warehouse:"
 msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
 
 msgctxt "field:production,write_date:"
 msgid "Write Date"
@@ -256,7 +256,7 @@ msgstr "Nombre"
 
 msgctxt "field:production.bom.input,unit_digits:"
 msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
 
 msgctxt "field:production.bom.input,uom:"
 msgid "Uom"
@@ -304,7 +304,7 @@ msgstr "Nombre"
 
 msgctxt "field:production.bom.output,unit_digits:"
 msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
 
 msgctxt "field:production.bom.output,uom:"
 msgid "Uom"
@@ -340,7 +340,7 @@ msgstr "Cantidad"
 
 msgctxt "field:production.bom.tree,unit_digits:"
 msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
 
 msgctxt "field:production.bom.tree,uom:"
 msgid "Uom"
@@ -368,7 +368,7 @@ msgstr "Cantidad"
 
 msgctxt "field:production.bom.tree.open.start,unit_digits:"
 msgid "Unit Digits"
-msgstr "Dígitos de unidad"
+msgstr "Decimales de unidad"
 
 msgctxt "field:production.bom.tree.open.start,uom:"
 msgid "Unit"
@@ -424,11 +424,11 @@ msgstr "Salida de producción"
 
 msgctxt "model:ir.action,name:act_bom_form"
 msgid "BOM"
-msgstr "LdM"
+msgstr "Lista de material"
 
 msgctxt "model:ir.action,name:act_bom_list"
 msgid "BOMs"
-msgstr "LdMs"
+msgstr "Lista de materiales"
 
 msgctxt "model:ir.action,name:act_production_calendar"
 msgid "Productions"
@@ -490,7 +490,7 @@ msgstr "Producción"
 
 msgctxt "model:ir.ui.menu,name:menu_bom_list"
 msgid "BOMs"
-msgstr "LdMs"
+msgstr "Lista de materiales"
 
 msgctxt "model:ir.ui.menu,name:menu_configuration"
 msgid "Configuration"
@@ -594,11 +594,11 @@ msgstr "En espera"
 
 msgctxt "view:product.product-production.bom:"
 msgid "Product - BOM"
-msgstr "Producto - LdM"
+msgstr "Producto - Lista de material"
 
 msgctxt "view:product.product-production.bom:"
 msgid "Product - BOMs"
-msgstr "Producto - LdMs"
+msgstr "Producto - Lista de materiales"
 
 msgctxt "view:production.assign.failed:"
 msgid "Unable to Assign"
@@ -610,31 +610,31 @@ msgstr "No se puede asignar estos productos:"
 
 msgctxt "view:production.bom.input:"
 msgid "BOM Inputs"
-msgstr "Entradas LdM"
+msgstr "Entradas lista de material"
 
 msgctxt "view:production.bom.output:"
 msgid "BOM Outputs"
-msgstr "Salidas LdM"
+msgstr "Salidas lista de material"
 
 msgctxt "view:production.bom.tree.open.start:"
 msgid "BOM Tree"
-msgstr "Árbol LdM"
+msgstr "Árbol lista de materiales"
 
 msgctxt "view:production.bom.tree.open.tree:"
 msgid "BOM Tree"
-msgstr "Árbol LdM"
+msgstr "Árbol lista de materiales"
 
 msgctxt "view:production.bom.tree:"
 msgid "BOM Tree"
-msgstr "Árbol LdM"
+msgstr "Árbol lista de materiales"
 
 msgctxt "view:production.bom:"
 msgid "BOM"
-msgstr "LdM"
+msgstr "Lista de material"
 
 msgctxt "view:production.bom:"
 msgid "BOMs"
-msgstr "LdMs"
+msgstr "Lista de materiales"
 
 msgctxt "view:production.bom:"
 msgid "Lines"
@@ -677,6 +677,10 @@ msgid "Productions"
 msgstr "Producciones"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Restablecer a LdM"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Ejecutar"
 
@@ -685,7 +689,7 @@ msgid "Wait"
 msgstr "Espera"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -697,7 +701,7 @@ msgid "Cancel"
 msgstr "Cancelar"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/es_CO.po b/locale/es_CO.po
index 6f8dc82..befa86f 100644
--- a/locale/es_CO.po
+++ b/locale/es_CO.po
@@ -677,6 +677,10 @@ msgid "Productions"
 msgstr "Producciones"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr ""
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Ejecutar"
 
@@ -685,7 +689,7 @@ msgid "Wait"
 msgstr "Espera"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -697,7 +701,7 @@ msgid "Cancel"
 msgstr "Cancelar"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/es_EC.po b/locale/es_EC.po
index 93ff511..e46b929 100644
--- a/locale/es_EC.po
+++ b/locale/es_EC.po
@@ -7,8 +7,8 @@ msgid ""
 "You are trying to create a recursive BOM with product \"%s\" which is not "
 "allowed."
 msgstr ""
-"Está intentando crear una LDM recursiva con el producto \"%s\" que no está "
-"permitido."
+"Está intentando crear una LDM recursiva con el producto \"%s\" lo cual no "
+"está permitido."
 
 msgctxt "error:production.bom.input:"
 msgid "Product must be unique per BOM."
@@ -28,7 +28,7 @@ msgstr "El producto debe ser único por LDM."
 
 msgctxt "error:production.bom.output:"
 msgid "You can not create recursive BOMs."
-msgstr "No puede crear LDMs recursivas!"
+msgstr "No puede crear LDMs recursivas."
 
 msgctxt "error:production.bom.output:"
 msgid "product_bom_uniq"
@@ -52,11 +52,11 @@ msgstr "LDM"
 
 msgctxt "field:product.product-production.bom,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:product.product-production.bom,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:product.product-production.bom,id:"
 msgid "ID"
@@ -76,11 +76,11 @@ msgstr "Secuencia"
 
 msgctxt "field:product.product-production.bom,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:product.product-production.bom,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:production,bom:"
 msgid "BOM"
@@ -100,11 +100,11 @@ msgstr "Costo"
 
 msgctxt "field:production,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:production,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:production,effective_date:"
 msgid "Effective Date"
@@ -160,19 +160,19 @@ msgstr "UdM"
 
 msgctxt "field:production,uom_category:"
 msgid "Uom Category"
-msgstr "Categoría UdM"
+msgstr "Categoría de UdM"
 
 msgctxt "field:production,warehouse:"
 msgid "Warehouse"
-msgstr "Depósito"
+msgstr "Almacén"
 
 msgctxt "field:production,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:production,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:production.assign.failed,id:"
 msgid "ID"
@@ -188,11 +188,11 @@ msgstr "Activo"
 
 msgctxt "field:production.bom,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:production.bom,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:production.bom,id:"
 msgid "ID"
@@ -220,11 +220,11 @@ msgstr "Nombre"
 
 msgctxt "field:production.bom,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:production.bom,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:production.bom.input,bom:"
 msgid "BOM"
@@ -232,11 +232,11 @@ msgstr "LDM"
 
 msgctxt "field:production.bom.input,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:production.bom.input,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:production.bom.input,id:"
 msgid "ID"
@@ -264,15 +264,15 @@ msgstr "UdM"
 
 msgctxt "field:production.bom.input,uom_category:"
 msgid "Uom Category"
-msgstr "Categoría UdM"
+msgstr "Categoría de UdM"
 
 msgctxt "field:production.bom.input,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:production.bom.input,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:production.bom.output,bom:"
 msgid "BOM"
@@ -280,11 +280,11 @@ msgstr "LDM"
 
 msgctxt "field:production.bom.output,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:production.bom.output,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:production.bom.output,id:"
 msgid "ID"
@@ -312,15 +312,15 @@ msgstr "UdM"
 
 msgctxt "field:production.bom.output,uom_category:"
 msgid "Uom Category"
-msgstr "Categoría UdM"
+msgstr "Categoría de UdM"
 
 msgctxt "field:production.bom.output,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:production.bom.output,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:production.bom.tree,childs:"
 msgid "Childs"
@@ -376,7 +376,7 @@ msgstr "Unidad"
 
 msgctxt "field:production.bom.tree.open.tree,bom_tree:"
 msgid "BOM Tree"
-msgstr "Árbol LDM"
+msgstr "Árbol de LDM"
 
 msgctxt "field:production.bom.tree.open.tree,id:"
 msgid "ID"
@@ -384,11 +384,11 @@ msgstr "ID"
 
 msgctxt "field:production.configuration,create_date:"
 msgid "Create Date"
-msgstr "Fecha de Creación"
+msgstr "Fecha de creación"
 
 msgctxt "field:production.configuration,create_uid:"
 msgid "Create User"
-msgstr "Creado por Usuario"
+msgstr "Creado por usuario"
 
 msgctxt "field:production.configuration,id:"
 msgid "ID"
@@ -404,11 +404,11 @@ msgstr "Nombre"
 
 msgctxt "field:production.configuration,write_date:"
 msgid "Write Date"
-msgstr "Fecha de Modificación"
+msgstr "Fecha de modificación"
 
 msgctxt "field:production.configuration,write_uid:"
 msgid "Write User"
-msgstr "Modificado por Usuario"
+msgstr "Modificado por usuario"
 
 msgctxt "field:stock.location,production_location:"
 msgid "Production"
@@ -448,7 +448,7 @@ msgstr "Asignar Producción"
 
 msgctxt "model:ir.action,name:wizard_bom_tree_open"
 msgid "BOM Tree"
-msgstr "Árbol LDM"
+msgstr "Árbol de LDM"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_all"
@@ -458,7 +458,7 @@ msgstr "Todo"
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_assigned"
 msgid "Assigned"
-msgstr "Asignado"
+msgstr "Asignada"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_draft"
@@ -490,7 +490,7 @@ msgstr "Producción"
 
 msgctxt "model:ir.ui.menu,name:menu_bom_list"
 msgid "BOMs"
-msgstr "Listas de Materiales"
+msgstr "LDMs"
 
 msgctxt "model:ir.ui.menu,name:menu_configuration"
 msgid "Configuration"
@@ -538,7 +538,7 @@ msgstr "Salida de Lista de Materiales"
 
 msgctxt "model:production.bom.tree,name:"
 msgid "BOM Tree"
-msgstr "Árbol LDM"
+msgstr "Árbol de LDM"
 
 msgctxt "model:production.bom.tree.open.start,name:"
 msgid "Open BOM Tree"
@@ -560,13 +560,14 @@ msgctxt "model:res.group,name:group_production_admin"
 msgid "Production Administration"
 msgstr "Administración de Producción"
 
+#, fuzzy
 msgctxt "model:stock.location,name:location_production"
 msgid "Production"
 msgstr "Producción"
 
 msgctxt "selection:production,state:"
 msgid "Assigned"
-msgstr "Asignado"
+msgstr "Asignada"
 
 msgctxt "selection:production,state:"
 msgid "Canceled"
@@ -582,7 +583,7 @@ msgstr "Borrador"
 
 msgctxt "selection:production,state:"
 msgid "Request"
-msgstr "Solicitud"
+msgstr "Solicitada"
 
 msgctxt "selection:production,state:"
 msgid "Running"
@@ -610,23 +611,23 @@ msgstr "No se pueden asignar estos productos:"
 
 msgctxt "view:production.bom.input:"
 msgid "BOM Inputs"
-msgstr "Entradas LDM"
+msgstr "Entradas de LDM"
 
 msgctxt "view:production.bom.output:"
 msgid "BOM Outputs"
-msgstr "Salidas LDM"
+msgstr "Salidas de LDM"
 
 msgctxt "view:production.bom.tree.open.start:"
 msgid "BOM Tree"
-msgstr "Árbol LDM"
+msgstr "Árbol de LDM"
 
 msgctxt "view:production.bom.tree.open.tree:"
 msgid "BOM Tree"
-msgstr "Árbol LDM"
+msgstr "Árbol de LDM"
 
 msgctxt "view:production.bom.tree:"
 msgid "BOM Tree"
-msgstr "Árbol LDM"
+msgstr "Árbol de LDM"
 
 msgctxt "view:production.bom:"
 msgid "BOM"
@@ -654,7 +655,7 @@ msgstr "Cancelar"
 
 msgctxt "view:production:"
 msgid "Done"
-msgstr "Realizado"
+msgstr "Realizada"
 
 msgctxt "view:production:"
 msgid "Draft"
@@ -677,15 +678,19 @@ msgid "Productions"
 msgstr "Producciones"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Restablecer a LDM"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Ejecutar"
 
 msgctxt "view:production:"
 msgid "Wait"
-msgstr "Espera"
+msgstr "En Espera"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -697,7 +702,7 @@ msgid "Cancel"
 msgstr "Cancelar"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/es_ES.po b/locale/es_ES.po
index 17a49c1..c78006d 100644
--- a/locale/es_ES.po
+++ b/locale/es_ES.po
@@ -458,7 +458,7 @@ msgstr "Todo"
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_assigned"
 msgid "Assigned"
-msgstr "Reservado"
+msgstr "Reservada"
 
 msgctxt ""
 "model:ir.action.act_window.domain,name:act_production_list_domain_draft"
@@ -574,7 +574,7 @@ msgstr "Cancelada"
 
 msgctxt "selection:production,state:"
 msgid "Done"
-msgstr "Realizada"
+msgstr "Finalizada"
 
 msgctxt "selection:production,state:"
 msgid "Draft"
@@ -654,7 +654,7 @@ msgstr "Cancelar"
 
 msgctxt "view:production:"
 msgid "Done"
-msgstr "Realizado"
+msgstr "Finalizar"
 
 msgctxt "view:production:"
 msgid "Draft"
@@ -677,6 +677,10 @@ msgid "Productions"
 msgstr "Producciones"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Reestrablecer con la LdM"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Ejecutar"
 
@@ -685,7 +689,7 @@ msgid "Wait"
 msgstr "En espera"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -697,7 +701,7 @@ msgid "Cancel"
 msgstr "Cancelar"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Aceptar"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/fr_FR.po b/locale/fr_FR.po
index 8c88e27..608aed8 100644
--- a/locale/fr_FR.po
+++ b/locale/fr_FR.po
@@ -677,6 +677,10 @@ msgid "Productions"
 msgstr "Productions"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Réinitialiser à la nomenclature"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Lancer"
 
@@ -685,8 +689,8 @@ msgid "Wait"
 msgstr "Attendre"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
-msgstr "Ok"
+msgid "OK"
+msgstr "OK"
 
 msgctxt "wizard_button:production.assign,failed,force:"
 msgid "Force Assign"
@@ -697,8 +701,8 @@ msgid "Cancel"
 msgstr "Annuler"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
-msgstr "Ok"
+msgid "OK"
+msgstr "OK"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
 msgid "Close"
diff --git a/locale/nl_NL.po b/locale/nl_NL.po
index de6fb5a..65543bf 100644
--- a/locale/nl_NL.po
+++ b/locale/nl_NL.po
@@ -729,7 +729,7 @@ msgstr ""
 
 #, fuzzy
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Oké"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -743,7 +743,7 @@ msgstr "Annuleren"
 
 #, fuzzy
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Oké"
 
 #, fuzzy
diff --git a/locale/ru_RU.po b/locale/ru_RU.po
index a1df564..2e2fab2 100644
--- a/locale/ru_RU.po
+++ b/locale/ru_RU.po
@@ -683,7 +683,7 @@ msgid "Wait"
 msgstr "Ожидают"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "Ок"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -695,7 +695,7 @@ msgid "Cancel"
 msgstr "Отменить"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "Ок"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/locale/sl_SI.po b/locale/sl_SI.po
index 61440a1..6698994 100644
--- a/locale/sl_SI.po
+++ b/locale/sl_SI.po
@@ -675,6 +675,10 @@ msgid "Productions"
 msgstr "Proizvodni nalogi"
 
 msgctxt "view:production:"
+msgid "Reset to BOM"
+msgstr "Ponastavi na kosovnico"
+
+msgctxt "view:production:"
 msgid "Run"
 msgstr "Izvajanje"
 
@@ -683,7 +687,7 @@ msgid "Wait"
 msgstr "Čakanje"
 
 msgctxt "wizard_button:production.assign,failed,end:"
-msgid "Ok"
+msgid "OK"
 msgstr "V redu"
 
 msgctxt "wizard_button:production.assign,failed,force:"
@@ -695,7 +699,7 @@ msgid "Cancel"
 msgstr "Prekliči"
 
 msgctxt "wizard_button:production.bom.tree.open,start,tree:"
-msgid "Ok"
+msgid "OK"
 msgstr "V redu"
 
 msgctxt "wizard_button:production.bom.tree.open,tree,end:"
diff --git a/product.py b/product.py
index a0ad739..33bcb88 100644
--- a/product.py
+++ b/product.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.model import ModelView, ModelSQL, fields
 from trytond.pyson import Eval, Get, If, Bool
 from trytond.pool import PoolMeta
diff --git a/production.py b/production.py
index 2abade3..f8ca336 100644
--- a/production.py
+++ b/production.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 decimal import Decimal
 
 from trytond.model import ModelView, ModelSQL, Workflow, fields
@@ -8,6 +8,8 @@ from trytond.pyson import Eval, Bool, If, Id
 from trytond.pool import Pool
 from trytond.transaction import Transaction
 
+from trytond.modules.product import price_digits
+
 __all__ = ['Production', 'AssignFailed', 'Assign']
 
 BOM_CHANGES = ['bom', 'product', 'quantity', 'uom', 'warehouse', 'location',
@@ -98,28 +100,30 @@ class Production(Workflow, ModelSQL, ModelView):
             'invisible': ~Eval('product'),
             },
         depends=['unit_digits'])
-    cost = fields.Function(fields.Numeric('Cost', digits=(16, 4),
+    cost = fields.Function(fields.Numeric('Cost', digits=price_digits,
             readonly=True), 'get_cost')
     inputs = fields.One2Many('stock.move', 'production_input', 'Inputs',
         domain=[
             ('from_location', 'child_of', [Eval('warehouse')], 'parent'),
             ('to_location', '=', Eval('location')),
+            ('company', '=', Eval('company', -1)),
             ],
         states={
             'readonly': (~Eval('state').in_(['request', 'draft', 'waiting'])
                 | ~Eval('warehouse') | ~Eval('location')),
             },
-        depends=['warehouse', 'location'])
+        depends=['warehouse', 'location', 'company'])
     outputs = fields.One2Many('stock.move', 'production_output', 'Outputs',
         domain=[
             ('from_location', '=', Eval('location')),
             ('to_location', 'child_of', [Eval('warehouse')], 'parent'),
+            ('company', '=', Eval('company', -1)),
             ],
         states={
             'readonly': (Eval('state').in_(['done', 'cancel'])
                 | ~Eval('warehouse') | ~Eval('location')),
             },
-        depends=['warehouse', 'location'])
+        depends=['warehouse', 'location', 'company'])
     state = fields.Selection([
             ('request', 'Request'),
             ('draft', 'Draft'),
@@ -168,6 +172,10 @@ class Production(Workflow, ModelSQL, ModelView):
                             'tryton-go-next',
                             'tryton-go-previous')),
                     },
+                'reset_bom': {
+                    'invisible': (~Eval('bom')
+                        | ~Eval('state').in_(['request', 'draft', 'waiting'])),
+                    },
                 'wait': {
                     'invisible': ~Eval('state').in_(['draft', 'assigned',
                             'waiting', 'running']),
@@ -232,26 +240,12 @@ class Production(Workflow, ModelSQL, ModelView):
 
     def _explode_move_values(self, from_location, to_location, company,
             bom_io, quantity):
-        pool = Pool()
-        Move = pool.get('stock.move')
-
         move = self._move(from_location, to_location, company,
             bom_io.product, bom_io.uom, quantity)
         move.from_location = from_location.id if from_location else None
         move.to_location = to_location.id if to_location else None
         move.unit_price_required = move.on_change_with_unit_price_required()
-        values = {}
-        for field_name, field in Move._fields.iteritems():
-            try:
-                value = getattr(move, field_name)
-            except AttributeError:
-                continue
-            if value and field._type in ('many2one', 'one2one'):
-                values[field_name] = value.id
-                values[field_name + '.rec_name'] = value.rec_name
-            else:
-                values[field_name] = value
-        return values
+        return move
 
     def explode_bom(self):
         pool = Pool()
@@ -259,20 +253,8 @@ class Production(Workflow, ModelSQL, ModelView):
         Template = pool.get('product.template')
         Product = pool.get('product.product')
         if not (self.bom and self.product and self.uom):
-            return {}
-        inputs = {
-            'remove': [r.id for r in self.inputs or []],
-            'add': [],
-            }
-        outputs = {
-            'remove': [r.id for r in self.outputs or []],
-            'add': [],
-            }
-        changes = {
-            'inputs': inputs,
-            'outputs': outputs,
-            'cost': Decimal(0),
-            }
+            return
+        self.cost = Decimal(0)
 
         if self.warehouse:
             storage_location = self.warehouse.storage_location
@@ -281,64 +263,55 @@ class Production(Workflow, ModelSQL, ModelView):
 
         factor = self.bom.compute_factor(self.product, self.quantity or 0,
             self.uom)
+        inputs = []
         for input_ in self.bom.inputs:
             quantity = input_.compute_quantity(factor)
-            values = self._explode_move_values(storage_location, self.location,
+            move = self._explode_move_values(storage_location, self.location,
                 self.company, input_, quantity)
-            if values:
-                inputs['add'].append((-1, values))
+            if move:
+                inputs.append(move)
                 quantity = Uom.compute_qty(input_.uom, quantity,
                     input_.product.default_uom)
-                changes['cost'] += (Decimal(str(quantity)) *
+                self.cost += (Decimal(str(quantity)) *
                     input_.product.cost_price)
+        self.inputs = inputs
 
         if hasattr(Product, 'cost_price'):
             digits = Product.cost_price.digits
         else:
             digits = Template.cost_price.digits
+        outputs = []
         for output in self.bom.outputs:
             quantity = output.compute_quantity(factor)
-            values = self._explode_move_values(self.location, storage_location,
+            move = self._explode_move_values(self.location, storage_location,
                 self.company, output, quantity)
-            if values:
-                values['unit_price'] = Decimal(0)
-                if output.product.id == values.get('product') and quantity:
-                    values['unit_price'] = Decimal(
-                        changes['cost'] / Decimal(str(quantity))
+            if move:
+                move.unit_price = Decimal(0)
+                if output.product == move.product and quantity:
+                    move.unit_price = Decimal(
+                        self.cost / Decimal(str(quantity))
                         ).quantize(Decimal(str(10 ** -digits[1])))
-                outputs['add'].append((-1, values))
-        return changes
+                outputs.append(move)
+        self.outputs = outputs
 
     @fields.depends('warehouse')
     def on_change_warehouse(self):
-        changes = {
-            'location': None,
-            }
+        self.location = None
         if self.warehouse:
-            changes['location'] = self.warehouse.production_location.id
-        return changes
+            self.location = self.warehouse.production_location
 
     @fields.depends(*BOM_CHANGES)
     def on_change_product(self):
-        result = {}
         if self.product:
             uoms = self.product.default_uom.category.uoms
             if (not self.uom or self.uom not in uoms):
-                result['uom'] = self.product.default_uom.id
-                result['uom.rec_name'] = self.product.default_uom.rec_name
-                result['unit_digits'] = self.product.default_uom.digits
+                self.uom = self.product.default_uom
+                self.unit_digits = self.product.default_uom.digits
         else:
-            result['bom'] = None
-            result['uom'] = None
-            result['uom.rec_name'] = ''
-            result['unit_digits'] = 2
-
-        if 'uom' in result:
-            self.uom = result['uom']
-        if 'bom' in result:
-            self.bom = result['bom']
-        result.update(self.explode_bom())
-        return result
+            self.bom = None
+            self.uom = None
+            self.unit_digits = 2
+        self.explode_bom()
 
     @fields.depends('product')
     def on_change_with_uom_category(self, name=None):
@@ -353,15 +326,19 @@ class Production(Workflow, ModelSQL, ModelView):
 
     @fields.depends(*BOM_CHANGES)
     def on_change_bom(self):
-        return self.explode_bom()
+        self.explode_bom()
 
     @fields.depends(*BOM_CHANGES)
     def on_change_uom(self):
-        return self.explode_bom()
+        self.explode_bom()
 
     @fields.depends(*BOM_CHANGES)
     def on_change_quantity(self):
-        return self.explode_bom()
+        self.explode_bom()
+
+    @ModelView.button_change(*BOM_CHANGES)
+    def reset_bom(self):
+        self.explode_bom()
 
     def get_cost(self, name):
         cost = Decimal(0)
@@ -371,7 +348,9 @@ class Production(Workflow, ModelSQL, ModelView):
             else:
                 cost_price = input_.product.cost_price
             cost += (Decimal(str(input_.internal_quantity)) * cost_price)
-        return cost
+
+        digits = self.__class__.cost.digits
+        return cost.quantize(Decimal(str(10 ** -digits[1])))
 
     @fields.depends('inputs')
     def on_change_with_cost(self):
@@ -610,7 +589,7 @@ class Assign(Wizard):
                         'group_stock_force_assignment').in_(
                         Eval('context', {}).get('groups', [])),
                     }),
-            Button('Ok', 'end', 'tryton-ok', True),
+            Button('OK', 'end', 'tryton-ok', True),
             ])
     force = StateTransition()
 
diff --git a/production.xml b/production.xml
index 62b119e..f926692 100644
--- a/production.xml
+++ b/production.xml
@@ -92,35 +92,35 @@ this repository contains the full copyright notices and license terms. -->
             id="act_production_list_domain_requests">
             <field name="name">Requests</field>
             <field name="sequence" eval="10"/>
-            <field name="domain">[('state', '=', 'request')]</field>
+            <field name="domain" eval="[('state', '=', 'request')]" pyson="1"/>
             <field name="act_window" ref="act_production_list"/>
         </record>
         <record model="ir.action.act_window.domain"
             id="act_production_list_domain_draft">
             <field name="name">Draft</field>
             <field name="sequence" eval="20"/>
-            <field name="domain">[('state', '=', 'draft')]</field>
+            <field name="domain" eval="[('state', '=', 'draft')]" pyson="1"/>
             <field name="act_window" ref="act_production_list"/>
         </record>
         <record model="ir.action.act_window.domain"
             id="act_production_list_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_production_list"/>
         </record>
         <record model="ir.action.act_window.domain"
             id="act_production_list_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_production_list"/>
         </record>
         <record model="ir.action.act_window.domain"
             id="act_production_list_domain_running">
             <field name="name">Running</field>
             <field name="sequence" eval="30"/>
-            <field name="domain">[('state', '=', 'running')]</field>
+            <field name="domain" eval="[('state', '=', 'running')]" pyson="1"/>
             <field name="act_window" ref="act_production_list"/>
         </record>
         <record model="ir.action.act_window.domain"
@@ -194,7 +194,9 @@ this repository contains the full copyright notices and license terms. -->
             <field name="global_p" eval="True"/>
         </record>
         <record model="ir.rule" id="rule_production">
-            <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_production"/>
         </record>
 
diff --git a/setup.py b/setup.py
index 6c4f259..448b01c 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
@@ -92,6 +92,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/stock.py b/stock.py
index 0985784..71e3780 100644
--- a/stock.py
+++ b/stock.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.model import fields
 from trytond.pyson import Eval
 from trytond.pool import PoolMeta
diff --git a/tests/__init__.py b/tests/__init__.py
index e64267e..b968fe3 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_production import suite
 
diff --git a/tests/scenario_production.rst b/tests/scenario_production.rst
index 29fc30d..3d5eaf0 100644
--- a/tests/scenario_production.rst
+++ b/tests/scenario_production.rst
@@ -2,16 +2,15 @@
 Production 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
+    >>> from trytond.modules.production.production import BOM_CHANGES
     >>> today = datetime.date.today()
     >>> yesterday = today - relativedelta(days=1)
 
@@ -23,35 +22,14 @@ Create database::
 Install production Module::
 
     >>> Module = Model.get('ir.module.module')
-    >>> modules = Module.find([('name', '=', 'production')])
-    >>> Module.install([x.id for x in modules], config.context)
+    >>> module, = Module.find([('name', '=', 'production')])
+    >>> 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='Euro', symbol=u'$', 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::
 
@@ -144,8 +122,7 @@ Create an Inventory::
     >>> inventory.lines.append(inventory_line2)
     >>> inventory_line2.product = component2
     >>> inventory_line2.quantity = 6
-    >>> inventory.save()
-    >>> Inventory.confirm([inventory.id], config.context)
+    >>> inventory.click('confirm')
     >>> inventory.state
     u'done'
 
@@ -163,23 +140,33 @@ Make a production::
     True
     >>> production.cost
     Decimal('25.0')
-    >>> production.save()
-    >>> Production.wait([production.id], config.context)
+    >>> production.click('wait')
     >>> production.state
     u'waiting'
-    >>> Production.assign_try([production.id], config.context)
+
+Test reset bom button::
+
+    >>> for input in production.inputs:
+    ...     input.quantity += 1
+    >>> production.click('reset_bom', change=BOM_CHANGES)
+    >>> sorted([i.quantity for i in production.inputs]) == [10, 300]
+    True
+    >>> output, = production.outputs
+    >>> output.quantity == 2
+    True
+
+Do the production::
+
+    >>> production.click('assign_try')
     True
-    >>> production.reload()
     >>> all(i.state == 'assigned' for i in production.inputs)
     True
-    >>> Production.run([production.id], config.context)
-    >>> production.reload()
+    >>> production.click('run')
     >>> all(i.state == 'done' for i in production.inputs)
     True
     >>> len(set(i.effective_date == today for i in production.inputs))
     1
-    >>> Production.done([production.id], config.context)
-    >>> production.reload()
+    >>> production.click('done')
     >>> output, = production.outputs
     >>> output.state
     u'done'
@@ -199,7 +186,7 @@ Make a production with effective date yesterday::
     >>> production.bom = bom
     >>> production.quantity = 2
     >>> production.click('wait')
-    >>> Production.assign_try([production.id], config.context)
+    >>> production.click('assign_try')
     True
     >>> production.click('run')
     >>> production.reload()
diff --git a/tests/test_production.py b/tests/test_production.py
index 4ae51cd..6f8bc89 100644
--- a/tests/test_production.py
+++ b/tests/test_production.py
@@ -1,25 +1,15 @@
-#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 trytond.tests.test_tryton
-from trytond.tests.test_tryton import test_view, test_depends
+from trytond.tests.test_tryton import ModuleTestCase
 from trytond.tests.test_tryton import doctest_setup, doctest_teardown
 
 
-class ProductionTestCase(unittest.TestCase):
+class ProductionTestCase(ModuleTestCase):
     'Test Production module'
-
-    def setUp(self):
-        trytond.tests.test_tryton.install_module('production')
-
-    def test0005views(self):
-        'Test views'
-        test_view('production')
-
-    def test0006depends(self):
-        'Test depends'
-        test_depends()
+    module = 'production'
 
 
 def suite():
diff --git a/tryton.cfg b/tryton.cfg
index a07c766..f859a44 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,5 +1,5 @@
 [tryton]
-version=3.4.1
+version=3.6.0
 depends:
     company
     ir
diff --git a/trytond_production.egg-info/PKG-INFO b/trytond_production.egg-info/PKG-INFO
index c12f269..60e2657 100644
--- a/trytond_production.egg-info/PKG-INFO
+++ b/trytond_production.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: trytond-production
-Version: 3.4.1
+Version: 3.6.0
 Summary: Tryton module for production
 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_production
         ==================
         
@@ -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_production.egg-info/requires.txt b/trytond_production.egg-info/requires.txt
index e8d951f..aabd087 100644
--- a/trytond_production.egg-info/requires.txt
+++ b/trytond_production.egg-info/requires.txt
@@ -1,4 +1,4 @@
-trytond_company >= 3.4, < 3.5
-trytond_product >= 3.4, < 3.5
-trytond_stock >= 3.4, < 3.5
-trytond >= 3.4, < 3.5
\ No newline at end of file
+trytond_company >= 3.6, < 3.7
+trytond_product >= 3.6, < 3.7
+trytond_stock >= 3.6, < 3.7
+trytond >= 3.6, < 3.7
\ No newline at end of file
diff --git a/view/production_form.xml b/view/production_form.xml
index e80999b..658606d 100644
--- a/view/production_form.xml
+++ b/view/production_form.xml
@@ -38,10 +38,12 @@ this repository contains the full copyright notices and license terms. -->
     <group col="4" colspan="4" id="state_buttons">
         <label name="state"/>
         <field name="state"/>
-        <group col="6" colspan="2" id="buttons">
+        <group col="7" colspan="2" id="buttons">
             <button name="cancel" string="Cancel"
                 icon="tryton-cancel"/>
             <button name="draft" string="Draft"/>
+            <button name="reset_bom" string="Reset to BOM"
+                icon="tryton-clear"/>
             <button name="wait" string="Wait"/>
             <button name="assign_wizard" string="Assign"
                 icon="tryton-go-next"/>
-- 
tryton-modules-production



More information about the tryton-debian-vcs mailing list