diff --git a/account_ebics_oca_statement_import/README.rst b/account_ebics_oca_statement_import/README.rst new file mode 100644 index 0000000..ad87eca --- /dev/null +++ b/account_ebics_oca_statement_import/README.rst @@ -0,0 +1,17 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-blue.png + :target: https://www.gnu.org/licenses/lgpl + :alt: License: LGPL-3 + +========================================================== +Deploy account_ebics module with OCA Bank Statement Import +========================================================== + +This module makes it possible to use the OCA account_statement_import wizard +in combination with 'account_ebics'. + +This module will be installed automatically when following modules are activated +on your odoo database : + +- account_ebics +- account_statement_import_file + diff --git a/account_ebics_oca_statement_import/__init__.py b/account_ebics_oca_statement_import/__init__.py new file mode 100644 index 0000000..5cb1c49 --- /dev/null +++ b/account_ebics_oca_statement_import/__init__.py @@ -0,0 +1 @@ +from . import wizards diff --git a/account_ebics_oca_statement_import/__manifest__.py b/account_ebics_oca_statement_import/__manifest__.py new file mode 100644 index 0000000..b7e5a3d --- /dev/null +++ b/account_ebics_oca_statement_import/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2020-2024 Noviat. +# License LGPL-3 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "account_ebics with OCA Bank Statement Imoort", + "summary": "Use OCA Bank Statement Import with account_ebics", + "version": "17.0.1.0.1", + "author": "Noviat", + "website": "https://www.noviat.com/", + "category": "Hidden", + "license": "LGPL-3", + "depends": [ + "account_ebics", + "account_statement_import_file", + ], + "installable": True, + "auto_install": True, + "images": ["static/description/cover.png"], +} diff --git a/account_ebics_oca_statement_import/i18n/account_ebics_oca_statement_import.pot b/account_ebics_oca_statement_import/i18n/account_ebics_oca_statement_import.pot new file mode 100644 index 0000000..67f7b94 --- /dev/null +++ b/account_ebics_oca_statement_import/i18n/account_ebics_oca_statement_import.pot @@ -0,0 +1,48 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_ebics_oca_statement_import +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\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_ebics_oca_statement_import +#. odoo-python +#: code:addons/account_ebics_oca_statement_import/wizards/account_statement_import.py:0 +#, python-format +msgid "Error detected while processing and EBICS File" +msgstr "" + +#. module: account_ebics_oca_statement_import +#: model:ir.model,name:account_ebics_oca_statement_import.model_account_statement_import +msgid "Import Bank Statement Files" +msgstr "" + +#. module: account_ebics_oca_statement_import +#. odoo-python +#: code:addons/account_ebics_oca_statement_import/wizards/account_statement_import.py:0 +#, python-format +msgid "Statement %(st_name)s dated %(date)s has already been imported." +msgstr "" + +#. module: account_ebics_oca_statement_import +#. odoo-python +#: code:addons/account_ebics_oca_statement_import/wizards/account_statement_import.py:0 +#, python-format +msgid "This file doesn't contain any statement." +msgstr "" + +#. module: account_ebics_oca_statement_import +#. odoo-python +#: code:addons/account_ebics_oca_statement_import/wizards/account_statement_import.py:0 +#: code:addons/account_ebics_oca_statement_import/wizards/account_statement_import.py:0 +#, python-format +msgid "This file doesn't contain any transaction." +msgstr "" diff --git a/account_ebics_oca_statement_import/pyproject.toml b/account_ebics_oca_statement_import/pyproject.toml new file mode 100644 index 0000000..4231d0c --- /dev/null +++ b/account_ebics_oca_statement_import/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/account_ebics_oca_statement_import/static/description/cover.png b/account_ebics_oca_statement_import/static/description/cover.png new file mode 100644 index 0000000..41c4cec Binary files /dev/null and b/account_ebics_oca_statement_import/static/description/cover.png differ diff --git a/account_ebics_oca_statement_import/static/description/icon.png b/account_ebics_oca_statement_import/static/description/icon.png new file mode 100644 index 0000000..889d129 Binary files /dev/null and b/account_ebics_oca_statement_import/static/description/icon.png differ diff --git a/account_ebics_oca_statement_import/static/description/index.html b/account_ebics_oca_statement_import/static/description/index.html new file mode 100644 index 0000000..da1134e --- /dev/null +++ b/account_ebics_oca_statement_import/static/description/index.html @@ -0,0 +1,379 @@ + + + + + +README.rst + + + +
+ + +License: LGPL-3 +
+

