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('.', ',')