changeset 24aa9865c54e in modules/production_work:default
details: 
https://hg.tryton.org/modules/production_work?cmd=changeset&node=24aa9865c54e
description:
        Use declarative index definition for ModelSQL

        issue5757
        review361251002
diffstat:

 work.py |  32 ++++++++++++++++++++------------
 1 files changed, 20 insertions(+), 12 deletions(-)

diffs (95 lines):

diff -r 2ee8763d550f -r 24aa9865c54e work.py
--- a/work.py   Mon May 02 17:54:38 2022 +0200
+++ b/work.py   Tue Oct 11 00:44:50 2022 +0200
@@ -7,8 +7,8 @@
 
 from trytond.i18n import gettext
 from trytond.model import (
-    DeactivableMixin, ModelSQL, ModelView, Workflow, fields, sequence_ordered,
-    tree)
+    DeactivableMixin, Index, ModelSQL, ModelView, Workflow, fields,
+    sequence_ordered, tree)
 from trytond.model.exceptions import AccessError
 from trytond.modules.product import price_digits, round_price
 from trytond.pool import Pool
@@ -28,7 +28,7 @@
     'Work Center'
     __name__ = 'production.work.center'
     name = fields.Char('Name', required=True, translate=True)
-    parent = fields.Many2One('production.work.center', 'Parent', select=True,
+    parent = fields.Many2One('production.work.center', 'Parent',
         domain=[
             ('company', '=', Eval('company', -1)),
             ('warehouse', '=', Eval('warehouse', -1)),
@@ -51,8 +51,7 @@
         states={
             'required': Bool(Eval('cost_price')),
             })
-    company = fields.Many2One('company.company', 'Company', required=True,
-        select=True)
+    company = fields.Many2One('company.company', "Company", required=True)
     warehouse = fields.Many2One('stock.location', 'Warehouse', required=True,
         domain=[
             ('type', '=', 'warehouse'),
@@ -100,8 +99,8 @@
     __name__ = 'production.work'
     operation = fields.Many2One('production.routing.operation', 'Operation',
         required=True)
-    production = fields.Many2One('production', 'Production', required=True,
-        select=True, ondelete='CASCADE',
+    production = fields.Many2One(
+        'production', "Production", required=True, ondelete='CASCADE',
         domain=[
             ('company', '=', Eval('company', -1)),
             ])
@@ -129,8 +128,7 @@
         filter=[
             ('state', '=', 'running'),
             ])
-    company = fields.Many2One('company.company', 'Company', required=True,
-        select=True)
+    company = fields.Many2One('company.company', "Company", required=True)
     warehouse = fields.Function(fields.Many2One('stock.location', 'Warehouse'),
         'on_change_with_warehouse')
     state = fields.Selection([
@@ -140,11 +138,16 @@
             ('running', 'Running'),
             ('finished', 'Finished'),
             ('done', 'Done'),
-            ], "State", select=True, readonly=True, sort=False)
+            ], "State", readonly=True, sort=False)
 
     @classmethod
     def __setup__(cls):
         super().__setup__()
+        t = cls.__table__()
+        cls._sql_indexes.add(
+            Index(
+                t, (t.state, Index.Equality()),
+                where=t.state.in_(['request', 'draft', 'waiting', 'running'])))
         cls._buttons.update({
                 'start': {
                     'invisible': Bool(Eval('active_cycles', [])),
@@ -270,8 +273,8 @@
 class WorkCycle(Workflow, ModelSQL, ModelView):
     'Work Cycle'
     __name__ = 'production.work.cycle'
-    work = fields.Many2One('production.work', 'Work', required=True,
-        ondelete='CASCADE', select=True)
+    work = fields.Many2One(
+        'production.work', "Work", required=True, ondelete='CASCADE')
     duration = fields.TimeDelta('Duration',
         states={
             'required': Eval('state') == 'done',
@@ -288,6 +291,11 @@
     @classmethod
     def __setup__(cls):
         super(WorkCycle, cls).__setup__()
+        t = cls.__table__()
+        cls._sql_indexes.add(
+            Index(
+                t, (t.state, Index.Equality()),
+                where=t.state.in_(['draft', 'running'])))
         cls._transitions |= set((
                 ('draft', 'running'),
                 ('running', 'done'),

Reply via email to