Use declarative index definition for ModelSQL
issue5757 review361251002
This commit is contained in:
+31
-20
@@ -15,7 +15,7 @@ from sql.conditionals import Case, Coalesce
|
||||
from trytond import backend
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import (
|
||||
Check, ModelSQL, ModelView, Unique, fields, sequence_ordered, tree)
|
||||
Check, Index, ModelSQL, ModelView, Unique, fields, sequence_ordered, tree)
|
||||
from trytond.model.exceptions import AccessError
|
||||
from trytond.modules.currency.fields import Monetary
|
||||
from trytond.pool import Pool
|
||||
@@ -506,8 +506,8 @@ def AccountMixin(template=False):
|
||||
class Mixin:
|
||||
__slots__ = ()
|
||||
_order_name = 'rec_name'
|
||||
name = fields.Char('Name', required=True, select=True)
|
||||
code = fields.Char('Code', select=True)
|
||||
name = fields.Char("Name", required=True)
|
||||
code = fields.Char("Code")
|
||||
|
||||
closed = fields.Boolean(
|
||||
"Closed",
|
||||
@@ -659,8 +659,8 @@ class AccountTemplate(
|
||||
'account.account.type.template', "Debit Type", ondelete="RESTRICT")
|
||||
credit_type = fields.Many2One(
|
||||
'account.account.type.template', "Credit Type", ondelete="RESTRICT")
|
||||
parent = fields.Many2One('account.account.template', 'Parent', select=True,
|
||||
ondelete="RESTRICT")
|
||||
parent = fields.Many2One(
|
||||
'account.account.template', "Parent", ondelete="RESTRICT")
|
||||
childs = fields.One2Many('account.account.template', 'parent', 'Children')
|
||||
taxes = fields.Many2Many('account.account.template-account.tax.template',
|
||||
'account', 'tax', 'Default Taxes',
|
||||
@@ -826,10 +826,12 @@ class AccountTemplateTaxTemplate(ModelSQL):
|
||||
'Account Template - Tax Template'
|
||||
__name__ = 'account.account.template-account.tax.template'
|
||||
_table = 'account_account_template_tax_rel'
|
||||
account = fields.Many2One('account.account.template', 'Account Template',
|
||||
ondelete='CASCADE', select=True, required=True)
|
||||
tax = fields.Many2One('account.tax.template', 'Tax Template',
|
||||
ondelete='RESTRICT', select=True, required=True)
|
||||
account = fields.Many2One(
|
||||
'account.account.template', "Account Template",
|
||||
ondelete='CASCADE', required=True)
|
||||
tax = fields.Many2One(
|
||||
'account.tax.template', "Tax Template",
|
||||
ondelete='RESTRICT', required=True)
|
||||
|
||||
|
||||
class Account(
|
||||
@@ -888,13 +890,13 @@ class Account(
|
||||
],
|
||||
help="The type used if not empty and debit < credit.")
|
||||
parent = fields.Many2One(
|
||||
'account.account', 'Parent', select=True,
|
||||
'account.account', "Parent",
|
||||
left="left", right="right", ondelete="RESTRICT", states=_states,
|
||||
domain=[
|
||||
('company', '=', Eval('company', -1)),
|
||||
])
|
||||
left = fields.Integer('Left', required=True, select=True)
|
||||
right = fields.Integer('Right', required=True, select=True)
|
||||
left = fields.Integer("Left", required=True)
|
||||
right = fields.Integer("Right", required=True)
|
||||
childs = fields.One2Many(
|
||||
'account.account', 'parent', "Children",
|
||||
domain=[
|
||||
@@ -968,6 +970,11 @@ class Account(
|
||||
('only_one_debit_credit_types', Check(
|
||||
table, (table.debit_type + table.credit_type) == Null),
|
||||
'account.msg_only_one_debit_credit_types'))
|
||||
cls._sql_indexes.add(
|
||||
Index(
|
||||
table,
|
||||
(table.left, Index.Range()),
|
||||
(table.right, Index.Range())))
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
@@ -1620,10 +1627,9 @@ class AccountDeferral(ModelSQL, ModelView):
|
||||
It is used to deferral the debit/credit of account by fiscal year.
|
||||
'''
|
||||
__name__ = 'account.account.deferral'
|
||||
account = fields.Many2One('account.account', 'Account', required=True,
|
||||
select=True)
|
||||
fiscalyear = fields.Many2One('account.fiscalyear', 'Fiscal Year',
|
||||
required=True, select=True)
|
||||
account = fields.Many2One('account.account', "Account", required=True)
|
||||
fiscalyear = fields.Many2One(
|
||||
'account.fiscalyear', "Fiscal Year", required=True)
|
||||
debit = Monetary(
|
||||
"Debit", currency='currency', digits='currency', required=True)
|
||||
credit = Monetary(
|
||||
@@ -1651,6 +1657,11 @@ class AccountDeferral(ModelSQL, ModelView):
|
||||
('deferral_uniq', Unique(t, t.account, t.fiscalyear),
|
||||
'account.msg_deferral_unique'),
|
||||
]
|
||||
cls._sql_indexes.add(
|
||||
Index(
|
||||
t,
|
||||
(t.fiscalyear, Index.Equality()),
|
||||
(t.account, Index.Equality())))
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
@@ -1758,10 +1769,10 @@ class AccountTax(ModelSQL):
|
||||
'Account - Tax'
|
||||
__name__ = 'account.account-account.tax'
|
||||
_table = 'account_account_tax_rel'
|
||||
account = fields.Many2One('account.account', 'Account', ondelete='CASCADE',
|
||||
select=True, required=True)
|
||||
tax = fields.Many2One('account.tax', 'Tax', ondelete='RESTRICT',
|
||||
select=True, required=True)
|
||||
account = fields.Many2One(
|
||||
'account.account', "Account", ondelete='CASCADE', required=True)
|
||||
tax = fields.Many2One(
|
||||
'account.tax', "Tax", ondelete='RESTRICT', required=True)
|
||||
|
||||
|
||||
class AccountContext(ModelView):
|
||||
|
||||
+1
-1
@@ -49,7 +49,7 @@ class FiscalYear(Workflow, ModelSQL, ModelView):
|
||||
('company', '=', Eval('company')),
|
||||
])
|
||||
company = fields.Many2One(
|
||||
'company.company', "Company", required=True, select=True)
|
||||
'company.company', "Company", required=True)
|
||||
icon = fields.Function(fields.Char("Icon"), 'get_icon')
|
||||
|
||||
@classmethod
|
||||
|
||||
+1
-1
@@ -177,7 +177,7 @@ class JournalSequence(ModelSQL, CompanyValueMixin):
|
||||
"Journal Sequence"
|
||||
__name__ = 'account.journal.sequence'
|
||||
journal = fields.Many2One(
|
||||
'account.journal', "Journal", ondelete='CASCADE', select=True,
|
||||
'account.journal', "Journal", ondelete='CASCADE',
|
||||
context={
|
||||
'company': Eval('company', -1),
|
||||
},
|
||||
|
||||
@@ -14,7 +14,8 @@ from sql.operators import Exists
|
||||
from trytond import backend
|
||||
from trytond.config import config
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import Check, DeactivableMixin, ModelSQL, ModelView, fields
|
||||
from trytond.model import (
|
||||
Check, DeactivableMixin, Index, ModelSQL, ModelView, fields)
|
||||
from trytond.model.exceptions import AccessError
|
||||
from trytond.modules.currency.fields import Monetary
|
||||
from trytond.pool import Pool
|
||||
@@ -55,8 +56,7 @@ class Move(ModelSQL, ModelView):
|
||||
('state', '=', 'open'),
|
||||
()),
|
||||
],
|
||||
states=_MOVE_STATES,
|
||||
select=True)
|
||||
states=_MOVE_STATES)
|
||||
journal = fields.Many2One('account.journal', 'Journal', required=True,
|
||||
states={
|
||||
'readonly': Eval('number') & Eval('journal'),
|
||||
@@ -65,8 +65,7 @@ class Move(ModelSQL, ModelView):
|
||||
'company': Eval('company', -1),
|
||||
},
|
||||
depends={'company'})
|
||||
date = fields.Date('Effective Date', required=True, select=True,
|
||||
states=_MOVE_STATES)
|
||||
date = fields.Date('Effective Date', required=True, states=_MOVE_STATES)
|
||||
post_date = fields.Date('Post Date', readonly=True)
|
||||
description = fields.Char('Description', states=_MOVE_STATES)
|
||||
origin = fields.Reference('Origin', selection='get_origin',
|
||||
@@ -74,7 +73,7 @@ class Move(ModelSQL, ModelView):
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('posted', 'Posted'),
|
||||
], 'State', required=True, readonly=True, select=True, sort=False)
|
||||
], 'State', required=True, readonly=True, sort=False)
|
||||
lines = fields.One2Many('account.move.line', 'move', 'Lines',
|
||||
states=_MOVE_STATES, depends={'company'},
|
||||
context={
|
||||
@@ -86,6 +85,7 @@ class Move(ModelSQL, ModelView):
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Move, cls).__setup__()
|
||||
t = cls.__table__()
|
||||
cls.create_date.select = True
|
||||
cls._check_modify_exclude = ['lines']
|
||||
cls._order.insert(0, ('date', 'DESC'))
|
||||
@@ -100,6 +100,14 @@ class Move(ModelSQL, ModelView):
|
||||
'post': RPC(
|
||||
readonly=False, instantiate=0, fresh_session=True),
|
||||
})
|
||||
cls._sql_indexes.update({
|
||||
Index(t, (t.period, Index.Equality())),
|
||||
Index(t, (t.date, Index.Range()), (t.number, Index.Range())),
|
||||
Index(
|
||||
t,
|
||||
(t.journal, Index.Equality()),
|
||||
(t.period, Index.Equality())),
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
@@ -125,9 +133,6 @@ class Move(ModelSQL, ModelView):
|
||||
where=period.id == sql_table.period)
|
||||
cursor.execute(*sql_table.update([sql_table.company], [value]))
|
||||
|
||||
table = cls.__table_handler__(module_name)
|
||||
table.index_action(['journal', 'period'], 'add')
|
||||
|
||||
@classmethod
|
||||
def order_number(cls, tables):
|
||||
table, _ = tables[None]
|
||||
@@ -491,15 +496,22 @@ class Reconciliation(ModelSQL, ModelView):
|
||||
domain=[
|
||||
('move.company', '=', Eval('company', -1)),
|
||||
])
|
||||
date = fields.Date('Date', required=True, select=True,
|
||||
date = fields.Date(
|
||||
"Date", required=True,
|
||||
help='Highest date of the reconciled lines.')
|
||||
delegate_to = fields.Many2One(
|
||||
'account.move.line', "Delegate To", ondelete="RESTRICT", select=True,
|
||||
'account.move.line', "Delegate To", ondelete="RESTRICT",
|
||||
domain=[
|
||||
('move.company', '=', Eval('company', -1)),
|
||||
],
|
||||
help="The line to which the reconciliation status is delegated.")
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
t = cls.__table__()
|
||||
cls._sql_indexes.add(Index(t, (t.date, Index.Range())))
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
cursor = Transaction().connection.cursor()
|
||||
@@ -757,8 +769,9 @@ class Line(MoveLineMixin, ModelSQL, ModelView):
|
||||
context={
|
||||
'company': Eval('company', -1),
|
||||
},
|
||||
select=True, states=_states, depends={'company'})
|
||||
move = fields.Many2One('account.move', 'Move', select=True, required=True,
|
||||
states=_states, depends={'company'})
|
||||
move = fields.Many2One(
|
||||
'account.move', "Move", required=True,
|
||||
ondelete='CASCADE',
|
||||
states={
|
||||
'required': False,
|
||||
@@ -819,7 +832,8 @@ class Line(MoveLineMixin, ModelSQL, ModelView):
|
||||
second_currency_required = fields.Function(
|
||||
fields.Many2One('currency.currency', "Second Currency Required"),
|
||||
'on_change_with_second_currency_required')
|
||||
party = fields.Many2One('party.party', 'Party', select=True,
|
||||
party = fields.Many2One(
|
||||
'party.party', "Party",
|
||||
states={
|
||||
'required': Eval('party_required', False),
|
||||
'invisible': ~Eval('party_required', False),
|
||||
@@ -844,9 +858,10 @@ class Line(MoveLineMixin, ModelSQL, ModelView):
|
||||
state = fields.Selection([
|
||||
('draft', 'Draft'),
|
||||
('valid', 'Valid'),
|
||||
], 'State', readonly=True, required=True, select=True, sort=False)
|
||||
reconciliation = fields.Many2One('account.move.reconciliation',
|
||||
'Reconciliation', readonly=True, ondelete='SET NULL', select=True)
|
||||
], 'State', readonly=True, required=True, sort=False)
|
||||
reconciliation = fields.Many2One(
|
||||
'account.move.reconciliation', 'Reconciliation',
|
||||
readonly=True, ondelete='SET NULL')
|
||||
reconciliations_delegated = fields.One2Many(
|
||||
'account.move.reconciliation', 'delegate_to',
|
||||
"Reconciliations Delegated", readonly=True)
|
||||
@@ -896,18 +911,25 @@ class Line(MoveLineMixin, ModelSQL, ModelView):
|
||||
# Do not cache default_date nor default_move
|
||||
cls.__rpc__['default_get'].cache = None
|
||||
cls._order[0] = ('id', 'DESC')
|
||||
|
||||
@classmethod
|
||||
def __register__(cls, module_name):
|
||||
super(Line, cls).__register__(module_name)
|
||||
|
||||
table = cls.__table__()
|
||||
table_h = cls.__table_handler__(module_name)
|
||||
# Index for General Ledger
|
||||
table_h.index_action(['move', 'account'], 'add')
|
||||
# Index for account.account.party
|
||||
table_h.index_action(
|
||||
['account', 'party', 'id'], 'add', where=table.party != Null)
|
||||
cls._sql_indexes.update({
|
||||
Index(
|
||||
table,
|
||||
(table.account, Index.Equality()),
|
||||
(table.party, Index.Equality())),
|
||||
Index(table, (table.reconciliation, Index.Equality())),
|
||||
# Index for General Ledger
|
||||
Index(
|
||||
table,
|
||||
(table.move, Index.Equality()),
|
||||
(table.account, Index.Equality())),
|
||||
# Index for account.account.party
|
||||
Index(
|
||||
table,
|
||||
(table.account, Index.Equality()),
|
||||
(table.party, Index.Equality()),
|
||||
(table.id, Index.Equality()),
|
||||
where=table.party != Null),
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def default_date(cls):
|
||||
|
||||
@@ -293,7 +293,7 @@ class PartyAccount(ModelSQL, CompanyValueMixin):
|
||||
"Party Account"
|
||||
__name__ = 'party.party.account'
|
||||
party = fields.Many2One(
|
||||
'party.party', "Party", ondelete='CASCADE', select=True,
|
||||
'party.party', "Party", ondelete='CASCADE',
|
||||
context={
|
||||
'company': Eval('company', -1),
|
||||
},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
from trytond.const import OPERATORS
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import ModelSQL, ModelView, Workflow, fields
|
||||
from trytond.model import Index, ModelSQL, ModelView, Workflow, fields
|
||||
from trytond.model.exceptions import AccessError
|
||||
from trytond.pool import Pool
|
||||
from trytond.pyson import Eval, Id
|
||||
@@ -23,13 +23,11 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
__name__ = 'account.period'
|
||||
name = fields.Char('Name', required=True)
|
||||
start_date = fields.Date('Starting Date', required=True, states=_STATES,
|
||||
domain=[('start_date', '<=', Eval('end_date', None))],
|
||||
select=True)
|
||||
domain=[('start_date', '<=', Eval('end_date', None))])
|
||||
end_date = fields.Date('Ending Date', required=True, states=_STATES,
|
||||
domain=[('end_date', '>=', Eval('start_date', None))],
|
||||
select=True)
|
||||
fiscalyear = fields.Many2One('account.fiscalyear', 'Fiscal Year',
|
||||
required=True, states=_STATES, select=True)
|
||||
domain=[('end_date', '>=', Eval('start_date', None))])
|
||||
fiscalyear = fields.Many2One(
|
||||
'account.fiscalyear', "Fiscal Year", required=True, states=_STATES)
|
||||
state = fields.Selection([
|
||||
('open', 'Open'),
|
||||
('close', 'Close'),
|
||||
@@ -48,7 +46,7 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
('standard', 'Standard'),
|
||||
('adjustment', 'Adjustment'),
|
||||
], 'Type', required=True,
|
||||
states=_STATES, select=True)
|
||||
states=_STATES)
|
||||
company = fields.Function(fields.Many2One('company.company', 'Company',),
|
||||
'on_change_with_company', searcher='search_company')
|
||||
icon = fields.Function(fields.Char("Icon"), 'get_icon')
|
||||
@@ -56,7 +54,14 @@ class Period(Workflow, ModelSQL, ModelView):
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super(Period, cls).__setup__()
|
||||
t = cls.__table__()
|
||||
cls.__access__.add('fiscalyear')
|
||||
cls._sql_indexes.add(
|
||||
Index(
|
||||
t,
|
||||
(t.start_date, Index.Range()),
|
||||
(t.end_date, Index.Range()),
|
||||
order='DESC'))
|
||||
cls._order.insert(0, ('start_date', 'DESC'))
|
||||
cls._transitions |= set((
|
||||
('open', 'close'),
|
||||
|
||||
@@ -12,7 +12,7 @@ from sql.conditionals import Case
|
||||
from trytond import backend
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import (
|
||||
DeactivableMixin, MatchMixin, ModelSQL, ModelView, fields,
|
||||
DeactivableMixin, Index, MatchMixin, ModelSQL, ModelView, fields,
|
||||
sequence_ordered, tree)
|
||||
from trytond.model.exceptions import AccessError
|
||||
from trytond.modules.currency.fields import Monetary
|
||||
@@ -129,12 +129,11 @@ class TaxCode(
|
||||
'readonly': (Bool(Eval('template', -1))
|
||||
& ~Eval('template_override', False)),
|
||||
}
|
||||
name = fields.Char('Name', required=True, select=True, states=_states)
|
||||
code = fields.Char('Code', select=True, states=_states)
|
||||
company = fields.Many2One('company.company', 'Company', required=True,
|
||||
select=True)
|
||||
name = fields.Char('Name', required=True, states=_states)
|
||||
code = fields.Char('Code', states=_states)
|
||||
company = fields.Many2One('company.company', 'Company', required=True)
|
||||
parent = fields.Many2One(
|
||||
'account.tax.code', "Parent", select=True, states=_states,
|
||||
'account.tax.code', "Parent", states=_states,
|
||||
domain=[
|
||||
('company', '=', Eval('company', -1)),
|
||||
])
|
||||
@@ -160,7 +159,11 @@ class TaxCode(
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
cls.code.search_unaccented = False
|
||||
super(TaxCode, cls).__setup__()
|
||||
t = cls.__table__()
|
||||
cls._sql_indexes.add(
|
||||
Index(t, (t.code, Index.Similarity())))
|
||||
for date in [cls.start_date, cls.end_date]:
|
||||
date.states = {
|
||||
'readonly': (Bool(Eval('template', -1))
|
||||
@@ -799,8 +802,7 @@ class Tax(sequence_ordered(), ModelSQL, ModelView, DeactivableMixin):
|
||||
domain=[
|
||||
('company', '=', Eval('company', -1)),
|
||||
])
|
||||
company = fields.Many2One(
|
||||
'company.company', "Company", required=True, select=True)
|
||||
company = fields.Many2One('company.company', "Company", required=True)
|
||||
invoice_account = fields.Many2One('account.account', 'Invoice Account',
|
||||
domain=[
|
||||
('company', '=', Eval('company')),
|
||||
@@ -1295,13 +1297,13 @@ class TaxLine(ModelSQL, ModelView):
|
||||
('tax', "Tax"),
|
||||
('base', "Base"),
|
||||
], "Type", required=True)
|
||||
tax = fields.Many2One('account.tax', 'Tax', select=True,
|
||||
ondelete='RESTRICT', required=True,
|
||||
tax = fields.Many2One(
|
||||
'account.tax', "Tax", ondelete='RESTRICT', required=True,
|
||||
domain=[
|
||||
('company', '=', Eval('company', -1)),
|
||||
])
|
||||
move_line = fields.Many2One('account.move.line', 'Move Line',
|
||||
required=True, select=True, ondelete='CASCADE')
|
||||
move_line = fields.Many2One(
|
||||
'account.move.line', "Move Line", required=True, ondelete='CASCADE')
|
||||
company = fields.Function(fields.Many2One('company.company', 'Company'),
|
||||
'on_change_with_company')
|
||||
|
||||
@@ -1469,8 +1471,7 @@ class TaxRule(ModelSQL, ModelView):
|
||||
}
|
||||
name = fields.Char('Name', required=True, states=_states)
|
||||
kind = fields.Selection(KINDS, 'Kind', required=True, states=_states)
|
||||
company = fields.Many2One(
|
||||
'company.company', "Company", required=True, select=True)
|
||||
company = fields.Many2One('company.company', "Company", required=True,)
|
||||
lines = fields.One2Many('account.tax.rule.line', 'rule', 'Lines')
|
||||
template = fields.Many2One('account.tax.rule.template', 'Template')
|
||||
template_override = fields.Boolean("Override Template",
|
||||
@@ -1665,8 +1666,9 @@ class TaxRuleLine(sequence_ordered(), ModelSQL, ModelView, MatchMixin):
|
||||
'readonly': (Bool(Eval('template', -1))
|
||||
& ~Eval('template_override', False)),
|
||||
}
|
||||
rule = fields.Many2One('account.tax.rule', 'Rule', required=True,
|
||||
select=True, ondelete='CASCADE', states=_states)
|
||||
rule = fields.Many2One(
|
||||
'account.tax.rule', "Rule",
|
||||
required=True, ondelete='CASCADE', states=_states)
|
||||
start_date = fields.Date("Starting Date")
|
||||
end_date = fields.Date("Ending Date")
|
||||
group = fields.Many2One('account.tax.group', 'Tax Group',
|
||||
|
||||
Reference in New Issue
Block a user