# HG changeset patch # User Sergi Almacellas Abellana Add company domain issue5104 review19141003 diff -r cc5593b01647 account.py --- a/trytond/trytond/modules/analytic_account/account.py Wed May 11 11:34:37 2016 +0200 +++ b/trytond/trytond/modules/analytic_account/account.py Wed Sep 28 13:57:57 2016 +0200 @@ -8,7 +8,7 @@ from trytond import backend from trytond.model import ModelView, ModelSQL, fields, Unique from trytond.wizard import Wizard, StateView, StateAction, Button -from trytond.pyson import Eval, PYSONEncoder +from trytond.pyson import Eval, If, PYSONEncoder, PYSONDecoder from trytond.transaction import Transaction from trytond.pool import Pool @@ -22,7 +22,7 @@ name = fields.Char('Name', required=True, translate=True, select=True) code = fields.Char('Code', select=True) active = fields.Boolean('Active', select=True) - company = fields.Many2One('company.company', 'Company') + company = fields.Many2One('company.company', 'Company', required=True) currency = fields.Many2One('currency.currency', 'Currency', required=True) currency_digits = fields.Function(fields.Integer('Currency Digits'), 'on_change_with_currency_digits') @@ -33,6 +33,7 @@ ], 'Type', required=True) root = fields.Many2One('analytic_account.account', 'Root', select=True, domain=[ + ('company', '=', Eval('company', -1)), ('parent', '=', None), ('type', '=', 'root'), ], @@ -40,15 +41,22 @@ 'invisible': Eval('type') == 'root', 'required': Eval('type') != 'root', }, - depends=['type']) + depends=['company', 'type']) parent = fields.Many2One('analytic_account.account', 'Parent', select=True, - domain=[('parent', 'child_of', Eval('root'))], + domain=['OR', + ('root', '=', Eval('root', -1)), + ('parent', '=', None), + ], states={ 'invisible': Eval('type') == 'root', 'required': Eval('type') != 'root', }, depends=['root', 'type']) - childs = fields.One2Many('analytic_account.account', 'parent', 'Children') + childs = fields.One2Many('analytic_account.account', 'parent', 'Children', + domain=[ + ('company', '=', Eval('company', -1)), + ], + depends=['company']) balance = fields.Function(fields.Numeric('Balance', digits=(16, Eval('currency_digits', 1)), depends=['currency_digits']), 'get_balance') @@ -311,7 +319,14 @@ __name__ = 'analytic.account.entry' origin = fields.Reference('Origin', selection='get_origin', select=True) root = fields.Many2One('analytic_account.account', 'Root Analytic', - domain=[('type', '=', 'root')]) + domain=[ + If(~Eval('company'), + # No constraint if the origin is not set + (), + ('company', '=', Eval('company', -1))), + ('type', '=', 'root'), + ], + depends=['company']) account = fields.Many2One('analytic_account.account', 'Account', ondelete='RESTRICT', states={ @@ -321,9 +336,11 @@ ('root', '=', Eval('root')), ('type', '=', 'normal'), ], - depends=['root', 'required']) + depends=['root', 'required', 'company']) required = fields.Function(fields.Boolean('Required'), 'on_change_with_required') + company = fields.Function(fields.Many2One('company.company', 'Company'), + 'on_change_with_company', searcher='search_company') @classmethod def __register__(cls, module_name): @@ -386,6 +403,13 @@ return self.root.mandatory return False + def on_change_with_company(self, name=None): + return None + + @classmethod + def search_company(cls, name, clause): + return [] + class AnalyticMixin(ModelSQL): @@ -427,13 +451,21 @@ where=entry.selection == selection_id)) handler.drop_column('analytic_accounts') - @staticmethod - def default_analytic_accounts(): + @classmethod + def analytic_accounts_domain(cls): + context = Transaction().context.copy() + context['context'] = context + return PYSONDecoder(context).decode( + PYSONEncoder().encode(cls.analytic_accounts.domain)) + + @classmethod + def default_analytic_accounts(cls): pool = Pool() AnalyticAccount = pool.get('analytic_account.account') accounts = [] - root_accounts = AnalyticAccount.search([ + root_accounts = AnalyticAccount.search( + cls.analytic_accounts_domain() + [ ('parent', '=', None), ]) for account in root_accounts: @@ -443,11 +475,14 @@ }) return accounts - @staticmethod - def default_analytic_accounts_size(): + @classmethod + def default_analytic_accounts_size(cls): pool = Pool() AnalyticAccount = pool.get('analytic_account.account') - return len(AnalyticAccount.search([('type', '=', 'root')])) + return len(AnalyticAccount.search( + cls.analytic_accounts_domain() + [ + ('type', '=', 'root'), + ])) @classmethod def get_analytic_accounts_size(cls, records, name): @@ -464,12 +499,17 @@ "Check that all mandatory root entries are defined in entries" pool = Pool() Account = pool.get('analytic_account.account') - mandatory_roots = {a for a in Account.search([ + all_mandatory_roots = {a for a in Account.search([ ('type', '=', 'root'), ('mandatory', '=', True), ])} for analytic in analytics: analytic_roots = {e.root for e in analytic.analytic_accounts} + companies = {e.company for e in analytic.analytic_accounts} + mandatory_roots = set() + for mandatory in all_mandatory_roots: + if mandatory.company in companies: + mandatory_roots.add(mandatory) if not mandatory_roots <= analytic_roots: cls.raise_user_error('root_account', { 'name': analytic.rec_name, diff -r cc5593b01647 line.py --- a/trytond/trytond/modules/analytic_account/line.py Wed May 11 11:34:37 2016 +0200 +++ b/trytond/trytond/modules/analytic_account/line.py Wed Sep 28 13:57:57 2016 +0200 @@ -24,7 +24,7 @@ currency_digits = fields.Function(fields.Integer('Currency Digits'), 'on_change_with_currency_digits') company = fields.Function(fields.Many2One('company.company', 'Company'), - 'on_change_with_company') + 'on_change_with_company', searcher='search_company') account = fields.Many2One('analytic_account.account', 'Account', required=True, select=True, domain=[ ('type', '!=', 'view'), @@ -104,6 +104,10 @@ if self.move_line: return self.move_line.account.company.id + @classmethod + def search_company(cls, name, clause): + return [('move_line.account.company',) + tuple(clause[1:])] + @staticmethod def query_get(table): ''' diff -r 4563c00a165b trytond/trytond/modules/analytic_account/account.xml --- a/trytond/trytond/modules/analytic_account/account.xml Mon Nov 02 15:30:50 2015 +0100 +++ b/trytond/trytond/modules/analytic_account/account.xml Mon Nov 14 12:18:34 2016 +0100 @@ -124,5 +124,27 @@ tree analytic_account_entry_tree + + + + + + + + + + + + + + + + + + diff -r 4563c00a165b line.xml --- a/line.xml Mon Nov 02 15:30:50 2015 +0100 +++ b/trytond/trytond/modules/analytic_account/line.xml Mon Nov 14 12:18:34 2016 +0100 @@ -67,5 +67,15 @@ move_line_form + + + + + + + +