mirror of
https://github.com/OCA/bank-statement-import.git
synced 2025-01-20 12:37:43 +02:00
100
account_statement_import_camt54/README.rst
Normal file
100
account_statement_import_camt54/README.rst
Normal file
@@ -0,0 +1,100 @@
|
||||
==========================
|
||||
Bank Account Camt54 Import
|
||||
==========================
|
||||
|
||||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fbank--statement--import-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/bank-statement-import/tree/15.0/account_statement_import_camt54
|
||||
:alt: OCA/bank-statement-import
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/bank-statement-import-15-0/bank-statement-import-15-0-account_statement_import_camt54
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
|
||||
:target: https://runbot.odoo-community.org/runbot/174/15.0
|
||||
:alt: Try me on Runbot
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module allows you to import CAMT.054 file (details of customers payments batch) into a dedicated journal taking care of the start/end balance and the remittance reference number.
|
||||
|
||||
Customer invoices will be reconciled/Paid. Payment entries will be posted into an internal transfer account (that you have to create with a type current asset and set on the journal)
|
||||
|
||||
After this first step, import normally your CAMT.053 (full bank statement) into the bank journal. You will be able to clear the internal transfer account to end up the accounting flow.
|
||||
|
||||
Optionally we can activate add generation of additional line in bank statement which will balance your bank statement total to 0.
|
||||
This line can be consolidated later with different account.
|
||||
To enable option of final statement line you need properly set flag on Account Journal
|
||||
Configuration -> Journals -> tab Advanced Settings -> Bank statement configuration
|
||||
|
||||
|
||||
Switzerland localisation
|
||||
------------------------
|
||||
|
||||
For ISR containing a partner reference, uses the config parameter key `isr_partner_ref`.
|
||||
Doing so will fill the partners on bank statement lines and speed up the matches in the reconciliation process.
|
||||
|
||||
Value to set in `isr_partner_ref` defines the position of the partner reference inside the ISR.
|
||||
The format is `i[,n]`
|
||||
For instance `13,6` to start on position 13 with a 6 digit long reference.
|
||||
`n` is optional and it's default value is `6`.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
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 <https://github.com/OCA/bank-statement-import/issues/new?body=module:%20account_statement_import_camt54%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
~~~~~~~
|
||||
|
||||
* camptocamp
|
||||
|
||||
Contributors
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
|
||||
* Timon Tschanz <timon.tschanz@camptocamp.com>
|
||||
|
||||
Other credits
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
* Digital4efficiency.ch
|
||||
|
||||
Maintainers
|
||||
~~~~~~~~~~~
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
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.
|
||||
|
||||
This module is part of the `OCA/bank-statement-import <https://github.com/OCA/bank-statement-import/tree/15.0/account_statement_import_camt54>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
1
account_statement_import_camt54/__init__.py
Normal file
1
account_statement_import_camt54/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import models
|
||||
12
account_statement_import_camt54/__manifest__.py
Normal file
12
account_statement_import_camt54/__manifest__.py
Normal file
@@ -0,0 +1,12 @@
|
||||
# Copyright 2019 Camptocamp SA
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
{
|
||||
"name": "Bank Account Camt54 Import",
|
||||
"version": "15.0.1.0.0",
|
||||
"category": "Account",
|
||||
"website": "https://github.com/OCA/bank-statement-import",
|
||||
"author": "camptocamp, " "Odoo Community Association (OCA)",
|
||||
"license": "AGPL-3",
|
||||
"installable": True,
|
||||
"depends": ["account_statement_import_camt"],
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_import_camt54
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 15.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model,name:account_statement_import_camt54.model_account_statement_import_camt_parser
|
||||
msgid "Account Bank Statement Import CAMT parser"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal__transfer_line
|
||||
msgid "Add balance Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: code:addons/account_statement_import_camt54/models/parser.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Config parameter `isr_partner_ref` is wrong.\n"
|
||||
"It must be in format `i[,n]` \n"
|
||||
"`i` and `n` must be integers.\n"
|
||||
"e.g. \"13,6\""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: code:addons/account_statement_import_camt54/models/parser.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Config parameter `isr_partner_ref` is wrong.\n"
|
||||
"It must be in format `i[,n]` \n"
|
||||
"where `i` is the position of the first digit and\n"
|
||||
"`n` the number of digit in the reference, by default 6.\n"
|
||||
"e.g. \"13,6\""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal__display_name
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import__display_name
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import_camt_parser__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,help:account_statement_import_camt54.field_account_journal__transfer_line
|
||||
msgid "Generate balance line on total of bank statement import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal__id
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import__id
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import_camt_parser__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model,name:account_statement_import_camt54.model_account_statement_import
|
||||
msgid "Import Bank Statement Files"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model,name:account_statement_import_camt54.model_account_journal
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal____last_update
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import____last_update
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import_camt_parser____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
84
account_statement_import_camt54/i18n/it.po
Normal file
84
account_statement_import_camt54/i18n/it.po
Normal file
@@ -0,0 +1,84 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_import_camt54
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 15.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2021-11-25 17:36+0000\n"
|
||||
"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.3.2\n"
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model,name:account_statement_import_camt54.model_account_statement_import_camt_parser
|
||||
msgid "Account Bank Statement Import CAMT parser"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal__transfer_line
|
||||
msgid "Add balance Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: code:addons/account_statement_import_camt54/models/parser.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Config parameter `isr_partner_ref` is wrong.\n"
|
||||
"It must be in format `i[,n]` \n"
|
||||
"`i` and `n` must be integers.\n"
|
||||
"e.g. \"13,6\""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: code:addons/account_statement_import_camt54/models/parser.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Config parameter `isr_partner_ref` is wrong.\n"
|
||||
"It must be in format `i[,n]` \n"
|
||||
"where `i` is the position of the first digit and\n"
|
||||
"`n` the number of digit in the reference, by default 6.\n"
|
||||
"e.g. \"13,6\""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal__display_name
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import__display_name
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import_camt_parser__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Nome visualizzato"
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,help:account_statement_import_camt54.field_account_journal__transfer_line
|
||||
msgid "Generate balance line on total of bank statement import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal__id
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import__id
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import_camt_parser__id
|
||||
msgid "ID"
|
||||
msgstr "ID"
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model,name:account_statement_import_camt54.model_account_statement_import
|
||||
msgid "Import Bank Statement Files"
|
||||
msgstr "Importazione file estratto conto bancario"
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model,name:account_statement_import_camt54.model_account_journal
|
||||
msgid "Journal"
|
||||
msgstr "Registro"
|
||||
|
||||
#. module: account_statement_import_camt54
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_journal____last_update
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import____last_update
|
||||
#: model:ir.model.fields,field_description:account_statement_import_camt54.field_account_statement_import_camt_parser____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Ultima modifica il"
|
||||
3
account_statement_import_camt54/models/__init__.py
Normal file
3
account_statement_import_camt54/models/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from . import account_statement_import
|
||||
from . import account_journal
|
||||
from . import parser
|
||||
14
account_statement_import_camt54/models/account_journal.py
Normal file
14
account_statement_import_camt54/models/account_journal.py
Normal file
@@ -0,0 +1,14 @@
|
||||
# Copyright 2020 Camptocamp SA
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountBankStatementImport(models.Model):
|
||||
|
||||
_inherit = "account.journal"
|
||||
|
||||
transfer_line = fields.Boolean(
|
||||
string="Add balance Line",
|
||||
help="Generate balance line on total of bank statement import",
|
||||
)
|
||||
@@ -0,0 +1,51 @@
|
||||
# Copyright 2019 Camptocamp SA
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
import logging
|
||||
|
||||
from odoo import models
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class AccountStatementImport(models.TransientModel):
|
||||
"""Add process_camt method to account.bank.statement.import."""
|
||||
|
||||
_inherit = "account.statement.import"
|
||||
|
||||
def _create_bank_statements(self, stmts_vals, result):
|
||||
"""Create additional line in statement to set bank statement statement
|
||||
to 0 balance"""
|
||||
|
||||
super()._create_bank_statements(stmts_vals, result)
|
||||
statements = self.env["account.bank.statement"].browse(result["statement_ids"])
|
||||
for statement in statements:
|
||||
amount = sum(statement.line_ids.mapped("amount"))
|
||||
if statement.journal_id.transfer_line:
|
||||
if amount != 0:
|
||||
amount = -amount
|
||||
statement.line_ids.create(
|
||||
{
|
||||
"amount": amount,
|
||||
"statement_id": statement.id,
|
||||
"date": statement.date,
|
||||
"payment_ref": statement.name,
|
||||
}
|
||||
)
|
||||
statement.balance_end_real = statement.balance_start
|
||||
else:
|
||||
statement.balance_end_real = statement.balance_start + amount
|
||||
return
|
||||
|
||||
def _complete_stmts_vals(self, stmts_vals, journal, account_number):
|
||||
"""Search partner from partner reference"""
|
||||
stmts_vals = super()._complete_stmts_vals(stmts_vals, journal, account_number)
|
||||
for st_vals in stmts_vals:
|
||||
for line_vals in st_vals["transactions"]:
|
||||
if "partner_ref" in line_vals:
|
||||
partner_ref = line_vals.pop("partner_ref")
|
||||
partner = self.env["res.partner"].search(
|
||||
[("ref", "=", partner_ref)], limit=1
|
||||
)
|
||||
line_vals["partner_id"] = partner.id
|
||||
|
||||
return stmts_vals
|
||||
100
account_statement_import_camt54/models/parser.py
Normal file
100
account_statement_import_camt54/models/parser.py
Normal file
@@ -0,0 +1,100 @@
|
||||
# Copyright 2019 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, exceptions, models
|
||||
|
||||
|
||||
class CamtParser(models.AbstractModel):
|
||||
"""Parser for camt bank statement import files."""
|
||||
|
||||
_inherit = "account.statement.import.camt.parser"
|
||||
|
||||
def _get_partner_ref(self, isr):
|
||||
ICP = self.env["ir.config_parameter"]
|
||||
ref_format = ICP.sudo().get_param("isr_partner_ref")
|
||||
if not ref_format:
|
||||
return
|
||||
config = ref_format.split(",")
|
||||
if len(config) == 2:
|
||||
start, size = config
|
||||
elif len(config) == 1:
|
||||
start = config[0]
|
||||
size = 6
|
||||
else:
|
||||
raise exceptions.UserError(
|
||||
_(
|
||||
"Config parameter `isr_partner_ref` is wrong.\n"
|
||||
"It must be in format `i[,n]` \n"
|
||||
"where `i` is the position of the first digit and\n"
|
||||
"`n` the number of digit in the reference,"
|
||||
" by default 6.\n"
|
||||
'e.g. "13,6"'
|
||||
)
|
||||
)
|
||||
try:
|
||||
start = int(start) - 1 # count from 1 instead of 0
|
||||
size = int(size)
|
||||
end = start + size
|
||||
except ValueError as err:
|
||||
raise exceptions.UserError(
|
||||
_(
|
||||
"Config parameter `isr_partner_ref` is wrong.\n"
|
||||
"It must be in format `i[,n]` \n"
|
||||
"`i` and `n` must be integers.\n"
|
||||
'e.g. "13,6"'
|
||||
)
|
||||
) from err
|
||||
return isr[start:end].lstrip("0")
|
||||
|
||||
def parse_transaction_details(self, ns, node, transaction):
|
||||
"""Put ESR in label and add aditional information to label
|
||||
if no esr is available
|
||||
"""
|
||||
super().parse_transaction_details(ns, node, transaction)
|
||||
# put the esr in the label. odoo reconciles based on the label,
|
||||
# if there is no esr it tries to use the information textfield
|
||||
|
||||
isr_number = node.xpath(
|
||||
"./ns:RmtInf/ns:Strd/ns:CdtrRefInf/ns:Ref", namespaces={"ns": ns}
|
||||
)
|
||||
if len(isr_number):
|
||||
transaction["payment_ref"] = isr_number[0].text
|
||||
partner_ref = self._get_partner_ref(isr_number[0].text)
|
||||
if partner_ref:
|
||||
transaction["partner_ref"] = partner_ref
|
||||
else:
|
||||
xpath_exprs = [
|
||||
"./ns:RmtInf/ns:Ustrd|./ns:RtrInf/ns:AddtlInf",
|
||||
"./ns:AddtlNtryInf",
|
||||
"/ns:Refs/ns:InstrId",
|
||||
]
|
||||
payment_ref = transaction["payment_ref"]
|
||||
for xpath_expr in xpath_exprs:
|
||||
found_node = node.xpath(xpath_expr, namespaces={"ns": ns})
|
||||
if found_node:
|
||||
payment_ref = found_node[0].text
|
||||
break
|
||||
trans_id_node = (
|
||||
node.getparent()
|
||||
.getparent()
|
||||
.xpath("./ns:AcctSvcrRef", namespaces={"ns": ns})
|
||||
)
|
||||
if trans_id_node:
|
||||
payment_ref = "{} ({})".format(payment_ref, trans_id_node[0].text)
|
||||
if payment_ref:
|
||||
transaction["payment_ref"] = payment_ref
|
||||
# End add esr to the label.
|
||||
|
||||
# add transaction id to ref
|
||||
self.add_value_from_node(
|
||||
ns,
|
||||
node,
|
||||
[
|
||||
"./../../ns:AcctSvcrRef",
|
||||
"./ns:RmtInf/ns:Strd/ns:CdtrRefInf/ns:Ref",
|
||||
"./ns:Refs/ns:EndToEndId",
|
||||
],
|
||||
transaction,
|
||||
"ref",
|
||||
)
|
||||
return True
|
||||
2
account_statement_import_camt54/readme/CONTRIBUTORS.rst
Normal file
2
account_statement_import_camt54/readme/CONTRIBUTORS.rst
Normal file
@@ -0,0 +1,2 @@
|
||||
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
|
||||
* Timon Tschanz <timon.tschanz@camptocamp.com>
|
||||
1
account_statement_import_camt54/readme/CREDITS.rst
Normal file
1
account_statement_import_camt54/readme/CREDITS.rst
Normal file
@@ -0,0 +1 @@
|
||||
* Digital4efficiency.ch
|
||||
22
account_statement_import_camt54/readme/DESCRIPTION.rst
Normal file
22
account_statement_import_camt54/readme/DESCRIPTION.rst
Normal file
@@ -0,0 +1,22 @@
|
||||
This module allows you to import CAMT.054 file (details of customers payments batch) into a dedicated journal taking care of the start/end balance and the remittance reference number.
|
||||
|
||||
Customer invoices will be reconciled/Paid. Payment entries will be posted into an internal transfer account (that you have to create with a type current asset and set on the journal)
|
||||
|
||||
After this first step, import normally your CAMT.053 (full bank statement) into the bank journal. You will be able to clear the internal transfer account to end up the accounting flow.
|
||||
|
||||
Optionally we can activate add generation of additional line in bank statement which will balance your bank statement total to 0.
|
||||
This line can be consolidated later with different account.
|
||||
To enable option of final statement line you need properly set flag on Account Journal
|
||||
Configuration -> Journals -> tab Advanced Settings -> Bank statement configuration
|
||||
|
||||
|
||||
Switzerland localisation
|
||||
------------------------
|
||||
|
||||
For ISR containing a partner reference, uses the config parameter key `isr_partner_ref`.
|
||||
Doing so will fill the partners on bank statement lines and speed up the matches in the reconciliation process.
|
||||
|
||||
Value to set in `isr_partner_ref` defines the position of the partner reference inside the ISR.
|
||||
The format is `i[,n]`
|
||||
For instance `13,6` to start on position 13 with a 6 digit long reference.
|
||||
`n` is optional and it's default value is `6`.
|
||||
BIN
account_statement_import_camt54/static/description/icon.png
Normal file
BIN
account_statement_import_camt54/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
443
account_statement_import_camt54/static/description/index.html
Normal file
443
account_statement_import_camt54/static/description/index.html
Normal file
@@ -0,0 +1,443 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
|
||||
<title>Bank Account Camt54 Import</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="bank-account-camt54-import">
|
||||
<h1 class="title">Bank Account Camt54 Import</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/bank-statement-import/tree/15.0/account_statement_import_camt54"><img alt="OCA/bank-statement-import" src="https://img.shields.io/badge/github-OCA%2Fbank--statement--import-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/bank-statement-import-15-0/bank-statement-import-15-0-account_statement_import_camt54"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/174/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
|
||||
<blockquote>
|
||||
This module allows you to import CAMT.054 file (details of customers payments batch) into a dedicated journal taking care of the start/end balance and the remittance reference number.</blockquote>
|
||||
<p>Customer invoices will be reconciled/Paid. Payment entries will be posted into an internal transfer account (that you have to create with a type current asset and set on the journal)</p>
|
||||
<p>After this first step, import normally your CAMT.053 (full bank statement) into the bank journal. You will be able to clear the internal transfer account to end up the accounting flow.</p>
|
||||
<p>Optionally we can activate add generation of additional line in bank statement which will balance your bank statement total to 0.
|
||||
This line can be consolidated later with different account.
|
||||
To enable option of final statement line you need properly set flag on Account Journal
|
||||
Configuration -> Journals -> tab Advanced Settings -> Bank statement configuration</p>
|
||||
<div class="section" id="switzerland-localisation">
|
||||
<h1>Switzerland localisation</h1>
|
||||
<p>For ISR containing a partner reference, uses the config parameter key <cite>isr_partner_ref</cite>.
|
||||
Doing so will fill the partners on bank statement lines and speed up the matches in the reconciliation process.</p>
|
||||
<p>Value to set in <cite>isr_partner_ref</cite> defines the position of the partner reference inside the ISR.
|
||||
The format is <cite>i[,n]</cite>
|
||||
For instance <cite>13,6</cite> to start on position 13 with a 6 digit long reference.
|
||||
<cite>n</cite> is optional and it’s default value is <cite>6</cite>.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#bug-tracker" id="id1">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="id2">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="id3">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="id4">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#other-credits" id="id5">Other credits</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h2><a class="toc-backref" href="#id1">Bug Tracker</a></h2>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/bank-statement-import/issues">GitHub Issues</a>.
|
||||
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
|
||||
<a class="reference external" href="https://github.com/OCA/bank-statement-import/issues/new?body=module:%20account_statement_import_camt54%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h2><a class="toc-backref" href="#id2">Credits</a></h2>
|
||||
<div class="section" id="authors">
|
||||
<h3><a class="toc-backref" href="#id3">Authors</a></h3>
|
||||
<ul class="simple">
|
||||
<li>camptocamp</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h3><a class="toc-backref" href="#id4">Contributors</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Yannick Vaucher <<a class="reference external" href="mailto:yannick.vaucher@camptocamp.com">yannick.vaucher@camptocamp.com</a>></li>
|
||||
<li>Timon Tschanz <<a class="reference external" href="mailto:timon.tschanz@camptocamp.com">timon.tschanz@camptocamp.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="other-credits">
|
||||
<h3><a class="toc-backref" href="#id5">Other credits</a></h3>
|
||||
<ul class="simple">
|
||||
<li>Digital4efficiency.ch</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h3><a class="toc-backref" href="#id6">Maintainers</a></h3>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>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.</p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/bank-statement-import/tree/15.0/account_statement_import_camt54">OCA/bank-statement-import</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
2
account_statement_import_camt54/tests/__init__.py
Normal file
2
account_statement_import_camt54/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import test_get_partner_ref
|
||||
from . import test_statement
|
||||
@@ -0,0 +1,66 @@
|
||||
# Copyright 2019 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tests import common
|
||||
|
||||
|
||||
class TestGetPartnerRef(common.TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.Parser = cls.env["account.statement.import.camt.parser"]
|
||||
cls.ICP = cls.env["ir.config_parameter"]
|
||||
|
||||
def test_no_ICP(self):
|
||||
"""Test no partner ref is read if param is not set"""
|
||||
ref = "11 11111 11111 11111 11111 11111".replace(" ", "")
|
||||
partner_ref = self.Parser._get_partner_ref(ref)
|
||||
self.assertFalse(partner_ref)
|
||||
|
||||
def test_ICP_empty(self):
|
||||
self.ICP.set_param("isr_partner_ref", "")
|
||||
ref = "11 11111 11111 11111 11111 11111".replace(" ", "")
|
||||
partner_ref = self.Parser._get_partner_ref(ref)
|
||||
self.assertFalse(partner_ref)
|
||||
|
||||
def test_ICP_no_len(self):
|
||||
"""Test a default len of 6 is set if not provided"""
|
||||
self.ICP.set_param("isr_partner_ref", "12")
|
||||
ref = "11 11111 11112 34567 11111 11111".replace(" ", "")
|
||||
partner_ref = self.Parser._get_partner_ref(ref)
|
||||
self.assertEqual(partner_ref, "234567")
|
||||
|
||||
def test_ICP_full(self):
|
||||
"""Test full format of partner ref definition"""
|
||||
self.ICP.set_param("isr_partner_ref", "12,6")
|
||||
ref = "11 11111 11112 34567 11111 11111".replace(" ", "")
|
||||
partner_ref = self.Parser._get_partner_ref(ref)
|
||||
self.assertEqual(partner_ref, "234567")
|
||||
|
||||
def test_zero_stripped(self):
|
||||
"""Test full format of partner ref definition"""
|
||||
self.ICP.set_param("isr_partner_ref", "12,6")
|
||||
ref = "11 11111 11110 00560 11111 11111".replace(" ", "")
|
||||
partner_ref = self.Parser._get_partner_ref(ref)
|
||||
self.assertEqual(partner_ref, "560")
|
||||
|
||||
def test_bad_ICP(self):
|
||||
"""Test ir config parameter validation"""
|
||||
self.ICP.set_param("isr_partner_ref", "")
|
||||
ref = "11 11111 11111 11111 11111 11111".replace(" ", "")
|
||||
|
||||
self.ICP.set_param("isr_partner_ref", "A")
|
||||
with self.assertRaises(UserError):
|
||||
self.Parser._get_partner_ref(ref)
|
||||
|
||||
self.ICP.set_param("isr_partner_ref", "A,B")
|
||||
with self.assertRaises(UserError):
|
||||
self.Parser._get_partner_ref(ref)
|
||||
|
||||
self.ICP.set_param("isr_partner_ref", "1,X")
|
||||
with self.assertRaises(UserError):
|
||||
self.Parser._get_partner_ref(ref)
|
||||
|
||||
self.ICP.set_param("isr_partner_ref", "A,8")
|
||||
with self.assertRaises(UserError):
|
||||
self.Parser._get_partner_ref(ref)
|
||||
68
account_statement_import_camt54/tests/test_statement.py
Normal file
68
account_statement_import_camt54/tests/test_statement.py
Normal file
@@ -0,0 +1,68 @@
|
||||
# Copyright 2020 Camptocamp SA
|
||||
# Copyright 2020 Tecnativa - Pedro M. Baeza
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
import base64
|
||||
|
||||
from odoo.modules.module import get_module_resource
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestGenerateBankStatement(TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
eur = cls.env.ref("base.EUR")
|
||||
eur.write({"active": True})
|
||||
bank = cls.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "NL77ABNA0574908765",
|
||||
"partner_id": cls.env.ref("base.main_partner").id,
|
||||
"company_id": cls.env.ref("base.main_company").id,
|
||||
"bank_id": cls.env.ref("base.res_bank_1").id,
|
||||
}
|
||||
)
|
||||
cls.env["res.partner.bank"].create(
|
||||
{
|
||||
"acc_number": "NL46ABNA0499998748",
|
||||
"partner_id": cls.env.ref("base.main_partner").id,
|
||||
"company_id": cls.env.ref("base.main_company").id,
|
||||
"bank_id": cls.env.ref("base.res_bank_1").id,
|
||||
}
|
||||
)
|
||||
cls.journal = cls.env["account.journal"].create(
|
||||
{
|
||||
"name": "Bank Journal - (test camt)",
|
||||
"code": "TBNKCAMT",
|
||||
"type": "bank",
|
||||
"bank_account_id": bank.id,
|
||||
"currency_id": eur.id,
|
||||
}
|
||||
)
|
||||
|
||||
def _load_statement(self):
|
||||
testfile = get_module_resource(
|
||||
"account_statement_import_camt", "test_files", "test-camt053"
|
||||
)
|
||||
with open(testfile, "rb") as datafile:
|
||||
camt_file = base64.b64encode(datafile.read())
|
||||
self.env["account.statement.import"].create(
|
||||
{
|
||||
"statement_filename": "test import",
|
||||
"statement_file": camt_file,
|
||||
}
|
||||
).import_file_button()
|
||||
bank_st_record = self.env["account.bank.statement"].search(
|
||||
[("name", "=", "1234Test/1")], limit=1
|
||||
)
|
||||
statement_lines = bank_st_record.line_ids
|
||||
return statement_lines
|
||||
|
||||
def test_statement_import(self):
|
||||
self.journal.transfer_line = True
|
||||
lines = self._load_statement()
|
||||
self.assertEqual(len(lines), 5)
|
||||
self.assertAlmostEqual(sum(lines.mapped("amount")), 0)
|
||||
self.journal.transfer_line = False
|
||||
lines = self._load_statement()
|
||||
self.assertEqual(len(lines), 4)
|
||||
self.assertAlmostEqual(sum(lines.mapped("amount")), -12.99)
|
||||
@@ -0,0 +1 @@
|
||||
../../../../account_statement_import_camt54
|
||||
6
setup/account_statement_import_camt54/setup.py
Normal file
6
setup/account_statement_import_camt54/setup.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import setuptools
|
||||
|
||||
setuptools.setup(
|
||||
setup_requires=['setuptools-odoo'],
|
||||
odoo_addon=True,
|
||||
)
|
||||
Reference in New Issue
Block a user