[FIX]Name field displayed back in bank statement form (instead of displaying notes...
authordle@openerp.com <>
Thu, 6 Dec 2012 15:12:07 +0000 (16:12 +0100)
committerdle@openerp.com <>
Thu, 6 Dec 2012 15:12:07 +0000 (16:12 +0100)
bzr revid: dle@openerp.com-20121206151207-o8zxzfoybmlv3u6b

addons/account/account_view.xml
addons/l10n_be_coda/wizard/account_coda_import.py

index 7d18961..6d3519c 100644 (file)
                             <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)"/>
index fdabf9e..d0ecefa 100644 (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,63 +240,92 @@ 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 = '/'
-                    if line['transaction_type'] in transaction_types:
-                        line['transaction_type'] = transaction_types[line['transaction_type']][1]
-                    if line['transaction_category'] in transaction_categories:
-                        line['transaction_category'] = transaction_categories[line['transaction_category']]
-                    if line['transaction_family'] in transaction_codes:
-                        transaction_family = transaction_codes[line['transaction_family']]
-                        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
+                    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 partner.customer:
-                            line['type'] = 'customer'
-                        else:
-                            line['type'] = 'supplier'
-                        if line['debit'] == '1':
+                        if line['type'] == 'customer':
+                            line['account'] = partner.property_account_receivable.id
+                        elif line['type'] == 'supplier':
                             line['account'] = partner.property_account_payable.id
                         else:
-                            line['account'] = partner.property_account_receivable.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:
+                        line['transaction_category'] = transaction_categories[line['transaction_category']]
+                    if line['transaction_family'] in transaction_codes:
+                        transaction_family = transaction_codes[line['transaction_family']]
+                        line['transaction_family'] = transaction_family[0]
+                        if line['transaction_code'] in transaction_family[1]:
+                            line['transaction_code'] = transaction_family[1][line['transaction_code']]
+                    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'])
 
                     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": "Counterparty’s 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 – DOM’80",
+    "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())