diff --git a/openerp/addons/base/__openerp__.py b/openerp/addons/base/__openerp__.py
index 5b357263569..c36dcecdf30 100644
--- a/openerp/addons/base/__openerp__.py
+++ b/openerp/addons/base/__openerp__.py
@@ -62,7 +62,7 @@
'res/partner/partner_report.xml',
'res/partner/partner_view.xml',
'res/partner/partner_shortcut_data.xml',
- 'res/bank_view.xml',
+ 'res/partner/bank_view.xml',
'res/country_view.xml',
'res/res_currency_view.xml',
'res/partner/crm_view.xml',
@@ -71,11 +71,9 @@
'res/partner/wizard/partner_clear_ids_view.xml',
'res/partner/wizard/partner_wizard_ean_check_view.xml',
'res/partner/partner_data.xml',
-
'res/ir_property_view.xml',
'security/base_security.xml',
'publisher_warranty/publisher_warranty_view.xml',
-
'security/ir.model.access.csv',
'res/res_widget_view.xml',
'res/res_widget_data.xml',
diff --git a/openerp/addons/base/base_update.xml b/openerp/addons/base/base_update.xml
index acc2d1d741d..5da43489e55 100644
--- a/openerp/addons/base/base_update.xml
+++ b/openerp/addons/base/base_update.xml
@@ -189,6 +189,16 @@
+
+ Company Bank Accounts
+ res.partner.bank
+ form
+ tree,form
+
+ Configure your company's bank account and select those that must appear on the report footer. You can drag & drop bank in the list view to reorder bank accounts. If you use the accounting application of OpenERP, journals and accounts will be created automatically based on these data.
+
+
+
res.company.form
res.company
@@ -217,12 +227,16 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/openerp/addons/base/res/__init__.py b/openerp/addons/base/res/__init__.py
index 1536f8b2d75..de00fc54153 100644
--- a/openerp/addons/base/res/__init__.py
+++ b/openerp/addons/base/res/__init__.py
@@ -22,7 +22,6 @@
import tools
import country
-import bank
import res_lang
import partner
import res_config
diff --git a/openerp/addons/base/res/bank.py b/openerp/addons/base/res/bank.py
deleted file mode 100644
index f94777e4942..00000000000
--- a/openerp/addons/base/res/bank.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields, osv
-
-
-class Bank(osv.osv):
- _description='Bank'
- _name = 'res.bank'
- _order = 'name'
- _columns = {
- 'name': fields.char('Name', size=128, required=True),
- 'code': fields.char('Code', size=64),
- 'street': fields.char('Street', size=128),
- 'street2': fields.char('Street2', size=128),
- 'zip': fields.char('Zip', change_default=True, size=24),
- 'city': fields.char('City', size=128),
- 'state': fields.many2one("res.country.state", 'State',
- domain="[('country_id', '=', country)]"),
- 'country': fields.many2one('res.country', 'Country'),
- 'email': fields.char('E-Mail', size=64),
- 'phone': fields.char('Phone', size=64),
- 'fax': fields.char('Fax', size=64),
- 'active': fields.boolean('Active'),
- 'bic': fields.char('BIC/Swift code', size=11,
- help="Bank Identifier Code"),
- }
- _defaults = {
- 'active': lambda *a: 1,
- }
- def name_get(self, cr, uid, ids, context=None):
- result = []
- for bank in self.browse(cr, uid, ids, context):
- result.append((bank.id, (bank.bic and (bank.bic + ' - ') or '') + bank.name))
- return result
-
-Bank()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/openerp/addons/base/res/bank_view.xml b/openerp/addons/base/res/bank_view.xml
deleted file mode 100644
index 10c78e847a2..00000000000
--- a/openerp/addons/base/res/bank_view.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
- res.bank.form
- res.bank
- form
-
-
-
-
-
-
- res.bank.tree
- res.bank
- tree
-
-
-
-
-
-
-
-
-
-
- Banks
- res.bank
- form
- tree,form
- Manage bank records you want to be used in the system.
-
-
-
-
-
diff --git a/openerp/addons/base/res/partner/__init__.py b/openerp/addons/base/res/partner/__init__.py
index 96d625bd3e1..3a9b989162f 100644
--- a/openerp/addons/base/res/partner/__init__.py
+++ b/openerp/addons/base/res/partner/__init__.py
@@ -22,6 +22,7 @@
import tools
from partner import *
+from bank import *
from crm import *
import wizard
diff --git a/openerp/addons/base/res/partner/bank.py b/openerp/addons/base/res/partner/bank.py
new file mode 100644
index 00000000000..c8fcbb947c3
--- /dev/null
+++ b/openerp/addons/base/res/partner/bank.py
@@ -0,0 +1,221 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL ().
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from osv import fields, osv
+
+class Bank(osv.osv):
+ _description='Bank'
+ _name = 'res.bank'
+ _order = 'name'
+ _columns = {
+ 'name': fields.char('Name', size=128, required=True),
+ 'street': fields.char('Street', size=128),
+ 'street2': fields.char('Street2', size=128),
+ 'zip': fields.char('Zip', change_default=True, size=24),
+ 'city': fields.char('City', size=128),
+ 'state': fields.many2one("res.country.state", 'State',
+ domain="[('country_id', '=', country)]"),
+ 'country': fields.many2one('res.country', 'Country'),
+ 'email': fields.char('E-Mail', size=64),
+ 'phone': fields.char('Phone', size=64),
+ 'fax': fields.char('Fax', size=64),
+ 'active': fields.boolean('Active'),
+ 'bic': fields.char('Bank Identifier Code', size=64,
+ help="Sometimes called BIC or Swift."),
+ }
+ _defaults = {
+ 'active': lambda *a: 1,
+ }
+ def name_get(self, cr, uid, ids, context=None):
+ result = []
+ for bank in self.browse(cr, uid, ids, context):
+ result.append((bank.id, (bank.bic and (bank.bic + ' - ') or '') + bank.name))
+ return result
+
+Bank()
+
+
+class res_partner_bank_type(osv.osv):
+ _description='Bank Account Type'
+ _name = 'res.partner.bank.type'
+ _order = 'name'
+ _columns = {
+ 'name': fields.char('Name', size=64, required=True, translate=True),
+ 'code': fields.char('Code', size=64, required=True),
+ 'field_ids': fields.one2many('res.partner.bank.type.field', 'bank_type_id', 'Type fields'),
+ 'format_layout': fields.text('Format Layout', translate=True)
+ }
+ _defaults = {
+ 'format_layout': lambda *args: "%(bank_name)s: %(acc_number)s"
+ }
+res_partner_bank_type()
+
+class res_partner_bank_type_fields(osv.osv):
+ _description='Bank type fields'
+ _name = 'res.partner.bank.type.field'
+ _order = 'name'
+ _columns = {
+ 'name': fields.char('Field Name', size=64, required=True, translate=True),
+ 'bank_type_id': fields.many2one('res.partner.bank.type', 'Bank Type', required=True, ondelete='cascade'),
+ 'required': fields.boolean('Required'),
+ 'readonly': fields.boolean('Readonly'),
+ 'size': fields.integer('Max. Size'),
+ }
+res_partner_bank_type_fields()
+
+
+class res_partner_bank(osv.osv):
+ '''Bank Accounts'''
+ _name = "res.partner.bank"
+ _rec_name = "acc_number"
+ _description = __doc__
+ _order = 'sequence'
+
+ def _bank_type_get(self, cr, uid, context=None):
+ bank_type_obj = self.pool.get('res.partner.bank.type')
+
+ result = []
+ type_ids = bank_type_obj.search(cr, uid, [])
+ bank_types = bank_type_obj.browse(cr, uid, type_ids, context=context)
+ for bank_type in bank_types:
+ result.append((bank_type.code, bank_type.name))
+ return result
+
+ def _default_value(self, cursor, user, field, context=None):
+ if field in ('country_id', 'state_id'):
+ value = False
+ else:
+ value = ''
+ if not context.get('address', False):
+ return value
+ for ham, spam, address in context['address']:
+ if address.get('type', False) == 'default':
+ return address.get(field, value)
+ elif not address.get('type', False):
+ value = address.get(field, value)
+ return value
+
+ _rec_name = 'acc_number'
+ _columns = {
+ 'acc_number': fields.char('Account Number', size=64, required=True),
+ 'bank': fields.many2one('res.bank', 'Bank'),
+ 'bank_bic': fields.char('Bank Identifier Code', size=16),
+ 'bank_name': fields.char('Bank Name', size=32),
+ 'owner_name': fields.char('Account Owner Name', size=64),
+ 'street': fields.char('Street', size=128),
+ 'zip': fields.char('Zip', change_default=True, size=24),
+ 'city': fields.char('City', size=128),
+ 'country_id': fields.many2one('res.country', 'Country',
+ change_default=True),
+ 'state_id': fields.many2one("res.country.state", 'State',
+ change_default=True, domain="[('country_id','=',country_id)]"),
+ 'company_id': fields.many2one('res.company', 'Company',
+ ondelete='cascade', help="Only if this bank account belong to your company"),
+ 'partner_id': fields.many2one('res.partner', 'Account Owner', required=True,
+ ondelete='cascade', select=True),
+ 'state': fields.selection(_bank_type_get, 'Bank Account Type', required=True,
+ change_default=True),
+ 'sequence': fields.integer('Sequence'),
+ 'footer': fields.boolean("Display on Reports")
+ }
+ _defaults = {
+ 'owner_name': lambda obj, cursor, user, context: obj._default_value(
+ cursor, user, 'name', context=context),
+ 'street': lambda obj, cursor, user, context: obj._default_value(
+ cursor, user, 'street', context=context),
+ 'city': lambda obj, cursor, user, context: obj._default_value(
+ cursor, user, 'city', context=context),
+ 'zip': lambda obj, cursor, user, context: obj._default_value(
+ cursor, user, 'zip', context=context),
+ 'country_id': lambda obj, cursor, user, context: obj._default_value(
+ cursor, user, 'country_id', context=context),
+ 'state_id': lambda obj, cursor, user, context: obj._default_value(
+ cursor, user, 'state_id', context=context),
+ }
+
+ def fields_get(self, cr, uid, fields=None, context=None):
+ res = super(res_partner_bank, self).fields_get(cr, uid, fields, context)
+ bank_type_obj = self.pool.get('res.partner.bank.type')
+ type_ids = bank_type_obj.search(cr, uid, [])
+ types = bank_type_obj.browse(cr, uid, type_ids)
+ for type in types:
+ for field in type.field_ids:
+ if field.name in res:
+ res[field.name].setdefault('states', {})
+ res[field.name]['states'][type.code] = [
+ ('readonly', field.readonly),
+ ('required', field.required)]
+ return res
+
+ def name_get(self, cr, uid, ids, context=None):
+ if not len(ids):
+ return []
+ bank_type_obj = self.pool.get('res.partner.bank.type')
+ res = []
+ for val in self.browse(cr, uid, ids, context=context):
+ result = val.acc_number
+ if val.state:
+ type_ids = bank_type_obj.search(cr, uid, [('code','=',val.state)])
+ if type_ids:
+ t = bank_type_obj.browse(cr, uid, type_ids[0], context=context)
+ try:
+ result = t.format_layout % val._data[val.id]
+ except:
+ result += ' [Formating Error]'
+ raise
+ res.append((val.id, result))
+ return res
+
+ def onchange_company_id(self, cr, uid, ids, company_id, context={}):
+ result = {}
+ if company_id:
+ c = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
+ if c.partner_id:
+ r = self.onchange_partner_id(cr, uid, ids, c.partner_id.id, context=context)
+ r['value']['partner_id'] = c.partner_id.id
+ r['value']['footer'] = 1
+ result = r
+ return result
+
+ def onchange_bank_id(self, cr, uid, ids, bank_id, context={}):
+ result = {}
+ if bank_id:
+ bank = self.pool.get('res.bank').browse(cr, uid, bank_id, context=context)
+ result['bank_name'] = bank.name
+ result['bank_bic'] = bank.bic
+ return {'value': result}
+
+
+ def onchange_partner_id(self, cr, uid, id, partner_id, context={}):
+ result = {}
+ if partner_id:
+ part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
+ result['owner_name'] = part.name
+ result['street'] = part.address and part.address[0].street or False
+ result['city'] = part.address and part.address[0].city or False
+ result['zip'] = part.address and part.address[0].zip or False
+ result['country_id'] = part.address and part.address[0].country_id and part.address[0].country_id.id or False
+ result['state_id'] = part.address and part.address[0].state_id and part.address[0].state_id.id or False
+ return {'value': result}
+
+res_partner_bank()
+
+
diff --git a/openerp/addons/base/res/partner/bank_view.xml b/openerp/addons/base/res/partner/bank_view.xml
new file mode 100644
index 00000000000..cf00dc6fe8c
--- /dev/null
+++ b/openerp/addons/base/res/partner/bank_view.xml
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+ res.bank.form
+ res.bank
+ form
+
+
+
+
+
+
+ res.bank.tree
+ res.bank
+ tree
+
+
+
+
+
+
+
+
+
+
+ Banks
+ res.bank
+ form
+ tree,form
+ Manage bank records you want to be used in the system.
+
+
+
+
+
+
+
+ res.partner.bank.type.form
+ res.partner.bank.type
+ form
+
+
+
+
+
+
+ res.partner.bank.type.tree
+ res.partner.bank.type
+ tree
+
+
+
+
+
+
+
+
+
+
+ res.partner.bank.form
+ res.partner.bank
+ form
+
+
+
+
+
+
+ res.partner.bank.search
+ res.partner.bank
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ res.partner.bank.tree
+ res.partner.bank
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Accounts
+ res.partner.bank
+ form
+ tree,form
+
+
+
+
+
+
+ Bank Account Types
+ res.partner.bank.type
+ form
+ tree,form
+
+
+
+
+
+
+
+
+
diff --git a/openerp/addons/base/res/partner/partner.py b/openerp/addons/base/res/partner/partner.py
index e4cfba50f8e..4b8f1279787 100644
--- a/openerp/addons/base/res/partner/partner.py
+++ b/openerp/addons/base/res/partner/partner.py
@@ -347,122 +347,6 @@ class res_partner_address(osv.osv):
res_partner_address()
-class res_partner_bank_type(osv.osv):
- _description='Bank Account Type'
- _name = 'res.partner.bank.type'
- _order = 'name'
- _columns = {
- 'name': fields.char('Name', size=64, required=True, translate=True),
- 'code': fields.char('Code', size=64, required=True),
- 'field_ids': fields.one2many('res.partner.bank.type.field', 'bank_type_id', 'Type fields'),
- }
-res_partner_bank_type()
-
-class res_partner_bank_type_fields(osv.osv):
- _description='Bank type fields'
- _name = 'res.partner.bank.type.field'
- _order = 'name'
- _columns = {
- 'name': fields.char('Field Name', size=64, required=True, translate=True),
- 'bank_type_id': fields.many2one('res.partner.bank.type', 'Bank Type', required=True, ondelete='cascade'),
- 'required': fields.boolean('Required'),
- 'readonly': fields.boolean('Readonly'),
- 'size': fields.integer('Max. Size'),
- }
-res_partner_bank_type_fields()
-
-
-class res_partner_bank(osv.osv):
- '''Bank Accounts'''
- _name = "res.partner.bank"
- _rec_name = "acc_number"
- _description = __doc__
- _order = 'sequence,name'
-
- def _bank_type_get(self, cr, uid, context=None):
- bank_type_obj = self.pool.get('res.partner.bank.type')
-
- result = []
- type_ids = bank_type_obj.search(cr, uid, [])
- bank_types = bank_type_obj.browse(cr, uid, type_ids, context=context)
- for bank_type in bank_types:
- result.append((bank_type.code, bank_type.name))
- return result
-
- def _default_value(self, cursor, user, field, context=None):
- if field in ('country_id', 'state_id'):
- value = False
- else:
- value = ''
- if not context.get('address', False):
- return value
- for ham, spam, address in context['address']:
- if address.get('type', False) == 'default':
- return address.get(field, value)
- elif not address.get('type', False):
- value = address.get(field, value)
- return value
-
- _columns = {
- 'name': fields.char('Description', size=128),
- 'acc_number': fields.char('Account Number', size=64, required=False),
- 'bank': fields.many2one('res.bank', 'Bank', required=True),
- 'owner_name': fields.char('Account Owner', size=64),
- 'street': fields.char('Street', size=128),
- 'zip': fields.char('Zip', change_default=True, size=24),
- 'city': fields.char('City', size=128),
- 'country_id': fields.many2one('res.country', 'Country',
- change_default=True),
- 'state_id': fields.many2one("res.country.state", 'State',
- change_default=True, domain="[('country_id','=',country_id)]"),
- 'partner_id': fields.many2one('res.partner', 'Partner', required=True,
- ondelete='cascade', select=True),
- 'state': fields.selection(_bank_type_get, 'Bank Type', required=True,
- change_default=True),
- 'sequence': fields.integer('Sequence'),
- }
- _defaults = {
- 'owner_name': lambda obj, cursor, user, context: obj._default_value(
- cursor, user, 'name', context=context),
- 'street': lambda obj, cursor, user, context: obj._default_value(
- cursor, user, 'street', context=context),
- 'city': lambda obj, cursor, user, context: obj._default_value(
- cursor, user, 'city', context=context),
- 'zip': lambda obj, cursor, user, context: obj._default_value(
- cursor, user, 'zip', context=context),
- 'country_id': lambda obj, cursor, user, context: obj._default_value(
- cursor, user, 'country_id', context=context),
- 'state_id': lambda obj, cursor, user, context: obj._default_value(
- cursor, user, 'state_id', context=context),
- }
-
- def fields_get(self, cr, uid, fields=None, context=None):
- res = super(res_partner_bank, self).fields_get(cr, uid, fields, context)
- bank_type_obj = self.pool.get('res.partner.bank.type')
- type_ids = bank_type_obj.search(cr, uid, [])
- types = bank_type_obj.browse(cr, uid, type_ids)
- for type in types:
- for field in type.field_ids:
- if field.name in res:
- res[field.name].setdefault('states', {})
- res[field.name]['states'][type.code] = [
- ('readonly', field.readonly),
- ('required', field.required)]
- return res
-
- def name_get(self, cr, uid, ids, context=None):
- if not len(ids):
- return []
- res = []
- for val in self.browse(cr, uid, ids):
- if val.bank.code:
- res.append((val.id, val.bank.code + ': ' + val.acc_number))
- else:
- res.append((val.id, val.acc_number))
- return res
-
-res_partner_bank()
-
class res_partner_category(osv.osv):
_inherit = 'res.partner.category'
_columns = {
diff --git a/openerp/addons/base/res/partner/partner_data.xml b/openerp/addons/base/res/partner/partner_data.xml
index 46e9faac130..138e44176f0 100644
--- a/openerp/addons/base/res/partner/partner_data.xml
+++ b/openerp/addons/base/res/partner/partner_data.xml
@@ -35,20 +35,15 @@
- Bank account
+ Normal Bank Account
bank
-
- acc_number
-
-
-
-
- country_id
-
-
-
+
+ bank_bic
+
+
+
diff --git a/openerp/addons/base/res/partner/partner_view.xml b/openerp/addons/base/res/partner/partner_view.xml
index 7dc4a595adf..2b98fc6ccbb 100644
--- a/openerp/addons/base/res/partner/partner_view.xml
+++ b/openerp/addons/base/res/partner/partner_view.xml
@@ -5,7 +5,6 @@
web_icon="data/sales.png"
web_icon_hover="data/sales-hover.png"
groups="base.group_sale_salesman"/>
-
@@ -439,71 +438,6 @@
form
-
-
- res.partner.bank.type.form
- res.partner.bank.type
- form
-
-
-
-
-
-
- res.partner.bank.type.tree
- res.partner.bank.type
- tree
-
-
-
-
-
-
-
-
-
-
- res.partner.bank.form
- res.partner.bank
- form
-
-
-
-
-
- res.partner.bank.tree
- res.partner.bank
- tree
-
-
-
-
-
-
-
-
-
-