Add open/closed state on package

When a package is closed, we should not allow to modify it.
It is closed when the linked shipment is in packed, done or cancel state.

issue7714
review47831002
This commit is contained in:
Cédric Krier committed 2019-03-08 18:40:49 +01:00
1 parent 268378b000
commit 89fe3467fa
5 files changed
+53 -12

No files matched your search

+2
View File
@@ -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
+47 -12
View File
@@ -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):
+2
View File
@@ -12,4 +12,6 @@ this repository contains the full copyright notices and license terms. -->
<field name="shipment"/>
<field name="moves" colspan="4" widget="many2many"/>
<field name="children" colspan="4"/>
<label name="state"/>
<field name="state"/>
</form>
+1
View File
@@ -5,4 +5,5 @@ this repository contains the full copyright notices and license terms. -->
<field name="rec_name"/>
<field name="shipment"/>
<field name="type"/>
<field name="state"/>
</tree>
+1
View File
@@ -5,6 +5,7 @@ this repository contains the full copyright notices and license terms. -->
<field name="rec_name"/>
<field name="type"/>
<field name="shipment"/>
<field name="state"/>
<field name="parent" tree_invisible="1"/>
<field name="children" tree_invisible="1"/>
</tree>