[IMP] bank account management reviewed, improved groups name

bzr revid: fp@fp-laptop-20110815141643-ebg8rnuihkei6fni
This commit is contained in:
fp 2011-08-15 16:16:43 +02:00
parent 1f61d5c2e2
commit 941496a321
14 changed files with 455 additions and 323 deletions

View File

@ -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',

View File

@ -189,6 +189,16 @@
<report id="preview_report" model="res.company" name="preview.report" multi="True"
rml="base/report/preview_report.rml" string="Preview Report"/>
<record id="bank_account_update" model="ir.actions.act_window">
<field name="name">Company Bank Accounts</field>
<field name="res_model">res.partner.bank</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context" eval="{'default_partner_id':ref('base.main_partner'), 'company_hide':False, 'default_company_id':ref('base.main_company'), 'search_default_my_bank':1}"/>
<field name="help">Configure your company's bank account and select those that must appear on the report footer. You can drag &amp; 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.</field>
</record>
<record id="view_company_form" model="ir.ui.view">
<field name="name">res.company.form</field>
<field name="model">res.company</field>
@ -217,12 +227,16 @@
<field name="phone"/>
<field name="email"/>
<separator string="Header/Footer of Reports" colspan="4"/>
<field name="rml_header1" colspan="4"/>
<field name="rml_footer1" colspan="4"/>
<field name="rml_footer2" colspan="4"/>
<group colspan="4" col="8">
<label string="" colspan="7"/>
<button name="%(preview_report)d" string="Preview Report" type="action" icon="gtk-print"/>
<group colspan="4" col="3">
<field name="rml_header1" colspan="3"/>
<newline/>
<field name="rml_footer1" colspan="3"/>
<newline/>
<field name="rml_footer2" colspan="2"/>
<button name="%(bank_account_update)d" string="Bank Accounts" type="action" icon="gtk-go-forward"/>
<newline/>
<label string="" colspan="2"/>
<button name="%(preview_report)d" string="Preview Header" type="action" icon="gtk-print"/>
</group>
</page>
<page string="Header/Footer" groups="base.group_extended">

View File

@ -22,7 +22,6 @@
import tools
import country
import bank
import res_lang
import partner
import res_config

View File

@ -1,58 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
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:

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_res_bank_form" model="ir.ui.view">
<field name="name">res.bank.form</field>
<field name="model">res.bank</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank">
<field colspan="4" name="name" select="1"/>
<field name="code" select="1"/>
<field name="active" select="2"/>
<field name="bic" select="1"/>
<newline/>
<separator string="Address" colspan="2" col="4"/>
<separator string="Communication" colspan="2" col="4"/>
<group colspan="2" col="4">
<field name="street" select="2"/>
<field name="street2" select="2"/>
<field name="zip"/>
<field name="city"/>
<field name="country" select="2"/>
<field name="state" select="2"/>
</group>
<group colspan="2" col="2">
<field name="phone"/>
<field name="fax"/>
<field name="email" widget="email"/>
</group>
</form>
</field>
</record>
<record id="view_res_bank_tree" model="ir.ui.view">
<field name="name">res.bank.tree</field>
<field name="model">res.bank</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Banks">
<field name="name"/>
<field name="code"/>
<field name="country"/>
</tree>
</field>
</record>
<record id="action_res_bank_form" model="ir.actions.act_window">
<field name="name">Banks</field>
<field name="res_model">res.bank</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help">Manage bank records you want to be used in the system.</field>
</record>
<menuitem action="action_res_bank_form" id="menu_action_res_bank_form"
parent="base.menu_config_address_book" sequence="5"/>
</data>
</openerp>

View File

@ -22,6 +22,7 @@
import tools
from partner import *
from bank import *
from crm import *
import wizard

View File

@ -0,0 +1,221 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
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()

View File

