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. -->
+
+
diff --git a/view/package_list.xml b/view/package_list.xml
index 2a0754e148..3fd9b550e4 100644
--- a/view/package_list.xml
+++ b/view/package_list.xml
@@ -5,4 +5,5 @@ this repository contains the full copyright notices and license terms. -->
+
diff --git a/view/package_tree.xml b/view/package_tree.xml
index 69d64be2bc..0ce8401c16 100644
--- a/view/package_tree.xml
+++ b/view/package_tree.xml
@@ -5,6 +5,7 @@ this repository contains the full copyright notices and license terms. -->
+