From 1126838e2dc000edf168729a6f401fddfe7c3e6e Mon Sep 17 00:00:00 2001 From: Iryna Vushnevska Date: Wed, 8 Jan 2020 14:19:41 +0200 Subject: [PATCH 1/8] [13.0][ADD] account_bank_statement_import_oca_camt54: extension logic for account_bank_statement_import_camt_oca --- .../README.rst | 0 .../__init__.py | 1 + .../__manifest__.py | 12 +++ .../models/__init__.py | 2 + .../models/account_bank_statement_import.py | 40 +++++++ .../models/parser.py | 100 ++++++++++++++++++ .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 14 +++ .../tests/__init__.py | 1 + .../tests/test_get_partner_ref.py | 65 ++++++++++++ 10 files changed, 237 insertions(+) create mode 100644 account_bank_statement_import_oca_camt54/README.rst create mode 100644 account_bank_statement_import_oca_camt54/__init__.py create mode 100644 account_bank_statement_import_oca_camt54/__manifest__.py create mode 100644 account_bank_statement_import_oca_camt54/models/__init__.py create mode 100644 account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py create mode 100644 account_bank_statement_import_oca_camt54/models/parser.py create mode 100644 account_bank_statement_import_oca_camt54/readme/CONTRIBUTORS.rst create mode 100644 account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst create mode 100644 account_bank_statement_import_oca_camt54/tests/__init__.py create mode 100644 account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py diff --git a/account_bank_statement_import_oca_camt54/README.rst b/account_bank_statement_import_oca_camt54/README.rst new file mode 100644 index 00000000..e69de29b diff --git a/account_bank_statement_import_oca_camt54/__init__.py b/account_bank_statement_import_oca_camt54/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/account_bank_statement_import_oca_camt54/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_bank_statement_import_oca_camt54/__manifest__.py b/account_bank_statement_import_oca_camt54/__manifest__.py new file mode 100644 index 00000000..bb03ac88 --- /dev/null +++ b/account_bank_statement_import_oca_camt54/__manifest__.py @@ -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": "13.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_bank_statement_import_camt_oca"], +} diff --git a/account_bank_statement_import_oca_camt54/models/__init__.py b/account_bank_statement_import_oca_camt54/models/__init__.py new file mode 100644 index 00000000..8364eda3 --- /dev/null +++ b/account_bank_statement_import_oca_camt54/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_bank_statement_import +from . import parser diff --git a/account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py b/account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py new file mode 100644 index 00000000..55015fc9 --- /dev/null +++ b/account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py @@ -0,0 +1,40 @@ +# 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 AccountBankStatementImport(models.TransientModel): + """Add process_camt method to account.bank.statement.import.""" + + _inherit = "account.bank.statement.import" + + def _create_bank_statements(self, stmts_vals): + """ Set balance_end_real if not already provided by the file.""" + + statement_line_ids, notifications = super()._create_bank_statements(stmts_vals) + statements = self.env["account.bank.statement"].search( + [("line_ids", "in", statement_line_ids)] + ) + for statement in statements: + if not statement.balance_end_real: + amount = sum(statement.line_ids.mapped("amount")) + statement.balance_end_real = statement.balance_start + amount + return statement_line_ids, notifications + + 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 diff --git a/account_bank_statement_import_oca_camt54/models/parser.py b/account_bank_statement_import_oca_camt54/models/parser.py new file mode 100644 index 00000000..e218be9b --- /dev/null +++ b/account_bank_statement_import_oca_camt54/models/parser.py @@ -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.bank.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: + 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"' + ) + ) + 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["name"] = 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", + ] + name = transaction["name"] + for xpath_expr in xpath_exprs: + found_node = node.xpath(xpath_expr, namespaces={"ns": ns}) + if found_node: + name = found_node[0].text + break + trans_id_node = ( + node.getparent() + .getparent() + .xpath("./ns:AcctSvcrRef", namespaces={"ns": ns}) + ) + if trans_id_node: + name = "{} ({})".format(name, trans_id_node[0].text) + if name: + transaction["name"] = name + # 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 diff --git a/account_bank_statement_import_oca_camt54/readme/CONTRIBUTORS.rst b/account_bank_statement_import_oca_camt54/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..0cf04074 --- /dev/null +++ b/account_bank_statement_import_oca_camt54/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Yannick Vaucher +* Timon Tschanz diff --git a/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst b/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst new file mode 100644 index 00000000..3d55988a --- /dev/null +++ b/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst @@ -0,0 +1,14 @@ + 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. + + +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`. diff --git a/account_bank_statement_import_oca_camt54/tests/__init__.py b/account_bank_statement_import_oca_camt54/tests/__init__.py new file mode 100644 index 00000000..c2592574 --- /dev/null +++ b/account_bank_statement_import_oca_camt54/tests/__init__.py @@ -0,0 +1 @@ +from . import test_get_partner_ref diff --git a/account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py b/account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py new file mode 100644 index 00000000..31905e1b --- /dev/null +++ b/account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py @@ -0,0 +1,65 @@ +# 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): + def setUp(self): + super().setUp() + self.Parser = self.env["account.bank.statement.import.camt.parser"] + self.ICP = self.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.assertEquals(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.assertEquals(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.assertEquals(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) From dabc0a56d9e9672ab26421fbc92fc85780bb4eb1 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 7 Feb 2020 15:06:48 +0000 Subject: [PATCH 2/8] [UPD] Update account_bank_statement_import_oca_camt54.pot --- ...count_bank_statement_import_oca_camt54.pot | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot diff --git a/account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot b/account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot new file mode 100644 index 00000000..564fb27c --- /dev/null +++ b/account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_bank_statement_import_oca_camt54 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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_bank_statement_import_oca_camt54 +#: model:ir.model,name:account_bank_statement_import_oca_camt54.model_account_bank_statement_import_camt_parser +msgid "Account Bank Statement Import CAMT parser" +msgstr "" + +#. module: account_bank_statement_import_oca_camt54 +#: code:addons/account_bank_statement_import_oca_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_bank_statement_import_oca_camt54 +#: code:addons/account_bank_statement_import_oca_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_bank_statement_import_oca_camt54 +#: model:ir.model,name:account_bank_statement_import_oca_camt54.model_account_bank_statement_import +msgid "Import Bank Statement" +msgstr "" From 66029e42642ebc20b029cef7179c75d79098da17 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 7 Feb 2020 15:21:56 +0000 Subject: [PATCH 3/8] [UPD] README.rst --- .../README.rst | 87 ++++ .../static/description/index.html | 429 ++++++++++++++++++ 2 files changed, 516 insertions(+) create mode 100644 account_bank_statement_import_oca_camt54/static/description/index.html diff --git a/account_bank_statement_import_oca_camt54/README.rst b/account_bank_statement_import_oca_camt54/README.rst index e69de29b..7a9bdfc4 100644 --- a/account_bank_statement_import_oca_camt54/README.rst +++ b/account_bank_statement_import_oca_camt54/README.rst @@ -0,0 +1,87 @@ +========================== +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/13.0/account_bank_statement_import_oca_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-13-0/bank-statement-import-13-0-account_bank_statement_import_oca_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/13.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. + + +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 `_. +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* camptocamp + +Contributors +~~~~~~~~~~~~ + +* Yannick Vaucher +* Timon Tschanz + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_bank_statement_import_oca_camt54/static/description/index.html b/account_bank_statement_import_oca_camt54/static/description/index.html new file mode 100644 index 00000000..368e5691 --- /dev/null +++ b/account_bank_statement_import_oca_camt54/static/description/index.html @@ -0,0 +1,429 @@ + + + + + + +Bank Account Camt54 Import + + + +
+

Bank Account Camt54 Import

+ + +

Beta License: AGPL-3 OCA/bank-statement-import Translate me on Weblate Try me on Runbot

+
+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.

+

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

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • camptocamp
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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 project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 4fa4a24f491c6773021afbb4d68c69ae025cd751 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 7 Feb 2020 15:21:57 +0000 Subject: [PATCH 4/8] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 account_bank_statement_import_oca_camt54/static/description/icon.png diff --git a/account_bank_statement_import_oca_camt54/static/description/icon.png b/account_bank_statement_import_oca_camt54/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 8318862df4822863dcac9e6598ad374e9aca752d Mon Sep 17 00:00:00 2001 From: Yannick Vaucher Date: Tue, 12 May 2020 11:10:24 +0200 Subject: [PATCH 5/8] Add title to separate Switzerland specific --- .../readme/DESCRIPTION.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst b/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst index 3d55988a..63b1f4cf 100644 --- a/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst +++ b/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst @@ -5,6 +5,9 @@ Customer invoices will be reconciled/Paid. Payment entries will be posted into a 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. +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. From 673d4ccd52ae18021121338dccb3e5abf29d1bc4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 12 May 2020 09:10:29 +0000 Subject: [PATCH 6/8] [UPD] README.rst --- account_bank_statement_import_oca_camt54/README.rst | 3 +++ .../static/description/index.html | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/account_bank_statement_import_oca_camt54/README.rst b/account_bank_statement_import_oca_camt54/README.rst index 7a9bdfc4..54f8f43d 100644 --- a/account_bank_statement_import_oca_camt54/README.rst +++ b/account_bank_statement_import_oca_camt54/README.rst @@ -32,6 +32,9 @@ Customer invoices will be reconciled/Paid. Payment entries will be posted into a 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. +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. diff --git a/account_bank_statement_import_oca_camt54/static/description/index.html b/account_bank_statement_import_oca_camt54/static/description/index.html index 368e5691..fc09fe3d 100644 --- a/account_bank_statement_import_oca_camt54/static/description/index.html +++ b/account_bank_statement_import_oca_camt54/static/description/index.html @@ -372,6 +372,8 @@ ul.auto-toc { 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.

+
+

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. @@ -391,7 +393,7 @@ For instance 13,6 to start on position 13 with a 6 digit long refer

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub 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 @@ -399,22 +401,22 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • camptocamp
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose @@ -425,5 +427,6 @@ promote its widespread use.

+ From 0bc11c2e1a0d7e50f27f96f5bb4be9da08ded58f Mon Sep 17 00:00:00 2001 From: Iryna Vyshnevska Date: Sun, 6 Dec 2020 19:13:40 +0200 Subject: [PATCH 7/8] [14.0][MIG] account_statement_import_camt54 --- ...count_bank_statement_import_oca_camt54.pot | 45 ------------------ .../models/__init__.py | 2 - .../README.rst | 0 .../__init__.py | 0 .../__manifest__.py | 4 +- .../models/__init__.py | 2 + .../models/account_statement_import.py | 4 +- .../models/parser.py | 2 +- .../readme/CONTRIBUTORS.rst | 0 .../readme/DESCRIPTION.rst | 0 .../static/description/icon.png | Bin .../static/description/index.html | 0 .../tests/__init__.py | 0 .../tests/test_get_partner_ref.py | 2 +- .../addons/account_statement_import_camt54 | 1 + .../account_statement_import_camt54/setup.py | 6 +++ 16 files changed, 15 insertions(+), 53 deletions(-) delete mode 100644 account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot delete mode 100644 account_bank_statement_import_oca_camt54/models/__init__.py rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/README.rst (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/__init__.py (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/__manifest__.py (79%) create mode 100644 account_statement_import_camt54/models/__init__.py rename account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py => account_statement_import_camt54/models/account_statement_import.py (93%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/models/parser.py (98%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/readme/CONTRIBUTORS.rst (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/readme/DESCRIPTION.rst (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/static/description/icon.png (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/static/description/index.html (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/tests/__init__.py (100%) rename {account_bank_statement_import_oca_camt54 => account_statement_import_camt54}/tests/test_get_partner_ref.py (97%) create mode 120000 setup/account_statement_import_camt54/odoo/addons/account_statement_import_camt54 create mode 100644 setup/account_statement_import_camt54/setup.py diff --git a/account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot b/account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot deleted file mode 100644 index 564fb27c..00000000 --- a/account_bank_statement_import_oca_camt54/i18n/account_bank_statement_import_oca_camt54.pot +++ /dev/null @@ -1,45 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * account_bank_statement_import_oca_camt54 -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 13.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_bank_statement_import_oca_camt54 -#: model:ir.model,name:account_bank_statement_import_oca_camt54.model_account_bank_statement_import_camt_parser -msgid "Account Bank Statement Import CAMT parser" -msgstr "" - -#. module: account_bank_statement_import_oca_camt54 -#: code:addons/account_bank_statement_import_oca_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_bank_statement_import_oca_camt54 -#: code:addons/account_bank_statement_import_oca_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_bank_statement_import_oca_camt54 -#: model:ir.model,name:account_bank_statement_import_oca_camt54.model_account_bank_statement_import -msgid "Import Bank Statement" -msgstr "" diff --git a/account_bank_statement_import_oca_camt54/models/__init__.py b/account_bank_statement_import_oca_camt54/models/__init__.py deleted file mode 100644 index 8364eda3..00000000 --- a/account_bank_statement_import_oca_camt54/models/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import account_bank_statement_import -from . import parser diff --git a/account_bank_statement_import_oca_camt54/README.rst b/account_statement_import_camt54/README.rst similarity index 100% rename from account_bank_statement_import_oca_camt54/README.rst rename to account_statement_import_camt54/README.rst diff --git a/account_bank_statement_import_oca_camt54/__init__.py b/account_statement_import_camt54/__init__.py similarity index 100% rename from account_bank_statement_import_oca_camt54/__init__.py rename to account_statement_import_camt54/__init__.py diff --git a/account_bank_statement_import_oca_camt54/__manifest__.py b/account_statement_import_camt54/__manifest__.py similarity index 79% rename from account_bank_statement_import_oca_camt54/__manifest__.py rename to account_statement_import_camt54/__manifest__.py index bb03ac88..a9a8b6a2 100644 --- a/account_bank_statement_import_oca_camt54/__manifest__.py +++ b/account_statement_import_camt54/__manifest__.py @@ -2,11 +2,11 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Bank Account Camt54 Import", - "version": "13.0.1.0.0", + "version": "14.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_bank_statement_import_camt_oca"], + "depends": ["account_statement_import_camt"], } diff --git a/account_statement_import_camt54/models/__init__.py b/account_statement_import_camt54/models/__init__.py new file mode 100644 index 00000000..11ac1bbc --- /dev/null +++ b/account_statement_import_camt54/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_statement_import +from . import parser diff --git a/account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py b/account_statement_import_camt54/models/account_statement_import.py similarity index 93% rename from account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py rename to account_statement_import_camt54/models/account_statement_import.py index 55015fc9..ae863028 100644 --- a/account_bank_statement_import_oca_camt54/models/account_bank_statement_import.py +++ b/account_statement_import_camt54/models/account_statement_import.py @@ -7,10 +7,10 @@ from odoo import models _logger = logging.getLogger(__name__) -class AccountBankStatementImport(models.TransientModel): +class AccountStatementImport(models.TransientModel): """Add process_camt method to account.bank.statement.import.""" - _inherit = "account.bank.statement.import" + _inherit = "account.statement.import" def _create_bank_statements(self, stmts_vals): """ Set balance_end_real if not already provided by the file.""" diff --git a/account_bank_statement_import_oca_camt54/models/parser.py b/account_statement_import_camt54/models/parser.py similarity index 98% rename from account_bank_statement_import_oca_camt54/models/parser.py rename to account_statement_import_camt54/models/parser.py index e218be9b..7c6d4190 100644 --- a/account_bank_statement_import_oca_camt54/models/parser.py +++ b/account_statement_import_camt54/models/parser.py @@ -7,7 +7,7 @@ from odoo import _, exceptions, models class CamtParser(models.AbstractModel): """Parser for camt bank statement import files.""" - _inherit = "account.bank.statement.import.camt.parser" + _inherit = "account.statement.import.camt.parser" def _get_partner_ref(self, isr): ICP = self.env["ir.config_parameter"] diff --git a/account_bank_statement_import_oca_camt54/readme/CONTRIBUTORS.rst b/account_statement_import_camt54/readme/CONTRIBUTORS.rst similarity index 100% rename from account_bank_statement_import_oca_camt54/readme/CONTRIBUTORS.rst rename to account_statement_import_camt54/readme/CONTRIBUTORS.rst diff --git a/account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst b/account_statement_import_camt54/readme/DESCRIPTION.rst similarity index 100% rename from account_bank_statement_import_oca_camt54/readme/DESCRIPTION.rst rename to account_statement_import_camt54/readme/DESCRIPTION.rst diff --git a/account_bank_statement_import_oca_camt54/static/description/icon.png b/account_statement_import_camt54/static/description/icon.png similarity index 100% rename from account_bank_statement_import_oca_camt54/static/description/icon.png rename to account_statement_import_camt54/static/description/icon.png diff --git a/account_bank_statement_import_oca_camt54/static/description/index.html b/account_statement_import_camt54/static/description/index.html similarity index 100% rename from account_bank_statement_import_oca_camt54/static/description/index.html rename to account_statement_import_camt54/static/description/index.html diff --git a/account_bank_statement_import_oca_camt54/tests/__init__.py b/account_statement_import_camt54/tests/__init__.py similarity index 100% rename from account_bank_statement_import_oca_camt54/tests/__init__.py rename to account_statement_import_camt54/tests/__init__.py diff --git a/account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py b/account_statement_import_camt54/tests/test_get_partner_ref.py similarity index 97% rename from account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py rename to account_statement_import_camt54/tests/test_get_partner_ref.py index 31905e1b..01170a18 100644 --- a/account_bank_statement_import_oca_camt54/tests/test_get_partner_ref.py +++ b/account_statement_import_camt54/tests/test_get_partner_ref.py @@ -7,7 +7,7 @@ from odoo.tests import common class TestGetPartnerRef(common.TransactionCase): def setUp(self): super().setUp() - self.Parser = self.env["account.bank.statement.import.camt.parser"] + self.Parser = self.env["account.statement.import.camt.parser"] self.ICP = self.env["ir.config_parameter"] def test_no_ICP(self): diff --git a/setup/account_statement_import_camt54/odoo/addons/account_statement_import_camt54 b/setup/account_statement_import_camt54/odoo/addons/account_statement_import_camt54 new file mode 120000 index 00000000..73b6643f --- /dev/null +++ b/setup/account_statement_import_camt54/odoo/addons/account_statement_import_camt54 @@ -0,0 +1 @@ +../../../../account_statement_import_camt54 \ No newline at end of file diff --git a/setup/account_statement_import_camt54/setup.py b/setup/account_statement_import_camt54/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/account_statement_import_camt54/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 4debac6247582491fe5e98a50863295416533a81 Mon Sep 17 00:00:00 2001 From: Iryna Vyshnevska Date: Thu, 14 Jan 2021 13:38:05 +0200 Subject: [PATCH 8/8] [IMP] add option to create addtional final line --- .../models/__init__.py | 1 + .../models/account_journal.py | 14 ++++ .../models/account_statement_import.py | 29 +++++--- .../readme/CREDITS.rst | 1 + .../readme/DESCRIPTION.rst | 5 ++ .../tests/__init__.py | 1 + .../tests/test_statement.py | 73 +++++++++++++++++++ 7 files changed, 115 insertions(+), 9 deletions(-) create mode 100644 account_statement_import_camt54/models/account_journal.py create mode 100644 account_statement_import_camt54/readme/CREDITS.rst create mode 100644 account_statement_import_camt54/tests/test_statement.py diff --git a/account_statement_import_camt54/models/__init__.py b/account_statement_import_camt54/models/__init__.py index 11ac1bbc..7a228b17 100644 --- a/account_statement_import_camt54/models/__init__.py +++ b/account_statement_import_camt54/models/__init__.py @@ -1,2 +1,3 @@ from . import account_statement_import +from . import account_journal from . import parser diff --git a/account_statement_import_camt54/models/account_journal.py b/account_statement_import_camt54/models/account_journal.py new file mode 100644 index 00000000..752187a6 --- /dev/null +++ b/account_statement_import_camt54/models/account_journal.py @@ -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", + ) diff --git a/account_statement_import_camt54/models/account_statement_import.py b/account_statement_import_camt54/models/account_statement_import.py index ae863028..6dc15ec3 100644 --- a/account_statement_import_camt54/models/account_statement_import.py +++ b/account_statement_import_camt54/models/account_statement_import.py @@ -12,18 +12,29 @@ class AccountStatementImport(models.TransientModel): _inherit = "account.statement.import" - def _create_bank_statements(self, stmts_vals): - """ Set balance_end_real if not already provided by the file.""" + def _create_bank_statements(self, stmts_vals, result): + """Create additional line in statement to set bank statement statement + to 0 balance""" - statement_line_ids, notifications = super()._create_bank_statements(stmts_vals) - statements = self.env["account.bank.statement"].search( - [("line_ids", "in", statement_line_ids)] - ) + super()._create_bank_statements(stmts_vals, result) + statements = self.env["account.bank.statement"].browse(result["statement_ids"]) for statement in statements: - if not statement.balance_end_real: - amount = sum(statement.line_ids.mapped("amount")) + amount = sum(statement.line_ids.mapped("amount")) + if statement.journal_id.transfer_line: + if amount != 0: + amount = -amount + statement.line_ids.create( + { + "name": statement.name, + "amount": amount, + "statement_id": statement.id, + "date": statement.date, + "payment_ref": "/", + } + ) + statement.balance_end_real = statement.balance_start + else: statement.balance_end_real = statement.balance_start + amount - return statement_line_ids, notifications def _complete_stmts_vals(self, stmts_vals, journal, account_number): """Search partner from partner reference""" diff --git a/account_statement_import_camt54/readme/CREDITS.rst b/account_statement_import_camt54/readme/CREDITS.rst new file mode 100644 index 00000000..5ee91fa4 --- /dev/null +++ b/account_statement_import_camt54/readme/CREDITS.rst @@ -0,0 +1 @@ +* Digital4efficiency.ch diff --git a/account_statement_import_camt54/readme/DESCRIPTION.rst b/account_statement_import_camt54/readme/DESCRIPTION.rst index 63b1f4cf..4b97b805 100644 --- a/account_statement_import_camt54/readme/DESCRIPTION.rst +++ b/account_statement_import_camt54/readme/DESCRIPTION.rst @@ -4,6 +4,11 @@ Customer invoices will be reconciled/Paid. Payment entries will be posted into a 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 ------------------------ diff --git a/account_statement_import_camt54/tests/__init__.py b/account_statement_import_camt54/tests/__init__.py index c2592574..002dfdba 100644 --- a/account_statement_import_camt54/tests/__init__.py +++ b/account_statement_import_camt54/tests/__init__.py @@ -1 +1,2 @@ from . import test_get_partner_ref +from . import test_statement diff --git a/account_statement_import_camt54/tests/test_statement.py b/account_statement_import_camt54/tests/test_statement.py new file mode 100644 index 00000000..b7a16fd3 --- /dev/null +++ b/account_statement_import_camt54/tests/test_statement.py @@ -0,0 +1,73 @@ +# Copyright 2020 Camptocamp SA +# Copyright 2020 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import base64 + +import mock + +from odoo.modules.module import get_module_resource +from odoo.tests.common import SavepointCase + + +class TestGenerateBankStatement(SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + 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": cls.env.ref("base.EUR").id, + } + ) + + @mock.patch( + "odoo.addons.account.models.sequence_mixin." + "SequenceMixin._constrains_date_sequence", + side_effect=False, + ) + def _load_statement(self, constraint): + 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)