Add missing cls attributes to classmethods which were broken after changeset a958bbb8389d issue 5430 review17191002
126 lines
4.4 KiB
Python
126 lines
4.4 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
from sql import Null
|
|
from sql.conditionals import Case
|
|
|
|
from trytond.model import (ModelView, ModelSQL,
|
|
ModelSingleton, MatchMixin, fields)
|
|
from trytond.pool import Pool
|
|
from trytond.transaction import Transaction
|
|
from trytond.pyson import Eval
|
|
|
|
__all__ = ['Configuration', 'ConfigurationTaxRounding']
|
|
|
|
tax_roundings = [
|
|
('document', 'Per Document'),
|
|
('line', 'Per Line'),
|
|
]
|
|
|
|
|
|
class Configuration(ModelSingleton, ModelSQL, ModelView):
|
|
'Account Configuration'
|
|
__name__ = 'account.configuration'
|
|
default_account_receivable = fields.Function(fields.Many2One(
|
|
'account.account', 'Default Account Receivable',
|
|
domain=[
|
|
('kind', '=', 'receivable'),
|
|
('company', '=', Eval('context', {}).get('company', -1)),
|
|
]),
|
|
'get_account', setter='set_account')
|
|
default_account_payable = fields.Function(fields.Many2One(
|
|
'account.account', 'Default Account Payable',
|
|
domain=[
|
|
('kind', '=', 'payable'),
|
|
('company', '=', Eval('context', {}).get('company', -1)),
|
|
]),
|
|
'get_account', setter='set_account')
|
|
tax_rounding = fields.Function(fields.Selection(tax_roundings,
|
|
'Tax Rounding'), 'on_change_with_tax_rounding')
|
|
tax_roundings = fields.One2Many('account.configuration.tax_rounding',
|
|
'configuration', 'Tax Roundings')
|
|
|
|
@classmethod
|
|
def default_tax_rounding(cls):
|
|
return 'document'
|
|
|
|
@classmethod
|
|
def _get_account_field(cls, name):
|
|
pool = Pool()
|
|
ModelField = pool.get('ir.model.field')
|
|
if name in ['default_account_receivable', 'default_account_payable']:
|
|
field, = ModelField.search([
|
|
('model.model', '=', 'party.party'),
|
|
('name', '=', name[8:]),
|
|
], limit=1)
|
|
return field
|
|
|
|
def get_account(self, name):
|
|
pool = Pool()
|
|
Property = pool.get('ir.property')
|
|
company_id = Transaction().context.get('company')
|
|
account_field = self._get_account_field(name)
|
|
properties = Property.search([
|
|
('field', '=', account_field.id),
|
|
('res', '=', None),
|
|
('company', '=', company_id),
|
|
], limit=1)
|
|
if properties:
|
|
prop, = properties
|
|
return prop.value.id
|
|
|
|
@classmethod
|
|
def set_account(cls, configurations, name, value):
|
|
pool = Pool()
|
|
Property = pool.get('ir.property')
|
|
company_id = Transaction().context.get('company')
|
|
account_field = cls._get_account_field(name)
|
|
properties = Property.search([
|
|
('field', '=', account_field.id),
|
|
('res', '=', None),
|
|
('company', '=', company_id),
|
|
])
|
|
Property.delete(properties)
|
|
if value:
|
|
Property.create([{
|
|
'field': account_field.id,
|
|
'value': 'account.account,%s' % value,
|
|
'company': company_id,
|
|
}])
|
|
|
|
@fields.depends('tax_roundings')
|
|
def on_change_with_tax_rounding(self, name=None, pattern=None):
|
|
context = Transaction().context
|
|
if pattern is None:
|
|
pattern = {}
|
|
pattern = pattern.copy()
|
|
pattern['company'] = context.get('company')
|
|
|
|
for line in self.tax_roundings:
|
|
if line.match(pattern):
|
|
return line.method
|
|
return self.default_tax_rounding()
|
|
|
|
|
|
class ConfigurationTaxRounding(ModelSQL, ModelView, MatchMixin):
|
|
'Account Configuration Tax Rounding'
|
|
__name__ = 'account.configuration.tax_rounding'
|
|
configuration = fields.Many2One('account.configuration', 'Configuration',
|
|
required=True, ondelete='CASCADE')
|
|
sequence = fields.Integer('Sequence')
|
|
company = fields.Many2One('company.company', 'Company')
|
|
method = fields.Selection(tax_roundings, 'Method', required=True)
|
|
|
|
@classmethod
|
|
def __setup__(cls):
|
|
super(ConfigurationTaxRounding, cls).__setup__()
|
|
cls._order.insert(0, ('sequence', 'ASC'))
|
|
|
|
@classmethod
|
|
def order_sequence(cls, tables):
|
|
table, _ = tables[None]
|
|
return [Case((table.sequence == Null, 0), else_=1), table.sequence]
|
|
|
|
@classmethod
|
|
def default_method(cls):
|
|
return 'document'
|