mirror of
https://github.com/NaN-tic/trytond-patches.git
synced 2023-12-14 06:03:03 +01:00
193 lines
7.2 KiB
Diff
193 lines
7.2 KiB
Diff
# HG changeset patch
|
|
# User Sergi Almacellas Abellana <sergi@koolpi.com>
|
|
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):
|
|
'''
|