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", "category" : "Localisation/Europe",
"website": "http://www.tinyerp.com", "website": "http://www.tinyerp.com",
"depends" : ["base", "account"], "depends" : ["base", "account"],
"init_xml" : [], "init_xml" : ["dta/dta_data.xml"],
# "init_xml" : ["zip_code_default.xml"], # "init_xml" : ["zip_code_default.xml"],
"demo_xml" : ["vaudtax_data_demo.xml","dta/dta_demo.xml"], "demo_xml" : ["vaudtax_data_demo.xml","dta/dta_demo.xml"],
"update_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> <terp>
<data> <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"> <record model="res.partner.bank" id="main_bank">
<field name="name">FORTIS BANK</field> <field name="name">FORTIS BANK</field>
<field name="number">1234567</field> <field name="number">1234567</field>
<field name="bank_name">Fortis Banque</field> <field name="bank_name">Fortis Banque</field>
<field name="partner_id" ref="base.main_partner"/> <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>
<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="name">Dexia (with iban)</field>
<field name="number">7654321</field> <field name="number">7654321</field>
<field name="bank_name">Dexia Banque</field> <field name="bank_name">Dexia Banque</field>
<field name="partner_id" ref="base.res_partner_agrolait"/> <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>
<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="name">Dexia (with bvr)</field>
<field name="number">7654321</field> <field name="number">7654321</field>
<field name="bank_name">Dexia Banque</field> <field name="bank_name">Dexia Banque</field>
<field name="partner_id" ref="base.res_partner_agrolait"/> <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>
<record model="res.partner" id="base.res_partner_agrolait"> <record model="res.partner" id="base.res_partner_agrolait">
@ -70,7 +58,7 @@
<field name="dta_state">2bp</field> <field name="dta_state">2bp</field>
<field name="type">in_invoice</field> <field name="type">in_invoice</field>
<field name="partner_id" ref="base.res_partner_agrolait"/> <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="address_invoice_id" ref="base.res_partner_address_8"/>
<field name="account_id" ref="account.a_pay"/> <field name="account_id" ref="account.a_pay"/>
<field name="currency_id" ref="base.EUR"/> <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"> <record model="ir.ui.view" id="invoice_form">
<field name="name">account.invoice.form</field> <field name="name">account.invoice.form</field>
<field name="model">account.invoice</field> <field name="model">account.invoice</field>
@ -27,7 +40,6 @@
<field name="journal_id" position="after"> <field name="journal_id" position="after">
<newline/> <newline/>
<field name="dta_state" select="1"/> <field name="dta_state" select="1"/>
<field name="structured_ref" />
</field> </field>
</field> </field>

View File

