Kuldeep Joshi(OpenERP) has proposed merging
lp:~openerp-dev/openobject-addons/trunk-bug-917863-kjo into
lp:openobject-addons.
Requested reviews:
Bhumika (OpenERP) (sbh-openerp)
Related bugs:
Bug #917863 in OpenERP Addons: "can not convert contact in leads to partner"
https://bugs.launchpad.net/openobject-addons/+bug/917863
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-917863-kjo/+merge/89200
Give the address and location right to the base.group_sale_salesman
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-917863-kjo/+merge/89200
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/trunk-bug-917863-kjo.
=== modified file 'base_contact/security/ir.model.access.csv'
--- base_contact/security/ir.model.access.csv 2011-12-22 09:12:58 +0000
+++ base_contact/security/ir.model.access.csv 2012-01-19 09:30:09 +0000
@@ -2,4 +2,6 @@
"access_res_partner_contact","res.partner.contact","model_res_partner_contact","base.group_partner_manager",1,1,1,1
"access_res_partner_contact_all","res.partner.contact all","model_res_partner_contact","base.group_user",1,0,0,0
"access_res_partner_location","res.partner.location","model_res_partner_location","base.group_user",1,0,0,0
+"access_res_partner_location_sale_salesman","res.partner.location","model_res_partner_location","base.group_sale_salesman",1,1,1,0
+"access_res_partner_address_sale_salesman","res.partner.address.user","base.model_res_partner_address","base.group_sale_salesman",1,1,1,0
"access_group_sale_salesman","res.partner.contact.sale.salesman","model_res_partner_contact","base.group_sale_salesman",1,1,1,0
=== modified file 'l10n_ch/bank.py'
--- l10n_ch/bank.py 2011-12-19 16:54:40 +0000
+++ l10n_ch/bank.py 2012-01-19 09:30:09 +0000
@@ -21,6 +21,7 @@
from tools.translate import _
from osv import fields, osv
+import re
class Bank(osv.osv):
"""Inherit res.bank class in order to add swiss specific field"""
@@ -42,8 +43,8 @@
_columns = {
'name': fields.char('Description', size=128, required=True),
- 'post_number': fields.char('Post number', size=64),
- 'bvr_adherent_num': fields.char('BVR adherent number', size=11),
+ 'post_number': fields.char('Post number', size=64, help="Postal number 0x-xxxxxx-x or xxxxx"),
+ 'bvr_adherent_num': fields.char('Bank BVR adherent number', size=11, help="Your Bank adherent number to be printed in references of your BVR. This is not a postal account number."),
'dta_code': fields.char('DTA code', size=5),
'print_bank': fields.boolean('Print Bank on BVR'),
'print_account': fields.boolean('Print Account Number on BVR'),
@@ -69,10 +70,48 @@
def _prepare_name(self, bank):
"Hook to get bank number of bank account"
res = super(ResPartnerBank, self)._prepare_name(bank)
+ res = res or u''
if bank.post_number:
- res = u"%s - %s" % (res, bank.post_number)
+ if res:
+ res = u"%s - %s" % (res, bank.post_number)
+ else:
+ res = bank.post_number
return res
+ def _check_9_pos_postal_num(self, number):
+ """
+ check if a postal number in format xx-xxxxxx-x is correct,
+ return true if it matches the pattern
+ and if check sum mod10 is ok
+ """
+ from tools import mod10r
+ pattern = r'^[0-9]{2}-[0-9]{1,6}-[0-9]$'
+ if not re.search(pattern, number):
+ return False
+ num, checksum = (number.replace('-','')[:-1], number[-1:])
+ return mod10r(num)[-1:] == checksum
+
+
+ def _check_5_pos_postal_num(self, number):
+ """
+ check if a postal number on 5 positions is correct
+ """
+ pattern = r'^[0-9]{1,5}$'
+ if not re.search(pattern, number):
+ return False
+ return True
+
+ def _check_postal_num(self, cursor, uid, ids):
+ banks = self.browse(cursor, uid, ids)
+ for b in banks:
+ return self._check_9_pos_postal_num(b.post_number) or \
+ self._check_5_pos_postal_num(b.post_number)
+
+
+ _constraints = [(_check_postal_num,
+ 'Please enter a correct postal number. (01-23456-5 or 12345)',
+ ['post_number'])]
+
_sql_constraints = [('bvr_adherent_uniq', 'unique (bvr_adherent_num)',
'The BVR adherent number must be unique !')]
=== modified file 'l10n_ch/bank_view.xml'
--- l10n_ch/bank_view.xml 2011-12-19 16:54:40 +0000
+++ l10n_ch/bank_view.xml 2012-01-19 09:30:09 +0000
@@ -130,12 +130,14 @@
</group>
<separator colspan="4" string="Financial institute infos"/>
<newline/>
- <field name="my_bank" attrs="{'invisible': [('company_id', '=', False)]}" colspan="4"/>
- <group string="BVR print options" colspan="4" attrs="{'invisible': [('my_bank', '!=', True)]}" >
- <field name="bvr_adherent_num"/>
- <field name="print_bank"/>
- <field name="print_account"/>
- <newline/>
+ <group attrs="{'invisible': ['|', ('state', 'not in', ['bvrpost','bvrbank']), ('company_id', '=', False)]}" colspan="4">
+ <field name="my_bank" attrs="{'invisible': [('company_id', '=', False)]}" />
+ <group string="BVR print options" colspan="4" attrs="{'invisible': [('my_bank', '!=', True)]}" >
+ <field name="bvr_adherent_num" attrs="{'invisible': [('state','!=','bvrbank')]}"/>
+ <field name="print_bank"/>
+ <field name="print_account"/>
+ <newline/>
+ </group>
</group>
<newline/>
<field name="bank" />
=== modified file 'l10n_ch/demo/demo.xml'
--- l10n_ch/demo/demo.xml 2011-09-16 14:32:55 +0000
+++ l10n_ch/demo/demo.xml 2012-01-19 09:30:09 +0000
@@ -11,7 +11,7 @@
<field name="acc_number">11-1234-1</field>
<field name="partner_id" ref="base.main_partner"/>
<field name="state">bvrbank</field>
- <field name="post_number">11-1234-1</field>
+ <field name="post_number">70-004152-8</field>
<field name="bank" ref="main_bank"/>
<!-- <field name="iban">CH9100767000S00023455</field> -->
<field name="bvr_adherent_num">0000000</field>
=== modified file 'l10n_ch/demo/dta_demo.xml'
--- l10n_ch/demo/dta_demo.xml 2011-11-04 16:26:24 +0000
+++ l10n_ch/demo/dta_demo.xml 2012-01-19 09:30:09 +0000
@@ -12,7 +12,7 @@
<field name="acc_number">123456</field>
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="state">bvrbank</field>
- <field name="post_number">234567</field>
+ <field name="post_number">01-23456-5</field>
<field name="bank" ref="partner_bank"/>
<!-- <field name="iban">CH9100767000S00023455</field> -->
</record>
=== modified file 'l10n_ch/report/report_webkit_html.py'
--- l10n_ch/report/report_webkit_html.py 2011-12-19 16:54:40 +0000
+++ l10n_ch/report/report_webkit_html.py 2012-01-19 09:30:09 +0000
@@ -124,28 +124,24 @@
invoice_obj = pool.get('account.invoice')
ids = invoice_ids
for invoice in invoice_obj.browse(cursor, self.uid, ids):
+ invoice_name = "%s %s" %(invoice.name, invoice.number)
if not invoice.partner_bank_id:
raise except_osv(_('UserError'),
- _('No bank specified on invoice:\n' + \
- invoice_obj.name_get(cursor, self.uid, [invoice.id],
- context={})[0][1]))
+ _('No bank specified on invoice:\n%s' %(invoice_name)))
if not self._compile_check_bvr.match(
invoice.partner_bank_id.post_number or ''):
raise except_osv(_('UserError'),
- _('Your bank BVR number should be of the form 0X-XXX-X! ' +
- 'Please check your company ' +
- 'information for the invoice:\n' +
- invoice_obj.name_get(cursor, self.uid, [invoice.id],
- context={})[0][1]))
+ _(('Your bank BVR number should be of the form 0X-XXX-X! '
+ 'Please check your company '
+ 'information for the invoice:\n%s')
+ %(invoice_name)))
if invoice.partner_bank_id.bvr_adherent_num \
and not self._compile_check_bvr_add_num.match(
invoice.partner_bank_id.bvr_adherent_num):
raise except_osv(_('UserError'),
- _('Your bank BVR adherent number must contain exactly seven' +
- 'digits!\nPlease check your company ' +
- 'information for the invoice:\n' +
- invoice_obj.name_get(cursor, self.uid, [invoice.id],
- context={})[0][1]))
+ _(('Your bank BVR adherent number must contain only '
+ 'digits!\nPlease check your company '
+ 'information for the invoice:\n%s') %(invoice_name)))
return ''
class BVRWebKitParser(webkit_report.WebKitParser):
=== modified file 'l10n_ch/sterchi_chart/account.xml'
--- l10n_ch/sterchi_chart/account.xml 2011-12-19 16:54:40 +0000
+++ l10n_ch/sterchi_chart/account.xml 2012-01-19 09:30:09 +0000
@@ -177,12 +177,14 @@
<record model="account.account.type" id="account_type_receivable">
<field name="name">Bilan : Debiteurs</field>
<field name="code">receivable</field>
+ <field name="partner_account">True</field>
<field name="close_method">unreconciled</field>
<field name="report_type">none</field>
</record>
<record model="account.account.type" id="account_type_payable">
<field name="name">Bilan : Fournisseurs</field>
<field name="code">payable</field>
+ <field name="partner_account">True</field>
<field name="close_method">unreconciled</field>
<field name="report_type">none</field>
</record>
@@ -11802,7 +11804,12 @@
<field name="property_account_receivable" ref="ch_1100"/>
<field name="property_account_payable" ref="ch_2000"/>
<field name="property_account_expense_categ" ref="ch_4200"/>
- <field name="property_account_income_categ" ref="ch_1000"/>
+ <field name="property_account_income_categ" ref="ch_3200"/>
+ <field name="property_account_expense" ref="ch_4200"/>
+ <field name="property_account_income" ref="ch_3200"/>
+ <field name="property_account_income_opening" ref="ch_2990"/>
+ <field name="property_account_expense_opening" ref="ch_2990"/>
+ <field name="property_reserve_and_surplus_account" ref="ch_2991"/>
</record>
<!-- journal configuration of account -->
=== modified file 'l10n_ch/wizard/bvr_import.py'
--- l10n_ch/wizard/bvr_import.py 2011-12-19 16:54:40 +0000
+++ l10n_ch/wizard/bvr_import.py 2012-01-19 09:30:09 +0000
@@ -71,6 +71,9 @@
statement_obj = self.pool.get('account.bank.statement')
property_obj = self.pool.get('ir.property')
file = data['form']['file']
+ if not file:
+ raise osv.except_osv(_('UserError'),
+ _('Please select a file first!'))
statement_id = data['id']
records = []
total_amount = 0
@@ -239,7 +242,7 @@
class bvr_import_wizard(osv.osv_memory):
_name = 'bvr.import.wizard'
_columns = {
- 'file':fields.binary('BVR File', readonly=True)
+ 'file':fields.binary('BVR File')
}
def import_bvr(self, cr, uid, ids, context=None):
=== modified file 'l10n_ch/wizard/create_dta.py'
--- l10n_ch/wizard/create_dta.py 2011-11-01 10:02:57 +0000
+++ l10n_ch/wizard/create_dta.py 2012-01-19 09:30:09 +0000
@@ -28,6 +28,8 @@
from tools.translate import _
import unicode2ascii
+import re
+
TRANS=[
(u'é','e'),
(u'è','e'),
@@ -346,6 +348,14 @@
s = s.decode('utf-8').encode('latin1','replace').ljust(size)
return s
+def _is_9_pos_bvr_adherent(adherent_num):
+ """
+ from a bvr adherent number,
+ return true if
+ """
+ pattern = r'[0-9]{2}-[0-9]{1,6}-[0-9]'
+ return re.search(pattern, adherent_num)
+
def _create_dta(obj, cr, uid, data, context=None):
v = {}
v['uid'] = str(uid)
@@ -435,10 +445,24 @@
or False
v['partner_bvr'] = pline.bank_id.post_number or ''
if v['partner_bvr']:
- v['partner_bvr'] = v['partner_bvr'].replace('-','')
- if len(v['partner_bvr']) < 9:
- v['partner_bvr'] = v['partner_bvr'][:2] + '0' * \
- (9 - len(v['partner_bvr'])) + v['partner_bvr'][2:]
+ is_9_pos_adherent = None
+ # if adherent bvr number is a 9 pos number
+ # add 0 to fill 2nd part plus remove '-'
+ # exemple: 12-567-C becomes 12000567C
+ if _is_9_pos_bvr_adherent(v['partner_bvr']):
+ parts = v['partner_bvr'].split('-')
+ parts[1] = parts[1].rjust(6, '0')
+ v['partner_bvr'] = ''.join(parts)
+ is_9_pos_adherent = True
+ # add 4*0 to bvr adherent number with 5 pos
+ # exemple: 12345 becomes 000012345
+ elif len(v['partner_bvr']) == 5:
+ v['partner_bvr'] = v['partner_bvr'].rjust(9, '0')
+ is_9_pos_adherent = False
+ else:
+ raise osv.except_osv(_('Error'),
+ _('Wrong postal number format.\n'
+ 'It must be 12-123456-9 or 12345 format'))
if pline.bank_id.bank:
v['partner_bank_city'] = pline.bank_id.bank.city or False
@@ -518,15 +542,39 @@
elif elec_pay == 'bvrbank' or elec_pay == 'bvrpost':
from tools import mod10r
- if v['reference']:
- v['reference'] = v['reference'].replace(' ',
- '').rjust(27).replace(' ', '0')
- if not v['reference'] \
- or (mod10r(v['reference'][:-1]) != v['reference'] and \
- not len(v['reference']) == 15):
- raise osv.except_osv(_('Error'), _('You must provide ' \
- 'a valid BVR reference number \n' \
- 'for the line: %s') % pline.name)
+ if not v['reference']:
+ raise osv.except_osv(_('Error'),
+ _('You must provide ' \
+ 'a BVR reference number \n' \
+ 'for the line: %s') % pline.name)
+ v['reference'] = v['reference'].replace(' ', '')
+ if is_9_pos_adherent:
+ if len(v['reference']) > 27:
+ raise osv.except_osv(_('Error'),
+ _('BVR reference number is not valid \n'
+ 'for the line: %s. \n'
+ 'Reference is too long.') % pline.name)
+ # do a mod10 check
+ if mod10r(v['reference'][:-1]) != v['reference']:
+ raise osv.except_osv(_('Error'),
+ _('BVR reference number is not valid \n'
+ 'for the line: %s. \n'
+ 'Mod10 check failed') % pline.name)
+ # fill reference with 0
+ v['reference'] = v['reference'].rjust(27, '0')
+ else:
+ # reference of BVR adherent with 5 positions number
+ # have 15 positions references
+ if len(v['reference']) > 15:
+ raise osv.except_osv(_('Error'),
+ _('BVR reference number is not valid \n'
+ 'for the line: %s. \n'
+ 'Reference is too long '
+ 'for this type of beneficiary.') % pline.name)
+ # complete 15 first digit with 0 on left and complete 27 digits with trailing spaces
+ # exemple: 123456 becomes 00000000012345____________
+ v['reference'] = v['reference'].rjust(15, '0').ljust(27, ' ')
+
if not v['partner_bvr']:
raise osv.except_osv(_('Error'), _('You must provide a BVR number\n'
'for the bank account: %s' \
=== modified file 'l10n_ch/wizard/create_dta_view.xml'
--- l10n_ch/wizard/create_dta_view.xml 2011-11-16 11:58:10 +0000
+++ l10n_ch/wizard/create_dta_view.xml 2012-01-19 09:30:09 +0000
@@ -8,8 +8,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="DTA file creation - Results">
- <group width="300" colspan="4">
- <separator string="Create DTA - (DTA file will appear after you click on create)" colspan="4"/>
+ <group colspan="4">
<field name="dta_file"/>
<group colspan="4">
<button special="cancel" string="Cancel" icon="gtk-cancel" colspan="2"/>
@@ -32,6 +31,7 @@
<record model="ir.values" id="action_account_dtr_create_values">
<field name="model_id" ref="model_create_dta_wizard" />
+ <field name="object" eval="1" />
<field name="name">Create DTA</field>
<field name="key2">client_action_multi</field>
<field name="value" eval="'ir.actions.act_window,' +str(ref('action_dta_create'))" />
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp