changeset 3b2835b38d07 in modules/sale_opportunity:default
details:
https://hg.tryton.org/modules/sale_opportunity?cmd=changeset&node=3b2835b38d07
description:
Use declarative index definition for ModelSQL
issue5757
review361251002
diffstat:
opportunity.py | 44 ++++++++++++++++++++++++++++----------------
1 files changed, 28 insertions(+), 16 deletions(-)
diffs (98 lines):
diff -r 91fc5324c8c3 -r 3b2835b38d07 opportunity.py
--- a/opportunity.py Wed Sep 14 19:27:28 2022 +0200
+++ b/opportunity.py Tue Oct 11 00:44:50 2022 +0200
@@ -11,7 +11,7 @@
from trytond.ir.attachment import AttachmentCopyMixin
from trytond.ir.note import NoteCopyMixin
from trytond.model import (
- ModelSQL, ModelView, Workflow, fields, sequence_ordered)
+ Index, ModelSQL, ModelView, Workflow, fields, sequence_ordered)
from trytond.model.exceptions import AccessError
from trytond.modules.company.model import employee_field, set_employee
from trytond.modules.currency.fields import Monetary
@@ -36,10 +36,10 @@
['converted', 'won', 'lost', 'cancelled']),
}
- number = fields.Char('Number', readonly=True, required=True, select=True)
- reference = fields.Char('Reference', select=True)
+ number = fields.Char("Number", readonly=True, required=True)
+ reference = fields.Char("Reference")
party = fields.Many2One(
- 'party.party', "Party", select=True,
+ 'party.party', "Party",
states={
'readonly': Eval('state').in_(['converted', 'lost', 'cancelled']),
'required': ~Eval('state').in_(['lead', 'lost', 'cancelled']),
@@ -57,12 +57,11 @@
'related_party': Eval('party'),
},
depends=['party', 'company'])
- address = fields.Many2One('party.address', 'Address',
- domain=[('party', '=', Eval('party'))],
- select=True,
- states=_states_stop)
- company = fields.Many2One('company.company', 'Company', required=True,
- select=True,
+ address = fields.Many2One(
+ 'party.address', "Address", states=_states_stop,
+ domain=[('party', '=', Eval('party'))])
+ company = fields.Many2One(
+ 'company.company', "Company", required=True,
states={
'readonly': _states_stop['readonly'] | Eval('party', True),
},
@@ -87,9 +86,8 @@
'required': ~Eval('state').in_(['lead', 'lost', 'cancelled']),
},
domain=[('company', '=', Eval('company'))])
- start_date = fields.Date('Start Date', required=True, select=True,
- states=_states_start)
- end_date = fields.Date('End Date', select=True, states=_states_stop)
+ start_date = fields.Date("Start Date", required=True, states=_states_start)
+ end_date = fields.Date("End Date", states=_states_stop)
description = fields.Char('Description', states=_states_stop)
comment = fields.Text('Comment', states=_states_stop)
lines = fields.One2Many('sale.opportunity.line', 'opportunity', 'Lines',
@@ -119,7 +117,7 @@
('won', "Won"),
('lost', "Lost"),
('cancelled', "Cancelled"),
- ], "State", required=True, select=True, sort=False, readonly=True)
+ ], "State", required=True, sort=False, readonly=True)
del _states_start
del _states_stop
@@ -185,7 +183,21 @@
@classmethod
def __setup__(cls):
+ cls.number.search_unaccented = False
+ cls.reference.search_unaccented = False
super(SaleOpportunity, cls).__setup__()
+ t = cls.__table__()
+ cls._sql_indexes.update({
+ Index(t, (t.reference, Index.Similarity())),
+ Index(t, (t.party, Index.Equality())),
+ Index(
+ t,
+ (t.start_date, Index.Range(order='DESC')),
+ (t.end_date, Index.Range(order='DESC'))),
+ Index(
+ t, (t.state, Index.Equality()),
+ where=t.state.in_(['lead', 'opportunity'])),
+ })
cls._order.insert(0, ('start_date', 'DESC'))
cls._transitions |= set((
('lead', 'opportunity'),
@@ -528,8 +540,8 @@
['converted', 'won', 'lost', 'cancelled']),
}
- opportunity = fields.Many2One('sale.opportunity', 'Opportunity',
- ondelete='CASCADE', select=True, required=True,
+ opportunity = fields.Many2One(
+ 'sale.opportunity', "Opportunity", ondelete='CASCADE', required=True,
states={
'readonly': _states['readonly'] & Bool(Eval('opportunity')),
})