diff --git a/account_banking/account_banking.py b/account_banking/account_banking.py
index 039e8e062..be2f61e78 100644
--- a/account_banking/account_banking.py
+++ b/account_banking/account_banking.py
@@ -81,6 +81,10 @@ class account_banking_account_settings(osv.osv):
select=True, required=True),
'journal_id': fields.many2one('account.journal', 'Journal',
required=True),
+ 'partner_id': fields.related(
+ 'company_id', 'partner_id',
+ type='many2one', relation='res.partner',
+ string='Partner'),
'default_credit_account_id': fields.many2one(
'account.account', 'Default credit account', select=True,
help=('The account to use when an unexpected payment was signaled. '
@@ -127,44 +131,59 @@ class account_banking_account_settings(osv.osv):
#),
}
- def _default_company(self, cursor, uid, context=None):
- user = self.pool.get('res.users').browse(cursor, uid, uid, context=context)
- if user.company_id:
- return user.company_id.id
- company_ids = self.pool.get('res.company').search(
- cursor, uid, [('parent_id', '=', False)])
- return len(company_ids) == 1 and company_ids[0] or False
-
- def _default_journal(self, cr, uid, context=None):
- domain = [('type', '=', 'bank')]
+ def _default_company(self, cr, uid, context=None):
+ """
+ Return the user's company or the first company found
+ in the database
+ """
user = self.pool.get('res.users').read(
cr, uid, uid, ['company_id'], context=context)
if user['company_id']:
- domain.append(('company_id', '=', user['company_id'][0]))
+ return user['company_id'][0]
+ return self.pool.get('res.company').search(
+ cr, uid, [('parent_id', '=', False)])[0]
+
+ def _default_partner_id(self, cr, uid, context=None, company_id=False):
+ if not company_id:
+ company_id = self._default_company(cr, uid, context=context)
+ return self.pool.get('res.company').read(
+ cr, uid, company_id, ['partner_id'],
+ context=context)['partner_id'][0]
+
+ def _default_journal(self, cr, uid, context=None, company_id=False):
+ if not company_id:
+ company_id = self._default_company(cr, uid, context=context)
journal_ids = self.pool.get('account.journal').search(
- cr, uid, domain)
- return len(journal_ids) == 1 and journal_ids[0] or False
+ cr, uid, [('type', '=', 'bank'), ('company_id', '=', company_id)])
+ return journal_ids and journal_ids[0] or False
- def _default_partner_bank_id(self, cr, uid, context=None):
- user = self.pool.get('res.users').read(
- cr, uid, uid, ['company_id'], context=context)
- if user['company_id']:
- bank_ids = self.pool.get('res.partner.bank').search(
- cr, uid, [('company_id', '=', user['company_id'][0])])
- if len(bank_ids) == 1:
- return bank_ids[0]
- return False
+ def _default_partner_bank_id(
+ self, cr, uid, context=None, company_id=False):
+ if not company_id:
+ company_id = self._default_company(cr, uid, context=context)
+ partner_id = self.pool.get('res.company').read(
+ cr, uid, company_id, ['partner_id'], context=context)['partner_id'][0]
+ bank_ids = self.pool.get('res.partner.bank').search(
+ cr, uid, [('partner_id', '=', partner_id)], context=context)
+ return bank_ids and bank_ids[0] or False
- def _default_debit_account_id(self, cr, uid, context=None):
+ def _default_debit_account_id(
+ self, cr, uid, context=None, company_id=False):
+ localcontext = context and context.copy() or {}
+ localcontext['force_company'] = (
+ company_id or self._default_company(cr, uid, context=context))
account_def = self.pool.get('ir.property').get(
cr, uid, 'property_account_receivable',
- 'res.partner', context=context)
+ 'res.partner', context=localcontext)
return account_def and account_def.id or False
- def _default_credit_account_id(self, cr, uid, context=None):
+ def _default_credit_account_id(self, cr, uid, context=None, company_id=False):
+ localcontext = context and context.copy() or {}
+ localcontext['force_company'] = (
+ company_id or self._default_company(cr, uid, context=context))
account_def = self.pool.get('ir.property').get(
cr, uid, 'property_account_payable',
- 'res.partner', context=context)
+ 'res.partner', context=localcontext)
return account_def and account_def.id or False
def find(self, cr, uid, journal_id, partner_bank_id=False, context=None):
@@ -173,8 +192,35 @@ class account_banking_account_settings(osv.osv):
domain.append(('partner_bank_id','=',partner_bank_id))
return self.search(cr, uid, domain, context=context)
+ def onchange_partner_bank_id(
+ self, cr, uid, ids, partner_bank_id, context=None):
+ values = {}
+ if partner_bank_id:
+ bank = self.pool.get('res.partner.bank').read(
+ cr, uid, partner_bank_id, ['journal_id'], context=context)
+ if bank['journal_id']:
+ values['journal_id'] = bank['journal_id'][0]
+ return {'value': values}
+
+ def onchange_company_id (
+ self, cr, uid, ids, company_id=False, context=None):
+ if not company_id:
+ return {}
+ result = {
+ 'partner_id': self._default_partner_id(
+ cr, uid, company_id=company_id, context=context),
+ 'journal_id': self._default_journal(
+ cr, uid, company_id=company_id, context=context),
+ 'default_debit_account_id': self._default_debit_account_id(
+ cr, uid, company_id=company_id, context=context),
+ 'default_credit_account_id': self._default_credit_account_id(
+ cr, uid, company_id=company_id, context=context),
+ }
+ return {'value': result}
+
_defaults = {
'company_id': _default_company,
+ 'partner_id': _default_partner_id,
'journal_id': _default_journal,
'default_debit_account_id': _default_debit_account_id,
'default_credit_account_id': _default_credit_account_id,
diff --git a/account_banking/account_banking_view.xml b/account_banking/account_banking_view.xml
index 5d3dfda68..4b26380a0 100644
--- a/account_banking/account_banking_view.xml
+++ b/account_banking/account_banking_view.xml
@@ -39,17 +39,31 @@
form
@@ -60,8 +74,8 @@
-
-
+
+