From 19d4b07215d87977ace6c3ae8809e2f8c48ed5a6 Mon Sep 17 00:00:00 2001 From: Christopher Ormaza Date: Thu, 3 Feb 2022 08:45:29 -0500 Subject: [PATCH 1/7] [14.0][ADD] account_bank_statement_import_online_nordigen --- .../README.rst | 120 +++++ .../__init__.py | 4 + .../__manifest__.py | 19 + .../controllers/__init__.py | 1 + .../controllers/main.py | 40 ++ .../models/__init__.py | 5 + .../models/account_journal.py | 13 + ...online_bank_statement_provider_nordigen.py | 345 +++++++++++++ .../models/res_partner_bank.py | 11 + .../readme/CONFIGURE.rst | 29 ++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 10 + .../static/description/icon.png | Bin 0 -> 11070 bytes .../static/description/index.html | 466 ++++++++++++++++++ .../static/src/js/select_bank_widget.js | 119 +++++ .../lib/nordigen-ui/fonts/HKGrotesk-Bold.ttf | Bin 0 -> 84980 bytes .../nordigen-ui/fonts/HKGrotesk-SemiBold.ttf | Bin 0 -> 87404 bytes .../static/src/lib/nordigen-ui/selector.css | 209 ++++++++ .../static/src/xml/select_bank_widget.xml | 58 +++ .../tests/__init__.py | 3 + ...ccount_statement_import_online_nordigen.py | 15 + .../view/assets.xml | 28 ++ .../view/online_bank_statement_provider.xml | 48 ++ 24 files changed, 1545 insertions(+) create mode 100644 account_bank_statement_import_online_nordigen/README.rst create mode 100644 account_bank_statement_import_online_nordigen/__init__.py create mode 100644 account_bank_statement_import_online_nordigen/__manifest__.py create mode 100644 account_bank_statement_import_online_nordigen/controllers/__init__.py create mode 100644 account_bank_statement_import_online_nordigen/controllers/main.py create mode 100644 account_bank_statement_import_online_nordigen/models/__init__.py create mode 100644 account_bank_statement_import_online_nordigen/models/account_journal.py create mode 100644 account_bank_statement_import_online_nordigen/models/online_bank_statement_provider_nordigen.py create mode 100644 account_bank_statement_import_online_nordigen/models/res_partner_bank.py create mode 100644 account_bank_statement_import_online_nordigen/readme/CONFIGURE.rst create mode 100644 account_bank_statement_import_online_nordigen/readme/CONTRIBUTORS.rst create mode 100644 account_bank_statement_import_online_nordigen/readme/DESCRIPTION.rst create mode 100644 account_bank_statement_import_online_nordigen/readme/USAGE.rst create mode 100644 account_bank_statement_import_online_nordigen/static/description/icon.png create mode 100644 account_bank_statement_import_online_nordigen/static/description/index.html create mode 100644 account_bank_statement_import_online_nordigen/static/src/js/select_bank_widget.js create mode 100644 account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/fonts/HKGrotesk-Bold.ttf create mode 100644 account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/fonts/HKGrotesk-SemiBold.ttf create mode 100644 account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/selector.css create mode 100644 account_bank_statement_import_online_nordigen/static/src/xml/select_bank_widget.xml create mode 100644 account_bank_statement_import_online_nordigen/tests/__init__.py create mode 100644 account_bank_statement_import_online_nordigen/tests/test_account_statement_import_online_nordigen.py create mode 100644 account_bank_statement_import_online_nordigen/view/assets.xml create mode 100644 account_bank_statement_import_online_nordigen/view/online_bank_statement_provider.xml diff --git a/account_bank_statement_import_online_nordigen/README.rst b/account_bank_statement_import_online_nordigen/README.rst new file mode 100644 index 000000000..83681f193 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/README.rst @@ -0,0 +1,120 @@ +================================ +Online Bank Statements: Nordigen +================================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/14.0/account_bank_statement_import_online_nordigen + :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-14-0/bank-statement-import-14-0-account_bank_statement_import_online_nordigen + :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/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provides online bank statements from Nordigen. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure online bank statements provider: + +#. Go to *Invoicing > Configuration > Bank Accounts* +#. Open bank account to configure and edit it +#. Set *Bank Feeds* to *Online* +#. Select *MyPonto.com* as online bank statements provider in + *Online Bank Statements (OCA)* section +#. Save the bank account +#. Click on provider and configure provider-specific settings. + +or, alternatively: + +#. Go to *Invoicing > Overview* +#. Open settings of the corresponding journal account +#. Switch to *Bank Account* tab +#. Set *Bank Feeds* to *Online* +#. Select *Nordigen* as online bank statements provider in + *Online Bank Statements (OCA)* section +#. Save the bank account +#. Click on provider and configure provider-specific settings. +#. Sync bank details with button "Select Bank Nordigen Identifier" +#. Follow process to authorize Nordigen Platform get access to your bank account + +To obtain *Login* and *Key*: + +#. Open `Nordigen `_. + +Check also ``account_bank_statement_import_online`` configuration instructions +for more information. + +Usage +===== + +To pull historical bank statements: + +#. Go to *Invoicing > Configuration > Bank Accounts* +#. Select specific bank accounts +#. Launch *Actions > Online Bank Statements Pull Wizard* +#. Configure date interval and click *Pull* + +If historical data is not needed, then just simply wait for the scheduled +activity "Pull Online Bank Statements" to be executed for getting new +transactions. + +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 +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Christopher Ormaza + +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_online_nordigen/__init__.py b/account_bank_statement_import_online_nordigen/__init__.py new file mode 100644 index 000000000..f4a659efb --- /dev/null +++ b/account_bank_statement_import_online_nordigen/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import controllers diff --git a/account_bank_statement_import_online_nordigen/__manifest__.py b/account_bank_statement_import_online_nordigen/__manifest__.py new file mode 100644 index 000000000..0f4041a91 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright (C) 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Online Bank Statements: Nordigen", + "version": "14.0.1.0.0", + "category": "Account", + "website": "https://github.com/OCA/bank-statement-import", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "depends": ["base", "base_iban", "account_statement_import_online", "web"], + "data": ["view/assets.xml", "view/online_bank_statement_provider.xml"], + "qweb": [ + "static/src/xml/*.xml", + ], + "external_dependencies": { + "python": [], + }, +} diff --git a/account_bank_statement_import_online_nordigen/controllers/__init__.py b/account_bank_statement_import_online_nordigen/controllers/__init__.py new file mode 100644 index 000000000..12a7e529b --- /dev/null +++ b/account_bank_statement_import_online_nordigen/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/account_bank_statement_import_online_nordigen/controllers/main.py b/account_bank_statement_import_online_nordigen/controllers/main.py new file mode 100644 index 000000000..52bdc6630 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/controllers/main.py @@ -0,0 +1,40 @@ +# Copyright (C) 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import logging + +import werkzeug +from werkzeug.urls import url_encode + +from odoo import http +from odoo.http import request + +_logger = logging.getLogger(__name__) + + +class NordigenController(http.Controller): + @http.route("/nordigen/response", type="http", auth="public", csrf=False) + def nordigen_response(self, **post): + _logger.debug(post) + statement_provider = request.env["online.bank.statement.provider"].sudo() + current_provider = statement_provider.search( + [("nordigen_last_requisition_ref", "=", post.get("ref", False))] + ) + action_id = request.env.ref( + "account_statement_import_online.online_bank_statement_provider_action" + ).id + params = { + "action": action_id, + "view_type": "list", + } + if current_provider: + current_provider.update_nordigen_request() + params.update( + { + "view_type": "form", + "model": "online.bank.statement.provider", + "id": current_provider.id, + } + ) + url = "/web#" + url_encode(params) + return werkzeug.utils.redirect(url, 303) diff --git a/account_bank_statement_import_online_nordigen/models/__init__.py b/account_bank_statement_import_online_nordigen/models/__init__.py new file mode 100644 index 000000000..05b61f7c8 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/models/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import online_bank_statement_provider_nordigen +from . import account_journal +from . import res_partner_bank diff --git a/account_bank_statement_import_online_nordigen/models/account_journal.py b/account_bank_statement_import_online_nordigen/models/account_journal.py new file mode 100644 index 000000000..7825411c9 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/models/account_journal.py @@ -0,0 +1,13 @@ +# Copyright (C) 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountJournal(models.Model): + + _inherit = "account.journal" + + nordigen_institution_id = fields.Char( + string="Nordigen Institution ID", required=False + ) diff --git a/account_bank_statement_import_online_nordigen/models/online_bank_statement_provider_nordigen.py b/account_bank_statement_import_online_nordigen/models/online_bank_statement_provider_nordigen.py new file mode 100644 index 000000000..85d25fc01 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/models/online_bank_statement_provider_nordigen.py @@ -0,0 +1,345 @@ +# Copyright (C) 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +import json +import logging +import re +from datetime import datetime +from uuid import uuid4 + +import requests +from dateutil.relativedelta import relativedelta +from werkzeug.urls import url_join + +from odoo import _, api, fields, models +from odoo.exceptions import UserError +from odoo.tools import DEFAULT_SERVER_DATE_FORMAT as DF + +_logger = logging.getLogger(__name__) + +NORDIGEN_ENDPOINT = "https://ob.nordigen.com/api/v2" + + +class OnlineBankStatementProviderNordigen(models.Model): + _inherit = "online.bank.statement.provider" + + nordigen_token = fields.Char(readonly=True) + nordigen_token_expiration = fields.Datetime(readonly=True, tracking=True) + nordigen_last_requisition_ref = fields.Char(readonly=True) + nordigen_last_requisition_id = fields.Char(readonly=True) + nordigen_last_requisition_expiration = fields.Datetime(readonly=True, tracking=True) + nordigen_institution_id = fields.Char(related="journal_id.nordigen_institution_id") + nordigen_account_id = fields.Char( + related="journal_id.bank_account_id.nordigen_account_id" + ) + + def nordigen_reset_last_identifier(self): + self.write( + { + "nordigen_last_requisition_id": False, + "nordigen_last_requisition_ref": False, + "nordigen_last_requisition_expiration": False, + } + ) + + @api.model + def _get_available_services(self): + return super()._get_available_services() + [ + ("nordigen", "Nordigen"), + ] + + def _get_nordigen_headers(self, token=None): + headers = { + "accept": "application/json", + "Content-Type": "application/json", + } + if token: + headers.update({"Authorization": "Bearer %s" % (token)}) + return headers + + def _update_token_nordigen(self): + if ( + not self.nordigen_token + or not self.nordigen_token_expiration + or self.nordigen_token_expiration <= fields.Datetime.now() + ): + url = NORDIGEN_ENDPOINT + "/token/new/" + response = requests.post( + url, + data=json.dumps( + { + "secret_id": self.username, + "secret_key": self.password, + } + ), + headers=self._get_nordigen_headers(), + ) + token_data = {} + if response.status_code == 200: + token_data = json.loads(response.text) + self.sudo().nordigen_token = token_data.get("access", False) + expiration_date = fields.Datetime.now() + relativedelta( + seconds=token_data.get("access_expires", False) + ) + self.sudo().nordigen_token_expiration = expiration_date + + def _get_nordigen_institutions(self, country_code=""): + try: + url = NORDIGEN_ENDPOINT + "/institutions/" + response = requests.get( + url, + params={ + "country": country_code, + }, + headers=self._get_nordigen_headers(self.nordigen_token), + ) + if response.status_code == 200: + institutions = json.loads(response.text) + return institutions + else: + return [] + except Exception as e: + _logger.debug("Getting Institutions %s", e) + return [] + + def _check_bank_account_nordigen(self): + if not self.journal_id.bank_account_id: + raise UserError( + _("To continue configure bank account on journal %s") + % (self.journal_id.display_name) + ) + + def action_select_nordigen_bank(self): + country_model = self.env["res.country"] + self._check_bank_account_nordigen() + ctx = self.env.context.copy() + country = self.company_id.country_id + self._update_token_nordigen() + institutions = self._get_nordigen_institutions() + country_codes = [] + for institution in institutions: + country_codes += institution["countries"] + country_codes = list(set(country_codes)) + countries = country_model.search([("code", "in", country_codes)]) + country_names = [{"code": c.code, "name": c.name} for c in countries] + ctx.update( + { + "dialog_size": "medium", + "country": country.code, + "country_name": country.name, + "journal_id": self.journal_id.id, + "institutions": institutions, + "country_names": country_names, + } + ) + return { + "type": "ir.actions.client", + "tag": "online_sync_institution_selector_nordigen", + "name": _("Select Bank of your Account"), + "params": {}, + "target": "new", + "context": ctx, + } + + def _create_redirect_url_nordigen(self): + base_url = self.env["ir.config_parameter"].sudo().get_param("web.base.url") + return url_join(base_url, "nordigen/response") + + def action_check_agreement(self): + self._update_token_nordigen() + institution_id = self.nordigen_institution_id + self.nordigen_last_requisition_ref = str(uuid4()) + # TO DELETE + institution_id = "SANDBOXFINANCE_SFIN0000" + url = NORDIGEN_ENDPOINT + "/requisitions/" + response = requests.post( + url, + data=json.dumps( + { + "redirect": self._create_redirect_url_nordigen(), + "institution_id": institution_id, + "reference": self.nordigen_last_requisition_ref, + } + ), + headers=self._get_nordigen_headers(self.nordigen_token), + ) + if response.status_code == 201: + requisition_data = json.loads(response.text) + redirect_url = requisition_data.get("link", False) + self.nordigen_last_requisition_id = requisition_data.get("id", False) + return redirect_url + return self._create_redirect_url_nordigen() + + def update_nordigen_request(self): + self._update_token_nordigen() + accounts = [] + url = ( + NORDIGEN_ENDPOINT + + "/requisitions/" + + self.nordigen_last_requisition_id + + "/" + ) + requisition_response = requests.get( + url, + headers=self._get_nordigen_headers(self.nordigen_token), + ) + if requisition_response.status_code == 200: + requisition_data = json.loads(requisition_response.text) + accounts = requisition_data["accounts"] + url = ( + NORDIGEN_ENDPOINT + + "/agreements/enduser/" + + requisition_data["agreement"] + + "/" + ) + agreement_response = requests.get( + url, + headers=self._get_nordigen_headers(self.nordigen_token), + ) + if agreement_response.status_code == 200: + agreement_data = json.loads(agreement_response.text) + self.nordigen_last_requisition_expiration = datetime.strptime( + agreement_data["accepted"], "%Y-%m-%dT%H:%M:%S.%fZ" + ) + relativedelta(days=agreement_data["access_valid_for_days"]) + found_account = False + accounts_iban = [] + for account_id in accounts: + url = NORDIGEN_ENDPOINT + "/accounts/" + account_id + "/" + account_response = requests.get( + url, + headers=self._get_nordigen_headers(self.nordigen_token), + ) + if account_response.status_code == 200: + account_data = json.loads(account_response.text) + accounts_iban.append(account_data["iban"]) + current_bank_account = self.journal_id.bank_account_id.filtered( + lambda x: x.sanitized_acc_number == account_data["iban"] + ) + if current_bank_account: + current_bank_account.write( + {"nordigen_account_id": account_data["id"]} + ) + found_account = True + self.sudo().message_post( + body=_("Your account number %s it successfully attached") + % (self.journal_id.bank_account_id.display_name,) + ) + break + if not found_account: + self.sudo().write( + { + "nordigen_last_requisition_expiration": False, + "nordigen_last_requisition_id": False, + "nordigen_last_requisition_ref": False, + } + ) + self.sudo().message_post( + body=_( + "Your account number %s it not in iban " + "accounts numbers founded %s, please check" + ) + % ( + self.journal_id.bank_account_id.display_name, + " / ".join(accounts_iban), + ) + ) + return False + return True + + def _obtain_statement_data(self, date_since, date_until): + self.ensure_one() + if self.service != "nordigen": + return super()._obtain_statement_data(date_since, date_until) + return self._nordigen_obtain_statement_data(date_since, date_until) + + def _nordigen_get_transactions(self, account_id, date_since, date_until): + self._update_token_nordigen() + currency_model = self.env["res.currency"] + try: + transactions = [] + url = NORDIGEN_ENDPOINT + "/accounts/" + account_id + "/transactions/" + transaction_response = requests.get( + url, + params={ + "date_from": date_since.strftime(DF), + "date_to": date_until.strftime(DF), + }, + headers=self._get_nordigen_headers(self.nordigen_token), + ) + if transaction_response.status_code == 200: + transactions = json.loads(transaction_response.text) + res = [] + sequence = 0 + for tr in transactions.get("transactions", {}).get("booked", []): + string_date = tr.get("bookingDate") or tr.get("valueDate") + # CHECK ME: if there's not date string, is transaction still valid? + if not string_date: + continue + current_date = fields.Date.from_string(string_date) + sequence += 1 + amount = float(tr.get("transactionAmount", {}).get("amount", 0.0)) + currency_code = tr.get("transactionAmount", {}).get( + "currency", self.journal_id.currency_id.name + ) + current_currency = currency_model.search([("name", "=", currency_code)]) + amount_currency = amount + if ( + current_currency + and self.journal_id.currency_id + and current_currency != self.journal_id.currency_id + ): + amount_currency = current_currency._convert( + amount, + self.journal_id.currency_id, + self.journal_id.company_id, + current_date, + ) + # Reference: + # https://nordigen.com/en/docs/account-information/output/transactions/ + ref_list = [ + tr.get(x) + for x in { + "checkId", + "mandateId", + "entryReference", + "remittanceInformationStructured", + "additionalInformation", + } + if tr.get(x) + ] + ref = " ".join(ref_list) + partner_name = tr.get("debtorName", "") or tr.get("creditorName", "") + account_number = "" + if tr.get("debtorAccount", {}): + account_number = tr.get("debtorAccount", {}).get("iban") + if tr.get("creditorAccount", {}): + account_number = tr.get("creditorAccount", {}).get("iban") + res.append( + { + "sequence": sequence, + "date": current_date, + "ref": re.sub(" +", " ", ref) or "/", + "payment_ref": tr.get("remittanceInformationUnstructured", ref), + "unique_import_id": tr["transactionId"], + "amount": amount_currency, + "account_number": account_number, + "partner_name": partner_name, + "transaction_type": tr.get("bankTransactionCode", ""), + "narration": tr.get("additionalInformation", ""), + } + ) + return res + except Exception as e: + _logger.debug( + _("Error getting requisition with %s: %s") + % (self.nordigen_last_requisition_id, str(e)) + ) + return [] + + def _nordigen_obtain_statement_data(self, date_since, date_until): + if self.nordigen_account_id: + new_transactions = self._nordigen_get_transactions( + self.nordigen_account_id, date_since, date_until + ) + if new_transactions: + return new_transactions, {} + return diff --git a/account_bank_statement_import_online_nordigen/models/res_partner_bank.py b/account_bank_statement_import_online_nordigen/models/res_partner_bank.py new file mode 100644 index 000000000..d98c04e38 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/models/res_partner_bank.py @@ -0,0 +1,11 @@ +# Copyright (C) 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResPartnerBank(models.Model): + + _inherit = "res.partner.bank" + + nordigen_account_id = fields.Char(string="Nordigen Account ID", required=False) diff --git a/account_bank_statement_import_online_nordigen/readme/CONFIGURE.rst b/account_bank_statement_import_online_nordigen/readme/CONFIGURE.rst new file mode 100644 index 000000000..5a7d79daf --- /dev/null +++ b/account_bank_statement_import_online_nordigen/readme/CONFIGURE.rst @@ -0,0 +1,29 @@ +To configure online bank statements provider: + +#. Go to *Invoicing > Configuration > Bank Accounts* +#. Open bank account to configure and edit it +#. Set *Bank Feeds* to *Online* +#. Select *MyPonto.com* as online bank statements provider in + *Online Bank Statements (OCA)* section +#. Save the bank account +#. Click on provider and configure provider-specific settings. + +or, alternatively: + +#. Go to *Invoicing > Overview* +#. Open settings of the corresponding journal account +#. Switch to *Bank Account* tab +#. Set *Bank Feeds* to *Online* +#. Select *Nordigen* as online bank statements provider in + *Online Bank Statements (OCA)* section +#. Save the bank account +#. Click on provider and configure provider-specific settings. +#. Sync bank details with button "Select Bank Nordigen Identifier" +#. Follow process to authorize Nordigen Platform get access to your bank account + +To obtain *Login* and *Key*: + +#. Open `Nordigen `_. + +Check also ``account_bank_statement_import_online`` configuration instructions +for more information. diff --git a/account_bank_statement_import_online_nordigen/readme/CONTRIBUTORS.rst b/account_bank_statement_import_online_nordigen/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..b647a292e --- /dev/null +++ b/account_bank_statement_import_online_nordigen/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Christopher Ormaza diff --git a/account_bank_statement_import_online_nordigen/readme/DESCRIPTION.rst b/account_bank_statement_import_online_nordigen/readme/DESCRIPTION.rst new file mode 100644 index 000000000..8f7d26ace --- /dev/null +++ b/account_bank_statement_import_online_nordigen/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module provides online bank statements from Nordigen. diff --git a/account_bank_statement_import_online_nordigen/readme/USAGE.rst b/account_bank_statement_import_online_nordigen/readme/USAGE.rst new file mode 100644 index 000000000..2785a201a --- /dev/null +++ b/account_bank_statement_import_online_nordigen/readme/USAGE.rst @@ -0,0 +1,10 @@ +To pull historical bank statements: + +#. Go to *Invoicing > Configuration > Bank Accounts* +#. Select specific bank accounts +#. Launch *Actions > Online Bank Statements Pull Wizard* +#. Configure date interval and click *Pull* + +If historical data is not needed, then just simply wait for the scheduled +activity "Pull Online Bank Statements" to be executed for getting new +transactions. diff --git a/account_bank_statement_import_online_nordigen/static/description/icon.png b/account_bank_statement_import_online_nordigen/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..09847ed7696bcad441aac277011add9a9a82c01d GIT binary patch literal 11070 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 literal 0 HcmV?d00001 diff --git a/account_bank_statement_import_online_nordigen/static/description/index.html b/account_bank_statement_import_online_nordigen/static/description/index.html new file mode 100644 index 000000000..f50978919 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/static/description/index.html @@ -0,0 +1,466 @@ + + + + + + +Online Bank Statements: Nordigen + + + +
+

