[FIX]Name field displayed back in bank statement form (instead of displaying notes), handling structured communication types, defining account depending on partner found thanks to invoice or bank account

bzr revid: dle@openerp.com-20121206151207-o8zxzfoybmlv3u6b
This commit is contained in:
dle@openerp.com 2012-12-06 16:12:07 +01:00
parent d8a949edff
commit 0fc6e5480b
2 changed files with 106 additions and 37 deletions

View File

@ -574,9 +574,8 @@
<field name="line_ids" context="{'date':date}">
<tree editable="bottom" string="Statement lines">
<field name="sequence" readonly="1" invisible="1"/>
<field name="name" invisible="1"/>
<field name="date"/>
<field name="note"/>
<field name="name"/>
<field name="ref"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="type" on_change="onchange_type(partner_id, type)"/>

View File

@ -128,8 +128,12 @@ class account_coda_import(osv.osv_memory):
statementLine['transaction_category'] = rmspaces(line[58:61])
if line[61] == '1':
#Structured communication
statementLine['communication_struct'] = True
statementLine['communication_type'] = line[62:65]
statementLine['communication'] = '+++' + line[65:68] + '/' + line[68:72] + '/' + line[72:77] + '+++'
else:
#Non-structured communication
statementLine['communication_struct'] = False
statementLine['communication'] = rmspaces(line[62:115])
statementLine['entryDate'] = rmspaces(line[115:121])
statementLine['type'] = 'normal'
@ -156,7 +160,8 @@ class account_coda_import(osv.osv_memory):
raise osv.except_osv(_('Error') + 'R2005', _('CODA parsing error on movement data record 2.3, seq nr %s! Please report this issue via your OpenERP support channel.') % line[2:10])
if statement['version'] == '1':
statement['lines'][-1]['counterpartyNumber'] = rmspaces(line[10:22])
statement['lines'][-1]['counterpartyName'] = rmspaces(line[47:125])
statement['lines'][-1]['counterpartyName'] = rmspaces(line[47:73])
statement['lines'][-1]['counterpartyAddress'] = rmspaces(line[73:125])
statement['lines'][-1]['counterpartyCurrency'] = ''
else:
if line[22] == ' ':
@ -235,15 +240,76 @@ class account_coda_import(osv.osv_memory):
statement['id'] = self.pool.get('account.bank.statement').create(cr, uid, data, context=context)
for line in statement['lines']:
if line['type'] == 'normal':
note = []
counterparty = []
if 'counterpartyName' in line:
counterparty.append(line['counterpartyName'])
if 'counterpartyNumber' in line:
try:
if 'counterpartyNumber' in line and int(line['counterpartyNumber']) == 0:
line['counterpartyNumber'] = False
except:
pass
if 'counterpartyNumber' in line and line['counterpartyNumber']:
counterparty.append(line['counterpartyNumber'])
if len(counterparty) > 0:
counterparty = '[' + ' / '.join(counterparty) + ']'
else:
counterparty = '/'
note.append(_('Counter Party') + ': ' + counterparty)
partner = None
partner_id = None
invoice = False
if line['communication_struct'] and 'communication_type' in line and line['communication_type'] == '101':
ids = self.pool.get('account.invoice').search(cr, uid, [('reference', '=', line['communication']), ('reference_type', '=', 'bba')])
if ids:
invoice = self.pool.get('account.invoice').browse(cr, uid, ids[0])
partner = invoice.partner_id
partner_id = partner.id
if invoice.type in ['in_invoice', 'in_refund']:
line['type'] = 'supplier'
else:
line['type'] = 'customer'
if 'counterpartyNumber' in line and line['counterpartyNumber']:
ids = self.pool.get('res.partner.bank').search(cr, uid, [('acc_number', '=', str(line['counterpartyNumber']))])
if ids and len(ids) > 0:
partner = self.pool.get('res.partner.bank').browse(cr, uid, ids[0], context=context).partner_id
partner_id = partner.id
if not invoice:
if partner.customer and line['debit'] == '0':
line['type'] = 'customer'
elif partner.supplier and line['debit'] == '1':
line['type'] = 'supplier'
else:
line['type'] = 'general'
# if line['debit'] == '1':
# line['account'] = partner.property_account_payable.id
# else:
# line['account'] = partner.property_account_receivable.id
if partner:
if line['type'] == 'customer':
line['account'] = partner.property_account_receivable.id
elif line['type'] == 'supplier':
line['account'] = partner.property_account_payable.id
else:
if line['debit'] == '1':
line['account'] = partner.property_account_payable.id
else:
line['account'] = partner.property_account_receivable.id
note.append(_('Communication') + ': ' + line['communication'])
if not partner:
line['type'] = 'general'
if line['debit'] == '1':
line['account'] = statement['journal_id'].default_debit_account_id.id
else:
line['account'] = statement['journal_id'].default_credit_account_id.id
note.append(_('Communication') + ': ' + line['communication'])
if 'communication_type' in line:
if line['communication_type'] in communication_types:
line['communication_type'] = communication_types[line['communication_type']]
else:
line['communication_type'] = 'Unknown'
note.append(_('Communication Type') + ': ' + line['communication_type'])
if line['transaction_type'] in transaction_types:
line['transaction_type'] = transaction_types[line['transaction_type']][1]
if line['transaction_category'] in transaction_categories:
@ -253,45 +319,13 @@ class account_coda_import(osv.osv_memory):
line['transaction_family'] = transaction_family[0]
if line['transaction_code'] in transaction_family[1]:
line['transaction_code'] = transaction_family[1][line['transaction_code']]
note = []
note.append(_('Counter Party') + ': ' + counterparty)
note.append(_('Communication') + ': ' + line['communication'])
note.append(_('Transaction type') + ': ' + line['transaction_type'])
note.append(_('Transaction family') + ': ' + line['transaction_family'])
note.append(_('Transaction code') + ': ' + line['transaction_code'])
note.append(_('Transaction category') + ': ' + line['transaction_category'])
try:
if 'counterpartyNumber' in line and int(line['counterpartyNumber']) == 0:
line['counterpartyNumber'] = False
except:
pass
partner = None
partner_id = None
if 'counterpartyNumber' in line and line['counterpartyNumber']:
ids = self.pool.get('res.partner.bank').search(cr, uid, [('acc_number', '=', str(line['counterpartyNumber']))])
if ids and len(ids) > 0:
partner = self.pool.get('res.partner.bank').browse(cr, uid, ids[0], context=context).partner_id
partner_id = partner.id
if partner:
if partner.customer:
line['type'] = 'customer'
else:
line['type'] = 'supplier'
if line['debit'] == '1':
line['account'] = partner.property_account_payable.id
else:
line['account'] = partner.property_account_receivable.id
else:
line['type'] = 'general'
if line['debit'] == '1':
line['account'] = statement['journal_id'].default_debit_account_id.id
else:
line['account'] = statement['journal_id'].default_credit_account_id.id
data = {
'name': line['communication'],
'name': counterparty + '\n' + line['communication'],
'note': "\n".join(note),
'date': line['entryDate'],
'amount': line['amount'],
@ -752,6 +786,42 @@ transaction_categories = {
"431": "Delivery of a copy",
}
communication_types = {
"001": "Data concerning the counterparty",
"002": "Communication of the bank",
"003": "RBP data",
"004": "Counterpartys banker",
"005": "Data concerning the correspondent",
"006": "Information concerning the detail amount",
"007": "Information concerning the detail cash",
"008": "Identification of the de ultimate beneficiary/creditor (SEPA SCT/SDD)",
"009": "Identification of the de ultimate ordering customer/debtor (SEPA SCT/SDD)",
"010": "Information pertaining to sale or purchase of securities",
"011": "Information pertaining to coupons",
"100": "(SEPA) payment with a structured format communication applying the ISO standard 11649: Structured creditor reference to remittan",
"101": "Credit transfer or cash payment with structured format communication",
"102": "Credit transfer or cash payment with reconstituted structured format communication",
"103": "number (e.g. of the cheque, of the card, etc.)",
"104": "Equivalent in EUR",
"105": "original amount of the transaction",
"106": "Method of calculation (VAT, withholding tax on income, commission, etc.)",
"107": "Direct debit DOM80",
"108": "Closing",
"111": "POS credit Globalisation",
"112": "ATM payment (usually Eurocheque card)",
"113": "ATM/POS debit",
"114": "POS credit - individual transaction",
"115": "Terminal cash deposit",
"120": "Correction of a transaction",
"121": "Commercial bills",
"122": "Bills - calculation of interest",
"123": "Fees and commissions",
"124": "Number of the credit card",
"125": "Credit",
"126": "Term investments",
"127": "European direct debit (SEPA)",
}
def rmspaces(s):
return " ".join(s.split())