[fix] account_statement_ext: trigger related fields

This commit is contained in:
unknown
2014-03-12 16:20:42 +01:00
committed by Yannick Vaucher
3 changed files with 130 additions and 22 deletions

View File

@@ -20,7 +20,7 @@
##############################################################################
{'name': "Bank statement extension and profiles",
'version': '1.3.3',
'version': '1.3.4',
'author': 'Camptocamp',
'maintainer': 'Camptocamp',
'category': 'Finance',
@@ -79,7 +79,7 @@
'security/ir.model.access.csv',
'security/ir_rule.xml'],
'demo_xml': [],
'test': [],
'test': ['test/test_profile_related_fields.yml'],
'installable': True,
'images': [],
'auto_install': False,

View File

@@ -159,6 +159,23 @@ class AccountBankStatement(Model):
return profile_ids[0] if profile_ids else False
def _get_statement_from_profile(self, cr, uid, profile_ids, context=None):
"""Stored function field trigger.
Weirdness warning: we are in the class account.bank.statement, but
when the ORM calls this, self is an account.statement.profile.
Returns a list of account.bank.statement ids to recompute.
"""
triggered = []
for profile in self.browse(cr, uid, profile_ids, context=context):
triggered += [st.id for st in profile.bank_statement_ids]
return triggered
def _us(self, cr, uid, ids, context=None):
return ids
_columns = {
'profile_id': fields.many2one(
'account.statement.profile',
@@ -166,28 +183,41 @@ class AccountBankStatement(Model):
required=True,
states={'draft': [('readonly', False)]}),
'credit_partner_id': fields.related(
'profile_id',
'partner_id',
type='many2one',
relation='res.partner',
string='Financial Partner',
store=True,
readonly=True),
'profile_id',
'partner_id',
type='many2one',
relation='res.partner',
string='Financial Partner',
store={
'account.bank.statement': (_us, ['profile_id'], 10),
'account.statement.profile': (
_get_statement_from_profile, ['partner_id'], 10),
},
readonly=True),
'balance_check': fields.related(
'profile_id',
'balance_check',
type='boolean',
string='Balance check',
store=True,
readonly=True),
'profile_id',
'balance_check',
type='boolean',
string='Balance check',
store={
'account.bank.statement': (_us, ['profile_id'], 10),
'account.statement.profile': (
_get_statement_from_profile, ['balance_check'], 10),
},
readonly=True
),
'journal_id': fields.related(
'profile_id',
'journal_id',
type='many2one',
relation='account.journal',
string='Journal',
store=True,
readonly=True),
'profile_id',
'journal_id',
type='many2one',
relation='account.journal',
string='Journal',
store={
'account.bank.statement': (_us, ['profile_id'], 10),
'account.statement.profile': (
_get_statement_from_profile, ['journal_id'], 10),
},
readonly=True),
'period_id': fields.many2one(
'account.period',
'Period',

View File

@@ -0,0 +1,78 @@
-
In order to test the related fields in the profile, I first need to create a profile
-
!record {model: account.statement.profile, id: profile_test1}:
name: Bank EUR Profile
journal_id: account.bank_journal
commission_account_id: account.a_expense
company_id: base.main_company
partner_id: base.res_partner_1
journal_id: account.check_journal
balance_check: True
-
I create a second profile
-
!record {model: account.statement.profile, id: profile_test2}:
name: Second profile
journal_id: account.bank_journal
commission_account_id: account.a_expense
company_id: base.main_company
partner_id: base.res_partner_3
journal_id: account.bank_journal
balance_check: True
-
Now I create a statement.
-
!record {model: account.bank.statement, id: statement_test1}:
name: Statement 1
profile_id: profile_test1
company_id: base.main_company
-
Now I check that the related data come from the profile
-
!assert {model: account.bank.statement, id: statement_test1, string: Initial data should come from the profile}:
- balance_check is True
- credit_partner_id.id == _ref('base.res_partner_1')
- journal_id.id == _ref('account.check_journal')
-
Now I set the balance flag to False in the profile
-
!record {model: account.statement.profile, id: profile_test1}:
balance_check: False
-
It should be false in the statement as well.
-
!assert {model: account.bank.statement, id: statement_test1, string: We should not check the balance}:
- balance_check is False
-
Now I change the journal in the profile
-
!record {model: account.statement.profile, id: profile_test1}:
journal_id: account.cash_journal
-
The journal should propagate to the statement
-
!assert {model: account.bank.statement, id: statement_test1, string: The journal should be updated}:
- journal_id.id == _ref('account.cash_journal')
-
Now I change the partner in the profile
-
!record {model: account.statement.profile, id: profile_test1}:
partner_id: base.res_partner_2
-
The partner should propagate to the statement
-
!assert {model: account.bank.statement, id: statement_test1, string: The partner should be updated}:
- credit_partner_id.id == _ref('base.res_partner_2')
-
Now I change the profile associated to the statement.
-
!record {model: account.bank.statement, id: statement_test1}:
profile_id: profile_test2
-
The statement should receive information from the new statement.
-
!assert {model: account.bank.statement, id: statement_test1, string: All information should be probagated from the new profile}:
- balance_check is True
- credit_partner_id.id == _ref('base.res_partner_3')
- journal_id.id == _ref('account.bank_journal')