Online Bank Statements: Nordigen

+ + +

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

+

This module provides online bank statements from Nordigen.

+

Table of contents

+ +
+

Configuration

+

To configure online bank statements provider:

+
    +
  1. Go to Invoicing > Configuration > Bank Accounts
  2. +
  3. Open bank account to configure and edit it
  4. +
  5. Set Bank Feeds to Online
  6. +
  7. Select MyPonto.com as online bank statements provider in +Online Bank Statements (OCA) section
  8. +
  9. Save the bank account
  10. +
  11. Click on provider and configure provider-specific settings.
  12. +
+

or, alternatively:

+
    +
  1. Go to Invoicing > Overview
  2. +
  3. Open settings of the corresponding journal account
  4. +
  5. Switch to Bank Account tab
  6. +
  7. Set Bank Feeds to Online
  8. +
  9. Select Nordigen as online bank statements provider in +Online Bank Statements (OCA) section
  10. +
  11. Save the bank account
  12. +
  13. Click on provider and configure provider-specific settings.
  14. +
  15. Sync bank details with button “Select Bank Nordigen Identifier”
  16. +
  17. Follow process to authorize Nordigen Platform get access to your bank account
  18. +
+

To obtain Login and Key:

+
    +
  1. Open Nordigen.
  2. +