@ -0,0 +1,189 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Banks -->
<record id="view_res_bank_form" model="ir.ui.view">
<field name="name">res.bank.form</field>
<field name="model">res.bank</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank">
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="bic" select="1"/>
<field name="active" select="2"/>
</group>
<newline/>
<group colspan="2" col="4">
<separator string="Address" colspan="4"/>
<field name="street" select="2"/>
<field name="street2" select="2"/>
<field name="zip"/>
<field name="city"/>
<field name="country" select="2"/>
<field name="state" select="2"/>
</group>
<group colspan="2" col="2">
<separator string="Communication" colspan="2"/>
<field name="phone"/>
<field name="fax"/>
<field name="email" widget="email"/>
</group>
</form>
</field>
</record>
<record id="view_res_bank_tree" model="ir.ui.view">
<field name="name">res.bank.tree</field>
<field name="model">res.bank</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Banks">
<field name="name"/>
<field name="bic"/>
<field name="country"/>
</tree>
</field>
</record>
<record id="action_res_bank_form" model="ir.actions.act_window">
<field name="name">Banks</field>
<field name="res_model">res.bank</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="help">Manage bank records you want to be used in the system.</field>
</record>
<menuitem action="action_res_bank_form" id="menu_action_res_bank_form"
parent="base.menu_config_address_book" sequence="11"
groups="base.group_no_one"/>
<record id="view_partner_bank_type_form" model="ir.ui.view">
<field name="name">res.partner.bank.type.form</field>
<field name="model">res.partner.bank.type</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank Account Type">
<field name="name"/>
<field name="code"/>
<field name="field_ids" colspan="4"/>
<field name="format_layout" colspan="4"/>
</form>
</field>
</record>
<record id="view_partner_bank_type_tree" model="ir.ui.view">
<field name="name">res.partner.bank.type.tree</field>
<field name="model">res.partner.bank.type</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Bank Account Type">
<field name="name" select="1"/>
<field name="code" select="1"/>
</tree>
</field>
</record>
<record id="view_partner_bank_form" model="ir.ui.view">
<field name="name">res.partner.bank.form</field>
<field name="model">res.partner.bank</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank account">
<group colspan="4" col="6">
<field name="state"/>
<field name="company_id" on_change="onchange_company_id(company_id)" invisible="context.get('company_hide', True)" widget="selection"/>
<field name="footer" attrs="{'invisible': [('company_id','=',False)]}"/>
<newline/>
<field name="acc_number"/>
</group>
<group name="owner" colspan="2" col="2">
<separator colspan="4" string="Bank Account Owner"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="owner_name"/>
<field name="street"/>
<field name="city"/>
<field name="zip"/>
<field name="state_id"/>
<field name="country_id"/>
</group>
<group name="bank" colspan="2" col="2">
<separator colspan="2" string="Information About the Bank"/>
<field name="bank" on_change="onchange_bank_id(bank)" groups="base.group_extended"/>
<field name="bank_name" attrs="{'required': [('company_id','&lt;&gt;',False)]}"/>
<field name="bank_bic"/>
</group>
</form>
</field>
</record>
<record id="view_partner_bank_search" model="ir.ui.view">
<field name="name">res.partner.bank.search</field>
<field name="model">res.partner.bank</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Bank Accounts">
<filter name="my_bank" icon="terp-check" string="My Banks" domain="[('company_id','&lt;&gt;',False)]" help="Bank accounts belonging to one of your companies"/>
<separator orientation="vertical"/>
<field name="acc_number"/>
<field name="company_id" invisible="context.get('company_hide', True)"/>
<field name="partner_id"/>
<field name="bank_name"/>
</search>
</field>
</record>
<record id="view_partner_bank_tree" model="ir.ui.view">
<field name="name">res.partner.bank.tree</field>
<field name="model">res.partner.bank</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Bank Accounts">
<field name="sequence" invisible="1"/>
<field name="acc_number"/>
<field name="bank_name"/>
<field name="company_id" invisible="context.get('company_hide', True)"/>
<field name="footer" invisible="context.get('company_hide', True)"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<record id="action_res_partner_bank_account_form" model="ir.actions.act_window">
<field name="name">Bank Accounts</field>
<field name="res_model">res.partner.bank</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem action="action_res_partner_bank_account_form"
id="menu_action_res_partner_bank_form"
parent="base.menu_config_address_book"
groups="base.group_no_one"
sequence="9"/>
<record id="action_res_partner_bank_type_form" model="ir.actions.act_window">
<field name="name">Bank Account Types</field>
<field name="res_model">res.partner.bank.type</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem action="action_res_partner_bank_type_form"
id="menu_action_res_partner_bank_typeform"
parent="base.menu_config_address_book"
groups="base.group_no_one"
sequence="15"/>
</data>
</openerp>

View File

