From 183a3e7bbf8463cdc86da70893eb97131e55f1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 4 Aug 2011 16:57:42 +0200 Subject: [PATCH] Add test for depends --- configuration.py | 47 ++++---- inventory.py | 15 ++- location.py | 34 +++--- move.py | 75 +++++++------ period.py | 2 +- shipment.py | 268 +++++++++++++++++++++++--------------------- tests/test_stock.py | 9 +- 7 files changed, 249 insertions(+), 201 deletions(-) diff --git a/configuration.py b/configuration.py index e8f4c185cb..b63fadb25d 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. from trytond.model import ModelView, ModelSQL, ModelSingleton, fields -from trytond.pyson import Eval +from trytond.pyson import Eval, Get class Configuration(ModelSingleton, ModelSQL, ModelView): @@ -10,29 +10,34 @@ class Configuration(ModelSingleton, ModelSQL, ModelView): _description = __doc__ shipment_in_sequence = fields.Property(fields.Many2One('ir.sequence', - 'Supplier Shipment Sequence', domain=[ - ('company', 'in', [Eval('company'), False]), - ('code', '=', 'stock.shipment.in'), - ], required=True)) + 'Supplier Shipment Sequence', domain=[ + ('company', 'in', + [Get(Eval('context', {}), 'company'), False]), + ('code', '=', 'stock.shipment.in'), + ], required=True)) shipment_in_return_sequence = fields.Property(fields.Many2One( - 'ir.sequence', 'Supplier Return Shipment Sequence', domain=[ - ('company', 'in', [Eval('company'), False]), - ('code', '=', 'stock.shipment.in.return'), - ], required=True)) + 'ir.sequence', 'Supplier Return Shipment Sequence', domain=[ + ('company', 'in', + [Get(Eval('context', {}), 'company'), False]), + ('code', '=', 'stock.shipment.in.return'), + ], required=True)) shipment_out_sequence = fields.Property(fields.Many2One( 'ir.sequence', - 'Customer Shipment Sequence', domain=[ - ('company', 'in', [Eval('company'), False]), - ('code', '=', 'stock.shipment.out'), - ], required=True)) + 'Customer Shipment Sequence', domain=[ + ('company', 'in', + [Get(Eval('context', {}), 'company'), False]), + ('code', '=', 'stock.shipment.out'), + ], required=True)) shipment_out_return_sequence = fields.Property(fields.Many2One( - 'ir.sequence', 'Customer Return Shipment Sequence', domain=[ - ('company', 'in', [Eval('company'), False]), - ('code', '=', 'stock.shipment.out.return'), - ], required=True)) + 'ir.sequence', 'Customer Return Shipment Sequence', domain=[ + ('company', 'in', + [Get(Eval('context', {}), 'company'), False]), + ('code', '=', 'stock.shipment.out.return'), + ], required=True)) shipment_internal_sequence = fields.Property(fields.Many2One( - 'ir.sequence', 'Internal Shipment Sequence', domain=[ - ('company', 'in', [Eval('company'), False]), - ('code', '=', 'stock.shipment.internal'), - ], required=True)) + 'ir.sequence', 'Internal Shipment Sequence', domain=[ + ('company', 'in', + [Get(Eval('context', {}), 'company'), False]), + ('code', '=', 'stock.shipment.internal'), + ], required=True)) Configuration() diff --git a/inventory.py b/inventory.py index 7a34c4c0e7..0af41ca73a 100644 --- a/inventory.py +++ b/inventory.py @@ -10,6 +10,7 @@ from trytond.pool import Pool STATES = { 'readonly': Not(Equal(Eval('state'), 'draft')), } +DEPENDS = ['state'] class Inventory(ModelWorkflow, ModelSQL, ModelView): @@ -23,21 +24,25 @@ class Inventory(ModelWorkflow, ModelSQL, ModelView): domain=[('type', '=', 'storage')], states={ 'readonly': Or(Not(Equal(Eval('state'), 'draft')), Bool(Eval('lines'))), - }) + }, + depends=['state', 'lines']) date = fields.Date('Date', required=True, states={ 'readonly': Or(Not(Equal(Eval('state'), 'draft')), Bool(Eval('lines'))), - }) + }, + depends=['state', 'lines']) lost_found = fields.Many2One( 'stock.location', 'Lost and Found', required=True, - domain=[('type', '=', 'lost_found')], states=STATES) + domain=[('type', '=', 'lost_found')], states=STATES, depends=DEPENDS) lines = fields.One2Many( - 'stock.inventory.line', 'inventory', 'Lines', states=STATES) + 'stock.inventory.line', 'inventory', 'Lines', states=STATES, + depends=DEPENDS) company = fields.Many2One('company.company', 'Company', required=True, states={ 'readonly': Or(Not(Equal(Eval('state'), 'draft')), Bool(Eval('lines'))), - }) + }, + depends=['state', 'lines']) state = fields.Selection([ ('draft', 'Draft'), ('done', 'Done'), diff --git a/location.py b/location.py index d82ea64e71..0f14437df1 100644 --- a/location.py +++ b/location.py @@ -11,6 +11,7 @@ from trytond.pool import Pool STATES = { 'readonly': Not(Bool(Eval('active'))), } +DEPENDS = ['active'] class Location(ModelSQL, ModelView): @@ -18,14 +19,16 @@ class Location(ModelSQL, ModelView): _name = 'stock.location' _description = __doc__ name = fields.Char("Name", size=None, required=True, states=STATES, - translate=True) - code = fields.Char("Code", size=None, states=STATES, select=1) + depends=DEPENDS, translate=True) + code = fields.Char("Code", size=None, states=STATES, depends=DEPENDS, + select=1) active = fields.Boolean('Active', select=1) address = fields.Many2One("party.address", "Address", - states={ - 'invisible': Not(Equal(Eval('type'), 'warehouse')), - 'readonly': Not(Bool(Eval('active'))), - }) + states={ + 'invisible': Not(Equal(Eval('type'), 'warehouse')), + 'readonly': Not(Bool(Eval('active'))), + }, + depends=['type', 'active']) type = fields.Selection([ ('supplier', 'Supplier'), ('customer', 'Customer'), @@ -34,7 +37,7 @@ class Location(ModelSQL, ModelView): ('storage', 'Storage'), ('production', 'Production'), ('view', 'View'), - ], 'Location type', states=STATES) + ], 'Location type', states=STATES, depends=DEPENDS) parent = fields.Many2One("stock.location", "Parent", select=1, left="left", right="right") left = fields.Integer('Left', required=True, select=1) @@ -45,14 +48,15 @@ class Location(ModelSQL, ModelView): 'invisible': Not(Equal(Eval('type'), 'warehouse')), 'readonly': Not(Bool(Eval('active'))), 'required': Equal(Eval('type'), 'warehouse'), - }, + }, domain=[ ('type','=','storage'), ['OR', - ('parent', 'child_of', [Eval('active_id')]), + ('parent', 'child_of', [Eval('id')]), ('parent', '=', False), + ], ], - ]) + depends=['type', 'active', 'id']) output_location = fields.Many2One( "stock.location", "Output", states={ 'invisible': Not(Equal(Eval('type'), 'warehouse')), @@ -61,8 +65,9 @@ class Location(ModelSQL, ModelView): }, domain=[('type','=','storage'), ['OR', - ('parent', 'child_of', [Eval('active_id')]), - ('parent', '=', False)]]) + ('parent', 'child_of', [Eval('id')]), + ('parent', '=', False)]], + depends=['type', 'active', 'id']) storage_location = fields.Many2One( "stock.location", "Storage", states={ 'invisible': Not(Equal(Eval('type'), 'warehouse')), @@ -71,8 +76,9 @@ class Location(ModelSQL, ModelView): }, domain=[('type','=','storage'), ['OR', - ('parent', 'child_of', [Eval('active_id')]), - ('parent', '=', False)]]) + ('parent', 'child_of', [Eval('id')]), + ('parent', '=', False)]], + depends=['type', 'active', 'id']) quantity = fields.Function(fields.Float('Quantity'), 'get_quantity') forecast_quantity = fields.Function(fields.Float('Forecast Quantity'), 'get_quantity') diff --git a/move.py b/move.py index 46fed6b7e2..0ab4473151 100644 --- a/move.py +++ b/move.py @@ -11,6 +11,7 @@ from trytond.pool import Pool STATES = { 'readonly': In(Eval('state'), ['cancel', 'assigned', 'done']), } +DEPENDS = ['state'] class Move(ModelSQL, ModelView): @@ -19,32 +20,35 @@ class Move(ModelSQL, ModelView): _description = __doc__ _order_name = 'product' product = fields.Many2One("product.product", "Product", required=True, - select=1, states=STATES, - on_change=['product', 'currency', 'uom', 'company', - 'from_location', 'to_location'], - domain=[('type', '!=', 'service')]) + select=1, states=STATES, + on_change=['product', 'currency', 'uom', 'company', + 'from_location', 'to_location'], + domain=[('type', '!=', 'service')], + depends=DEPENDS) uom = fields.Many2One("product.uom", "Uom", required=True, states=STATES, - domain=[ - ('category', '=', - (Eval('product'), 'product.default_uom.category')), + domain=[ + ('category', '=', + (Eval('product'), 'product.default_uom.category')), ], - context={ - 'category': (Eval('product'), 'product.default_uom.category'), + context={ + 'category': (Eval('product'), 'product.default_uom.category'), }, - on_change=['product', 'currency', 'uom', 'company', - 'from_location', 'to_location']) + on_change=['product', 'currency', 'uom', 'company', + 'from_location', 'to_location'], + depends=['state', 'product']) unit_digits = fields.Function(fields.Integer('Unit Digits', on_change_with=['uom']), 'get_unit_digits') quantity = fields.Float("Quantity", required=True, - digits=(16, Eval('unit_digits', 2)), states=STATES) + digits=(16, Eval('unit_digits', 2)), states=STATES, + depends=['state', 'unit_digits']) internal_quantity = fields.Float('Internal Quantity', readonly=True, required=True) from_location = fields.Many2One("stock.location", "From Location", select=1, - required=True, states=STATES, - domain=[('type', 'not in', ('warehouse', 'view'))]) + required=True, states=STATES, depends=DEPENDS, + domain=[('type', 'not in', ('warehouse', 'view'))]) to_location = fields.Many2One("stock.location", "To Location", select=1, - required=True, states=STATES, - domain=[('type', 'not in', ('warehouse', 'view'))]) + required=True, states=STATES, depends=DEPENDS, + domain=[('type', 'not in', ('warehouse', 'view'))]) shipment_in = fields.Many2One('stock.shipment.in', 'Supplier Shipment', readonly=True, select=1, ondelete='CASCADE') shipment_out = fields.Many2One('stock.shipment.out', 'Customer Shipment', @@ -57,7 +61,8 @@ class Move(ModelSQL, ModelView): ondelete='CASCADE') shipment_internal = fields.Many2One('stock.shipment.internal', 'Internal Shipment', readonly=True, select=1, ondelete='CASCADE') - planned_date = fields.Date("Planned Date", states=STATES, select=2) + planned_date = fields.Date("Planned Date", states=STATES, depends=DEPENDS, + select=2) effective_date = fields.Date("Effective Date", readonly=True, select=2) state = fields.Selection([ ('draft', 'Draft'), @@ -66,25 +71,29 @@ class Move(ModelSQL, ModelView): ('cancel', 'Canceled'), ], 'State', select=1, readonly=True) company = fields.Many2One('company.company', 'Company', required=True, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }, domain=[ - ('id', If(In('company', Eval('context', {})), '=', '!='), - Get(Eval('context', {}), 'company', 0)), - ]) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, + domain=[ + ('id', If(In('company', Eval('context', {})), '=', '!='), + Get(Eval('context', {}), 'company', 0)), + ], + depends=['state']) unit_price = fields.Numeric('Unit Price', digits=(16, 4), - states={ - 'invisible': Not(Bool(Eval('unit_price_required'))), - 'required': Bool(Eval('unit_price_required')), - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + 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) currency = fields.Many2One('currency.currency', 'Currency', - states={ - 'invisible': Not(Bool(Eval('unit_price_required'))), - 'required': Not(Bool(Eval('unit_price_required'))), - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'invisible': Not(Bool(Eval('unit_price_required'))), + 'required': Not(Bool(Eval('unit_price_required'))), + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, + depends=['unit_price_required', 'state']) unit_price_required = fields.Function(fields.Boolean('Unit Price Required', on_change_with=['from_location', 'to_location']), 'get_unit_price_required') diff --git a/period.py b/period.py index 0f29172f03..a1b717a82f 100644 --- a/period.py +++ b/period.py @@ -14,7 +14,7 @@ class Period(ModelSQL, ModelView): _rec_name = 'date' date = fields.Date('Date', required=True, states={ 'readonly': Equal(Eval('state'), 'closed'), - }) + }, depends=['state']) company = fields.Many2One('company.company', 'Company', required=True, domain=[ ('id', If(In('company', Eval('context', {})), '=', '!='), diff --git a/shipment.py b/shipment.py index 972ddf7e31..87c5e1efdd 100644 --- a/shipment.py +++ b/shipment.py @@ -22,26 +22,28 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView): effective_date = fields.Date('Effective Date', readonly=True) planned_date = fields.Date('Planned Date', states={ 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + }, depends=['state']) reference = fields.Char("Reference", size=None, select=1, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) supplier = fields.Many2One('party.party', 'Supplier', - states={ - 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')), + states={ + 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')), Bool(Eval('incoming_moves'))), Bool(Eval('supplier'))), - }, on_change=['supplier'], required=True) + }, on_change=['supplier'], required=True, + depends=['state', 'incoming_moves', 'supplier']) contact_address = fields.Many2One('party.address', 'Contact Address', - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }, domain=[('party', '=', Eval('supplier'))]) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, domain=[('party', '=', Eval('supplier'))], + depends=['state', 'supplier']) warehouse = fields.Many2One('stock.location', "Warehouse", - required=True, domain=[('type', '=', 'warehouse')], - states={ - 'readonly': Or(In(Eval('state'), ['cancel', 'done']), - Bool(Eval('incoming_moves'))), - }) + required=True, domain=[('type', '=', 'warehouse')], + states={ + 'readonly': Or(In(Eval('state'), ['cancel', 'done']), + Bool(Eval('incoming_moves'))), + }, depends=['state', 'incoming_moves']) incoming_moves = fields.Function(fields.One2Many('stock.move', None, 'Incoming Moves', add_remove=[ ('shipment_in', '=', False), @@ -56,14 +58,16 @@ class ShipmentIn(ModelWorkflow, ModelSQL, ModelView): 'warehouse': Eval('warehouse'), 'type': 'incoming', 'supplier': Eval('supplier'), - }), 'get_incoming_moves', setter='set_incoming_moves') + }, depends=['state', 'warehouse']), + 'get_incoming_moves', setter='set_incoming_moves') inventory_moves = fields.Function(fields.One2Many('stock.move', None, 'Inventory Moves', states={ 'readonly': In(Eval('state'), ['draft', 'done', 'cancel']), }, context={ 'warehouse': Eval('warehouse'), 'type': 'inventory_in', - }), 'get_inventory_moves', setter='set_inventory_moves') + }, depends=['state', 'warehouse']), + 'get_inventory_moves', setter='set_inventory_moves') moves = fields.One2Many('stock.move', 'shipment_in', 'Moves', readonly=True) code = fields.Char("Code", size=None, select=1, readonly=True) @@ -354,35 +358,37 @@ class ShipmentInReturn(ModelWorkflow, ModelSQL, ModelView): effective_date =fields.Date('Effective Date', readonly=True) planned_date = fields.Date('Planned Date', - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) code = fields.Char("Code", size=None, select=1, readonly=True) reference = fields.Char("Reference", size=None, select=1, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) from_location = fields.Many2One('stock.location', "From Location", - required=True, states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('moves'))), - }, domain=[('type', '=', 'storage')]) + required=True, states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('moves'))), + }, domain=[('type', '=', 'storage')], + depends=['state', 'moves']) to_location = fields.Many2One('stock.location', "To Location", - required=True, states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('moves'))), - }, domain=[('type', '=', 'supplier')]) + required=True, states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('moves'))), + }, domain=[('type', '=', 'supplier')], + depends=['state', 'moves']) moves = fields.One2Many('stock.move', 'shipment_in_return', 'Moves', states={ 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')), - Not(Bool(Eval('from_location')))), + Not(Bool(Eval('from_location')))), Bool(Eval('to_location'))), - }, + }, context={ 'from_location': Eval('from_location'), 'to_location': Eval('to_location'), 'planned_date': Eval('planned_date'), - }) + }, depends=['state', 'from_location', 'to_location']) state = fields.Selection([ ('draft', 'Draft'), ('cancel', 'Canceled'), @@ -553,44 +559,49 @@ class ShipmentOut(ModelWorkflow, ModelSQL, ModelView): effective_date = fields.Date('Effective Date', readonly=True) planned_date = fields.Date('Planned Date', - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) customer = fields.Many2One('party.party', 'Customer', required=True, - states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('outgoing_moves'))), - }, on_change=['customer']) - delivery_address = fields.Many2One('party.address', - 'Delivery Address', required=True, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }, domain=[('party', '=', Eval('customer'))]) - reference = fields.Char("Reference", size=None, select=1, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) - warehouse = fields.Many2One('stock.location', "Warehouse", required=True, - states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('outgoing_moves'))), - }, domain=[('type', '=', 'warehouse')]) - outgoing_moves = fields.Function(fields.One2Many('stock.move', None, - 'Outgoing Moves', states={ + states={ 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Not(Bool(Eval('warehouse')))), - }, context={ - 'warehouse': Eval('warehouse'), - 'type': 'outgoing', - 'customer': Eval('customer'), - }), 'get_outgoing_moves', setter='set_outgoing_moves') + Bool(Eval('outgoing_moves'))), + }, on_change=['customer'], + depends=['state', 'outgoing_moves']) + delivery_address = fields.Many2One('party.address', + 'Delivery Address', required=True, + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, domain=[('party', '=', Eval('customer'))], + depends=['state', 'customer']) + reference = fields.Char("Reference", size=None, select=1, + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) + warehouse = fields.Many2One('stock.location', "Warehouse", required=True, + states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('outgoing_moves'))), + }, domain=[('type', '=', 'warehouse')], + depends=['state', 'outgoing_moves']) + outgoing_moves = fields.Function(fields.One2Many('stock.move', None, + 'Outgoing Moves', states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Not(Bool(Eval('warehouse')))), + }, context={ + 'warehouse': Eval('warehouse'), + 'type': 'outgoing', + 'customer': Eval('customer'), + }, depends=['state', 'warehouse', 'customer']), + 'get_outgoing_moves', setter='set_outgoing_moves') inventory_moves = fields.Function(fields.One2Many('stock.move', None, - 'Inventory Moves', states={ - 'readonly': In(Eval('state'), ['draft', 'packed', 'done']), - }, context={ - 'warehouse': Eval('warehouse'), - 'type': 'inventory_out', - }), 'get_inventory_moves', setter='set_inventory_moves') + 'Inventory Moves', states={ + 'readonly': In(Eval('state'), ['draft', 'packed', 'done']), + }, context={ + 'warehouse': Eval('warehouse'), + 'type': 'inventory_out', + }, depends=['state', 'warehouse']), + 'get_inventory_moves', setter='set_inventory_moves') moves = fields.One2Many('stock.move', 'shipment_out', 'Moves', readonly=True) code = fields.Char("Code", size=None, select=1, readonly=True) @@ -983,43 +994,48 @@ class ShipmentOutReturn(ModelWorkflow, ModelSQL, ModelView): effective_date = fields.Date('Effective Date', readonly=True) planned_date = fields.Date('Planned Date', - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) - customer = fields.Many2One('party.party', 'Customer', required=True, - states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('incoming_moves'))), - }, on_change=['customer']) - delivery_address = fields.Many2One('party.address', - 'Delivery Address', required=True, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }, domain=[('party', '=', Eval('customer'))]) - reference = fields.Char("Reference", size=None, select=1, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) - warehouse = fields.Many2One('stock.location', "Warehouse", required=True, - states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('incoming_moves'))), - }, domain=[('type', '=', 'warehouse')]) - incoming_moves = fields.Function(fields.One2Many('stock.move', None, - 'Incoming Moves', states={ + states={ 'readonly': Not(Equal(Eval('state'), 'draft')), - }, context={ - 'warehouse': Eval('warehouse'), - 'type': 'incoming', - 'customer': Eval('customer'), - }), 'get_incoming_moves', setter='set_incoming_moves') + }, depends=['state']) + customer = fields.Many2One('party.party', 'Customer', required=True, + states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('incoming_moves'))), + }, on_change=['customer'], + depends=['state', 'incoming_moves']) + delivery_address = fields.Many2One('party.address', + 'Delivery Address', required=True, + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, domain=[('party', '=', Eval('customer'))], + depends=['state', 'customer']) + reference = fields.Char("Reference", size=None, select=1, + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) + warehouse = fields.Many2One('stock.location', "Warehouse", required=True, + states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('incoming_moves'))), + }, domain=[('type', '=', 'warehouse')], + depends=['state', 'incoming_moves']) + incoming_moves = fields.Function(fields.One2Many('stock.move', None, + 'Incoming Moves', states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, context={ + 'warehouse': Eval('warehouse'), + 'type': 'incoming', + 'customer': Eval('customer'), + }, depends=['state', 'warehouse', 'customer']), + 'get_incoming_moves', setter='set_incoming_moves') inventory_moves = fields.Function(fields.One2Many('stock.move', None, - 'Inventory Moves', states={ - 'readonly': In(Eval('state'), ['draft', 'cancel', 'done']), - }, context={ - 'warehouse': Eval('warehouse'), - 'type': 'inventory_out', - }), 'get_inventory_moves', setter='set_inventory_moves') + 'Inventory Moves', states={ + 'readonly': In(Eval('state'), ['draft', 'cancel', 'done']), + }, context={ + 'warehouse': Eval('warehouse'), + 'type': 'inventory_out', + }, depends=['state', 'warehouse']), + 'get_inventory_moves', setter='set_inventory_moves') moves = fields.One2Many('stock.move', 'shipment_out_return', 'Moves', readonly=True) code = fields.Char("Code", size=None, select=1, readonly=True) @@ -1392,42 +1408,42 @@ class ShipmentInternal(ModelWorkflow, ModelSQL, ModelView): effective_date =fields.Date('Effective Date', readonly=True) planned_date = fields.Date('Planned Date', - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) code = fields.Char("Code", size=None, select=1, readonly=True) reference = fields.Char("Reference", size=None, select=1, - states={ - 'readonly': Not(Equal(Eval('state'), 'draft')), - }) + states={ + 'readonly': Not(Equal(Eval('state'), 'draft')), + }, depends=['state']) from_location = fields.Many2One('stock.location', "From Location", - required=True, states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('moves'))), + required=True, states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('moves'))), }, - domain=[ - ('type', 'not in', - ['supplier', 'customer', 'warehouse', 'view']), - ]) + domain=[ + ('type', 'not in', + ['supplier', 'customer', 'warehouse', 'view']), + ], depends=['state', 'moves']) to_location = fields.Many2One('stock.location', "To Location", - required=True, states={ - 'readonly': Or(Not(Equal(Eval('state'), 'draft')), - Bool(Eval('moves'))), + required=True, states={ + 'readonly': Or(Not(Equal(Eval('state'), 'draft')), + Bool(Eval('moves'))), }, domain=[ - ('type', 'not in', - ['supplier', 'customer', 'warehouse', 'view']), - ]) + ('type', 'not in', + ['supplier', 'customer', 'warehouse', 'view']), + ], depends=['state', 'moves']) moves = fields.One2Many('stock.move', 'shipment_internal', 'Moves', states={ 'readonly': And(Or(Not(Equal(Eval('state'), 'draft')), - Not(Bool(Eval('from_location')))), + Not(Bool(Eval('from_location')))), Bool(Eval('to_location'))), - }, + }, context={ 'from_location': Eval('from_location'), 'to_location': Eval('to_location'), 'planned_date': Eval('planned_date'), - }) + }, depends=['state', 'from_location', 'to_location', 'planned_date']) state = fields.Selection([ ('draft', 'Draft'), ('cancel', 'Canceled'), diff --git a/tests/test_stock.py b/tests/test_stock.py index c1807477b0..dbef2fed24 100644 --- a/tests/test_stock.py +++ b/tests/test_stock.py @@ -14,7 +14,8 @@ from decimal import Decimal from dateutil.relativedelta import relativedelta from functools import partial import trytond.tests.test_tryton -from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view +from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT, test_view,\ + test_depends from trytond.transaction import Transaction @@ -41,6 +42,12 @@ class StockTestCase(unittest.TestCase): ''' test_view('stock') + def test0006depends(self): + ''' + Test depends. + ''' + test_depends() + def test0010move_internal_quantity(self): ''' Test Move.internal_quantity.