[IMP] bank account management reviewed, improved groups name
bzr revid: fp@fp-laptop-20110815141643-ebg8rnuihkei6fni
This commit is contained in:
parent
1f61d5c2e2
commit
941496a321
|
@ -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',
|
||||
|
|
|
@ -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 & 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">
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
import tools
|
||||
|
||||
import country
|
||||
import bank
|
||||
import res_lang
|
||||
import partner
|
||||
import res_config
|
||||
|
|
|
@ -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:
|
||||
|
|
@ -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>
|
|
@ -22,6 +22,7 @@
|
|||
import tools
|
||||
|
||||
from partner import *
|
||||
from bank import *
|
||||
from crm import *
|
||||
|
||||
import wizard
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
@ -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','<>',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','<>',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>
|
||||
|
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
-->
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in New Issue