Files
tryton/configuration.py
T
Shreedhar Manek ddda74a477 Add missing cls attributes to classmethods
Add missing cls attributes to classmethods which
were broken after changeset a958bbb8389d

issue 5430
review17191002
2016-03-26 20:42:38 +01:00

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'