changeset c912f787d5f5 in modules/stock_package:default
details: 
https://hg.tryton.org/modules/stock_package?cmd=changeset&node=c912f787d5f5
description:
        Add company to package

        issue10197
        review332261002
diffstat:

 stock.py              |  85 +++++++++++++++++++++++++++++++++++++++++---------
 tryton.cfg            |   1 +
 view/package_form.xml |   2 +
 view/package_list.xml |   1 +
 4 files changed, 73 insertions(+), 16 deletions(-)

diffs (192 lines):

diff -r f654024ce1d3 -r c912f787d5f5 stock.py
--- a/stock.py  Thu Mar 11 23:00:10 2021 +0100
+++ b/stock.py  Sun Mar 21 22:42:17 2021 +0100
@@ -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 @@
     __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 @@
         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 @@
         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=['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'])
-    children = fields.One2Many(
-        'stock.package', 'parent', 'Children',
-        domain=[
-            ('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 @@
     __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 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 -r f654024ce1d3 -r c912f787d5f5 tryton.cfg
--- a/tryton.cfg        Thu Mar 11 23:00:10 2021 +0100
+++ b/tryton.cfg        Sun Mar 21 22:42:17 2021 +0100
@@ -1,6 +1,7 @@
 [tryton]
 version=5.9.0
 depends:
+    company
     ir
     res
     stock
diff -r f654024ce1d3 -r c912f787d5f5 view/package_form.xml
--- a/view/package_form.xml     Thu Mar 11 23:00:10 2021 +0100
+++ b/view/package_form.xml     Sun Mar 21 22:42:17 2021 +0100
@@ -8,6 +8,8 @@
     <field name="code"/>
     <label name="parent"/>
     <field name="parent"/>
+    <label name="company"/>
+    <field name="company"/>
     <label name="shipment"/>
     <field name="shipment"/>
     <field name="moves" colspan="4" widget="many2many"/>
diff -r f654024ce1d3 -r c912f787d5f5 view/package_list.xml
--- a/view/package_list.xml     Thu Mar 11 23:00:10 2021 +0100
+++ b/view/package_list.xml     Sun Mar 21 22:42:17 2021 +0100
@@ -5,5 +5,6 @@
     <field name="shipment" expand="1"/>
     <field name="rec_name" expand="1"/>
     <field name="type"/>
+    <field name="company"/>
     <field name="state"/>
 </tree>

Reply via email to