diff --git a/addons/l10n_ch/bank.py b/addons/l10n_ch/bank.py
index 9dd0caddf38..b20058fbcd7 100644
--- a/addons/l10n_ch/bank.py
+++ b/addons/l10n_ch/bank.py
@@ -1,4 +1,4 @@
-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Nicolas Bessi. Copyright Camptocamp SA
@@ -19,8 +19,8 @@
#
##############################################################################
-from tools.translate import _
from osv import fields, osv
+from tools import mod10r
import re
class Bank(osv.osv):
@@ -35,10 +35,15 @@ class Bank(osv.osv):
'city': fields.char('City', size=128, select=1),
}
-Bank()
-
class ResPartnerBank(osv.osv):
+ """
+ Inherit res.partner.bank class in order to add swiss specific fields
+ such as:
+ - A postnumber
+ - BVR data
+ - BVR print options for company accounts
+ """
_inherit = "res.partner.bank"
_columns = {
@@ -85,12 +90,15 @@ class ResPartnerBank(osv.osv):
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
+ nums = number.split('-')
+ prefix = nums[0]
+ num = nums[1].rjust(6,'0')
+ checksum = nums[2]
+ expected_checksum = mod10r(prefix + num)[-1]
+ return expected_checksum == checksum
def _check_5_pos_postal_num(self, number):
@@ -103,6 +111,9 @@ class ResPartnerBank(osv.osv):
return True
def _check_postal_num(self, cursor, uid, ids):
+ """
+ validate postal number format
+ """
banks = self.browse(cursor, uid, ids)
for b in banks:
if not b.post_number:
@@ -110,14 +121,12 @@ class ResPartnerBank(osv.osv):
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'])]
+ 'Please enter a correct postal number. (01-23456-1 or 12345)',
+ ['post_number'])]
_sql_constraints = [('bvr_adherent_uniq', 'unique (bvr_adherent_num)',
'The BVR adherent number must be unique !')]
-ResPartnerBank()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/l10n_ch/demo/dta_demo.xml b/addons/l10n_ch/demo/dta_demo.xml
index 4f44ad21cc0..832c1c6a015 100644
--- a/addons/l10n_ch/demo/dta_demo.xml
+++ b/addons/l10n_ch/demo/dta_demo.xml
@@ -12,7 +12,7 @@
123456
bvrbank
- 01-23456-5
+ 01-23456-1
diff --git a/addons/l10n_ch/journal_data.xml b/addons/l10n_ch/journal_data.xml
index 04870ca936b..2d63b1df456 100644
--- a/addons/l10n_ch/journal_data.xml
+++ b/addons/l10n_ch/journal_data.xml
@@ -42,15 +42,6 @@
-
- Opérations Diverses
- OD
- general
-
-
-
-
-
Journal d'ouverture
diff --git a/addons/l10n_ch/report/report_webkit_html.py b/addons/l10n_ch/report/report_webkit_html.py
index d930258f4a7..960651425b8 100644
--- a/addons/l10n_ch/report/report_webkit_html.py
+++ b/addons/l10n_ch/report/report_webkit_html.py
@@ -20,22 +20,31 @@
##############################################################################
import time
-from report import report_sxw
-from report_webkit import webkit_report
-from report_webkit import report_helper
-from osv import osv
-from tools import mod10r
import sys
import os
import re
+
+from mako.template import Template
+from mako.lookup import TemplateLookup
+from mako import exceptions
+
+
+from report import report_sxw
+from report_webkit import webkit_report
+from report_webkit import report_helper
+
+from osv import osv
+from osv.osv import except_osv
+
+from tools import mod10r
+from tools.translate import _
+from tools.config import config
+
import wizard
import addons
import pooler
-from tools.config import config
-from mako.template import Template
-from mako import exceptions
-from tools.translate import _
-from osv.osv import except_osv
+
+
class l10n_ch_report_webkit_html(report_sxw.rml_parse):
@@ -59,24 +68,24 @@ class l10n_ch_report_webkit_html(report_sxw.rml_parse):
_compile_comma_me = re.compile("^(-?\d+)(\d{3})")
_compile_check_bvr = re.compile('[0-9][0-9]-[0-9]{3,6}-[0-9]')
_compile_check_bvr_add_num = re.compile('[0-9]*$')
-
+
def set_context(self, objects, data, ids, report_type=None):
user = self.pool.get('res.users').browse(self.cr, self.uid, self.uid)
company = user.company_id
if not company.invoice_only:
self._check(ids)
return super(l10n_ch_report_webkit_html, self).set_context(objects, data, ids, report_type=report_type)
-
+
def police_absolute_path(self, inner_path) :
"""Will get the ocrb police absolute path"""
path = addons.get_module_resource(os.path.join('l10n_ch', 'report', inner_path))
return path
-
+
def bvr_absolute_path(self) :
"""Will get the ocrb police absolute path"""
path = addons.get_module_resource(os.path.join('l10n_ch', 'report', 'bvr1.jpg'))
return path
-
+
def headheight(self):
report_id = self.pool.get('ir.actions.report.xml').search(self.cr, self.uid, [('name','=', 'BVR invoice')])[0]
report = self.pool.get('ir.actions.report.xml').browse(self.cr, self.uid, report_id)
@@ -103,8 +112,8 @@ class l10n_ch_report_webkit_html(report_sxw.rml_parse):
'12 34567 89012 345'
"""
return ''.join([' '[(i - 2) % nbrspc:] + c for i, c in enumerate(nbr)])
-
-
+
+
def _get_ref(self, inv):
"""Retrieve ESR/BVR reference form invoice in order to print it"""
res = ''
@@ -114,7 +123,7 @@ class l10n_ch_report_webkit_html(report_sxw.rml_parse):
if inv.number:
invoice_number = self._compile_get_ref.sub('', inv.number)
return mod10r(res + invoice_number.rjust(26-len(res), '0'))
-
+
def _check(self, invoice_ids):
"""Check if the invoice is ready to be printed"""
if not invoice_ids:
@@ -144,52 +153,27 @@ class l10n_ch_report_webkit_html(report_sxw.rml_parse):
'information for the invoice:\n%s') %(invoice_name)))
return ''
+def mako_template(text):
+ """Build a Mako template.
+
+ This template uses UTF-8 encoding
+ """
+ tmp_lookup = TemplateLookup() #we need it in order to allow inclusion and inheritance
+ return Template(text, input_encoding='utf-8', output_encoding='utf-8', lookup=tmp_lookup)
+
class BVRWebKitParser(webkit_report.WebKitParser):
-
- def setLang(self, lang):
- if not lang:
- lang = 'en_US'
- self.localcontext['lang'] = lang
-
- def formatLang(self, value, digits=None, date=False, date_time=False, grouping=True, monetary=False):
- """format using the know cursor, language from localcontext"""
- if digits is None:
- digits = self.parser_instance.get_digits(value)
- if isinstance(value, (str, unicode)) and not value:
- return ''
- pool_lang = self.pool.get('res.lang')
- lang = self.localcontext['lang']
- lang_ids = pool_lang.search(self.parser_instance.cr, self.parser_instance.uid, [('code','=',lang)])[0]
- lang_obj = pool_lang.browse(self.parser_instance.cr, self.parser_instance.uid, lang_ids)
+ bvr_file_path = os.path.join('l10n_ch','report','bvr.mako')
- if date or date_time:
- if not str(value):
- return ''
-
- date_format = lang_obj.date_format
- parse_format = '%Y-%m-%d'
- if date_time:
- value=value.split('.')[0]
- date_format = date_format + " " + lang_obj.time_format
- parse_format = '%Y-%m-%d %H:%M:%S'
- if not isinstance(value, time.struct_time):
- return time.strftime(date_format, time.strptime(value, parse_format))
-
- else:
- date = datetime(*value.timetuple()[:6])
- return date.strftime(date_format)
-
- return lang_obj.format('%.' + str(digits) + 'f', value, grouping=grouping, monetary=monetary)
-
def create_single_pdf(self, cursor, uid, ids, data, report_xml, context=None):
"""generate the PDF"""
- self.parser_instance = self.parser(
- cursor,
- uid,
- self.name2,
- context=context
- )
+ context = context or {}
+ if report_xml.report_type != 'webkit':
+ return super(WebKitParser,self).create_single_pdf(cursor, uid, ids, data, report_xml, context=context)
+ self.parser_instance = self.parser(cursor,
+ uid,
+ self.name2,
+ context=context)
self.pool = pooler.get_pool(cursor.dbname)
objs = self.getObjects(cursor, uid, ids, context)
self.parser_instance.set_context(objs, data, ids, report_xml.report_type)
@@ -201,7 +185,7 @@ class BVRWebKitParser(webkit_report.WebKitParser):
if not template and report_xml.report_webkit_data :
template = report_xml.report_webkit_data
if not template :
- raise except_osv(_('Webkit Report template not found !'), _(''))
+ raise except_osv(_('Error'),_('Webkit Report template not found !'))
header = report_xml.webkit_header.html
footer = report_xml.webkit_header.footer_html
if not header and report_xml.header:
@@ -210,43 +194,19 @@ class BVRWebKitParser(webkit_report.WebKitParser):
_('Please set a header in company settings')
)
if not report_xml.header :
- #I know it could be cleaner ...
- header = u"""
-
-
-
-
-
-
-
-"""
- self.parser_instance.localcontext.update({'setLang':self.setLang})
- self.parser_instance.localcontext.update({'formatLang':self.formatLang})
+ header = ''
+ default_head = addons.get_module_resource('report_webkit', 'default_header.html')
+ with open(default_head,'r') as f:
+ header = f.read()
css = report_xml.webkit_header.css
if not css :
css = ''
user = self.pool.get('res.users').browse(cursor, uid, uid)
company = user.company_id
- parse_template = template
- #default_filters=['unicode', 'entity'] can be used to set global filter
- body_mako_tpl = Template(parse_template ,input_encoding='utf-8', output_encoding='utf-8')
+ body_mako_tpl = mako_template(template)
#BVR specific
- bvr_path = addons.get_module_resource(os.path.join('l10n_ch','report','bvr.mako'))
- body_bvr_tpl = Template(file(bvr_path).read(), input_encoding='utf-8', output_encoding='utf-8')
-
+ bvr_path = addons.get_module_resource(self.bvr_file_path)
+ body_bvr_tpl = mako_template(file(bvr_path).read())
helper = report_helper.WebKitHelper(cursor, uid, report_xml.id, context)
##BVR Specific
htmls = []
@@ -254,68 +214,58 @@ class BVRWebKitParser(webkit_report.WebKitParser):
self.parser_instance.localcontext['objects'] = [obj]
if not company.bvr_only:
try:
- html = body_mako_tpl.render(
- helper=helper,
+ html = body_mako_tpl.render(helper=helper,
css=css,
_=self.translate_call,
- **self.parser_instance.localcontext
- )
+ **self.parser_instance.localcontext)
except Exception, e:
raise Exception(exceptions.text_error_template().render())
htmls.append(html)
if not company.invoice_only:
try:
- bvr = body_bvr_tpl.render(
- helper=helper,
- css=css,
- _=self.translate_call,
- **self.parser_instance.localcontext
- )
+ bvr = body_bvr_tpl.render(helper=helper,
+ css=css,
+ _=self.translate_call,
+ **self.parser_instance.localcontext)
except Exception, e:
raise Exception(exceptions.text_error_template().render())
- htmls.append(bvr)
+ htmls.append(bvr)
head_mako_tpl = Template(header, input_encoding='utf-8', output_encoding='utf-8')
try:
- head = head_mako_tpl.render(
- helper=helper,
+ head = head_mako_tpl.render(helper=helper,
css=css,
_debug=False,
_=self.translate_call,
- **self.parser_instance.localcontext
- )
+ **self.parser_instance.localcontext)
except Exception, e:
raise Exception(exceptions.text_error_template().render())
foot = False
if footer and company.invoice_only :
foot_mako_tpl = Template(footer, input_encoding='utf-8', output_encoding='utf-8')
try:
- foot = foot_mako_tpl.render(
- helper=helper,
- css=css,
+ foot = foot_mako_tpl.render(helper=helper,
+ css=css,
_=self.translate_call,
- **self.parser_instance.localcontext
- )
+ **self.parser_instance.localcontext)
except Exception, e:
raise Exception(exceptions.text_error_template().render())
if report_xml.webkit_debug :
try:
- deb = head_mako_tpl.render(
- helper=helper,
- css=css,
+ deb = head_mako_tpl.render(helper=helper,
+ css=css,
_debug=html,
_=self.translate_call,
- **self.parser_instance.localcontext
- )
+ **self.parser_instance.localcontext)
except Exception, e:
raise Exception(exceptions.text_error_template().render())
return (deb, 'html')
bin = self.get_lib(cursor, uid)
pdf = self.generate_pdf(bin, report_xml, head, foot, htmls)
return (pdf, 'pdf')
-
+
BVRWebKitParser('report.invoice_web_bvr',
- 'account.invoice',
+ 'account.invoice',
'addons/l10n_ch/report/report_webkit_html.mako',
parser=l10n_ch_report_webkit_html)
diff --git a/addons/l10n_ch/sterchi_chart/account.xml b/addons/l10n_ch/sterchi_chart/account.xml
index 588fa5fed61..a4dcadf5fc6 100644
--- a/addons/l10n_ch/sterchi_chart/account.xml
+++ b/addons/l10n_ch/sterchi_chart/account.xml
@@ -177,12 +177,14 @@
Bilan : Debiteurs
receivable
+
unreconciled
none
Bilan : Fournisseurs
payable
+
unreconciled
none
@@ -582,7 +584,7 @@
receivable
- True
+
Créances envers des tiers suisses
1100
@@ -591,7 +593,7 @@
receivable
- True
+
Créances envers des tiers étrangers
1101
@@ -616,7 +618,7 @@
receivable
- True
+
Créances envers la filiale A
1110
@@ -625,7 +627,7 @@
receivable
- True
+
Créances envers la filiale B
1111
@@ -650,7 +652,7 @@
receivable
- True
+
Créances envers l'actionnaire X
1120
@@ -659,7 +661,7 @@
receivable
- True
+
Créances envers l'actionnaire Y
1121
@@ -11832,10 +11834,6 @@
-
-
-
-
diff --git a/addons/l10n_ch/sterchi_chart/account_journal_rel.xml b/addons/l10n_ch/sterchi_chart/account_journal_rel.xml
index 43dbbe5e8fa..be4f715c4fc 100644
--- a/addons/l10n_ch/sterchi_chart/account_journal_rel.xml
+++ b/addons/l10n_ch/sterchi_chart/account_journal_rel.xml
@@ -23,10 +23,6 @@
-
-
-
-
diff --git a/addons/l10n_ch/wizard/create_dta.py b/addons/l10n_ch/wizard/create_dta.py
index e9b0585d4c8..9b4f2c5bfee 100644
--- a/addons/l10n_ch/wizard/create_dta.py
+++ b/addons/l10n_ch/wizard/create_dta.py
@@ -421,7 +421,7 @@ def _create_dta(obj, cr, uid, data, context=None):
raise osv.except_osv(_('Error'), _('No bank defined\n' \
'for the bank account: %s\n' \
'on the partner: %s\n' \
- 'on line: %s') + (pline.bank_id.state, pline.partner_id.name, pline.name))
+ 'on line: %s') % (pline.bank_id.state, pline.partner_id.name, pline.name))
v['sequence'] = str(seq).rjust(5).replace(' ', '0')
v['amount_to_pay']= str(pline.amount_currency).replace('.', ',')