Deploy account_ebics module with OCA Bank Statement Import

+

This module makes it possible to use the OCA account_statement_import wizard +in combination with 'account_ebics'.

+

This module will be installed automatically when following modules are activated +on your odoo database :

+ +
+
+ + diff --git a/account_ebics_oca_statement_import/wizards/__init__.py b/account_ebics_oca_statement_import/wizards/__init__.py new file mode 100644 index 0000000..ae69bca --- /dev/null +++ b/account_ebics_oca_statement_import/wizards/__init__.py @@ -0,0 +1 @@ +from . import account_statement_import diff --git a/account_ebics_oca_statement_import/wizards/account_statement_import.py b/account_ebics_oca_statement_import/wizards/account_statement_import.py new file mode 100644 index 0000000..659b984 --- /dev/null +++ b/account_ebics_oca_statement_import/wizards/account_statement_import.py @@ -0,0 +1,121 @@ +# Copyright 2009-2024 Noviat. +# License LGPL-3 or later (http://www.gnu.org/licenses/lgpl). + +import logging +from datetime import date, datetime + +from odoo import _, models + +from odoo.addons.base.models.res_bank import sanitize_account_number + +_logger = logging.getLogger(__name__) + + +class AccountStatementImport(models.TransientModel): + _inherit = "account.statement.import" + + def _match_journal(self, account_number, currency): + journal = self.env["account.journal"] + sanitized_account_number = self._sanitize_account_number(account_number) + fin_journals = self.env["account.journal"].search( + [ + ("type", "=", "bank"), + "|", + ("currency_id", "=", currency.id), + ("company_id.currency_id", "=", currency.id), + ] + ) + fin_journal = fin_journals.filtered( + lambda r: sanitized_account_number + in (r.bank_account_id.sanitized_acc_number or "") + ) + if len(fin_journal) == 1: + journal = fin_journal + if not journal: + journal = super()._match_journal(account_number, currency) + return journal + + def _sanitize_account_number(self, account_number): + sanitized_number = sanitize_account_number(account_number) + check_curr = sanitized_number[-3:] + if check_curr.isalpha(): + all_currencies = self.env["res.currency"].search([]) + if check_curr in all_currencies.mapped("name"): + sanitized_number = sanitized_number[:-3] + return sanitized_number + + def _check_parsed_data(self, stmts_vals): + """Basic and structural verifications""" + if self.env.context.get("active_model") == "ebics.file": + message = False + if len(stmts_vals) == 0: + message = _("This file doesn't contain any statement.") + if not message: + no_st_line = True + for vals in stmts_vals: + if vals["transactions"] and len(vals["transactions"]) > 0: + no_st_line = False + break + if no_st_line: + message = _("This file doesn't contain any transaction.") + if message: + log_msg = ( + _("Error detected while processing and EBICS File") + + ":\n" + + message + ) + _logger.warning(log_msg) + return + return super()._check_parsed_data(stmts_vals) + + def _create_bank_statements(self, stmts_vals, result): + """ + Return error message to ebics.file when handling empty camt. + + Remarks/TODO: + We could add more info to the message (e.g. date, balance, ...) + and write this to the ebics.file, note field. + We could also create empty bank statement (in state done) to clearly + show days without transactions via the bank statement list view. + """ + if self.env.context.get("active_model") != "ebics.file": + return super()._create_bank_statements(stmts_vals, result) + else: + messages = [] + transactions = False + for st_vals in stmts_vals: + statement_ids = result["statement_ids"][:] + self._set_statement_name(st_vals) + if st_vals.get("transactions"): + transactions = True + super()._create_bank_statements([st_vals], result) + if result["statement_ids"] == statement_ids: + # no statement has been created, this is the case + # when all transactions have been imported already + if isinstance(st_vals["date"], date) or isinstance( + st_vals["date"], datetime + ): + st_date = st_vals["date"].strftime("%Y-%m-%d") + else: + st_date = st_vals["date"] + messages.append( + _( + "Statement %(st_name)s dated %(date)s " + "has already been imported.", + st_name=st_vals["name"], + date=st_date, + ) + ) + + if not transactions: + messages.append(_("This file doesn't contain any transaction.")) + if messages: + result["notifications"].append( + {"type": "warning", "message": "\n".join(messages)} + ) + return + + def _set_statement_name(self, st_vals): + """ + Inherit this method to set your own statement naming policy. + """