@ -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 = {

View File

@ -35,20 +35,15 @@
<!-- Default bank account description -->
<record id="bank_normal" model="res.partner.bank.type">
<field name="name">Bank account</field>
<field name="name">Normal Bank Account</field>
<field name="code">bank</field>
</record>
<record id="bank_normal_field" model="res.partner.bank.type.field">
<field name="name">acc_number</field>
<field eval="True" name="required"/>
<field name="bank_type_id" ref="bank_normal"/>
</record>
<record id="bank_normal_field_contry" model="res.partner.bank.type.field">
<field name="name">country_id</field>
<field eval="True" name="readonly"/>
<field name="bank_type_id" ref="bank_normal"/>
</record>
<record id="bank_normal_field_bic" model="res.partner.bank.type.field">
<field name="name">bank_bic</field>
<field name="bank_type_id" ref="bank_normal"/>
<field name="required" eval="0"/>
</record>
<!--
Resource: res.request.link
-->

View File

@ -5,7 +5,6 @@
web_icon="data/sales.png"
web_icon_hover="data/sales-hover.png"
groups="base.group_sale_salesman"/>
<menuitem id="menu_address_book" name="Address Book" parent="menu_base_partner" sequence="2"/>
@ -439,71 +438,6 @@
<field name="view_type">form</field>
<field name="view_id" ref="view_payterm_form"/>
</record>
<record id="view_partner_bank_type_form" model="ir.ui.view">
<field name="name">res.partner.bank.type.form</field>
<field name="model">res.partner.bank.type</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank Account Type">
<field name="name" select="1"/>
<field name="code" select="1"/>
</form>
</field>
</record>
<record id="view_partner_bank_type_tree" model="ir.ui.view">
<field name="name">res.partner.bank.type.tree</field>
<field name="model">res.partner.bank.type</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Bank Account Type">
<field name="name" select="1"/>
<field name="code" select="1"/>
</tree>
</field>
</record>
<record id="view_partner_bank_form" model="ir.ui.view">
<field name="name">res.partner.bank.form</field>
<field name="model">res.partner.bank</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank account">
<field name="state"/>
<field name="partner_id" select="1"/>
<newline/>
<field name="acc_number" select="1"/>
<newline/>
<field name="bank"/>
<newline/>
<field name="sequence"/>
<field colspan="4" name="name"/>
<separator colspan="4" string="Bank Account Owner"/>
<field colspan="4" name="owner_name"/>
<field colspan="4" name="street"/>
<field name="city"/>
<field name="zip"/>
<field completion="1" name="country_id"/>
<field name="state_id"/>
</form>
</field>
</record>
<record id="view_partner_bank_tree" model="ir.ui.view">
<field name="name">res.partner.bank.tree</field>
<field name="model">res.partner.bank</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Bank Accounts">
<field name="state"/>
<field name="acc_number"/>
<field name="partner_id"/>
<field name="owner_name"/>
</tree>
</field>
</record>
<!--
======================
Categories

View File

@ -88,6 +88,18 @@ class res_company(osv.osv):
result[company.id][field] = address[field] or False
return result
def _get_bank_data(self, cr, uid, ids, field_names, arg, context=None):
""" Read the 'address' functional fields. """
result = {}
for company in self.browse(cr, uid, ids, context=context):
r = []
for bank in company.bank_ids:
if bank.footer:
r.append(bank.name_get(context=context)[0][1])
result[company.id] = ' | '.join(r)
return result
def _set_address_data(self, cr, uid, company_id, name, value, arg, context=None):
""" Write the 'address' functional fields. """
company = self.browse(cr, uid, company_id, context=context)
@ -109,7 +121,7 @@ class res_company(osv.osv):
'partner_id': fields.many2one('res.partner', 'Partner', required=True),
'rml_header1': fields.char('Report Header', size=200),
'rml_footer1': fields.char('Report Footer 1', size=200),
'rml_footer2': fields.char('Report Footer 2', size=200),
'rml_footer2': fields.function(_get_bank_data, type="char", string='Bank Accounts Footer', size=250, help="This field is computed automatically based on bank accounts defined, having the display on footer checkbox set."),
'rml_header': fields.text('RML Header', required=True),
'rml_header2': fields.text('RML Internal Header', required=True),
'rml_header3': fields.text('RML Internal Header', required=True),
@ -123,6 +135,7 @@ class res_company(osv.osv):
'zip': fields.function(_get_address_data, fnct_inv=_set_address_data, size=24, type='char', string="Zip", multi='address'),
'city': fields.function(_get_address_data, fnct_inv=_set_address_data, size=24, type='char', string="City", multi='address'),
'state_id': fields.function(_get_address_data, fnct_inv=_set_address_data, type='many2one', domain="[('country_id', '=', country_id)]", relation='res.country.state', string="State", multi='address'),
'bank_ids': fields.one2many('res.partner.bank','company_id', 'Bank Accounts', help='Bank accounts related to this company'),
'country_id': fields.function(_get_address_data, fnct_inv=_set_address_data, type='many2one', relation='res.country', string="Country", multi='address'),
'email': fields.function(_get_address_data, fnct_inv=_set_address_data, size=64, type='char', string="Email", multi='address'),
'phone': fields.function(_get_address_data, fnct_inv=_set_address_data, size=64, type='char', string="Phone", multi='address'),

View File

@ -2,7 +2,7 @@
<openerp>
<data noupdate="0">
<record model="res.groups" id="group_partner_manager">
<record model="res.groups" id="group_partner_manager" context="{'noadmin':True}">
<field name="name">Partner Manager</field>
</record>

View File

@ -14,7 +14,7 @@
</record>
<record model="res.groups" id="group_user">
<field name="name">Employee</field>
<field name="name">Human Resources / Employee</field>
</record>
<record model="res.groups" context="{'noadmin':True}" id="group_multi_company">
@ -26,7 +26,7 @@
</record>
<record model="res.groups" id="group_no_one" context="{'noadmin':True}">
<field name="name">Useability / No One</field>
<field name="name">Useability / Technical Features</field>
</record>
<record id="group_sale_salesman" context="{'noadmin':True}" model="res.groups">