diff --git a/party.py b/party.py index 284cadad8c..913f837a4a 100644 --- a/party.py +++ b/party.py @@ -69,7 +69,7 @@ class PartySaleMethod(ModelSQL, CompanyValueMixin): __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 @@ class PartyCustomerCurrency(ModelSQL, ValueMixin): "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 --git a/product.py b/product.py index a982fe0ffc..abe4952278 100644 --- a/product.py +++ b/product.py @@ -111,7 +111,7 @@ class ProductLeadTime(ModelSQL, ValueMixin): __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 --git a/sale.py b/sale.py index 7860666a4b..7e26e9f672 100644 --- a/sale.py +++ b/sale.py @@ -12,7 +12,8 @@ from trytond.i18n import gettext 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 @@ class Sale( __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 @@ class Sale( | 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 @@ class Sale( 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 @@ class Sale( 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 @@ class Sale( @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 @@ class SaleIgnoredInvoice(ModelSQL): '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 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView): ('subtotal', 'Subtotal'), ('title', 'Title'), ('comment', 'Comment'), - ], 'Type', select=True, required=True, + ], "Type", required=True, states={ 'readonly': Eval('sale_state') != 'draft', }) @@ -1797,10 +1819,10 @@ class SaleLineTax(ModelSQL): '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 @@ class SaleLineIgnoredMove(ModelSQL): '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 --git a/stock.py b/stock.py index e2825673de..ba210b304d 100644 --- a/stock.py +++ b/stock.py @@ -109,7 +109,8 @@ def process_sale_move(func): 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([ ('', ''),