From 2868b922af27eb16639f897de5ce7aff8aec7fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolas=20=C3=89vrard?= Date: Fri, 8 Apr 2022 19:07:12 +0200 Subject: [PATCH] Send only the required fields when fetching a readonly view definition issue11134 review380081002 --- account.py | 24 +++----- invoice.py | 161 ++++++++++++++++++------------------------------ payment_term.py | 9 ++- 3 files changed, 73 insertions(+), 121 deletions(-) diff --git a/account.py b/account.py index 80e0ad13ac..9c0ed2110b 100644 --- a/account.py +++ b/account.py @@ -46,8 +46,7 @@ class FiscalYear(metaclass=PoolMeta): "Invoice Sequences", domain=[ ('company', '=', Eval('company', -1)), - ], - depends=['company']) + ]) @classmethod def __register__(cls, module_name): @@ -167,46 +166,40 @@ class InvoiceSequence(sequence_ordered(), ModelSQL, ModelView, MatchMixin): 'account.fiscalyear', "Fiscal Year", required=True, ondelete='CASCADE', domain=[ ('company', '=', Eval('company', -1)), - ], - depends=['company']) + ]) period = fields.Many2One('account.period', 'Period', domain=[ ('fiscalyear', '=', Eval('fiscalyear')), ('type', '=', 'standard'), - ], - depends=['fiscalyear']) + ]) in_invoice_sequence = fields.Many2One('ir.sequence.strict', 'Supplier Invoice Sequence', required=True, domain=[ ('sequence_type', '=', Id('account_invoice', 'sequence_type_account_invoice')), ('company', '=', Eval('company')), - ], - depends=['company']) + ]) in_credit_note_sequence = fields.Many2One('ir.sequence.strict', 'Supplier Credit Note Sequence', required=True, domain=[ ('sequence_type', '=', Id('account_invoice', 'sequence_type_account_invoice')), ('company', '=', Eval('company')), - ], - depends=['company']) + ]) out_invoice_sequence = fields.Many2One('ir.sequence.strict', 'Customer Invoice Sequence', required=True, domain=[ ('sequence_type', '=', Id('account_invoice', 'sequence_type_account_invoice')), ('company', '=', Eval('company')), - ], - depends=['company']) + ]) out_credit_note_sequence = fields.Many2One('ir.sequence.strict', 'Customer Credit Note Sequence', required=True, domain=[ ('sequence_type', '=', Id('account_invoice', 'sequence_type_account_invoice')), ('company', '=', Eval('company')), - ], - depends=['company']) + ]) @classmethod def __setup__(cls): @@ -240,8 +233,7 @@ class MoveLine(metaclass=PoolMeta): ], states={ 'invisible': Bool(Eval('reconciliation')), - }, - depends=['account', 'party', 'reconciliation']), + }), 'get_invoice_payment', setter='set_invoice_payment', searcher='search_invoice_payment') diff --git a/invoice.py b/invoice.py index 2a5c800a4f..5ff4fe9101 100644 --- a/invoice.py +++ b/invoice.py @@ -50,25 +50,23 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): _states = { 'readonly': Eval('state') != 'draft', } - _depends = ['state'] company = fields.Many2One( 'company.company', 'Company', required=True, select=True, states={ 'readonly': _states['readonly'] | Eval('party', True), - }, - depends=_depends + ['party']) + }) company_party = fields.Function( fields.Many2One( 'party.party', "Company Party", context={ 'company': Eval('company', -1), }, - depends=['company']), + depends={'company'}), 'on_change_with_company_party') tax_identifier = fields.Many2One( 'party.identifier', "Tax Identifier", ondelete='RESTRICT', - states=_states, depends=_depends) + states=_states) type = fields.Selection([ ('out', "Customer"), ('in', "Supplier"), @@ -77,13 +75,11 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): 'readonly': ((Eval('state') != 'draft') | Eval('context', {}).get('type') | (Eval('lines', [0]) & Eval('type'))), - }, depends=['state']) + }) type_name = fields.Function(fields.Char('Type'), 'get_type_name') number = fields.Char('Number', size=None, readonly=True, select=True) - reference = fields.Char('Reference', size=None, states=_states, - depends=_depends) - description = fields.Char('Description', size=None, states=_states, - depends=_depends) + reference = fields.Char('Reference', size=None, states=_states) + description = fields.Char('Description', size=None, states=_states) state = fields.Selection([ ('draft', "Draft"), ('validated', "Validated"), @@ -98,12 +94,10 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): If(Eval('type') == 'in', ['validated', 'posted', 'paid'], ['posted', 'paid'])), - }, - depends=['state']) - accounting_date = fields.Date('Accounting Date', states=_states, - depends=_depends) + }) + accounting_date = fields.Date('Accounting Date', states=_states) payment_term_date = fields.Date( - "Payment Term Date", states=_states, depends=_depends, + "Payment Term Date", states=_states, help="The date from which the payment term is calculated.\n" "Leave empty to use the invoice date.") sequence = fields.Integer("Sequence", readonly=True) @@ -112,39 +106,34 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): context={ 'company': Eval('company', -1), }, - depends=_depends + ['company']) + depends={'company'}) party_tax_identifier = fields.Many2One( 'party.identifier', "Party Tax Identifier", ondelete='RESTRICT', states=_states, domain=[ ('party', '=', Eval('party', -1)), - ], - depends=_depends + ['party']) + ]) party_lang = fields.Function(fields.Char('Party Language'), 'on_change_with_party_lang') invoice_address = fields.Many2One('party.address', 'Invoice Address', - required=True, states=_states, depends=_depends + ['party'], - domain=[('party', '=', Eval('party'))]) + required=True, states=_states, domain=[('party', '=', Eval('party'))]) currency = fields.Many2One('currency.currency', 'Currency', required=True, states={ 'readonly': ( _states['readonly'] | (Eval('lines', [0]) & Eval('currency'))), - }, - depends=_depends) + }) currency_date = fields.Function(fields.Date('Currency Date'), 'on_change_with_currency_date') journal = fields.Many2One( 'account.journal', 'Journal', required=True, states=_states, context={ 'company': Eval('company', -1), - }, - depends=_depends + ['company']) + }, depends={'company'}) move = fields.Many2One('account.move', 'Move', readonly=True, domain=[ ('company', '=', Eval('company', -1)), - ], - depends=['company']) + ]) additional_moves = fields.Many2Many( 'account.invoice-additional-account.move', 'invoice', 'move', "Additional Moves", readonly=True, @@ -153,19 +142,16 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): ], states={ 'invisible': ~Eval('additional_moves'), - }, - depends=['company']) + }) cancel_move = fields.Many2One('account.move', 'Cancel Move', readonly=True, domain=[ ('company', '=', Eval('company', -1)), ], states={ 'invisible': ~Eval('cancel_move'), - }, - depends=['company']) + }) account = fields.Many2One('account.account', 'Account', required=True, - states=_states, depends=_depends + [ - 'type', 'company', 'accounting_date', 'invoice_date'], + states=_states, domain=[ ('closed', '!=', True), ('company', '=', Eval('company', -1)), @@ -179,7 +165,7 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): Eval('invoice_date')), }) payment_term = fields.Many2One('account.invoice.payment_term', - 'Payment Term', states=_states, depends=_depends) + 'Payment Term', states=_states) lines = fields.One2Many('account.invoice.line', 'invoice', 'Lines', domain=[ ('company', '=', Eval('company', -1)), @@ -198,11 +184,10 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): (Eval('state') != 'draft') | ~Eval('company') | ~Eval('currency')), - }, - depends=['state', 'company', 'currency', 'type', 'party']) + }) taxes = fields.One2Many('account.invoice.tax', 'invoice', 'Tax Lines', - states=_states, depends=_depends) - comment = fields.Text('Comment', states=_states, depends=_depends) + states=_states) + comment = fields.Text('Comment', states=_states) origins = fields.Function(fields.Char('Origins'), 'get_origins') untaxed_amount = fields.Function(Monetary( "Untaxed", currency='currency', digits='currency'), @@ -241,8 +226,7 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): states={ 'invisible': Eval('state') == 'paid', 'readonly': Eval('state') != 'posted', - }, - depends=['state', 'account', 'party', 'id', 'type', 'total_amount']) + }) reconciliation_lines = fields.Function(fields.Many2Many( 'account.move.line', None, None, "Payment Lines", states={ @@ -262,7 +246,7 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): allow_cancel = fields.Function( fields.Boolean("Allow Cancel Invoice"), 'get_allow_cancel') - del _states, _depends + del _states @classmethod def __setup__(cls): @@ -281,12 +265,10 @@ class Invoice(Workflow, ModelSQL, ModelView, TaxableMixin): ('type', 'in', cls._journal_types('out')), ('type', 'in', cls._journal_types('in'))), ] - cls.journal.depends += ['type'] cls.tax_identifier.domain = [ ('party', '=', Eval('company_party', -1)), ('type', 'in', cls.tax_identifier_types()), ] - cls.tax_identifier.depends += ['company_party'] cls._transitions |= set(( ('draft', 'validated'), ('validated', 'posted'), @@ -1802,8 +1784,7 @@ class InvoicePaymentLine(ModelSQL): domain=[ ('account', '=', Eval('invoice_account')), ('party', '=', Eval('invoice_party')), - ], - depends=['invoice_account', 'invoice_party']) + ]) @classmethod def __setup__(cls): @@ -1840,7 +1821,6 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): _states = { 'readonly': Eval('invoice_state') != 'draft', } - _depends = ['invoice_state'] invoice = fields.Many2One('account.invoice', 'Invoice', ondelete='CASCADE', select=True, states={ @@ -1848,8 +1828,7 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): & Eval('currency') & Eval('company')), 'invisible': Bool(Eval('context', {}).get('standalone')), 'readonly': _states['readonly'] & Bool(Eval('invoice')), - }, - depends=['invoice_type', 'party', 'company', 'currency'] + _depends) + }) invoice_state = fields.Function( fields.Selection('get_invoice_states', "Invoice State"), 'on_change_with_invoice_state') @@ -1858,8 +1837,7 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): states={ 'readonly': Eval('context', {}).get('type') | Eval('type'), 'required': ~Eval('invoice'), - }, - depends=['invoice', 'type']) + }) party = fields.Many2One('party.party', 'Party', select=True, states={ 'required': ~Eval('invoice'), @@ -1868,15 +1846,15 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): context={ 'company': Eval('company', -1), }, - depends=['invoice', 'company'] + _depends) + depends={'company'}) party_lang = fields.Function(fields.Char('Party Language'), 'on_change_with_party_lang') currency = fields.Many2One( 'currency.currency', "Currency", required=True, - states=_states, depends=_depends) + states=_states) company = fields.Many2One( 'company.company', "Company", required=True, select=True, - states=_states, depends=_depends) + states=_states) type = fields.Selection([ ('line', 'Line'), ('subtotal', 'Subtotal'), @@ -1885,15 +1863,14 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): ], 'Type', select=True, required=True, states={ 'invisible': Bool(Eval('context', {}).get('standalone')), 'readonly': _states['readonly'], - }, depends=_depends) + }) quantity = fields.Float( "Quantity", digits='unit', states={ 'invisible': Eval('type') != 'line', 'required': Eval('type') == 'line', 'readonly': _states['readonly'], - }, - depends=['type'] + _depends) + }) unit = fields.Many2One('product.uom', 'Unit', ondelete='RESTRICT', states={ 'required': Bool(Eval('product')), @@ -1904,8 +1881,7 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): If(Bool(Eval('product_uom_category')), ('category', '=', Eval('product_uom_category')), ('category', '!=', -1)), - ], - depends=['product', 'type', 'product_uom_category'] + _depends) + ]) product = fields.Many2One('product.product', 'Product', ondelete='RESTRICT', domain=[ @@ -1920,7 +1896,7 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): context={ 'company': Eval('company', None), }, - depends=['type', 'product_uom_category', 'company'] + _depends) + depends={'company'}) product_uom_category = fields.Function( fields.Many2One('product.uom.category', 'Product Uom Category'), 'on_change_with_product_uom_category') @@ -1936,23 +1912,21 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): Eval('_parent_invoice', {}).get('accounting_date'), Eval('_parent_invoice', {}).get('invoice_date')), }, - depends=['type', 'company', 'invoice'] + _depends) + depends={'invoice'}) unit_price = Monetary( "Unit Price", currency='currency', digits=price_digits, states={ 'invisible': Eval('type') != 'line', 'required': Eval('type') == 'line', 'readonly': _states['readonly'], - }, - depends=['type'] + _depends) + }) amount = fields.Function(Monetary( "Amount", currency='currency', digits='currency', states={ 'invisible': ~Eval('type').in_(['line', 'subtotal']), - }, - depends=['type']), 'get_amount') - description = fields.Text('Description', size=None, - states=_states, depends=_depends) + }), + 'get_amount') + description = fields.Text('Description', size=None, states=_states) summary = fields.Function(fields.Char('Summary'), 'on_change_with_summary') note = fields.Text('Note') taxes = fields.Many2Many('account.invoice.line-account.tax', @@ -1975,8 +1949,7 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): 'invisible': Eval('type') != 'line', 'readonly': _states['readonly'] | ~Bool(Eval('account')), }, - depends=['type', 'invoice_type', 'company', 'account', 'invoice'] - + _depends) + depends={'invoice'}) taxes_deductible_rate = fields.Numeric( "Taxes Deductible Rate", digits=(14, 10), domain=[ @@ -1985,23 +1958,21 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): ], states={ 'invisible': Eval('invoice_type') != 'in', - }, - depends=['invoice_type']) + }) taxes_date = fields.Date( "Taxes Date", states={ 'invisible': Eval('type') != 'line', 'readonly': _states['readonly'], }, - depends=['type'] + _depends, help="The date at which the taxes are computed.\n" "Leave empty for the accounting date.") invoice_taxes = fields.Function(fields.Many2Many('account.invoice.tax', None, None, 'Invoice Taxes'), 'get_invoice_taxes') origin = fields.Reference('Origin', selection='get_origin', select=True, - states=_states, depends=_depends) + states=_states) - del _states, _depends + del _states @classmethod def __setup__(cls): @@ -2028,7 +1999,6 @@ class InvoiceLine(sequence_ordered(), ModelSQL, ModelView, TaxableMixin): cls._account_domain('out'), cls._account_domain('in')]))), ] - cls.account.depends += ['company', 'invoice_type'] cls.sequence.states.update({ 'invisible': Bool(Eval('context', {}).get('standalone')), }) @@ -2598,19 +2568,17 @@ class InvoiceTax(sequence_ordered(), ModelSQL, ModelView): _states = { 'readonly': Eval('invoice_state') != 'draft', } - _depends = ['invoice_state'] invoice = fields.Many2One('account.invoice', 'Invoice', ondelete='CASCADE', select=True, required=True, states={ 'readonly': _states['readonly'] & Bool(Eval('invoice')), - }, - depends=_depends) + }) invoice_state = fields.Function( fields.Selection('get_invoice_states', "Invoice State"), 'on_change_with_invoice_state') description = fields.Char('Description', size=None, required=True, - states=_states, depends=_depends) + states=_states) sequence_number = fields.Function(fields.Integer('Sequence Number'), 'get_sequence_number') account = fields.Many2One('account.account', 'Account', required=True, @@ -2619,17 +2587,17 @@ class InvoiceTax(sequence_ordered(), ModelSQL, ModelView): ('closed', '!=', True), ('company', '=', Eval('_parent_invoice', {}).get('company', 0)), ], - states=_states, depends=['invoice'] + _depends) + states=_states, depends={'invoice'}) base = Monetary( "Base", currency='currency', digits='currency', required=True, - states=_states, depends=_depends) + states=_states) amount = Monetary( "Amount", currency='currency', digits='currency', required=True, states=_states, - depends=['tax', 'base', 'manual'] + _depends) + depends={'tax', 'base', 'manual'}) currency = fields.Function(fields.Many2One('currency.currency', 'Currency'), 'on_change_with_currency') - manual = fields.Boolean('Manual', states=_states, depends=_depends) + manual = fields.Boolean('Manual', states=_states) tax = fields.Many2One('account.tax', 'Tax', ondelete='RESTRICT', domain=[ @@ -2638,11 +2606,10 @@ class InvoiceTax(sequence_ordered(), ModelSQL, ModelView): states={ 'readonly': ~Eval('manual', False) | _states['readonly'], }, - depends=['manual', 'invoice'] + _depends) - legal_notice = fields.Text("Legal Notice", states=_states, - depends=_depends) + depends={'invoice'}) + legal_notice = fields.Text("Legal Notice", states=_states) - del _states, _depends + del _states @classmethod def __setup__(cls): @@ -2893,23 +2860,21 @@ class PaymentMethod(DeactivableMixin, ModelSQL, ModelView): context={ 'company': Eval('company', -1), }, - depends=['company']) + depends={'company'}) credit_account = fields.Many2One('account.account', "Credit Account", required=True, domain=[ ('type', '!=', None), ('closed', '!=', True), ('company', '=', Eval('company')), - ], - depends=['company']) + ]) debit_account = fields.Many2One('account.account', "Debit Account", required=True, domain=[ ('type', '!=', None), ('closed', '!=', True), ('company', '=', Eval('company')), - ], - depends=['company']) + ]) @classmethod def __setup__(cls): @@ -2994,7 +2959,7 @@ class PayInvoiceStart(ModelView): ('debit_account', '!=', Eval('invoice_account')), ('credit_account', '!=', Eval('invoice_account')), ], - depends=['company', 'amount', 'invoice_account']) + depends={'amount'}) date = fields.Date('Date', required=True) @staticmethod @@ -3019,8 +2984,7 @@ class PayInvoiceAsk(ModelView): states={ 'invisible': Eval('type') != 'writeoff', 'required': Eval('type') == 'writeoff', - }, - depends=['company', 'type']) + }) amount = Monetary( "Payment Amount", currency='currency', digits='currency', readonly=True) @@ -3032,12 +2996,11 @@ class PayInvoiceAsk(ModelView): readonly=True, states={ 'invisible': Eval('type') != 'writeoff', - }, - depends=['type']) + }) currency_writeoff = fields.Many2One('currency.currency', 'Write-Off Currency', readonly=True, states={ 'invisible': Eval('type') != 'writeoff', - }, depends=['type']) + }) lines_to_pay = fields.Many2Many('account.move.line', None, None, 'Lines to Pay', readonly=True) lines = fields.Many2Many('account.move.line', None, None, 'Lines', @@ -3047,13 +3010,12 @@ class PayInvoiceAsk(ModelView): ], states={ 'invisible': Eval('type') != 'writeoff', - }, - depends=['lines_to_pay', 'type']) + }) payment_lines = fields.Many2Many('account.move.line', None, None, 'Payment Lines', readonly=True, states={ 'invisible': Eval('type') != 'writeoff', - }, depends=['type']) + }) company = fields.Many2One('company.company', 'Company', readonly=True) invoice = fields.Many2One('account.invoice', 'Invoice', readonly=True) date = fields.Date('Date', readonly=True) @@ -3258,7 +3220,6 @@ class CreditInvoiceStart(ModelView): 'readonly': ~Eval('with_refund_allowed'), 'invisible': ~Eval('with_refund_allowed'), }, - depends=['with_refund_allowed'], help='If true, the current invoice(s) will be cancelled.') with_refund_allowed = fields.Boolean("With Refund Allowed", readonly=True) diff --git a/payment_term.py b/payment_term.py index 4dcd969a79..ce954ebec1 100644 --- a/payment_term.py +++ b/payment_term.py @@ -96,24 +96,23 @@ class PaymentTermLine(sequence_ordered(), ModelSQL, ModelView): states={ 'invisible': ~Eval('type').in_(['percent', 'percent_on_total']), 'required': Eval('type').in_(['percent', 'percent_on_total']), - }, depends=['type']) + }) divisor = fields.Numeric('Divisor', digits=(10, 14), states={ 'invisible': ~Eval('type').in_(['percent', 'percent_on_total']), 'required': Eval('type').in_(['percent', 'percent_on_total']), - }, depends=['type']) + }) amount = Monetary( "Amount", currency='currency', digits='currency', states={ 'invisible': Eval('type') != 'fixed', 'required': Eval('type') == 'fixed', - }, - depends=['type']) + }) currency = fields.Many2One('currency.currency', 'Currency', states={ 'invisible': Eval('type') != 'fixed', 'required': Eval('type') == 'fixed', - }, depends=['type']) + }) relativedeltas = fields.One2Many( 'account.invoice.payment_term.line.delta', 'line', 'Deltas')