@ -167,8 +167,8 @@ class record:
self.fields = [] self.fields = []
self.global_values = global_context_dict self.global_values = global_context_dict
self.pre={'padding':'','seg_num1':'01','seg_num2':'02', self.pre={'padding':'','seg_num1':'01','seg_num2':'02',
'seg_num3':'03','seg_num4':'04','seg_num5':'05', 'seg_num3':'03','seg_num4':'04','seg_num5':'05',
'type_paiement':'0', 'flag':'0', 'zero5':'00000' 'type_paiement':'0', 'flag':'0', 'zero5':'00000'
} }
self.post={} self.post={}
self.init_local_context() self.init_local_context()
@ -232,7 +232,32 @@ class record_gt826(record):
class record_gt827(record): class record_gt827(record):
# -> interne suisse # -> interne suisse
def init_local_context(self): 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), ('seg_num2',2),('conv_cours',12),('comp_name',35),('comp_street',35),('comp_zip',10),
('comp_city',15),('comp_country',10),('padding',9), ('comp_city',15),('comp_country',10),('padding',9),
#seg3 #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), ('partner_iban',34),('padding',21),
#seg4 #seg4
('seg_num4',2),('partner_name',35),('partner_street',35),('partner_zip',10),('partner_city',15), ('seg_num4',2),('partner_name',35),('partner_street',35),('partner_zip',10),('partner_city',15),
('partner_country',10),('padding',21), ('partner_country',10),('padding',21),
#seg5 #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':'', self.pre.update({'partner_bank_clearing':'','partner_cpt_benef':'',
'type_paiement':'1', 'genre_trans':'836', 'type_paiement':'1', 'genre_trans':'836',
'conv_cours':'', 'option_id_bank':'D', 'conv_cours':'',
'ref1': self.global_values['invoice_reference'], 'ref1': self.global_values['invoice_reference'],
'ref2':'','ref3':'', 'ref2':'','ref3':'',
'partner_iban': self.global_values['partner_bank_number'], 'partner_iban': self.global_values['partner_bank_number'],
'format':'0'}) 'format':'0'})
self.post.update({'option_motif':'U'}) self.post.update({'comp_dta':'','option_motif':'U'})
class record_gt890(record): class record_gt890(record):
@ -286,7 +311,7 @@ class record_gt890(record):
('genre_trans',3), ('genre_trans',3),
('type_paiement',1),('flag',1), ('type_paiement',1),('flag',1),
#total #total
('amount_total',16)] ('amount_total',16),('padding',59)]
self.pre.update({'partner_bank_clearing':'','partner_cpt_benef':'', self.pre.update({'partner_bank_clearing':'','partner_cpt_benef':'',
'company_bank_clearing':'','genre_trans':'890'}) '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_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'] : if not v['comp_bank_clearing']:
return {'note':'Bank account of the company not well defined.'} return {'note':'You must provide a Clearing Number for your bank account.'}
user = pool.get('res.users').browse(cr,uid,[uid])[0] user = pool.get('res.users').browse(cr,uid,[uid])[0]
company= user.company_id company= user.company_id
@ -339,9 +365,10 @@ def _create_dta(self,cr,uid,data,context):
v['comp_bank_number'] = bank.number or '' v['comp_bank_number'] = bank.number or ''
if not v['comp_bank_number'] : # ex iban if not v['comp_bank_number'] : # ex iban
return {'note':'No account number for the company bank account.'} return {'note':'No account number for the company bank account.'}
v['comp_bank_iban'] = bank.iban or ''
inv_obj = pool.get('account.invoice') inv_obj = pool.get('account.invoice')
dta_line_obj = pool.get('account.dta.line') 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): 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 i = dtal.name #dta_line.name = invoice's id
invoice_number = i.number or '??' invoice_number = i.number or '??'
if not i.partner_bank_id: 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['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_number'] = invoice_number
v['invoice_currency'] = i.currency_id.code or '' 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_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['invoice_reference']= i.reference
v['partner_name'] = i.partner_id and i.partner_id.name or '' 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_street'] = i.partner_id.address[0].street
v['partner_city']= i.partner_id.address[0].city v['partner_city']= i.partner_id.address[0].city
v['partner_zip']= i.partner_id.address[0].zip 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: else:
v['partner_street'] ='' v['partner_street'] =''
v['partner_city']= '' 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 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 record_type = record_gt836
if i.structured_ref : if v['partner_bank_code'] :
v['option_motif']='I' print "IF1"
elif i.structured_ref : v['option_id_bank']= 'A'
record_type = record_gt826 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: else:
record_type = record_gt827 log= log +'\nBank type not supported. (invoice '+ invoice_number +')'
continue
try: try:
dta_line = record_type(v).generate() 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}) pool.get('account.bank.statement').write(cr,uid,[bk_st_id],{'balance_end_real': amount_tot})
# segment total # segment total
v['amount_total'] = str(amount_tot) v['amount_total'] = str(amount_tot).replace('.',',')
try: try:
if dta : if dta :
dta = dta + record_gt890(v).generate() dta = dta + record_gt890(v).generate()

View File

@ -40,12 +40,10 @@ class account_invoice(osv.osv):
('2bp','To be paid'), ('2bp','To be paid'),
('paid','Paid')], ('paid','Paid')],
'DTA state',readonly=True,select=True, states={'draft':[('readonly',False)]}), 'DTA state',readonly=True,select=True, states={'draft':[('readonly',False)]}),
'structured_ref': fields.boolean('Structured Reference'),
} }
_defaults = { _defaults = {
'dta_state': lambda *a: 'none', 'dta_state': lambda *a: 'none',
'structured_ref': lambda *a: False,
} }
account_invoice() account_invoice()

View File

@ -38,3 +38,11 @@ class res_partner(osv.osv):
} }
res_partner() 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()