diff --git a/stock.py b/stock.py
index 9a918f2a6d..39c78a366b 100644
--- a/stock.py
+++ b/stock.py
@@ -1,11 +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.
+from sql import Cast, Literal
+from sql.functions import Substring, Position
+
from trytond import backend
from trytond.i18n import gettext
from trytond.model import ModelSQL, ModelView, Workflow, fields, tree
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, Id
from trytond.report import Report
+from trytond.transaction import Transaction
from .exceptions import PackageError
@@ -78,6 +82,7 @@ class Package(tree(), ModelSQL, ModelView):
__name__ = 'stock.package'
_rec_name = 'code'
code = fields.Char('Code', select=True, readonly=True, required=True)
+ company = fields.Many2One('company.company', "Company", required=True)
type = fields.Many2One(
'stock.package.type', "Type", required=True,
states={
@@ -89,9 +94,13 @@ class Package(tree(), ModelSQL, ModelView):
states={
'readonly': Eval('state') == 'closed',
},
- depends=['state'])
+ domain=[
+ ('company', '=', Eval('company', -1)),
+ ],
+ depends=['state', 'company'])
moves = fields.One2Many('stock.move', 'package', 'Moves',
domain=[
+ ('company', '=', Eval('company', -1)),
('shipment', '=', Eval('shipment')),
('to_location.type', 'in', ['customer', 'supplier']),
('state', '!=', 'cancelled'),
@@ -102,30 +111,62 @@ class Package(tree(), ModelSQL, ModelView):
states={
'readonly': Eval('state') == 'closed',
},
- depends=['shipment', 'state'])
+ depends=['company', 'shipment', 'state'])
parent = fields.Many2One(
'stock.package', "Parent", select=True, ondelete='CASCADE',
domain=[
+ ('company', '=', Eval('company', -1)),
('shipment', '=', Eval('shipment')),
],
states={
'readonly': Eval('state') == 'closed',
},
- depends=['shipment', 'state'])
+ depends=['company', 'shipment', 'state'])
children = fields.One2Many(
'stock.package', 'parent', 'Children',
domain=[
+ ('company', '=', Eval('company', -1)),
('shipment', '=', Eval('shipment')),
],
states={
'readonly': Eval('state') == 'closed',
},
- depends=['shipment', 'state'])
+ depends=['company', 'shipment', 'state'])
state = fields.Function(fields.Selection([
('open', "Open"),
('closed', "Closed"),
], "State"), 'on_change_with_state')
+ @classmethod
+ def __register__(cls, module):
+ pool = Pool()
+ table_h = cls.__table_handler__(module)
+ table = cls.__table__()
+ company_exist = table_h.column_exist('company')
+ cursor = Transaction().connection.cursor()
+
+ super().__register__(module)
+
+ # Migration from 5.8: add company
+ if not company_exist:
+ shipment_id = Cast(Substring(
+ table.shipment,
+ Position(',', table.shipment) + Literal(1)),
+ cls.id.sql_type().base)
+ for name in cls._get_shipment():
+ Shipment = pool.get(name)
+ shipment = Shipment.__table__()
+ value = (shipment
+ .select(shipment.company,
+ where=shipment.id == shipment_id))
+ cursor.execute(*table.update(
+ [table.company], [value],
+ where=table.shipment.like(name + ',%')))
+
+ @classmethod
+ def default_company(cls):
+ return Transaction().context.get('company')
+
@staticmethod
def _get_shipment():
'Return list of Model names for shipment Reference'
@@ -180,10 +221,13 @@ class Move(metaclass=PoolMeta):
__name__ = 'stock.move'
package = fields.Many2One(
'stock.package', "Package", select=True,
+ domain=[
+ ('company', '=', Eval('company', -1)),
+ ],
states={
'readonly': Eval('state') == 'cancelled',
},
- depends=['state'])
+ depends=['company', 'state'])
@classmethod
def copy(cls, moves, default=None):
@@ -205,15 +249,24 @@ class Move(metaclass=PoolMeta):
class PackageMixin(object):
__slots__ = ()
packages = fields.One2Many('stock.package', 'shipment', 'Packages',
+ domain=[
+ ('company', '=', Eval('company', -1)),
+ ],
states={
'readonly': Eval('state') != 'picked',
- })
+ },
+ depends=['company'])
root_packages = fields.Function(fields.One2Many('stock.package',
'shipment', 'Packages',
- domain=[('parent', '=', None)],
+ domain=[
+ ('company', '=', Eval('company', -1)),
+ ('parent', '=', None),
+ ],
states={
'readonly': Eval('state') != 'picked',
- }), 'get_root_packages', setter='set_root_packages')
+ },
+ depends=['company']),
+ 'get_root_packages', setter='set_root_packages')
def get_root_packages(self, name):
return [p.id for p in self.packages if not p.parent]
diff --git a/tryton.cfg b/tryton.cfg
index 02de400fb8..f5500694af 100644
--- a/tryton.cfg
+++ b/tryton.cfg
@@ -1,6 +1,7 @@
[tryton]
version=5.9.0
depends:
+ company
ir
res
stock
diff --git a/view/package_form.xml b/view/package_form.xml
index b200e2f82e..b8ffd9be34 100644
--- a/view/package_form.xml
+++ b/view/package_form.xml
@@ -8,6 +8,8 @@ this repository contains the full copyright notices and license terms. -->
+
+
diff --git a/view/package_list.xml b/view/package_list.xml
index 0d22e557f5..90fad2532c 100644
--- a/view/package_list.xml
+++ b/view/package_list.xml
@@ -5,5 +5,6 @@ this repository contains the full copyright notices and license terms. -->
+