From 42d54dcfddfa5554f3b57c09a0c0fd59c516bc98 Mon Sep 17 00:00:00 2001 From: bch <> Date: Fri, 12 Jan 2007 09:31:35 +0000 Subject: [PATCH] DTA : new version : the bank account type define the way the dta is created bzr revid: bch-bab60b45a9ad7e49b17ec812275a13f1fb65ee29 --- addons/l10n_ch/__terp__.py | 2 +- addons/l10n_ch/dta/dta_data.xml | 44 ++++++++++++++ addons/l10n_ch/dta/dta_demo.xml | 24 ++------ addons/l10n_ch/dta/dta_view.xml | 16 ++++- addons/l10n_ch/dta/dta_wizard.py | 101 ++++++++++++++++++++++++------- addons/l10n_ch/dta/invoice.py | 2 - addons/l10n_ch/partner.py | 8 +++ 7 files changed, 151 insertions(+), 46 deletions(-) create mode 100644 addons/l10n_ch/dta/dta_data.xml diff --git a/addons/l10n_ch/__terp__.py b/addons/l10n_ch/__terp__.py index 9e491c1f5e1..adde8e56283 100755 --- a/addons/l10n_ch/__terp__.py +++ b/addons/l10n_ch/__terp__.py @@ -8,7 +8,7 @@ "category" : "Localisation/Europe", "website": "http://www.tinyerp.com", "depends" : ["base", "account"], - "init_xml" : [], + "init_xml" : ["dta/dta_data.xml"], # "init_xml" : ["zip_code_default.xml"], "demo_xml" : ["vaudtax_data_demo.xml","dta/dta_demo.xml"], "update_xml" : [ diff --git a/addons/l10n_ch/dta/dta_data.xml b/addons/l10n_ch/dta/dta_data.xml new file mode 100644 index 00000000000..c532c6b656e --- /dev/null +++ b/addons/l10n_ch/dta/dta_data.xml @@ -0,0 +1,44 @@ + + + + + + Iban + + iban + + + + BVR Post + + bvrpost + + + + BVR Bank + + bvrbank + + + + + BV Post + + bvpost + + + + BV Bank + + bvbank + + + + + Other + + + + + + diff --git a/addons/l10n_ch/dta/dta_demo.xml b/addons/l10n_ch/dta/dta_demo.xml index 66c6fbcc06a..e1de5333316 100644 --- a/addons/l10n_ch/dta/dta_demo.xml +++ b/addons/l10n_ch/dta/dta_demo.xml @@ -2,40 +2,28 @@ - - With Iban (will generate gt836 records) - - iban - - - - Regular type - - - - FORTIS BANK 1234567 Fortis Banque - + - + Dexia (with iban) 7654321 Dexia Banque - + - + Dexia (with bvr) 7654321 Dexia Banque - + @@ -70,7 +58,7 @@ 2bp in_invoice - + diff --git a/addons/l10n_ch/dta/dta_view.xml b/addons/l10n_ch/dta/dta_view.xml index 03d04868a46..dfe54d72e1c 100644 --- a/addons/l10n_ch/dta/dta_view.xml +++ b/addons/l10n_ch/dta/dta_view.xml @@ -16,8 +16,21 @@ + + res.partner.bank.form + res.partner.bank + form + + + + + + + + + + - account.invoice.form account.invoice @@ -27,7 +40,6 @@ - diff --git a/addons/l10n_ch/dta/dta_wizard.py b/addons/l10n_ch/dta/dta_wizard.py index 1d2429fa225..fc0e107abc0 100644 --- a/addons/l10n_ch/dta/dta_wizard.py +++ b/addons/l10n_ch/dta/dta_wizard.py @@ -167,8 +167,8 @@ class record: self.fields = [] self.global_values = global_context_dict self.pre={'padding':'','seg_num1':'01','seg_num2':'02', - 'seg_num3':'03','seg_num4':'04','seg_num5':'05', - 'type_paiement':'0', 'flag':'0', 'zero5':'00000' + 'seg_num3':'03','seg_num4':'04','seg_num5':'05', + 'type_paiement':'0', 'flag':'0', 'zero5':'00000' } self.post={} self.init_local_context() @@ -232,7 +232,32 @@ class record_gt826(record): class record_gt827(record): # -> interne suisse def init_local_context(self): - raise Exception("Record gt827 not yet available") + print "gt826" + self.fields=[ + ('seg_num1',2), + #header + ('date_value',6),('partner_bank_clearing',12),('zero5',5),('creation_date',6), + ('comp_bank_clearing',7), ('uid',5), + ('sequence',5), + ('genre_trans',3), + ('type_paiement',1),('flag',1), + #seg1 + ('comp_dta',5),('invoice_number',11),('comp_bank_number',24),('date_value',6), + ('invoice_currency',3),('amount_to_pay',12),('padding',14), + #seg2 + ('seg_num2',2),('comp_name',20),('comp_street',20),('comp_zip',10), + ('comp_city',10),('comp_country',20),('padding',46), + #seg3 + ('seg_num3',2),('partner_bvr',12),#numero d'adherent bvr + ('padding',80),('invoice_reference',27),#communication structuree + ('padding',2)] + + self.pre.update({'partner_cpt_benef':'', + 'type_paiement':'1', 'genre_trans':'826', + 'conv_cours':'', 'option_id_bank':'D', + 'ref2':'','ref3':'', + 'format':'0'}) + @@ -255,22 +280,22 @@ class record_gt836(record): ('seg_num2',2),('conv_cours',12),('comp_name',35),('comp_street',35),('comp_zip',10), ('comp_city',15),('comp_country',10),('padding',9), #seg3 - ('seg_num3',2),('option_id_bank',1),('partner_bank_name',35),('partner_bank_city',35), + ('seg_num3',2),('option_id_bank',1),('partner_bank_ident',70), ('partner_iban',34),('padding',21), #seg4 ('seg_num4',2),('partner_name',35),('partner_street',35),('partner_zip',10),('partner_city',15), ('partner_country',10),('padding',21), #seg5 - ('seg_num5',2),('option_motif',1),('ref1',35),('ref2',35),('ref3',35),('format',1)] + ('seg_num5',2),('option_motif',1),('ref1',35),('ref2',35),('ref3',35),('format',1),('padding',19)] self.pre.update({'partner_bank_clearing':'','partner_cpt_benef':'', 'type_paiement':'1', 'genre_trans':'836', - 'conv_cours':'', 'option_id_bank':'D', + 'conv_cours':'', 'ref1': self.global_values['invoice_reference'], 'ref2':'','ref3':'', 'partner_iban': self.global_values['partner_bank_number'], 'format':'0'}) - self.post.update({'option_motif':'U'}) + self.post.update({'comp_dta':'','option_motif':'U'}) class record_gt890(record): @@ -286,7 +311,7 @@ class record_gt890(record): ('genre_trans',3), ('type_paiement',1),('flag',1), #total - ('amount_total',16)] + ('amount_total',16),('padding',59)] self.pre.update({'partner_bank_clearing':'','partner_cpt_benef':'', 'company_bank_clearing':'','genre_trans':'890'}) @@ -319,10 +344,11 @@ def _create_dta(self,cr,uid,data,context): v['comp_bank_name']= bank.name or False - v['comp_bank_clearing'] = bank.bank_code or False # clearing or swift + v['comp_bank_clearing'] = bank.bank_clearing or False # clearing + v['comp_bank_code'] = bank.bank_code or False # swift or BIC - if not v['comp_bank_name'] and v['comp_bank_iban'] : - return {'note':'Bank account of the company not well defined.'} + if not v['comp_bank_clearing']: + return {'note':'You must provide a Clearing Number for your bank account.'} user = pool.get('res.users').browse(cr,uid,[uid])[0] company= user.company_id @@ -339,9 +365,10 @@ def _create_dta(self,cr,uid,data,context): v['comp_bank_number'] = bank.number or '' - if not v['comp_bank_number'] : # ex iban return {'note':'No account number for the company bank account.'} + + v['comp_bank_iban'] = bank.iban or '' inv_obj = pool.get('account.invoice') dta_line_obj = pool.get('account.dta.line') @@ -376,7 +403,7 @@ def _create_dta(self,cr,uid,data,context): for dtal in dta_line_obj.browse(cr,uid,dta_line_ids): - + print "BCL SUR LES I" i = dtal.name #dta_line.name = invoice's id invoice_number = i.number or '??' if not i.partner_bank_id: @@ -388,7 +415,7 @@ def _create_dta(self,cr,uid,data,context): v['sequence'] = str(seq).rjust(5,'0') - v['amount_to_pay']= str(dtal.amount_to_pay) + v['amount_to_pay']= str(dtal.amount_to_pay).replace('.',',') v['invoice_number'] = invoice_number v['invoice_currency'] = i.currency_id.code or '' @@ -405,7 +432,11 @@ def _create_dta(self,cr,uid,data,context): v['partner_bvr']= i.partner_id.bvr_number or '' - v['partner_bank_city']= 'FIXME' + v['partner_bank_city']= i.partner_bank_id.city or False + v['partner_bank_street']= i.partner_bank_id.street or '' + v['partner_bank_zip']= i.partner_bank_id.zip or '' + v['partner_bank_country']= i.partner_bank_id.country_id and i.partner_bank_id.country_id.name or '' + v['partner_bank_code']= i.partner_bank_id.bank_code or False v['invoice_reference']= i.reference v['partner_name'] = i.partner_id and i.partner_id.name or '' @@ -413,7 +444,7 @@ def _create_dta(self,cr,uid,data,context): v['partner_street'] = i.partner_id.address[0].street v['partner_city']= i.partner_id.address[0].city v['partner_zip']= i.partner_id.address[0].zip - v['partner_country']= i.partner_id.address[0].country_id.name + v['partner_country']= i.partner_id.address[0].country_id and i.partner_id.address[0].country_id.name or '' else: v['partner_street'] ='' v['partner_city']= '' @@ -439,14 +470,38 @@ def _create_dta(self,cr,uid,data,context): elec_pay = i.partner_bank_id.type_id.elec_pay - if elec_pay and elec_pay == 'iban': + if not elec_pay : + log= log +'\nBank type does not support DTA. (invoice '+ invoice_number +')' + continue + + if elec_pay == 'iban': record_type = record_gt836 - if i.structured_ref : - v['option_motif']='I' - elif i.structured_ref : - record_type = record_gt826 + if v['partner_bank_code'] : + print "IF1" + v['option_id_bank']= 'A' + v['partner_bank_ident']= v['partner_bank_code'] + elif v['partner_bank_city']: + print "IF2" + v['option_id_bank']= 'D' + v['partner_bank_ident']= v['partner_bank_name'] +' '+v['partner_bank_street']\ + +' '+v['partner_bank_zip']+' '+v['partner_bank_city']\ + +' '+v['partner_bank_country'] + else: + log= log +'\nYou must provide the bank city or the bank code. (invoice '+ invoice_number +')' + continue + +# elif elec_pay == 'bvrbank': +# record_type = record_gt826 +# elif elec_pay == 'bvrpost': +# record_type = record_gt827 +# elif elec_pay == 'bvbank': +# record_type = record_gt827 +# elif elec_pay == 'bvpost': +# record_type = record_gt827 else: - record_type = record_gt827 + log= log +'\nBank type not supported. (invoice '+ invoice_number +')' + continue + try: dta_line = record_type(v).generate() @@ -483,7 +538,7 @@ def _create_dta(self,cr,uid,data,context): pool.get('account.bank.statement').write(cr,uid,[bk_st_id],{'balance_end_real': amount_tot}) # segment total - v['amount_total'] = str(amount_tot) + v['amount_total'] = str(amount_tot).replace('.',',') try: if dta : dta = dta + record_gt890(v).generate() diff --git a/addons/l10n_ch/dta/invoice.py b/addons/l10n_ch/dta/invoice.py index 25d46305596..ea27bb6c389 100644 --- a/addons/l10n_ch/dta/invoice.py +++ b/addons/l10n_ch/dta/invoice.py @@ -40,12 +40,10 @@ class account_invoice(osv.osv): ('2bp','To be paid'), ('paid','Paid')], 'DTA state',readonly=True,select=True, states={'draft':[('readonly',False)]}), - 'structured_ref': fields.boolean('Structured Reference'), } _defaults = { 'dta_state': lambda *a: 'none', - 'structured_ref': lambda *a: False, } account_invoice() diff --git a/addons/l10n_ch/partner.py b/addons/l10n_ch/partner.py index 90f50635ccb..6698c96bbaa 100644 --- a/addons/l10n_ch/partner.py +++ b/addons/l10n_ch/partner.py @@ -38,3 +38,11 @@ class res_partner(osv.osv): } res_partner() + +class res_partner_bank(osv.osv): + _inherit = "res.partner.bank" + _columns = { + 'bank_code': fields.char('Bank Code', size=64, help='Swift or BIC number'), + 'bank_clearing': fields.char('Bank Clearing Number', size=64), + } +res_partner_bank()