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

        issue5757
        review361251002
diffstat:

 party.py   |   4 +-
 product.py |   2 +-
 sale.py    |  82 +++++++++++++++++++++++++++++++++++++++----------------------
 stock.py   |   3 +-
 4 files changed, 57 insertions(+), 34 deletions(-)

diffs (219 lines):

diff -r 861fdb16ed8f -r 87d018dd40a6 party.py
--- a/party.py  Mon Oct 10 18:26:00 2022 +0200
+++ b/party.py  Tue Oct 11 00:44:50 2022 +0200
@@ -69,7 +69,7 @@
     __name__ = 'party.party.sale_method'
 
     party = fields.Many2One(
-        'party.party', "Party", ondelete='CASCADE', select=True,
+        'party.party', "Party", ondelete='CASCADE',
         context={
             'company': Eval('company', -1),
             },
@@ -87,7 +87,7 @@
     "Party Customer Currency"
     __name__ = 'party.party.customer_currency'
     party = fields.Many2One(
-        'party.party', "Party", ondelete='CASCADE', select=True)
+        'party.party', "Party", ondelete='CASCADE')
     customer_currency = customer_currency
 
 
diff -r 861fdb16ed8f -r 87d018dd40a6 product.py
--- a/product.py        Mon Oct 10 18:26:00 2022 +0200
+++ b/product.py        Tue Oct 11 00:44:50 2022 +0200
@@ -111,7 +111,7 @@
     __name__ = 'product.lead_time'
 
     template = fields.Many2One(
-        'product.template', "Template", ondelete='CASCADE', select=True)
+        'product.template', "Template", ondelete='CASCADE')
     lead_time = fields.TimeDelta("Lead Time")
 
     @classmethod
diff -r 861fdb16ed8f -r 87d018dd40a6 sale.py
--- a/sale.py   Mon Oct 10 18:26:00 2022 +0200
+++ b/sale.py   Tue Oct 11 00:44:50 2022 +0200
@@ -12,7 +12,8 @@
 from trytond.ir.attachment import AttachmentCopyMixin
 from trytond.ir.note import NoteCopyMixin
 from trytond.model import (
-    Model, ModelSQL, ModelView, Unique, Workflow, fields, sequence_ordered)
+    Index, Model, ModelSQL, ModelView, Unique, Workflow, fields,
+    sequence_ordered)
 from trytond.model.exceptions import AccessError
 from trytond.modules.account.tax import TaxableMixin
 from trytond.modules.account_product.exceptions import AccountError
@@ -67,7 +68,7 @@
     __name__ = 'sale.sale'
     _rec_name = 'number'
     company = fields.Many2One(
-        'company.company', 'Company', required=True, select=True,
+        'company.company', "Company", required=True,
         states={
             'readonly': (
                 (Eval('state') != 'draft')
@@ -76,8 +77,8 @@
                 | Eval('invoice_party', True)
                 | Eval('shipment_party', True)),
             })
