Louis Bettens
8 years ago
9 changed files with 364 additions and 0 deletions
-
48account_bank_statement_import_camt_reftype/README.rst
-
4account_bank_statement_import_camt_reftype/__init__.py
-
14account_bank_statement_import_camt_reftype/__openerp__.py
-
5account_bank_statement_import_camt_reftype/models/__init__.py
-
11account_bank_statement_import_camt_reftype/models/account_bank_statement_line.py
-
22account_bank_statement_import_camt_reftype/models/parser.py
-
214account_bank_statement_import_camt_reftype/test_files/test-camt053-reftype
-
4account_bank_statement_import_camt_reftype/tests/__init__.py
-
42account_bank_statement_import_camt_reftype/tests/test_import_bank_statement.py
@ -0,0 +1,48 @@ |
|||||
|
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
||||
|
:alt: License: AGPL-3 |
||||
|
|
||||
|
Bank Statement Parse Camt Reference Type |
||||
|
======================================== |
||||
|
|
||||
|
Module to add reference information in bank statement lines from SEPA CAMT.053 Format bank statement files. |
||||
|
|
||||
|
Based on the Banking addons framework. |
||||
|
|
||||
|
Known issues / Roadmap |
||||
|
====================== |
||||
|
|
||||
|
* None |
||||
|
|
||||
|
Bug Tracker |
||||
|
=========== |
||||
|
|
||||
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/bank-statement-import/issues>`_. |
||||
|
In case of trouble, please check there if your issue has already been reported. |
||||
|
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback |
||||
|
`here <https://github.com/OCA/bank-statement-import/issues/new?body=module:%20account_bank_statement_import%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
||||
|
|
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
|
||||
|
* Louis Bettens <lbe@open-net.ch> |
||||
|
|
||||
|
Maintainer |
||||
|
---------- |
||||
|
|
||||
|
.. image:: https://odoo-community.org/logo.png |
||||
|
:alt: Odoo Community Association |
||||
|
:target: https://odoo-community.org |
||||
|
|
||||
|
This module is maintained by the OCA. |
||||
|
|
||||
|
OCA, or the Odoo Community Association, is a nonprofit organization whose |
||||
|
mission is to support the collaborative development of Odoo features and |
||||
|
promote its widespread use. |
||||
|
|
||||
|
To contribute to this module, please visit http://odoo-community.org. |
||||
|
This module should make it easy to migrate bank statement import |
||||
|
modules written for earlies versions of Odoo/OpenERP. |
@ -0,0 +1,4 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
from . import models |
@ -0,0 +1,14 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
{ |
||||
|
'name': 'CAMT Reference Type Bank Statements Import', |
||||
|
'version': '9.0.1.0.0', |
||||
|
'license': 'AGPL-3', |
||||
|
'author': 'Odoo Community Association (OCA), Open Net Sàrl', |
||||
|
'website': 'https://github.com/OCA/bank-statement-import', |
||||
|
'category': 'Banking addons', |
||||
|
'depends': [ |
||||
|
'account_bank_statement_import_camt', |
||||
|
], |
||||
|
} |
@ -0,0 +1,5 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
from . import account_bank_statement_line |
||||
|
from . import parser |
@ -0,0 +1,11 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from openerp import fields, models |
||||
|
|
||||
|
|
||||
|
class AccountBankStatementLine(models.Model): |
||||
|
_inherit = 'account.bank.statement.line' |
||||
|
|
||||
|
camt_ref_type = fields.Char(string='Type of reference', max=35) |
@ -0,0 +1,22 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
|
||||
|
from openerp import models |
||||
|
|
||||
|
|
||||
|
class CamtReftypeParser(models.AbstractModel): |
||||
|
"""Parser for camt bank statement import files.""" |
||||
|
_inherit = 'account.bank.statement.import.camt.parser' |
||||
|
|
||||
|
def parse_transaction_details(self, ns, node, transaction): |
||||
|
super(CamtReftypeParser, self).parse_transaction_details( |
||||
|
ns, node, transaction) |
||||
|
|
||||
|
self.add_value_from_node( |
||||
|
ns, node, [ |
||||
|
'./ns:RmtInf/ns:Strd/ns:CdtrRefInf/ns:Tp/ns:CdOrPrtry/' |
||||
|
'ns:Prtry', |
||||
|
], |
||||
|
transaction, 'camt_ref_type' |
||||
|
) |
@ -0,0 +1,214 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.053.001.04 camt.053.001.04.xsd"> |
||||
|
<BkToCstmrStmt> |
||||
|
<GrpHdr> |
||||
|
<MsgId>20170323312345678900000</MsgId> |
||||
|
<CreDtTm>2017-03-23T14:47:00</CreDtTm> |
||||
|
<MsgPgntn> |
||||
|
<PgNb>1</PgNb> |
||||
|
<LastPgInd>true</LastPgInd> |
||||
|
</MsgPgntn> |
||||
|
<AddtlInf>Test</AddtlInf> |
||||
|
</GrpHdr> |
||||
|
<Stmt> |
||||
|
<Id>20170323123456789012345</Id> |
||||
|
<ElctrncSeqNb>58</ElctrncSeqNb> |
||||
|
<CreDtTm>2017-03-23T14:47:00</CreDtTm> |
||||
|
<FrToDt> |
||||
|
<FrDtTm>2017-03-23T00:00:00</FrDtTm> |
||||
|
<ToDtTm>2017-03-23T23:59:59</ToDtTm> |
||||
|
</FrToDt> |
||||
|
<Acct> |
||||
|
<Id> |
||||
|
<IBAN>CH1111000000123456789</IBAN> |
||||
|
</Id> |
||||
|
<Ownr> |
||||
|
<Nm>Open Net S. à r.l. Prilly</Nm> |
||||
|
</Ownr> |
||||
|
</Acct> |
||||
|
<Bal> |
||||
|
<Tp> |
||||
|
<CdOrPrtry> |
||||
|
<Cd>OPBD</Cd> |
||||
|
</CdOrPrtry> |
||||
|
</Tp> |
||||
|
<Amt Ccy="CHF">75960.15</Amt> |
||||
|
<CdtDbtInd>CRDT</CdtDbtInd> |
||||
|
<Dt> |
||||
|
<Dt>2017-03-22</Dt> |
||||
|
</Dt> |
||||
|
</Bal> |
||||
|
<Bal> |
||||
|
<Tp> |
||||
|
<CdOrPrtry> |
||||
|
<Cd>CLBD</Cd> |
||||
|
</CdOrPrtry> |
||||
|
</Tp> |
||||
|
<Amt Ccy="CHF">79443.15</Amt> |
||||
|
<CdtDbtInd>CRDT</CdtDbtInd> |
||||
|
<Dt> |
||||
|
<Dt>2017-03-23</Dt> |
||||
|
</Dt> |
||||
|
</Bal> |
||||
|
<Ntry> |
||||
|
<NtryRef>012345678</NtryRef> |
||||
|
<Amt Ccy="CHF">3483.00</Amt> |
||||
|
<CdtDbtInd>CRDT</CdtDbtInd> |
||||
|
<RvslInd>false</RvslInd> |
||||
|
<Sts>BOOK</Sts> |
||||
|
<BookgDt> |
||||
|
<Dt>2017-03-22</Dt> |
||||
|
</BookgDt> |
||||
|
<ValDt> |
||||
|
<Dt>2017-03-23</Dt> |
||||
|
</ValDt> |
||||
|
<AcctSvcrRef>20170323001234567891234567891234</AcctSvcrRef> |
||||
|
<BkTxCd> |
||||
|
<Domn> |
||||
|
<Cd>PMNT</Cd> |
||||
|
<Fmly> |
||||
|
<Cd>RCDT</Cd> |
||||
|
<SubFmlyCd>VCOM</SubFmlyCd> |
||||
|
</Fmly> |
||||
|
</Domn> |
||||
|
</BkTxCd> |
||||
|
<NtryDtls> |
||||
|
<Btch> |
||||
|
<NbOfTxs>2</NbOfTxs> |
||||
|
</Btch> |
||||
|
<TxDtls> |
||||
|
<Refs> |
||||
|
<AcctSvcrRef>123456CHCAFEBABE</AcctSvcrRef> |
||||
|
<Prtry> |
||||
|
<Tp>01</Tp> |
||||
|
<Ref>123456CHCAFEBABE</Ref> |
||||
|
</Prtry> |
||||
|
</Refs> |
||||
|
<Amt Ccy="CHF">2187.00</Amt> |
||||
|
<CdtDbtInd>CRDT</CdtDbtInd> |
||||
|
<BkTxCd> |
||||
|
<Domn> |
||||
|
<Cd>PMNT</Cd> |
||||
|
<Fmly> |
||||
|
<Cd>RCDT</Cd> |
||||
|
<SubFmlyCd>AUTT</SubFmlyCd> |
||||
|
</Fmly> |
||||
|
</Domn> |
||||
|
</BkTxCd> |
||||
|
<RltdPties> |
||||
|
<Dbtr> |
||||
|
<Nm>Banque Cantonale Vaudoise</Nm> |
||||
|
<PstlAdr> |
||||
|
<StrtNm>Place Saint-François</StrtNm> |
||||
|
<BldgNb>14</BldgNb> |
||||
|
<PstCd>1003</PstCd> |
||||
|
<TwnNm>Lausanne</TwnNm> |
||||
|
<Ctry>CH1</Ctry> |
||||
|
</PstlAdr> |
||||
|
</Dbtr> |
||||
|
<DbtrAcct> |
||||
|
<Id> |
||||
|
<IBAN>CH2222000000123456789</IBAN> |
||||
|
</Id> |
||||
|
</DbtrAcct> |
||||
|
</RltdPties> |
||||
|
<RltdAgts> |
||||
|
<DbtrAgt> |
||||
|
<FinInstnId> |
||||
|
<BICFI>POFICHBEXXX</BICFI> |
||||
|
<Nm>POSTFINANCE AG</Nm> |
||||
|
<PstlAdr> |
||||
|
<AdrLine>MINGERSTRASSE 20</AdrLine> |
||||
|
<AdrLine>3030 BERNE</AdrLine> |
||||
|
</PstlAdr> |
||||
|
</FinInstnId> |
||||
|
</DbtrAgt> |
||||
|
</RltdAgts> |
||||
|
<RmtInf> |
||||
|
<Strd> |
||||
|
<CdtrRefInf> |
||||
|
<Tp> |
||||
|
<CdOrPrtry> |
||||
|
<Prtry>ISR Reference</Prtry> |
||||
|
</CdOrPrtry> |
||||
|
</Tp> |
||||
|
<Ref>302388292000011111111111111</Ref> |
||||
|
</CdtrRefInf> |
||||
|
<AddtlRmtInf>?REJECT?0</AddtlRmtInf> |
||||
|
</Strd> |
||||
|
</RmtInf> |
||||
|
<RltdDts> |
||||
|
<AccptncDtTm>2017-03-22T20:00:00</AccptncDtTm> |
||||
|
</RltdDts> |
||||
|
</TxDtls> |
||||
|
<TxDtls> |
||||
|
<Refs> |
||||
|
<AcctSvcrRef>123456CHCAFEBABE</AcctSvcrRef> |
||||
|
<Prtry> |
||||
|
<Tp>01</Tp> |
||||
|
<Ref>123456CHCAFEBABE</Ref> |
||||
|
</Prtry> |
||||
|
</Refs> |
||||
|
<Amt Ccy="CHF">1296.00</Amt> |
||||
|
<CdtDbtInd>CRDT</CdtDbtInd> |
||||
|
<BkTxCd> |
||||
|
<Domn> |
||||
|
<Cd>PMNT</Cd> |
||||
|
<Fmly> |
||||
|
<Cd>RCDT</Cd> |
||||
|
<SubFmlyCd>AUTT</SubFmlyCd> |
||||
|
</Fmly> |
||||
|
</Domn> |
||||
|
</BkTxCd> |
||||
|
<RltdPties> |
||||
|
<Dbtr> |
||||
|
<Nm>Banque Cantonale Vaudoise</Nm> |
||||
|
<PstlAdr> |
||||
|
<StrtNm>Place Saint-François</StrtNm> |
||||
|
<BldgNb>14</BldgNb> |
||||
|
<PstCd>1003</PstCd> |
||||
|
<TwnNm>Lausanne</TwnNm> |
||||
|
<Ctry>CH2</Ctry> |
||||
|
</PstlAdr> |
||||
|
</Dbtr> |
||||
|
<DbtrAcct> |
||||
|
<Id> |
||||
|
<IBAN>CH3333000000123456789</IBAN> |
||||
|
</Id> |
||||
|
</DbtrAcct> |
||||
|
</RltdPties> |
||||
|
<RltdAgts> |
||||
|
<DbtrAgt> |
||||
|
<FinInstnId> |
||||
|
<BICFI>POFICHBEYYY</BICFI> |
||||
|
<Nm>POSTFINANCE AG</Nm> |
||||
|
<PstlAdr> |
||||
|
<AdrLine>MINGERSTRASSE 20</AdrLine> |
||||
|
<AdrLine>3030 BERNE</AdrLine> |
||||
|
</PstlAdr> |
||||
|
</FinInstnId> |
||||
|
</DbtrAgt> |
||||
|
</RltdAgts> |
||||
|
<RmtInf> |
||||
|
<Strd> |
||||
|
<CdtrRefInf> |
||||
|
<Tp> |
||||
|
<CdOrPrtry> |
||||
|
<Prtry>ISR Reference</Prtry> |
||||
|
</CdOrPrtry> |
||||
|
</Tp> |
||||
|
<Ref>302388292000022222222222222</Ref> |
||||
|
</CdtrRefInf> |
||||
|
<AddtlRmtInf>?REJECT?0</AddtlRmtInf> |
||||
|
</Strd> |
||||
|
</RmtInf> |
||||
|
<RltdDts> |
||||
|
<AccptncDtTm>2017-03-22T20:00:00</AccptncDtTm> |
||||
|
</RltdDts> |
||||
|
</TxDtls> |
||||
|
</NtryDtls> |
||||
|
<AddtlNtryInf>CRÉDIT GROUPÉ BVR TRAITEMENT DU 22.03.2017 NUMÉRO CLIENT 01-70884-3 PAQUET ID: 123456CHCAFEBABE</AddtlNtryInf> |
||||
|
</Ntry> |
||||
|
</Stmt> |
||||
|
</BkToCstmrStmt> |
||||
|
</Document> |
@ -0,0 +1,4 @@ |
|||||
|
# -*- encoding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
from . import test_import_bank_statement |
@ -0,0 +1,42 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Copyright 2017 Open Net Sàrl |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
|
import base64 |
||||
|
|
||||
|
from openerp.tests.common import TransactionCase |
||||
|
from openerp.tools.misc import file_open |
||||
|
|
||||
|
|
||||
|
DATA_DIR = 'account_bank_statement_import_camt_reftype/test_files/' |
||||
|
|
||||
|
|
||||
|
class TestImport(TransactionCase): |
||||
|
"""Run test to import camt import.""" |
||||
|
|
||||
|
def setUp(self): |
||||
|
super(TestImport, self).setUp() |
||||
|
bank = self.env['res.partner.bank'].create({ |
||||
|
'acc_number': 'CH1111000000123456789', |
||||
|
'partner_id': self.env.ref('base.main_partner').id, |
||||
|
'company_id': self.env.ref('base.main_company').id, |
||||
|
'bank_id': self.env.ref('base.res_bank_1').id, |
||||
|
}) |
||||
|
self.env['account.journal'].create({ |
||||
|
'name': 'Bank Journal - (test camt)', |
||||
|
'code': 'TBNKCAMT', |
||||
|
'type': 'bank', |
||||
|
'bank_account_id': bank.id, |
||||
|
}) |
||||
|
|
||||
|
def test_statement_import(self): |
||||
|
"""Test that reference type is correctly imported.""" |
||||
|
with file_open(DATA_DIR + 'test-camt053-reftype') as testfile: |
||||
|
data = testfile.read() |
||||
|
action = self.env['account.bank.statement.import'].create({ |
||||
|
'data_file': base64.b64encode(data) |
||||
|
}).import_file() |
||||
|
statements = self.env['account.bank.statement'].browse( |
||||
|
action['context']['statement_ids'] |
||||
|
) |
||||
|
for line in statements.mapped('line_ids'): |
||||
|
self.assertEqual(line.camt_ref_type, "ISR Reference") |
Write
Preview
Loading…
Cancel
Save
Reference in new issue