DTA : new version : the bank account type define the way the dta is created

bzr revid: bch-bab60b45a9ad7e49b17ec812275a13f1fb65ee29
This commit is contained in:
bch 2007-01-12 09:31:35 +00:00
parent e13a010db0
commit 42d54dcfdd
7 changed files with 151 additions and 46 deletions

View File

@ -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" : [

View File

@ -0,0 +1,44 @@
<?xml version="1.0"?>
<terp>
<data>
<record model="res.partner.bank.type" id="bank_type_iban">
<field name="name">Iban</field>
<field name="code"></field>
<field name="elec_pay">iban</field>
</record>
<record model="res.partner.bank.type" id="bank_type_bvrpost">
<field name="name">BVR Post</field>
<field name="code"></field>
<field name="elec_pay">bvrpost</field>
</record>
<record model="res.partner.bank.type" id="bank_type_bvrbank">
<field name="name">BVR Bank</field>
<field name="code"></field>
<field name="elec_pay">bvrbank</field>
</record>
<record model="res.partner.bank.type" id="bank_type_bvpost">
<field name="name">BV Post</field>
<field name="code"></field>
<field name="elec_pay">bvpost</field>
</record>
<record model="res.partner.bank.type" id="bank_type_bvbank">
<field name="name">BV Bank</field>
<field name="code"></field>
<field name="elec_pay">bvbank</field>
</record>
<record model="res.partner.bank.type" id="bank_type_notype">
<field name="name">Other</field>
<field name="code"></field>
<field name="elec_pay"></field>
</record>
</data>
</terp>

View File

@ -2,40 +2,28 @@
<terp>
<data>
<record model="res.partner.bank.type" id="bank_type_iban">
<field name="name">With Iban (will generate gt836 records)</field>
<field name="code"></field>
<field name="elec_pay">iban</field>
</record>
<record model="res.partner.bank.type" id="bank_type_gt">
<field name="name">Regular type</field>
<field name="code"></field>
<field name="elec_pay"></field>
</record>
<record model="res.partner.bank" id="main_bank">
<field name="name">FORTIS BANK</field>
<field name="number">1234567</field>
<field name="bank_name">Fortis Banque</field>
<field name="partner_id" ref="base.main_partner"/>
<field name="type_id" ref="bank_type_gt836"/>
<field name="type_id" ref="bank_type_notype"/>
</record>
<record model="res.partner.bank" id="agrolait_bank_gt836">
<record model="res.partner.bank" id="agrolait_bank_iban">
<field name="name">Dexia (with iban)</field>
<field name="number">7654321</field>
<field name="bank_name">Dexia Banque</field>
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="type_id" ref="bank_type_gt836"/>
<field name="type_id" ref="bank_type_iban"/>
</record>
<record model="res.partner.bank" id="agrolait_bank_gt826">
<record model="res.partner.bank" id="agrolait_bank_bvrbank">
<field name="name">Dexia (with bvr)</field>
<field name="number">7654321</field>
<field name="bank_name">Dexia Banque</field>
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="type_id" ref="bank_type_gt826"/>
<field name="type_id" ref="bank_type_bvrbank"/>
</record>
<record model="res.partner" id="base.res_partner_agrolait">
@ -70,7 +58,7 @@
<field name="dta_state">2bp</field>
<field name="type">in_invoice</field>
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="partner_bank_id" ref="agrolait_bank_gt826"/>
<field name="partner_bank_id" ref="agrolait_bank_bvrbank"/>
<field name="address_invoice_id" ref="base.res_partner_address_8"/>
<field name="account_id" ref="account.a_pay"/>
<field name="currency_id" ref="base.EUR"/>

View File

@ -16,8 +16,21 @@
<record model="ir.ui.view" id="view_partner_bank_form">
<field name="name">res.partner.bank.form</field>
<field name="model">res.partner.bank</field>
<field name="type">form</field>
<field name="inherit_id" ref="base.view_partner_bank_form"/>
<field name="arch" type="xml">
<field name="bank_code" position="after">
<newline/>
<field name="bank_clearing" />
</field>
</field>
</record>
<!-- these two record applies t othe same parent -->
<record model="ir.ui.view" id="invoice_form">
<field name="name">account.invoice.form</field>
<field name="model">account.invoice</field>
@ -27,7 +40,6 @@
<field name="journal_id" position="after">
<newline/>
<field name="dta_state" select="1"/>
<field name="structured_ref" />
</field>
</field>

View File

@ -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()

View File

@ -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()

View File

@ -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()