diff --git a/CHANGELOG b/CHANGELOG index 5dc0614d2b..fbd7349ee4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Add open/closed state on package + Version 5.0.0 - 2018-10-01 * Bug fixes (see mercurial logs for details) * Remove support for Python 2.7 diff --git a/stock.py b/stock.py index 7dee5beeab..07b25c1e39 100644 --- a/stock.py +++ b/stock.py @@ -80,9 +80,18 @@ class Package(tree(), ModelSQL, ModelView): __name__ = 'stock.package' _rec_name = 'code' code = fields.Char('Code', select=True, readonly=True, required=True) - type = fields.Many2One('stock.package.type', 'Type', required=True) - shipment = fields.Reference('Shipment', selection='get_shipment', - select=True) + type = fields.Many2One( + 'stock.package.type', "Type", required=True, + states={ + 'readonly': Eval('state') == 'closed', + }, + depends=['state']) + shipment = fields.Reference( + "Shipment", selection='get_shipment', select=True, + states={ + 'readonly': Eval('state') == 'closed', + }, + depends=['state']) moves = fields.One2Many('stock.move', 'package', 'Moves', domain=[ ('shipment', '=', Eval('shipment')), @@ -92,13 +101,32 @@ class Package(tree(), ModelSQL, ModelView): add_remove=[ ('package', '=', None), ], - depends=['shipment']) - parent = fields.Many2One('stock.package', 'Parent', select=True, - ondelete='CASCADE', domain=[('shipment', '=', Eval('shipment'))], - depends=['shipment']) - children = fields.One2Many('stock.package', 'parent', 'Children', - domain=[('shipment', '=', Eval('shipment'))], - depends=['shipment']) + states={ + 'readonly': Eval('state') == 'closed', + }, + depends=['shipment', 'state']) + parent = fields.Many2One( + 'stock.package', "Parent", select=True, ondelete='CASCADE', + domain=[ + ('shipment', '=', Eval('shipment')), + ], + states={ + 'readonly': Eval('state') == 'closed', + }, + depends=['shipment', 'state']) + children = fields.One2Many( + 'stock.package', 'parent', 'Children', + domain=[ + ('shipment', '=', Eval('shipment')), + ], + states={ + 'readonly': Eval('state') == 'closed', + }, + depends=['shipment', 'state']) + state = fields.Function(fields.Selection([ + ('open', "Open"), + ('closed', "Closed"), + ], "State"), 'on_change_with_state') @staticmethod def _get_shipment(): @@ -118,6 +146,13 @@ class Package(tree(), ModelSQL, ModelView): ]) return [(None, '')] + [(m.model, m.name) for m in models] + @fields.depends('shipment') + def on_change_with_state(self, name=None): + if (self.shipment + and self.shipment.state in {'packed', 'done', 'cancel'}): + return 'closed' + return 'open' + @classmethod def create(cls, vlist): pool = Pool() @@ -145,13 +180,13 @@ class Move(metaclass=PoolMeta): class PackageMixin(object): packages = fields.One2Many('stock.package', 'shipment', 'Packages', states={ - 'readonly': Eval('state').in_(['done', 'cancel']), + 'readonly': Eval('state').in_(['packed', 'done', 'cancel']), }) root_packages = fields.Function(fields.One2Many('stock.package', 'shipment', 'Packages', domain=[('parent', '=', None)], states={ - 'readonly': Eval('state').in_(['done', 'cancel']), + 'readonly': Eval('state').in_(['packed', 'done', 'cancel']), }), 'get_root_packages', setter='set_root_packages') def get_root_packages(self, name): diff --git a/view/package_form.xml b/view/package_form.xml index 054dbff066..b200e2f82e 100644 --- a/view/package_form.xml +++ b/view/package_form.xml @@ -12,4 +12,6 @@ this repository contains the full copyright notices and license terms. --> +