+

Check also account_bank_statement_import_online configuration instructions +for more information.

+
+
+

Usage

+

To pull historical bank statements:

+
    +
  1. Go to Invoicing > Configuration > Bank Accounts
  2. +
  3. Select specific bank accounts
  4. +
  5. Launch Actions > Online Bank Statements Pull Wizard
  6. +
  7. Configure date interval and click Pull
  8. +
+

If historical data is not needed, then just simply wait for the scheduled +activity “Pull Online Bank Statements” to be executed for getting new +transactions.

+
+
+

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

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

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.

+
+
+
+ + diff --git a/account_bank_statement_import_online_nordigen/static/src/js/select_bank_widget.js b/account_bank_statement_import_online_nordigen/static/src/js/select_bank_widget.js new file mode 100644 index 000000000..e0af2e5a3 --- /dev/null +++ b/account_bank_statement_import_online_nordigen/static/src/js/select_bank_widget.js @@ -0,0 +1,119 @@ +odoo.define( + "account_bank_statement_import_online_nordigen.acc_config_widget_nordigen", + function (require) { + "use strict"; + + require("web.dom_ready"); + var core = require("web.core"); + var AbstractAction = require("web.AbstractAction"); + var QWeb = core.qweb; + var framework = require("web.framework"); + + var OnlineSyncAccountInstitutionSelector = AbstractAction.extend({ + template: "OnlineSyncSearchBankNordigen", + init: function (parent, action, options) { + this._super(parent, action, options); + this.context = action.context; + this.results = action.context.institutions; + this.country_names = action.context.country_names; + this.country_selected = action.context.country; + }, + + start: function () { + const self = this; + const $selectCountries = this.$el.find(".country_select"); + const $countryOptions = $( + QWeb.render("OnlineSyncSearchBankNordigenCountries", { + country_names: this.country_names, + }) + ); + $countryOptions.appendTo($selectCountries); + if ( + $selectCountries.find("option[value=" + this.country_selected + "]") + .length !== 0 + ) { + $selectCountries.val(this.country_selected); + $selectCountries.change(); + } + $selectCountries.change(function () { + self.country_selected = this.selectedOptions[0].value; + return self.renderSearchResult(); + }); + this.displayState(); + self.$el.find("#bank_search_input").on("keyup", function () { + const input = $(".institution-search-input"); + const filter = input[0].value.toUpperCase(); + const institutionList = $(".list-institution"); + + for (let i = 0; i < institutionList.length; i++) { + const txtValue = institutionList[i].textContent; + if (txtValue.toUpperCase().indexOf(filter) > -1) { + institutionList[i].style.display = ""; + } else { + institutionList[i].style.display = "none"; + } + } + }); + }, + + displayState: function () { + if (this.results.length > 0) { + this.renderSearchResult(); + } + }, + + renderElement: function () { + this._super.apply(this, arguments); + }, + + renderSearchResult: function () { + var self = this; + this.$(".institution-container").html(""); + const filteredInstitutions = this.results.filter(function ( + institution + ) { + return institution.countries.includes(self.country_selected); + }); + var $searchResults = $( + QWeb.render("OnlineSyncSearchBankNordigenList", { + institutions: filteredInstitutions, + }) + ); + $searchResults.find("a").click(function () { + framework.blockUI(); + const id = this.getAttribute("data-institution"); + if (id) { + return self + ._rpc({ + model: "account.journal", + method: "write", + args: [ + [self.context.journal_id], + {nordigen_institution_id: id}, + ], + }) + .then(function () { + return self + ._rpc({ + model: "online.bank.statement.provider", + method: "action_check_agreement", + args: [self.context.active_ids], + }) + .then(function (redirect_url) { + window.location.replace(redirect_url); + }); + }); + } + }); + $searchResults.appendTo(self.$(".institution-container")); + }, + }); + core.action_registry.add( + "online_sync_institution_selector_nordigen", + OnlineSyncAccountInstitutionSelector + ); + return { + OnlineSyncAccountInstitutionSelector: OnlineSyncAccountInstitutionSelector, + }; + } +); diff --git a/account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/fonts/HKGrotesk-Bold.ttf b/account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/fonts/HKGrotesk-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8645d73442525f5cb69d4d326b54ce61185d58be GIT binary patch literal 84980 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 literal 0 HcmV?d00001 diff --git a/account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/fonts/HKGrotesk-SemiBold.ttf b/account_bank_statement_import_online_nordigen/static/src/lib/nordigen-ui/fonts/HKGrotesk-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d6a0bf4a4f0c7b94a16afb5f58890f15f9563d37 GIT binary patch literal 87404 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 a { + line-height: 2.8rem; + text-decoration: none; + color: #808080; +} + +.institution-modal-footer > a:hover { + text-decoration: underline; +} + +.institution-modal-close { + color: #8D9090; + font-size: 2.6rem; + font-weight: bold; + cursor: pointer; + position: relative; + top: -20px; +} + +.institution-search-container { + position: relative; + bottom: 2.2rem; +} + +.institution-search-container input { + text-indent: 2.8rem; +} + +.institution-search-icon { + position: relative; + padding: 1rem; + height: 3.8rem; + top: 3.8rem; +} + +.institution-search-input { + width: 100%; + padding: 1rem; + border-radius: 9px; + color: #8C8E8F; + border: 1px solid #8c8e8f; + font-size: 1.6rem; + font-weight: 400; + outline-color: #70b1f7; +} + + +.institution-container { + display: flex; + flex-direction: column; +} + +.list-institution { + padding: 14px 0; + border-bottom: 1px solid #D7D8D8; +} + +.list-institution:last-child { + border: none; +} + +.list-institution a { + padding-right: 2.5rem; + display: flex; + flex-direction: row; + align-items: center; + text-decoration: none; +} + + +.list-institution span { + margin-left: 1.5rem; + font-size: 1.5rem; + font-weight: 600; + color: #1B2021; +} + +.list-institution:hover { + background-color: #F1F1F1; +} + +img.institution-logo { + width: 100%; + max-width: 3.5rem; + height: 3.5rem; + border-radius: 6px; +} + +.institution-company-logo { + max-width: 13rem; + height: 10rem; + margin: 2.5rem 0 7rem; +} + +@media screen and (max-width: 640px) { + + html { + font-size: 8px; + } + + #institution-modal-content { + height: 100%; + max-width: 100%; + border-radius: 0; + } + + #institution-modal-content, + .institution-company-logo { + margin: 0; + } + + .institution-company-logo { + position: absolute; + bottom: 0; + padding: 2.5rem; + } + + .institution-modal-close { + display: none; + } + + + .institution-modal-header { + margin-top: 3rem; + } + + .institution-modal-header h2 { + font-size: 3rem; + } + + .list-institution span { + font-size: 1.9rem; + } +} + +@media screen and (device-height: 568px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 2) { + + html { + font-size: 7px; + } + +} diff --git a/account_bank_statement_import_online_nordigen/static/src/xml/select_bank_widget.xml b/account_bank_statement_import_online_nordigen/static/src/xml/select_bank_widget.xml new file mode 100644 index 000000000..23897a0cf --- /dev/null +++ b/account_bank_statement_import_online_nordigen/static/src/xml/select_bank_widget.xml @@ -0,0 +1,58 @@ + + + +
+
+
+
+ +
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + +
diff --git a/account_bank_statement_import_online_nordigen/tests/__init__.py b/account_bank_statement_import_online_nordigen/tests/__init__.py new file mode 100644 index 000000000..f912681ba --- /dev/null +++ b/account_bank_statement_import_online_nordigen/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_account_statement_import_online_nordigen diff --git a/account_bank_statement_import_online_nordigen/tests/test_account_statement_import_online_nordigen.py b/account_bank_statement_import_online_nordigen/tests/test_account_statement_import_online_nordigen.py new file mode 100644 index 000000000..bc3731adc --- /dev/null +++ b/account_bank_statement_import_online_nordigen/tests/test_account_statement_import_online_nordigen.py @@ -0,0 +1,15 @@ +# Copyright (C) 2022 ForgeFlow S.L. +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests import common + + +class TestAccountBankAccountStatementImportOnlineNordigen(common.TransactionCase): + def setUp(self): + super().setUp() + + def test_balance_start(self): + return + + def test_nordigen(self): + return diff --git a/account_bank_statement_import_online_nordigen/view/assets.xml b/account_bank_statement_import_online_nordigen/view/assets.xml new file mode 100644 index 000000000..a9593405a --- /dev/null +++ b/account_bank_statement_import_online_nordigen/view/assets.xml @@ -0,0 +1,28 @@ + + + +