-    number = fields.Char('Number', readonly=True, select=True)
-    reference = fields.Char('Reference', select=True)
+    number = fields.Char("Number", readonly=True)
+    reference = fields.Char("Reference")
     description = fields.Char('Description',
         states={
             'readonly': Eval('state') != 'draft',
@@ -93,7 +94,8 @@
         states={
             'readonly': Eval('state') != 'draft',
             })
-    party = fields.Many2One('party.party', 'Party', required=True, select=True,
+    party = fields.Many2One(
+        'party.party', "Party", required=True,
         states={
             'readonly': ((Eval('state') != 'draft')
                 | (Eval('lines', [0]) & Eval('party'))),
@@ -233,7 +235,8 @@
     moves = fields.Function(
         fields.Many2Many('stock.move', None, None, "Moves"),
         'get_moves', searcher='search_moves')
-    origin = fields.Reference('Origin', selection='get_origin', select=True,
+    origin = fields.Reference(
+        "Origin", selection='get_origin',
         states={
             'readonly': Eval('state') != 'draft',
             })
@@ -266,8 +269,27 @@
 
     @classmethod
     def __setup__(cls):
+        cls.number.search_unaccented = False
+        cls.reference.search_unaccented = False
         super(Sale, cls).__setup__()
-        cls.create_date.select = True
+        t = cls.__table__()
+        cls._sql_indexes.update({
+                Index(t, (t.reference, Index.Similarity())),
+                Index(t, (t.party, Index.Equality())),
+                Index(
+                    t,
+                    (t.state, Index.Equality()),
+                    where=t.state.in_([
+                            'draft', 'quotation', 'confirmed', 'processing'])),
+                Index(
+                    t,
+                    (t.invoice_state, Index.Equality()),
+                    where=t.state.in_(['none', 'waiting', 'exception'])),
+                Index(
+                    t,
+                    (t.shipment_state, Index.Equality()),
+                    where=t.state.in_(['none', 'waiting', 'exception'])),
+                })
         cls._order = [
             ('sale_date', 'DESC NULLS FIRST'),
             ('id', 'DESC'),
@@ -1086,27 +1108,27 @@
     'Sale - Ignored Invoice'
     __name__ = 'sale.sale-ignored-account.invoice'
     _table = 'sale_invoice_ignored_rel'
-    sale = fields.Many2One('sale.sale', 'Sale', ondelete='CASCADE',
-        select=True, required=True)
-    invoice = fields.Many2One('account.invoice', 'Invoice',
-            ondelete='RESTRICT', select=True, required=True)
+    sale = fields.Many2One(
+        'sale.sale', "Sale", ondelete='CASCADE', required=True)
+    invoice = fields.Many2One(
+        'account.invoice', "Invoice", ondelete='RESTRICT', required=True)
 
 
 class SaleRecreatedInvoice(ModelSQL):
     'Sale - Recreated Invoice'
     __name__ = 'sale.sale-recreated-account.invoice'
     _table = 'sale_invoice_recreated_rel'
-    sale = fields.Many2One('sale.sale', 'Sale', ondelete='CASCADE',
-        select=True, required=True)
-    invoice = fields.Many2One('account.invoice', 'Invoice',
-            ondelete='RESTRICT', select=True, required=True)
+    sale = fields.Many2One(
+        'sale.sale', "Sale", ondelete='CASCADE', required=True)
+    invoice = fields.Many2One(
+        'account.invoice', "Invoice", ondelete='RESTRICT', required=True)
 
 
 class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView):
     'Sale Line'
     __name__ = 'sale.line'
-    sale = fields.Many2One('sale.sale', 'Sale', ondelete='CASCADE',
-        select=True, required=True,
+    sale = fields.Many2One(
+        'sale.sale', "Sale", ondelete='CASCADE', required=True,
         states={
             'readonly': ((Eval('sale_state') != 'draft')
                 & Bool(Eval('sale'))),
@@ -1116,7 +1138,7 @@
         ('subtotal', 'Subtotal'),
         ('title', 'Title'),
         ('comment', 'Comment'),
-        ], 'Type', select=True, required=True,
+        ], "Type", required=True,
         states={
             'readonly': Eval('sale_state') != 'draft',
             })
@@ -1797,10 +1819,10 @@
     'Sale Line - Tax'
     __name__ = 'sale.line-account.tax'
     _table = 'sale_line_account_tax'
-    line = fields.Many2One('sale.line', 'Sale Line', ondelete='CASCADE',
-            select=True, required=True)
-    tax = fields.Many2One('account.tax', 'Tax', ondelete='RESTRICT',
-            select=True, required=True)
+    line = fields.Many2One(
+        'sale.line', "Sale Line", ondelete='CASCADE', required=True)
+    tax = fields.Many2One(
+        'account.tax', "Tax", ondelete='RESTRICT', required=True)
 
     @classmethod
     def __setup__(cls):
@@ -1816,20 +1838,20 @@
     'Sale Line - Ignored Move'
     __name__ = 'sale.line-ignored-stock.move'
     _table = 'sale_line_moves_ignored_rel'
-    sale_line = fields.Many2One('sale.line', 'Sale Line', ondelete='CASCADE',
-            select=True, required=True)
-    move = fields.Many2One('stock.move', 'Move', ondelete='RESTRICT',
-            select=True, required=True)
+    sale_line = fields.Many2One(
+        'sale.line', "Sale Line", ondelete='CASCADE', required=True)
+    move = fields.Many2One(
+        'stock.move', "Move", ondelete='RESTRICT', required=True)
 
 
 class SaleLineRecreatedMove(ModelSQL):
     'Sale Line - Recreated Move'
     __name__ = 'sale.line-recreated-stock.move'
     _table = 'sale_line_moves_recreated_rel'
-    sale_line = fields.Many2One('sale.line', 'Sale Line', ondelete='CASCADE',
-            select=True, required=True)
-    move = fields.Many2One('stock.move', 'Move', ondelete='RESTRICT',
-            select=True, required=True)
+    sale_line = fields.Many2One(
+        'sale.line', "Sale Line", ondelete='CASCADE', required=True)
+    move = fields.Many2One(
+        'stock.move', "Move", ondelete='RESTRICT', required=True)
 
 
 class SaleReport(CompanyReport):
diff -r 861fdb16ed8f -r 87d018dd40a6 stock.py
--- a/stock.py  Mon Oct 10 18:26:00 2022 +0200
+++ b/stock.py  Tue Oct 11 00:44:50 2022 +0200
@@ -109,7 +109,8 @@
 
 class Move(metaclass=PoolMeta):
     __name__ = 'stock.move'
-    sale = fields.Function(fields.Many2One('sale.sale', 'Sale', select=True),
+    sale = fields.Function(
+        fields.Many2One('sale.sale', "Sale"),
         'get_sale', searcher='search_sale')
     sale_exception_state = fields.Function(fields.Selection([
         ('', ''),

Reply via email to