From bfeaa4117455c4f1822f6c49fdc490c07039bfb2 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Fri, 28 May 2021 14:57:23 +0200 Subject: [PATCH 01/30] [IMP] Adapt account_bank_statement_import_online to 14.0 Also Rename account_bank_statement_import_online => account_statement_import_online --- account_statement_import_online/README.rst | 127 ++++ account_statement_import_online/__init__.py | 5 + .../__manifest__.py | 28 + .../data/account_statement_import_online.xml | 22 + .../i18n/account_statement_import_online.pot | 485 +++++++++++++ account_statement_import_online/i18n/nl.po | 491 +++++++++++++ .../models/__init__.py | 4 + .../models/account_journal.py | 92 +++ .../models/online_bank_statement_provider.py | 402 +++++++++++ .../readme/CONFIGURE.rst | 23 + .../readme/CONTRIBUTORS.rst | 7 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 9 + .../security/ir.model.access.csv | 4 + .../online_bank_statement_provider.xml | 16 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 468 +++++++++++++ .../tests/__init__.py | 3 + .../online_bank_statement_provider_dummy.py | 77 +++ ...st_account_bank_statement_import_online.py | 645 ++++++++++++++++++ .../views/account_journal.xml | 63 ++ .../views/online_bank_statement_provider.xml | 106 +++ .../wizards/__init__.py | 3 + .../online_bank_statement_pull_wizard.py | 35 + .../online_bank_statement_pull_wizard.xml | 37 + 25 files changed, 3153 insertions(+) create mode 100644 account_statement_import_online/README.rst create mode 100644 account_statement_import_online/__init__.py create mode 100644 account_statement_import_online/__manifest__.py create mode 100644 account_statement_import_online/data/account_statement_import_online.xml create mode 100644 account_statement_import_online/i18n/account_statement_import_online.pot create mode 100644 account_statement_import_online/i18n/nl.po create mode 100644 account_statement_import_online/models/__init__.py create mode 100644 account_statement_import_online/models/account_journal.py create mode 100644 account_statement_import_online/models/online_bank_statement_provider.py create mode 100644 account_statement_import_online/readme/CONFIGURE.rst create mode 100644 account_statement_import_online/readme/CONTRIBUTORS.rst create mode 100644 account_statement_import_online/readme/DESCRIPTION.rst create mode 100644 account_statement_import_online/readme/USAGE.rst create mode 100644 account_statement_import_online/security/ir.model.access.csv create mode 100644 account_statement_import_online/security/online_bank_statement_provider.xml create mode 100644 account_statement_import_online/static/description/icon.png create mode 100644 account_statement_import_online/static/description/index.html create mode 100644 account_statement_import_online/tests/__init__.py create mode 100644 account_statement_import_online/tests/online_bank_statement_provider_dummy.py create mode 100644 account_statement_import_online/tests/test_account_bank_statement_import_online.py create mode 100644 account_statement_import_online/views/account_journal.xml create mode 100644 account_statement_import_online/views/online_bank_statement_provider.xml create mode 100644 account_statement_import_online/wizards/__init__.py create mode 100644 account_statement_import_online/wizards/online_bank_statement_pull_wizard.py create mode 100644 account_statement_import_online/wizards/online_bank_statement_pull_wizard.xml diff --git a/account_statement_import_online/README.rst b/account_statement_import_online/README.rst new file mode 100644 index 000000000..3e610e901 --- /dev/null +++ b/account_statement_import_online/README.rst @@ -0,0 +1,127 @@ +====================== +Online Bank Statements +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_statement_import_online + :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_statement_import_online + :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 base for building online bank statements providers. + +**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 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 online bank statements provider in *Online Bank Statements (OCA)* + section +#. Save the bank account +#. Click on provider and configure provider-specific settings. + +**NOTE**: To access these features, user needs to belong to +*Show Full Accounting Features* group. + +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* + +**NOTE**: To access these features, user needs to belong to +*Show Full Accounting Features* group. + +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 +~~~~~~~ + +* CorporateHub + +Contributors +~~~~~~~~~~~~ + +* `CorporateHub `__ + + * Alexey Pelykh + +* `Therp BV `__ + + * Ronald Portier + +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. + +.. |maintainer-alexey-pelykh| image:: https://github.com/alexey-pelykh.png?size=40px + :target: https://github.com/alexey-pelykh + :alt: alexey-pelykh + +Current `maintainer `__: + +|maintainer-alexey-pelykh| + +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_statement_import_online/__init__.py b/account_statement_import_online/__init__.py new file mode 100644 index 000000000..a82a91d66 --- /dev/null +++ b/account_statement_import_online/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models +from . import wizards +from .tests import online_bank_statement_provider_dummy diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py new file mode 100644 index 000000000..1fcfa9eeb --- /dev/null +++ b/account_statement_import_online/__manifest__.py @@ -0,0 +1,28 @@ +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2020 CorporateHub (https://corporatehub.eu) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Online Bank Statements", + "version": "14.0.1.0.0", + "author": "CorporateHub, Odoo Community Association (OCA)", + "maintainers": ["alexey-pelykh"], + "website": "https://github.com/OCA/bank-statement-import", + "license": "AGPL-3", + "category": "Accounting", + "summary": "Online bank statements update", + "depends": [ + "account", + "account_statement_import", + "web_widget_dropdown_dynamic", + ], + "data": [ + "data/account_statement_import_online.xml", + "security/ir.model.access.csv", + "security/online_bank_statement_provider.xml", + "views/account_journal.xml", + "views/online_bank_statement_provider.xml", + "wizards/online_bank_statement_pull_wizard.xml", + ], + "installable": True, +} diff --git a/account_statement_import_online/data/account_statement_import_online.xml b/account_statement_import_online/data/account_statement_import_online.xml new file mode 100644 index 000000000..3df898e4c --- /dev/null +++ b/account_statement_import_online/data/account_statement_import_online.xml @@ -0,0 +1,22 @@ + + + + + Pull Online Bank Statements + 1 + hours + -1 + code + 2019-01-01 00:10:00 + + + model._scheduled_pull() + + diff --git a/account_statement_import_online/i18n/account_statement_import_online.pot b/account_statement_import_online/i18n/account_statement_import_online.pot new file mode 100644 index 000000000..4bb755e09 --- /dev/null +++ b/account_statement_import_online/i18n/account_statement_import_online.pot @@ -0,0 +1,485 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_statement_import_online +# +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_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "%(number)s %(type)s" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__active +msgid "Active" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__api_base +msgid "Api Base" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Cancel" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate +msgid "Certificate" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_chain +msgid "Certificate Chain" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_private_key +msgid "Certificate Private Key" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_public_key +msgid "Certificate Public Key" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__company_id +msgid "Company" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__company_id +msgid "Company related to this journal" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Configuration" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_uid +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_date +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__currency_id +msgid "Currency" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__daily +msgid "Daily statements" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__days +msgid "Day(s)" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Details" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name +msgid "Display Name" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "" +"Failed to obtain statement data for period since %s until %s: %s. See server" +" logs for more details." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__hours +msgid "Hour(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id +msgid "ID" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_error +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +#, python-format +msgid "Inactive" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__interval_type +msgid "Interval Type" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "Issue with Online Bank Statement Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_account_journal +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__journal_id +msgid "Journal" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__key +msgid "Key" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_uid +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_date +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__last_successful_run +msgid "Last successful pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_ids +msgid "Messages" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__minutes +msgid "Minute(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__monthly +msgid "Monthly statements" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "N/A" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__name +msgid "Name" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__next_run +msgid "Next scheduled pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/account_journal.py:0 +#, python-format +msgid "Online (OCA)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_online_bank_statement_provider +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_statement_import_journal_creation__online_bank_statement_provider +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__online_bank_statement_provider +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Online Bank Statement Provider" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +msgid "Online Bank Statement Providers" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/account_journal.py:0 +#: model:ir.model,name:account_statement_import_online.model_online_bank_statement_pull_wizard +#, python-format +msgid "Online Bank Statement Pull Wizard" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_bank_journal_form +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Online Bank Statements (OCA)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.actions.server,name:account_statement_import_online.action_online_bank_statements_pull_wizard +msgid "Online Bank Statements Pull Wizard" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_journal_id_uniq +msgid "Only one online banking statement provider per journal!" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__origin +msgid "Origin" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__passphrase +msgid "Passphrase" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__password +msgid "Password" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_bank_journal_form +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__provider_ids +msgid "Providers" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.actions.server,name:account_statement_import_online.ir_cron_account_pull_online_bank_statements_ir_actions_server +#: model:ir.cron,cron_name:account_statement_import_online.ir_cron_account_pull_online_bank_statements +#: model:ir.cron,name:account_statement_import_online.ir_cron_account_pull_online_bank_statements +msgid "Pull Online Bank Statements" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__account_number +msgid "Sanitized Account Number" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Scheduled Pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__interval_number +msgid "Scheduled update interval" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_valid_interval_number +msgid "Scheduled update interval must be greater than zero!" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__service +msgid "Service" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__date_since +msgid "Since" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Since (at least)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__statement_creation_mode +msgid "Statement Creation Mode" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_statement_import_journal_creation__online_bank_statement_provider_id +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__online_bank_statement_provider_id +msgid "Statement Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__currency_id +msgid "The currency used to enter statement" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__tz +msgid "Timezone" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__tz +msgid "" +"Timezone to convert transaction timestamps to prior being saved into a " +"statement." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__date_until +msgid "Until" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Until (at least)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__update_schedule +msgid "Update Schedule" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__username +msgid "Username" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__weeks +msgid "Week(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__weekly +msgid "Weekly statements" +msgstr "" diff --git a/account_statement_import_online/i18n/nl.po b/account_statement_import_online/i18n/nl.po new file mode 100644 index 000000000..ae12ef320 --- /dev/null +++ b/account_statement_import_online/i18n/nl.po @@ -0,0 +1,491 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_statement_import_online +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-04-23 18:47+0000\n" +"Last-Translator: Bosd \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "%(number)s %(type)s" +msgstr "%(number)s %(type)s" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_needaction +msgid "Action Needed" +msgstr "Actie vereist" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__active +msgid "Active" +msgstr "Actief" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__api_base +msgid "Api Base" +msgstr "Api Base" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_attachment_count +msgid "Attachment Count" +msgstr "Aantal Bijlagen" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Cancel" +msgstr "Annuleer" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate +msgid "Certificate" +msgstr "Certificaat" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_chain +msgid "Certificate Chain" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_private_key +msgid "Certificate Private Key" +msgstr "Certificaat privé sleutel" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_public_key +msgid "Certificate Public Key" +msgstr "Certificaat publieke sleutel" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__company_id +msgid "Company" +msgstr "Bedrijf" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__company_id +msgid "Company related to this journal" +msgstr "Bedrijf gerelateerd aan dit dagboek" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Configuration" +msgstr "Configuratie" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_uid +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_date +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__daily +msgid "Daily statements" +msgstr "Dagelijks afschrift" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__days +msgid "Day(s)" +msgstr "Dag(en)" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Details" +msgstr "Details" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "" +"Failed to obtain statement data for period since %s until %s: %s. See server" +" logs for more details." +msgstr "" +"Kon de afschriften niet verkrijgen voor de periode van %s tot %s:%s. Bekijk " +"de error log van de server voor details." + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_follower_ids +msgid "Followers" +msgstr "Volgers" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_channel_ids +msgid "Followers (Channels)" +msgstr "Volgers (Kanalen)" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_partner_ids +msgid "Followers (Partners)" +msgstr "Volgers (Partners)" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__hours +msgid "Hour(s)" +msgstr "Uur/Uren" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id +msgid "ID" +msgstr "ID" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_unread +msgid "If checked, new messages require your attention." +msgstr "Indien aangevinkt, nieuwe berichten vereisen uw aandacht." + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_error +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "Indien aangevinkt, sommige berichten hebben een foutmelding." + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +#, python-format +msgid "Inactive" +msgstr "inactief" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__interval_type +msgid "Interval Type" +msgstr "Interval Type" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_is_follower +msgid "Is Follower" +msgstr "Is volger" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "Issue with Online Bank Statement Provider" +msgstr "Probleem met Online Bank afschrift leverancier" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_account_journal +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__journal_id +msgid "Journal" +msgstr "Dagboek" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__key +msgid "Key" +msgstr "Sleutel" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update +msgid "Last Modified on" +msgstr "Laatst bijgewerkt op" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_uid +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_date +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__last_successful_run +msgid "Last successful pull" +msgstr "Laatst succesvolle opvraag" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_main_attachment_id +msgid "Main Attachment" +msgstr "Hoofdbijlage" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error +msgid "Message Delivery error" +msgstr "Berichtafleverinsfout" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_ids +msgid "Messages" +msgstr "Berichten" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__minutes +msgid "Minute(s)" +msgstr "Minuut/Minuten" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__monthly +msgid "Monthly statements" +msgstr "Maandelijkse afschriften" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "N/A" +msgstr "N.V.T." + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__name +msgid "Name" +msgstr "Naam" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__next_run +msgid "Next scheduled pull" +msgstr "Volgende geplande opvraag" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_needaction_counter +msgid "Number of Actions" +msgstr "Aantal acties" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "Aantal berichten welke actie vereisen" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Aantal berichten met afleveringsfouten" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_unread_counter +msgid "Number of unread messages" +msgstr "Aantal ongelezen berichten" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/account_journal.py:0 +#, python-format +msgid "Online (OCA)" +msgstr "Online (OCA)" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_online_bank_statement_provider +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_statement_import_journal_creation__online_bank_statement_provider +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__online_bank_statement_provider +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Online Bank Statement Provider" +msgstr "Online Bank afschrift Aanbieder" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +msgid "Online Bank Statement Providers" +msgstr "Online Bank afschrift Aanbieders" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/account_journal.py:0 +#: model:ir.model,name:account_statement_import_online.model_online_bank_statement_pull_wizard +#, python-format +msgid "Online Bank Statement Pull Wizard" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_bank_journal_form +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Online Bank Statements (OCA)" +msgstr "Online Bank Afschriften (OCA)" + +#. module: account_statement_import_online +#: model:ir.actions.server,name:account_statement_import_online.action_online_bank_statements_pull_wizard +msgid "Online Bank Statements Pull Wizard" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_journal_id_uniq +msgid "Only one online banking statement provider per journal!" +msgstr "" +"Er kan slechts een bankafschrift leverancier worden ingesteld per rekening!" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__origin +msgid "Origin" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__passphrase +msgid "Passphrase" +msgstr "wachtwoordzin" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__password +msgid "Password" +msgstr "Wachtwoord" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_bank_journal_form +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Provider" +msgstr "Leverancier" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__provider_ids +msgid "Providers" +msgstr "Leveranciers" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Pull" +msgstr "Opvragen" + +#. module: account_statement_import_online +#: model:ir.actions.server,name:account_statement_import_online.ir_cron_account_pull_online_bank_statements_ir_actions_server +#: model:ir.cron,cron_name:account_statement_import_online.ir_cron_account_pull_online_bank_statements +#: model:ir.cron,name:account_statement_import_online.ir_cron_account_pull_online_bank_statements +msgid "Pull Online Bank Statements" +msgstr "Online Bank afschrifte opvragen" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__account_number +msgid "Sanitized Account Number" +msgstr "Opgeschoond rekeningnummer" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Scheduled Pull" +msgstr "Geplande opvraag" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__interval_number +msgid "Scheduled update interval" +msgstr "Opvraag interval" + +#. module: account_statement_import_online +#: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_valid_interval_number +msgid "Scheduled update interval must be greater than zero!" +msgstr "Planningsinterval moet groter zijn dan 0!" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__service +msgid "Service" +msgstr "Service" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__date_since +msgid "Since" +msgstr "sinds" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Since (at least)" +msgstr "sinds (ten minste)" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__statement_creation_mode +msgid "Statement Creation Mode" +msgstr "Bankafschrift creatie modus" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_statement_import_journal_creation__online_bank_statement_provider_id +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__online_bank_statement_provider_id +msgid "Statement Provider" +msgstr "Afschrift leverancier" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__currency_id +msgid "The currency used to enter statement" +msgstr "De valuta voor het gebruikte afschrift" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__tz +msgid "Timezone" +msgstr "Tijdzone" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__tz +msgid "" +"Timezone to convert transaction timestamps to prior being saved into a " +"statement." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_unread +msgid "Unread Messages" +msgstr "Ongelezen berichten" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_unread_counter +msgid "Unread Messages Counter" +msgstr "Aantal ongelezen berichten" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__date_until +msgid "Until" +msgstr "Tot" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Until (at least)" +msgstr "Tot (ten minste)" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__update_schedule +msgid "Update Schedule" +msgstr "Update planning" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__username +msgid "Username" +msgstr "Gebruikersnaam" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__website_message_ids +msgid "Website Messages" +msgstr "Website berichten" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__website_message_ids +msgid "Website communication history" +msgstr "Website berichten geschiedenis" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__weeks +msgid "Week(s)" +msgstr "Weken" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__weekly +msgid "Weekly statements" +msgstr "Weekelijkse afschriften" diff --git a/account_statement_import_online/models/__init__.py b/account_statement_import_online/models/__init__.py new file mode 100644 index 000000000..56bd827cc --- /dev/null +++ b/account_statement_import_online/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import account_journal +from . import online_bank_statement_provider diff --git a/account_statement_import_online/models/account_journal.py b/account_statement_import_online/models/account_journal.py new file mode 100644 index 000000000..53764c258 --- /dev/null +++ b/account_statement_import_online/models/account_journal.py @@ -0,0 +1,92 @@ +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2019-2020 Dataplug (https://dataplug.io) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import _, api, fields, models + +_logger = logging.getLogger(__name__) + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + online_bank_statement_provider = fields.Selection( + selection=lambda self: self.env[ + "account.journal" + ]._selection_online_bank_statement_provider(), + ) + online_bank_statement_provider_id = fields.Many2one( + string="Statement Provider", + comodel_name="online.bank.statement.provider", + ondelete="restrict", + copy=False, + ) + + def __get_bank_statements_available_sources(self): + result = super().__get_bank_statements_available_sources() + result.append(("online", _("Online (OCA)"))) + return result + + @api.model + def _selection_online_bank_statement_provider(self): + return self.env["online.bank.statement.provider"]._get_available_services() + [ + ("dummy", "Dummy") + ] + + @api.model + def values_online_bank_statement_provider(self): + res = self.env["online.bank.statement.provider"]._get_available_services() + if self.user_has_groups("base.group_no_one"): + res += [("dummy", "Dummy")] + return res + + def _update_online_bank_statement_provider_id(self): + OnlineBankStatementProvider = self.env["online.bank.statement.provider"] + for journal in self.filtered("id"): + provider_id = journal.online_bank_statement_provider_id + if journal.bank_statements_source != "online": + journal.online_bank_statement_provider_id = False + if provider_id: + provider_id.unlink() + continue + if provider_id.service == journal.online_bank_statement_provider: + continue + journal.online_bank_statement_provider_id = False + if provider_id: + provider_id.unlink() + # fmt: off + journal.online_bank_statement_provider_id = \ + OnlineBankStatementProvider.create({ + "journal_id": journal.id, + "service": journal.online_bank_statement_provider, + }) + # fmt: on + + @api.model + def create(self, vals): + rec = super().create(vals) + if "bank_statements_source" in vals or "online_bank_statement_provider" in vals: + rec._update_online_bank_statement_provider_id() + return rec + + def write(self, vals): + res = super().write(vals) + if "bank_statements_source" in vals or "online_bank_statement_provider" in vals: + self._update_online_bank_statement_provider_id() + return res + + def action_online_bank_statements_pull_wizard(self): + provider_ids = self.mapped("online_bank_statement_provider_id").ids + return { + "name": _("Online Bank Statement Pull Wizard"), + "type": "ir.actions.act_window", + "res_model": "online.bank.statement.pull.wizard", + "views": [[False, "form"]], + "target": "new", + "context": { + "default_provider_ids": [(6, False, provider_ids)], + "active_test": False, + }, + } diff --git a/account_statement_import_online/models/online_bank_statement_provider.py b/account_statement_import_online/models/online_bank_statement_provider.py new file mode 100644 index 000000000..63ffb315b --- /dev/null +++ b/account_statement_import_online/models/online_bank_statement_provider.py @@ -0,0 +1,402 @@ +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2019-2020 Dataplug (https://dataplug.io) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import logging +from datetime import datetime +from decimal import Decimal +from html import escape + +from dateutil.relativedelta import MO, relativedelta +from pytz import timezone, utc + +from odoo import _, api, fields, models + +from odoo.addons.base.models.res_bank import sanitize_account_number +from odoo.addons.base.models.res_partner import _tz_get + +_logger = logging.getLogger(__name__) + + +class OnlineBankStatementProvider(models.Model): + _name = "online.bank.statement.provider" + _inherit = ["mail.thread"] + _description = "Online Bank Statement Provider" + + company_id = fields.Many2one(related="journal_id.company_id", store=True) + active = fields.Boolean() + name = fields.Char(string="Name", compute="_compute_name", store=True) + journal_id = fields.Many2one( + comodel_name="account.journal", + required=True, + readonly=True, + ondelete="cascade", + domain=[("type", "=", "bank")], + ) + currency_id = fields.Many2one(related="journal_id.currency_id") + account_number = fields.Char( + related="journal_id.bank_account_id.sanitized_acc_number" + ) + tz = fields.Selection( + selection=_tz_get, + string="Timezone", + default=lambda self: self.env.context.get("tz"), + help=( + "Timezone to convert transaction timestamps to prior being" + " saved into a statement." + ), + ) + service = fields.Selection( + selection=lambda self: self._selection_service(), + required=True, + readonly=True, + ) + interval_type = fields.Selection( + selection=[ + ("minutes", "Minute(s)"), + ("hours", "Hour(s)"), + ("days", "Day(s)"), + ("weeks", "Week(s)"), + ], + default="hours", + required=True, + ) + interval_number = fields.Integer( + string="Scheduled update interval", + default=1, + required=True, + ) + update_schedule = fields.Char( + string="Update Schedule", + compute="_compute_update_schedule", + ) + last_successful_run = fields.Datetime(string="Last successful pull") + next_run = fields.Datetime( + string="Next scheduled pull", + default=fields.Datetime.now, + required=True, + ) + statement_creation_mode = fields.Selection( + selection=[ + ("daily", "Daily statements"), + ("weekly", "Weekly statements"), + ("monthly", "Monthly statements"), + ], + default="daily", + required=True, + ) + api_base = fields.Char() + origin = fields.Char() + username = fields.Char() + password = fields.Char() + key = fields.Binary() + certificate = fields.Binary() + passphrase = fields.Char() + certificate_public_key = fields.Text() + certificate_private_key = fields.Text() + certificate_chain = fields.Text() + + _sql_constraints = [ + ( + "journal_id_uniq", + "UNIQUE(journal_id)", + "Only one online banking statement provider per journal!", + ), + ( + "valid_interval_number", + "CHECK(interval_number > 0)", + "Scheduled update interval must be greater than zero!", + ), + ] + + @api.model + def _get_available_services(self): + """Hook for extension""" + return [] + + @api.model + def _selection_service(self): + return self._get_available_services() + [("dummy", "Dummy")] + + @api.model + def values_service(self): + return self._get_available_services() + + @api.depends("service") + def _compute_name(self): + for provider in self: + provider.name = list( + filter(lambda x: x[0] == provider.service, self._selection_service()) + )[0][1] + + @api.depends("active", "interval_type", "interval_number") + def _compute_update_schedule(self): + for provider in self: + if not provider.active: + provider.update_schedule = _("Inactive") + continue + + provider.update_schedule = _("%(number)s %(type)s") % { + "number": provider.interval_number, + "type": list( + filter( + lambda x: x[0] == provider.interval_type, + self._fields["interval_type"].selection, + ) + )[0][1], + } + + def _pull(self, date_since, date_until): + is_scheduled = self.env.context.get("scheduled") + for provider in self: + statement_date_since = provider._get_statement_date_since(date_since) + while statement_date_since < date_until: + statement_date_until = ( + statement_date_since + provider._get_statement_date_step() + ) + try: + data = provider._obtain_statement_data( + statement_date_since, statement_date_until + ) + except BaseException as e: + if is_scheduled: + _logger.warning( + 'Online Bank Statement Provider "%s" failed to' + " obtain statement data since %s until %s" + % ( + provider.name, + statement_date_since, + statement_date_until, + ), + exc_info=True, + ) + provider.message_post( + body=_( + "Failed to obtain statement data for period " + "since %s until %s: %s. See server logs for " + "more details." + ) + % ( + statement_date_since, + statement_date_until, + escape(str(e)) or _("N/A"), + ), + subject=_("Issue with Online Bank Statement Provider"), + ) + break + raise + provider._create_or_update_statement( + data, statement_date_since, statement_date_until + ) + statement_date_since = statement_date_until + if is_scheduled: + provider._schedule_next_run() + + def _create_or_update_statement( + self, data, statement_date_since, statement_date_until + ): + """Create or update bank statement with the data retrieved from provider.""" + self.ensure_one() + AccountBankStatement = self.env["account.bank.statement"] + is_scheduled = self.env.context.get("scheduled") + if is_scheduled: + AccountBankStatement = AccountBankStatement.with_context( + tracking_disable=True, + ) + if not data: + data = ([], {}) + lines_data, statement_values = data + if not lines_data: + lines_data = [] + if not statement_values: + statement_values = {} + statement_date = self._get_statement_date( + statement_date_since, + statement_date_until, + ) + statement = AccountBankStatement.search( + [ + ("journal_id", "=", self.journal_id.id), + ("state", "=", "open"), + ("date", "=", statement_date), + ], + limit=1, + ) + if not statement: + statement_values.update( + { + "name": "%s/%s" + % (self.journal_id.code, statement_date.strftime("%Y-%m-%d")), + "journal_id": self.journal_id.id, + "date": statement_date, + } + ) + statement = AccountBankStatement.with_context( + journal_id=self.journal_id.id, + ).create( + # NOTE: This is needed since create() alters values + statement_values.copy() + ) + filtered_lines = self._get_statement_filtered_lines( + lines_data, statement_values, statement_date_since, statement_date_until + ) + statement_values.update( + {"line_ids": [[0, False, line] for line in filtered_lines]} + ) + if "balance_start" in statement_values: + statement_values["balance_start"] = float(statement_values["balance_start"]) + if "balance_end_real" in statement_values: + statement_values["balance_end_real"] = float( + statement_values["balance_end_real"] + ) + statement.write(statement_values) + + def _get_statement_filtered_lines( + self, lines_data, statement_values, statement_date_since, statement_date_until + ): + """Get lines from line data, but only for the right date.""" + AccountBankStatementLine = self.env["account.bank.statement.line"] + provider_tz = timezone(self.tz) if self.tz else utc + filtered_lines = [] + for line_values in lines_data: + date = line_values["date"] + if not isinstance(date, datetime): + date = fields.Datetime.from_string(date) + if date.tzinfo is None: + date = date.replace(tzinfo=utc) + date = date.astimezone(utc).replace(tzinfo=None) + if date < statement_date_since: + if "balance_start" in statement_values: + statement_values["balance_start"] = Decimal( + statement_values["balance_start"] + ) + Decimal(line_values["amount"]) + continue + elif date >= statement_date_until: + if "balance_end_real" in statement_values: + statement_values["balance_end_real"] = Decimal( + statement_values["balance_end_real"] + ) - Decimal(line_values["amount"]) + continue + date = date.replace(tzinfo=utc) + date = date.astimezone(provider_tz).replace(tzinfo=None) + line_values["date"] = date + unique_import_id = line_values.get("unique_import_id") + if unique_import_id: + unique_import_id = self._generate_unique_import_id(unique_import_id) + line_values.update({"unique_import_id": unique_import_id}) + if AccountBankStatementLine.sudo().search( + [("unique_import_id", "=", unique_import_id)], limit=1 + ): + continue + bank_account_number = line_values.get("account_number") + if bank_account_number: + line_values.update( + { + "account_number": ( + self._sanitize_bank_account_number(bank_account_number) + ), + } + ) + filtered_lines.append(line_values) + return filtered_lines + + def _schedule_next_run(self): + self.ensure_one() + self.last_successful_run = self.next_run + self.next_run += self._get_next_run_period() + + def _get_statement_date_since(self, date): + self.ensure_one() + date = date.replace(hour=0, minute=0, second=0, microsecond=0) + if self.statement_creation_mode == "daily": + return date + elif self.statement_creation_mode == "weekly": + return date + relativedelta(weekday=MO(-1)) + elif self.statement_creation_mode == "monthly": + return date.replace(day=1) + + def _get_statement_date_step(self): + self.ensure_one() + if self.statement_creation_mode == "daily": + return relativedelta(days=1, hour=0, minute=0, second=0, microsecond=0) + elif self.statement_creation_mode == "weekly": + return relativedelta( + weeks=1, + weekday=MO, + hour=0, + minute=0, + second=0, + microsecond=0, + ) + elif self.statement_creation_mode == "monthly": + return relativedelta( + months=1, + day=1, + hour=0, + minute=0, + second=0, + microsecond=0, + ) + + def _get_statement_date(self, date_since, date_until): + self.ensure_one() + # NOTE: Statement date is treated by Odoo as start of period. Details + # - addons/account/models/account_journal_dashboard.py + # - def get_line_graph_datas() + tz = timezone(self.tz) if self.tz else utc + date_since = date_since.replace(tzinfo=utc).astimezone(tz) + return date_since.date() + + def _generate_unique_import_id(self, unique_import_id): + self.ensure_one() + return ( + (self.account_number and self.account_number + "-" or "") + + str(self.journal_id.id) + + "-" + + unique_import_id + ) + + def _sanitize_bank_account_number(self, bank_account_number): + """Hook for extension""" + self.ensure_one() + return sanitize_account_number(bank_account_number) + + def _get_next_run_period(self): + self.ensure_one() + if self.interval_type == "minutes": + return relativedelta(minutes=self.interval_number) + elif self.interval_type == "hours": + return relativedelta(hours=self.interval_number) + elif self.interval_type == "days": + return relativedelta(days=self.interval_number) + elif self.interval_type == "weeks": + return relativedelta(weeks=self.interval_number) + + @api.model + def _scheduled_pull(self): + _logger.info("Scheduled pull of online bank statements...") + + providers = self.search( + [("active", "=", True), ("next_run", "<=", fields.Datetime.now())] + ) + if providers: + _logger.info( + "Pulling online bank statements of: %s" + % ", ".join(providers.mapped("journal_id.name")) + ) + for provider in providers.with_context({"scheduled": True}): + date_since = ( + (provider.last_successful_run) + if provider.last_successful_run + else (provider.next_run - provider._get_next_run_period()) + ) + date_until = provider.next_run + provider._pull(date_since, date_until) + + _logger.info("Scheduled pull of online bank statements complete.") + + def _obtain_statement_data(self, date_since, date_until): + """Hook for extension""" + # Check tests/online_bank_statement_provider_dummy.py for reference + self.ensure_one() + return [] diff --git a/account_statement_import_online/readme/CONFIGURE.rst b/account_statement_import_online/readme/CONFIGURE.rst new file mode 100644 index 000000000..d2ae6f219 --- /dev/null +++ b/account_statement_import_online/readme/CONFIGURE.rst @@ -0,0 +1,23 @@ +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 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 online bank statements provider in *Online Bank Statements (OCA)* + section +#. Save the bank account +#. Click on provider and configure provider-specific settings. + +**NOTE**: To access these features, user needs to belong to +*Show Full Accounting Features* group. diff --git a/account_statement_import_online/readme/CONTRIBUTORS.rst b/account_statement_import_online/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..fc2a1a3c6 --- /dev/null +++ b/account_statement_import_online/readme/CONTRIBUTORS.rst @@ -0,0 +1,7 @@ +* `CorporateHub `__ + + * Alexey Pelykh + +* `Therp BV `__ + + * Ronald Portier diff --git a/account_statement_import_online/readme/DESCRIPTION.rst b/account_statement_import_online/readme/DESCRIPTION.rst new file mode 100644 index 000000000..cc0aaaf4c --- /dev/null +++ b/account_statement_import_online/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module provides base for building online bank statements providers. diff --git a/account_statement_import_online/readme/USAGE.rst b/account_statement_import_online/readme/USAGE.rst new file mode 100644 index 000000000..bbc2fcef2 --- /dev/null +++ b/account_statement_import_online/readme/USAGE.rst @@ -0,0 +1,9 @@ +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* + +**NOTE**: To access these features, user needs to belong to +*Show Full Accounting Features* group. diff --git a/account_statement_import_online/security/ir.model.access.csv b/account_statement_import_online/security/ir.model.access.csv new file mode 100644 index 000000000..d0856372e --- /dev/null +++ b/account_statement_import_online/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_online_bank_statement_provider_admin,online.bank.statement.provider:base.group_system,model_online_bank_statement_provider,base.group_system,1,1,1,1 +access_online_bank_statement_provider_user,online.bank.statement.provider:account.group_account_user,model_online_bank_statement_provider,account.group_account_user,1,1,1,1 +access_online_bank_statement_pull_wizard_user,online.bank.statement.pull.wizard:account.group_account_user,model_online_bank_statement_pull_wizard,account.group_account_user,1,1,1,1 diff --git a/account_statement_import_online/security/online_bank_statement_provider.xml b/account_statement_import_online/security/online_bank_statement_provider.xml new file mode 100644 index 000000000..0b1ae8e0e --- /dev/null +++ b/account_statement_import_online/security/online_bank_statement_provider.xml @@ -0,0 +1,16 @@ + + + + + Online Bank Statement Provider multi-company + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + diff --git a/account_statement_import_online/static/description/icon.png b/account_statement_import_online/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~! zVpnB`o+K7|Al`Q_U;eD$B zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__ zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_ zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)( z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9 zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz# z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K= z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C zuVl&0duN<;uOsB3%T9Fp8t{ED108<+W(nOZd?gDnfNBC3>M8WE61$So|P zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1 zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_ zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8 zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ> zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD z#z-)AXwSRY?OPefw^iI+ z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$ z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6 zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+ z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC) zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x! zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8 z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n= z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@ zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y< zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6 zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6% z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(| z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6 z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d} z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_statement_import_online/static/description/index.html b/account_statement_import_online/static/description/index.html new file mode 100644 index 000000000..5a9a78fe1 --- /dev/null +++ b/account_statement_import_online/static/description/index.html @@ -0,0 +1,468 @@ + + + + + + +Online Bank Statements + + + +
+

Online Bank Statements

+ + +

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

+

This module provides base for building online bank statements providers.

+

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

NOTE: To access these features, user needs to belong to +Show Full Accounting Features group.

+
+
+

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

NOTE: To access these features, user needs to belong to +Show Full Accounting Features group.

+
+
+

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

+
    +
  • CorporateHub
  • +
+
+
+

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.

+

Current maintainer:

+

alexey-pelykh

+

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_statement_import_online/tests/__init__.py b/account_statement_import_online/tests/__init__.py new file mode 100644 index 000000000..c631b1f09 --- /dev/null +++ b/account_statement_import_online/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_account_bank_statement_import_online diff --git a/account_statement_import_online/tests/online_bank_statement_provider_dummy.py b/account_statement_import_online/tests/online_bank_statement_provider_dummy.py new file mode 100644 index 000000000..f2e7b5fb1 --- /dev/null +++ b/account_statement_import_online/tests/online_bank_statement_provider_dummy.py @@ -0,0 +1,77 @@ +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2019-2020 Dataplug (https://dataplug.io) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from datetime import datetime, timedelta +from random import randrange + +from dateutil.relativedelta import relativedelta +from pytz import timezone + +from odoo import fields, models + + +class OnlineBankStatementProviderDummy(models.Model): + _inherit = "online.bank.statement.provider" + + def _obtain_statement_data(self, date_since, date_until): + self.ensure_one() + if self.service != "dummy": + return super()._obtain_statement_data( + date_since, + date_until, + ) # pragma: no cover + + if self.env.context.get("crash", False): + exception = self.env.context.get("exception", Exception("Expected")) + raise exception + + line_step_options = self.env.context.get("step", {"minutes": 5}) + line_step = relativedelta(**line_step_options) + expand_by = self.env.context.get("expand_by", 0) + data_since = self.env.context.get("data_since", date_since) + data_until = self.env.context.get("data_until", date_until) + data_since -= expand_by * line_step + data_until += expand_by * line_step + + balance_start = self.env.context.get( + "balance_start", randrange(-10000, 10000, 1) * 0.1 + ) + balance = balance_start + + tz = self.env.context.get("tz") + if tz: + tz = timezone(tz) + + timestamp_mode = self.env.context.get("timestamp_mode") + + lines = [] + date = data_since + while date < data_until: + amount = self.env.context.get("amount", randrange(-100, 100, 1) * 0.1) + transaction_date = date.replace(tzinfo=tz) + if timestamp_mode == "date": + transaction_date = transaction_date.date() + elif timestamp_mode == "str": + transaction_date = fields.Datetime.to_string(transaction_date) + lines.append( + { + "name": "payment", + "amount": amount, + "date": transaction_date, + "unique_import_id": str( + int((date - datetime(1970, 1, 1)) / timedelta(seconds=1)) + ), + "partner_name": "John Doe", + "account_number": "XX00 0000 0000 0000", + } + ) + balance += amount + date += line_step + balance_end = balance + statement = {} + if self.env.context.get("balance", True): + statement.update( + {"balance_start": balance_start, "balance_end_real": balance_end} + ) + return lines, statement diff --git a/account_statement_import_online/tests/test_account_bank_statement_import_online.py b/account_statement_import_online/tests/test_account_bank_statement_import_online.py new file mode 100644 index 000000000..335b5f703 --- /dev/null +++ b/account_statement_import_online/tests/test_account_bank_statement_import_online.py @@ -0,0 +1,645 @@ +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2019-2020 Dataplug (https://dataplug.io) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from datetime import date, datetime +from urllib.error import HTTPError + +from dateutil.relativedelta import relativedelta +from psycopg2 import IntegrityError + +from odoo import fields +from odoo.tests import common +from odoo.tools import mute_logger + + +class TestAccountBankAccountStatementImportOnline(common.TransactionCase): + def setUp(self): + super().setUp() + + self.now = fields.Datetime.now() + self.AccountJournal = self.env["account.journal"] + self.OnlineBankStatementProvider = self.env["online.bank.statement.provider"] + self.OnlineBankStatementPullWizard = self.env[ + "online.bank.statement.pull.wizard" + ] + self.AccountBankStatement = self.env["account.bank.statement"] + self.AccountBankStatementLine = self.env["account.bank.statement.line"] + + def test_provider_unlink_restricted(self): + journal = self.AccountJournal.create( + {"name": "Bank", "type": "bank", "code": "BANK"} + ) + with common.Form(journal) as journal_form: + journal_form.bank_statements_source = "online" + journal_form.online_bank_statement_provider = "dummy" + journal_form.save() + + with self.assertRaises(IntegrityError), mute_logger("odoo.sql_db"): + journal.online_bank_statement_provider_id.unlink() + + def test_cascade_unlink(self): + journal = self.AccountJournal.create( + {"name": "Bank", "type": "bank", "code": "BANK"} + ) + with common.Form(journal) as journal_form: + journal_form.bank_statements_source = "online" + journal_form.online_bank_statement_provider = "dummy" + journal_form.save() + + self.assertTrue(journal.online_bank_statement_provider_id) + journal.unlink() + self.assertFalse(self.OnlineBankStatementProvider.search([])) + + def test_source_change_cleanup(self): + journal = self.AccountJournal.create( + {"name": "Bank", "type": "bank", "code": "BANK"} + ) + with common.Form(journal) as journal_form: + journal_form.bank_statements_source = "online" + journal_form.online_bank_statement_provider = "dummy" + journal_form.save() + + self.assertTrue(journal.online_bank_statement_provider_id) + + with common.Form(journal) as journal_form: + journal_form.bank_statements_source = "undefined" + journal_form.save() + + self.assertFalse(journal.online_bank_statement_provider_id) + self.assertFalse(self.OnlineBankStatementProvider.search([])) + + def test_pull_mode_daily(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "daily" + + provider.with_context(step={"hours": 2})._pull( + self.now - relativedelta(days=1), + self.now, + ) + self.assertEqual( + len(self.AccountBankStatement.search([("journal_id", "=", journal.id)])), 2 + ) + + def test_pull_mode_weekly(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "weekly" + + provider.with_context(step={"hours": 8})._pull( + self.now - relativedelta(weeks=1), + self.now, + ) + self.assertEqual( + len(self.AccountBankStatement.search([("journal_id", "=", journal.id)])), 2 + ) + + def test_pull_mode_monthly(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "monthly" + + provider.with_context(step={"hours": 8})._pull( + self.now - relativedelta(months=1), + self.now, + ) + self.assertEqual( + len(self.AccountBankStatement.search([("journal_id", "=", journal.id)])), 2 + ) + + def test_pull_scheduled(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.next_run = self.now - relativedelta(days=15) + + self.assertFalse( + self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + ) + + provider.with_context(step={"hours": 8})._scheduled_pull() + + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 1) + + def test_pull_skip_duplicates_by_unique_import_id(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "weekly" + + provider.with_context( + step={"hours": 8}, + data_since=self.now - relativedelta(weeks=2), + data_until=self.now, + )._pull( + self.now - relativedelta(weeks=2), + self.now, + ) + self.assertEqual( + len( + self.AccountBankStatementLine.search([("journal_id", "=", journal.id)]) + ), + 14 * (24 / 8), + ) + + provider.with_context( + step={"hours": 8}, + data_since=self.now - relativedelta(weeks=3), + data_until=self.now - relativedelta(weeks=1), + )._pull( + self.now - relativedelta(weeks=3), + self.now - relativedelta(weeks=1), + ) + self.assertEqual( + len( + self.AccountBankStatementLine.search([("journal_id", "=", journal.id)]) + ), + 21 * (24 / 8), + ) + + provider.with_context( + step={"hours": 8}, + data_since=self.now - relativedelta(weeks=1), + data_until=self.now, + )._pull( + self.now - relativedelta(weeks=1), + self.now, + ) + self.assertEqual( + len( + self.AccountBankStatementLine.search([("journal_id", "=", journal.id)]) + ), + 21 * (24 / 8), + ) + + def test_interval_type_minutes(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.interval_type = "minutes" + provider._compute_update_schedule() + + def test_interval_type_hours(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.interval_type = "hours" + provider._compute_update_schedule() + + def test_interval_type_days(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.interval_type = "days" + provider._compute_update_schedule() + + def test_interval_type_weeks(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.interval_type = "weeks" + provider._compute_update_schedule() + + def test_pull_no_crash(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "weekly" + + provider.with_context(crash=True, scheduled=True)._pull( + self.now - relativedelta(hours=1), + self.now, + ) + self.assertFalse( + self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + ) + + def test_pull_crash(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "weekly" + + with self.assertRaises(Exception): + provider.with_context(crash=True)._pull( + self.now - relativedelta(hours=1), + self.now, + ) + + def test_pull_httperror(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "weekly" + + with self.assertRaises(HTTPError): + provider.with_context( + crash=True, + exception=HTTPError(None, 500, "Error", None, None), + )._pull( + self.now - relativedelta(hours=1), + self.now, + ) + + def test_pull_no_balance(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "daily" + + provider.with_context( + step={"hours": 2}, + balance_start=0, + amount=100.0, + balance=False, + )._pull( + self.now - relativedelta(days=1), + self.now, + ) + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id)], + order="date asc", + ) + self.assertFalse(statements[0].balance_start) + self.assertFalse(statements[0].balance_end_real) + self.assertTrue(statements[0].balance_end) + self.assertTrue(statements[1].balance_start) + self.assertFalse(statements[1].balance_end_real) + + def test_wizard(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + action = journal.action_online_bank_statements_pull_wizard() + self.assertTrue(action["context"]["default_provider_ids"][0][2]) + + wizard = self.OnlineBankStatementPullWizard.with_context( + action["context"] + ).create( + {"date_since": self.now - relativedelta(hours=1), "date_until": self.now} + ) + self.assertTrue(wizard.provider_ids) + + wizard.action_pull() + self.assertTrue( + self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + ) + + def test_pull_statement_partially(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.statement_creation_mode = "monthly" + + provider_context = { + "step": {"hours": 24}, + "data_since": datetime(2020, 1, 1), + "amount": 1.0, + "balance_start": 0, + } + + provider.with_context( + **provider_context, + data_until=datetime(2020, 1, 31), + )._pull( + datetime(2020, 1, 1), + datetime(2020, 1, 31), + ) + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id)], + order="date asc", + ) + self.assertEqual(len(statements), 1) + self.assertEqual(statements[0].balance_start, 0.0) + self.assertEqual(statements[0].balance_end_real, 30.0) + + provider.with_context( + **provider_context, + data_until=datetime(2020, 2, 15), + )._pull( + datetime(2020, 1, 1), + datetime(2020, 2, 29), + ) + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id)], + order="date asc", + ) + self.assertEqual(len(statements), 2) + self.assertEqual(statements[0].balance_start, 0.0) + self.assertEqual(statements[0].balance_end_real, 31.0) + self.assertEqual(statements[1].balance_start, 31.0) + self.assertEqual(statements[1].balance_end_real, 45.0) + + provider.with_context( + **provider_context, + data_until=datetime(2020, 2, 29), + )._pull( + datetime(2020, 1, 1), + datetime(2020, 2, 29), + ) + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id)], + order="date asc", + ) + self.assertEqual(len(statements), 2) + self.assertEqual(statements[0].balance_start, 0.0) + self.assertEqual(statements[0].balance_end_real, 31.0) + self.assertEqual(statements[1].balance_start, 31.0) + self.assertEqual(statements[1].balance_end_real, 59.0) + + def test_tz_utc(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.tz = "UTC" + provider.with_context( + step={"hours": 1}, + data_since=datetime(2020, 4, 17, 22, 0), + data_until=datetime(2020, 4, 18, 2, 0), + tz="UTC", + )._pull( + datetime(2020, 4, 17, 22, 0), + datetime(2020, 4, 18, 2, 0), + ) + + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 2) + + lines = statement.mapped("line_ids").sorted() + self.assertEqual(len(lines), 4) + self.assertEqual(lines[0].date, date(2020, 4, 17)) + self.assertEqual(lines[1].date, date(2020, 4, 17)) + self.assertEqual(lines[2].date, date(2020, 4, 18)) + self.assertEqual(lines[3].date, date(2020, 4, 18)) + + def test_tz_non_utc(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.tz = "Etc/GMT-2" + provider.with_context( + step={"hours": 1}, + data_since=datetime(2020, 4, 17, 22, 0), + data_until=datetime(2020, 4, 18, 2, 0), + tz="UTC", + )._pull( + datetime(2020, 4, 17, 22, 0), + datetime(2020, 4, 18, 2, 0), + ) + + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 2) + + lines = statement.mapped("line_ids").sorted() + self.assertEqual(len(lines), 4) + self.assertEqual(lines[0].date, date(2020, 4, 18)) + self.assertEqual(lines[1].date, date(2020, 4, 18)) + self.assertEqual(lines[2].date, date(2020, 4, 18)) + self.assertEqual(lines[3].date, date(2020, 4, 18)) + + def test_other_tz_to_utc(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.with_context( + step={"hours": 1}, + tz="Etc/GMT-2", + data_since=datetime(2020, 4, 18, 0, 0), + data_until=datetime(2020, 4, 18, 4, 0), + )._pull( + datetime(2020, 4, 17, 22, 0), + datetime(2020, 4, 18, 2, 0), + ) + + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 2) + + lines = statement.mapped("line_ids").sorted() + self.assertEqual(len(lines), 4) + self.assertEqual(lines[0].date, date(2020, 4, 17)) + self.assertEqual(lines[1].date, date(2020, 4, 17)) + self.assertEqual(lines[2].date, date(2020, 4, 18)) + self.assertEqual(lines[3].date, date(2020, 4, 18)) + + def test_timestamp_date_only_date(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.with_context(step={"hours": 1}, timestamp_mode="date")._pull( + datetime(2020, 4, 18, 0, 0), + datetime(2020, 4, 18, 4, 0), + ) + + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 1) + + lines = statement.line_ids + self.assertEqual(len(lines), 24) + for line in lines: + self.assertEqual(line.date, date(2020, 4, 18)) + + def test_timestamp_date_only_str(self): + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "bank_statements_source": "online", + "online_bank_statement_provider": "dummy", + } + ) + + provider = journal.online_bank_statement_provider_id + provider.active = True + provider.with_context( + step={"hours": 1}, + data_since=datetime(2020, 4, 18, 0, 0), + data_until=datetime(2020, 4, 18, 4, 0), + timestamp_mode="str", + )._pull( + datetime(2020, 4, 18, 0, 0), + datetime(2020, 4, 18, 4, 0), + ) + + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) + self.assertEqual(len(statement), 1) + + lines = statement.line_ids + self.assertEqual(len(lines), 4) + self.assertEqual(lines[0].date, date(2020, 4, 18)) + self.assertEqual(lines[1].date, date(2020, 4, 18)) + self.assertEqual(lines[2].date, date(2020, 4, 18)) + self.assertEqual(lines[3].date, date(2020, 4, 18)) diff --git a/account_statement_import_online/views/account_journal.xml b/account_statement_import_online/views/account_journal.xml new file mode 100644 index 000000000..53c5ea703 --- /dev/null +++ b/account_statement_import_online/views/account_journal.xml @@ -0,0 +1,63 @@ + + + + + account.journal.form + account.journal + + + + + + + + + + Online Bank Statements Pull Wizard + ir.actions.server + + + code + + if records: + action = records.action_online_bank_statements_pull_wizard() + + + diff --git a/account_statement_import_online/views/online_bank_statement_provider.xml b/account_statement_import_online/views/online_bank_statement_provider.xml new file mode 100644 index 000000000..56d24dfbe --- /dev/null +++ b/account_statement_import_online/views/online_bank_statement_provider.xml @@ -0,0 +1,106 @@ + + + + + online.bank.statement.provider.filter + online.bank.statement.provider + + + + + + + + online.bank.statement.provider.tree + online.bank.statement.provider + + + + + + + + + + + + + online.bank.statement.provider.form + online.bank.statement.provider + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+
+
diff --git a/account_statement_import_online/wizards/__init__.py b/account_statement_import_online/wizards/__init__.py new file mode 100644 index 000000000..a8ac66266 --- /dev/null +++ b/account_statement_import_online/wizards/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import online_bank_statement_pull_wizard diff --git a/account_statement_import_online/wizards/online_bank_statement_pull_wizard.py b/account_statement_import_online/wizards/online_bank_statement_pull_wizard.py new file mode 100644 index 000000000..52225668d --- /dev/null +++ b/account_statement_import_online/wizards/online_bank_statement_pull_wizard.py @@ -0,0 +1,35 @@ +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2019-2020 Dataplug (https://dataplug.io) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class OnlineBankStatementPullWizard(models.TransientModel): + _name = "online.bank.statement.pull.wizard" + _description = "Online Bank Statement Pull Wizard" + + date_since = fields.Datetime( + string="Since", + required=True, + default=fields.Datetime.now, + ) + date_until = fields.Datetime( + string="Until", + required=True, + default=fields.Datetime.now, + ) + provider_ids = fields.Many2many( + string="Providers", + comodel_name="online.bank.statement.provider", + column1="wizard_id", + column2="provider_id", + relation="online_bank_statement_provider_pull_wizard_rel", + ) + + def action_pull(self): + self.ensure_one() + self.with_context( + active_test=False, + ).provider_ids._pull(self.date_since, self.date_until) + return {"type": "ir.actions.act_window_close"} diff --git a/account_statement_import_online/wizards/online_bank_statement_pull_wizard.xml b/account_statement_import_online/wizards/online_bank_statement_pull_wizard.xml new file mode 100644 index 000000000..8e2bd6258 --- /dev/null +++ b/account_statement_import_online/wizards/online_bank_statement_pull_wizard.xml @@ -0,0 +1,37 @@ + + + + + online.bank.statement.pull.wizard.form + online.bank.statement.pull.wizard + +
+ + + + + + + + + + + +
+
+ +
+
+
From bbdb843171fc2e88dd136eda8d902e2c86e838a5 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Wed, 16 Jun 2021 23:40:52 +0200 Subject: [PATCH 02/30] account_statement_import_online: usability improvement on form view of online.bank.statement.provider: avoid speading the information on 3 tabs. As there are just a few fields, let's keep all the information directly visible. Fix warning on search view of online.bank.statement.provider Fix some tests Button on journal form view to access the wizard The wizard now returns the bank statements of the journal(s) Fix wired strings --- .../__manifest__.py | 2 +- .../models/account_journal.py | 14 --- .../online_bank_statement_provider.xml | 1 - .../online_bank_statement_provider_dummy.py | 2 +- ...st_account_bank_statement_import_online.py | 7 +- .../views/account_journal.xml | 27 ++++-- .../views/online_bank_statement_provider.xml | 94 +++++++++---------- .../online_bank_statement_pull_wizard.py | 33 ++++++- .../online_bank_statement_pull_wizard.xml | 26 ++--- 9 files changed, 112 insertions(+), 94 deletions(-) diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py index 1fcfa9eeb..329629fb6 100644 --- a/account_statement_import_online/__manifest__.py +++ b/account_statement_import_online/__manifest__.py @@ -20,9 +20,9 @@ "data/account_statement_import_online.xml", "security/ir.model.access.csv", "security/online_bank_statement_provider.xml", + "wizards/online_bank_statement_pull_wizard.xml", "views/account_journal.xml", "views/online_bank_statement_provider.xml", - "wizards/online_bank_statement_pull_wizard.xml", ], "installable": True, } diff --git a/account_statement_import_online/models/account_journal.py b/account_statement_import_online/models/account_journal.py index 53764c258..df89ee1b3 100644 --- a/account_statement_import_online/models/account_journal.py +++ b/account_statement_import_online/models/account_journal.py @@ -76,17 +76,3 @@ def write(self, vals): if "bank_statements_source" in vals or "online_bank_statement_provider" in vals: self._update_online_bank_statement_provider_id() return res - - def action_online_bank_statements_pull_wizard(self): - provider_ids = self.mapped("online_bank_statement_provider_id").ids - return { - "name": _("Online Bank Statement Pull Wizard"), - "type": "ir.actions.act_window", - "res_model": "online.bank.statement.pull.wizard", - "views": [[False, "form"]], - "target": "new", - "context": { - "default_provider_ids": [(6, False, provider_ids)], - "active_test": False, - }, - } diff --git a/account_statement_import_online/security/online_bank_statement_provider.xml b/account_statement_import_online/security/online_bank_statement_provider.xml index 0b1ae8e0e..db8c82d0a 100644 --- a/account_statement_import_online/security/online_bank_statement_provider.xml +++ b/account_statement_import_online/security/online_bank_statement_provider.xml @@ -8,7 +8,6 @@ Online Bank Statement Provider multi-company - ['|',('company_id','=',False),('company_id','in',company_ids)] diff --git a/account_statement_import_online/tests/online_bank_statement_provider_dummy.py b/account_statement_import_online/tests/online_bank_statement_provider_dummy.py index f2e7b5fb1..e7b884584 100644 --- a/account_statement_import_online/tests/online_bank_statement_provider_dummy.py +++ b/account_statement_import_online/tests/online_bank_statement_provider_dummy.py @@ -56,7 +56,7 @@ def _obtain_statement_data(self, date_since, date_until): transaction_date = fields.Datetime.to_string(transaction_date) lines.append( { - "name": "payment", + "payment_ref": "payment", "amount": amount, "date": transaction_date, "unique_import_id": str( diff --git a/account_statement_import_online/tests/test_account_bank_statement_import_online.py b/account_statement_import_online/tests/test_account_bank_statement_import_online.py index 335b5f703..e16ce1f38 100644 --- a/account_statement_import_online/tests/test_account_bank_statement_import_online.py +++ b/account_statement_import_online/tests/test_account_bank_statement_import_online.py @@ -383,10 +383,8 @@ def test_pull_no_balance(self): order="date asc", ) self.assertFalse(statements[0].balance_start) - self.assertFalse(statements[0].balance_end_real) self.assertTrue(statements[0].balance_end) self.assertTrue(statements[1].balance_start) - self.assertFalse(statements[1].balance_end_real) def test_wizard(self): journal = self.AccountJournal.create( @@ -398,11 +396,8 @@ def test_wizard(self): "online_bank_statement_provider": "dummy", } ) - action = journal.action_online_bank_statements_pull_wizard() - self.assertTrue(action["context"]["default_provider_ids"][0][2]) - wizard = self.OnlineBankStatementPullWizard.with_context( - action["context"] + active_model="account.journal", active_id=journal.id ).create( {"date_since": self.now - relativedelta(hours=1), "date_until": self.now} ) diff --git a/account_statement_import_online/views/account_journal.xml b/account_statement_import_online/views/account_journal.xml index 53c5ea703..fe3192928 100644 --- a/account_statement_import_online/views/account_journal.xml +++ b/account_statement_import_online/views/account_journal.xml @@ -47,17 +47,28 @@ /> + +
+
+
- + Online Bank Statements Pull Wizard - ir.actions.server - + online.bank.statement.pull.wizard + new + form - code - - if records: - action = records.action_online_bank_statements_pull_wizard() - + list + diff --git a/account_statement_import_online/views/online_bank_statement_provider.xml b/account_statement_import_online/views/online_bank_statement_provider.xml index 56d24dfbe..de3f26aa4 100644 --- a/account_statement_import_online/views/online_bank_statement_provider.xml +++ b/account_statement_import_online/views/online_bank_statement_provider.xml @@ -10,11 +10,19 @@ online.bank.statement.provider + + + + @@ -38,63 +46,41 @@
-
- -
- - - - - - - - - - - - - - - - - - - + + + +
From 094de9eee97efbb2d699b144862db419c9ece396 Mon Sep 17 00:00:00 2001 From: default Date: Sat, 16 Oct 2021 08:44:34 +0000 Subject: [PATCH 05/30] [FIX] fixing empty assuming is a good default value #422 --- account_statement_import_online/i18n/it.po | 498 ++++++++++++++++++ .../models/online_bank_statement_provider.py | 2 + 2 files changed, 500 insertions(+) create mode 100644 account_statement_import_online/i18n/it.po diff --git a/account_statement_import_online/i18n/it.po b/account_statement_import_online/i18n/it.po new file mode 100644 index 000000000..5ee3ca991 --- /dev/null +++ b/account_statement_import_online/i18n/it.po @@ -0,0 +1,498 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_statement_import_online +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "%(number)s %(type)s" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__active +msgid "Active" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__allow_empty_statements +msgid "Allow empty statements" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__api_base +msgid "Api Base" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Archived" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Cancel" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate +msgid "Certificate" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_chain +msgid "Certificate Chain" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_private_key +msgid "Certificate Private Key" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_public_key +msgid "Certificate Public Key" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__company_id +msgid "Company" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__company_id +msgid "Company related to this journal" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Configuration" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_uid +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_date +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__currency_id +msgid "Currency" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__daily +msgid "Daily statements" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__days +msgid "Day(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__display_name +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name +msgid "Display Name" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "" +"Failed to obtain statement data for period since %s until %s: %s. See server" +" logs for more details." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_channel_ids +msgid "Followers (Channels)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__date_since +msgid "From" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__hours +msgid "Hour(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__id +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id +msgid "ID" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_unread +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_error +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +#, python-format +msgid "Inactive" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__interval_type +msgid "Interval Type" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "Issue with Online Bank Statement Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_account_journal +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__journal_id +msgid "Journal" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__key +msgid "Key" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal____last_update +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_uid +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_date +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__last_successful_run +msgid "Last successful pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_ids +msgid "Messages" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__minutes +msgid "Minute(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__monthly +msgid "Monthly statements" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 +#, python-format +msgid "N/A" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__name +msgid "Name" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__next_run +msgid "Next scheduled pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction_counter +msgid "Number of messages which requires an action" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_unread_counter +msgid "Number of unread messages" +msgstr "" + +#. module: account_statement_import_online +#: code:addons/account_statement_import_online/models/account_journal.py:0 +#, python-format +msgid "Online (OCA)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_online_bank_statement_provider +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__online_bank_statement_provider +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Online Bank Statement Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.actions.act_window,name:account_statement_import_online.online_bank_statement_provider_action +#: model:ir.ui.menu,name:account_statement_import_online.online_bank_statement_provider_menu +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +msgid "Online Bank Statement Providers" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_online_bank_statement_pull_wizard +msgid "Online Bank Statement Pull Wizard" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Online Bank Statements (OCA)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.actions.act_window,name:account_statement_import_online.action_online_bank_statements_pull_wizard +msgid "Online Bank Statements Pull Wizard" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_journal_id_uniq +msgid "Only one online banking statement provider per journal!" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__origin +msgid "Origin" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__passphrase +msgid "Passphrase" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__password +msgid "Password" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__provider_ids +msgid "Providers" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form +msgid "Pull" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form +msgid "Pull Online Bank Statement" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.actions.server,name:account_statement_import_online.ir_cron_account_pull_online_bank_statements_ir_actions_server +#: model:ir.cron,cron_name:account_statement_import_online.ir_cron_account_pull_online_bank_statements +#: model:ir.cron,name:account_statement_import_online.ir_cron_account_pull_online_bank_statements +msgid "Pull Online Bank Statements" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__account_number +msgid "Sanitized Account Number" +msgstr "" + +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form +msgid "Scheduled Pull" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__interval_number +msgid "Scheduled update interval" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_valid_interval_number +msgid "Scheduled update interval must be greater than zero!" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_account_journal__online_bank_statement_provider_id +msgid "" +"Select the actual instance of a configured provider (a record).\n" +"Selecting a type of provider will automatically create a provider record linked to this journal." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_account_journal__online_bank_statement_provider +msgid "Select the type of service provider (a model)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__service +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_filter +msgid "Service" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__statement_creation_mode +msgid "Statement Creation Mode" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__online_bank_statement_provider_id +msgid "Statement Provider" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__currency_id +msgid "The currency used to enter statement" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__tz +msgid "Timezone" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__tz +msgid "" +"Timezone to convert transaction timestamps to prior being saved into a " +"statement." +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__date_until +msgid "To" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_unread +msgid "Unread Messages" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_unread_counter +msgid "Unread Messages Counter" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__update_schedule +msgid "Update Schedule" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__username +msgid "Username" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__weeks +msgid "Week(s)" +msgstr "" + +#. module: account_statement_import_online +#: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__weekly +msgid "Weekly statements" +msgstr "" diff --git a/account_statement_import_online/models/online_bank_statement_provider.py b/account_statement_import_online/models/online_bank_statement_provider.py index 113b976fe..00cdb6b45 100644 --- a/account_statement_import_online/models/online_bank_statement_provider.py +++ b/account_statement_import_online/models/online_bank_statement_provider.py @@ -299,6 +299,8 @@ def _get_statement_filtered_lines( ), } ) + if not line_values.get("payment_ref"): + line_values["payment_ref"] = line_values.get("ref") filtered_lines.append(line_values) return filtered_lines From 4f3ec97aa40f845ea40bcceb99e9cdc711e7d3cc Mon Sep 17 00:00:00 2001 From: Sergio Zanchetta Date: Thu, 25 Nov 2021 17:07:33 +0000 Subject: [PATCH 06/30] Translated using Weblate (Italian) Currently translated at 26.6% (24 of 90 strings) Translation: bank-statement-import-14.0/bank-statement-import-14.0-account_statement_import_online Translate-URL: https://translation.odoo-community.org/projects/bank-statement-import-14-0/bank-statement-import-14-0-account_statement_import_online/it/ --- .../__manifest__.py | 2 +- account_statement_import_online/i18n/it.po | 52 ++++++++++--------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py index a2578e5f7..2bb5aff04 100644 --- a/account_statement_import_online/__manifest__.py +++ b/account_statement_import_online/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Online Bank Statements", - "version": "14.0.2.0.0", + "version": "14.0.2.0.1", "author": "CorporateHub, Odoo Community Association (OCA)", "maintainers": ["alexey-pelykh"], "website": "https://github.com/OCA/bank-statement-import", diff --git a/account_statement_import_online/i18n/it.po b/account_statement_import_online/i18n/it.po index 5ee3ca991..0cc838ff4 100644 --- a/account_statement_import_online/i18n/it.po +++ b/account_statement_import_online/i18n/it.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2021-11-25 17:36+0000\n" +"Last-Translator: Sergio Zanchetta \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" #. module: account_statement_import_online #: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 @@ -53,7 +55,7 @@ msgstr "" #. module: account_statement_import_online #: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form msgid "Cancel" -msgstr "" +msgstr "Annulla" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate @@ -68,17 +70,17 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_private_key msgid "Certificate Private Key" -msgstr "" +msgstr "Chiave privata certificato" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__certificate_public_key msgid "Certificate Public Key" -msgstr "" +msgstr "Chiave pubblica certificato" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__company_id msgid "Company" -msgstr "" +msgstr "Azienda" #. module: account_statement_import_online #: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__company_id @@ -88,7 +90,7 @@ msgstr "" #. module: account_statement_import_online #: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_provider_form msgid "Configuration" -msgstr "" +msgstr "Configurazione" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_uid @@ -100,17 +102,17 @@ msgstr "" #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__create_date #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__create_date msgid "Created on" -msgstr "" +msgstr "Data creazione" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__currency_id msgid "Currency" -msgstr "" +msgstr "Valuta" #. module: account_statement_import_online #: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__daily msgid "Daily statements" -msgstr "" +msgstr "Estratti conto giornalieri" #. module: account_statement_import_online #: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__days @@ -122,7 +124,7 @@ msgstr "" #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name msgid "Display Name" -msgstr "" +msgstr "Nome visualizzato" #. module: account_statement_import_online #: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 @@ -162,7 +164,7 @@ msgstr "" #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id msgid "ID" -msgstr "" +msgstr "ID" #. module: account_statement_import_online #: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__message_needaction @@ -203,31 +205,31 @@ msgstr "" #: model:ir.model,name:account_statement_import_online.model_account_journal #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__journal_id msgid "Journal" -msgstr "" +msgstr "Registro" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__key msgid "Key" -msgstr "" +msgstr "Chiave" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update msgid "Last Modified on" -msgstr "" +msgstr "Ultima modifica il" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_uid #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_uid msgid "Last Updated by" -msgstr "" +msgstr "Ultimo aggiornamento di" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__write_date #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__write_date msgid "Last Updated on" -msgstr "" +msgstr "Ultimo aggiornamento il" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__last_successful_run @@ -237,7 +239,7 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_main_attachment_id msgid "Main Attachment" -msgstr "" +msgstr "Allegato principale" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_error @@ -247,7 +249,7 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_ids msgid "Messages" -msgstr "" +msgstr "Messaggi" #. module: account_statement_import_online #: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__interval_type__minutes @@ -257,18 +259,18 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__monthly msgid "Monthly statements" -msgstr "" +msgstr "Estratti conto mensili" #. module: account_statement_import_online #: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 #, python-format msgid "N/A" -msgstr "" +msgstr "N/D" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__name msgid "Name" -msgstr "" +msgstr "Nome" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__next_run @@ -353,7 +355,7 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__password msgid "Password" -msgstr "" +msgstr "Password" #. module: account_statement_import_online #: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_account_journal_form @@ -443,7 +445,7 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__tz msgid "Timezone" -msgstr "" +msgstr "Fuso orario" #. module: account_statement_import_online #: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__tz @@ -475,7 +477,7 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__username msgid "Username" -msgstr "" +msgstr "Nome utente" #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__website_message_ids @@ -495,4 +497,4 @@ msgstr "" #. module: account_statement_import_online #: model:ir.model.fields.selection,name:account_statement_import_online.selection__online_bank_statement_provider__statement_creation_mode__weekly msgid "Weekly statements" -msgstr "" +msgstr "Estratti conto settimanali" From 1080c110b9bf694f55be213ee93988f227d0fa78 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Mon, 13 Dec 2021 20:21:33 +0100 Subject: [PATCH 07/30] [IMP] account_statement_import_online[_ponto] improvements. 1. Find partner if ther already is a bank account with the right IBAN; 2. Store (and display) raw import data to help in problem determination; 3. Make it easy to extend the parsing of import data; 4. Apply some clean coding principles. --- .../__manifest__.py | 1 + .../models/__init__.py | 1 + .../models/account_bank_statement_line.py | 18 ++++++++++++++++ .../models/online_bank_statement_provider.py | 18 ++++++++++------ .../views/account_bank_statement_line.xml | 21 +++++++++++++++++++ 5 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 account_statement_import_online/models/account_bank_statement_line.py create mode 100644 account_statement_import_online/views/account_bank_statement_line.xml diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py index 2bb5aff04..0f58bf6bf 100644 --- a/account_statement_import_online/__manifest__.py +++ b/account_statement_import_online/__manifest__.py @@ -23,6 +23,7 @@ "wizards/online_bank_statement_pull_wizard.xml", "views/actions.xml", "views/account_journal.xml", + "views/account_bank_statement_line.xml", "views/online_bank_statement_provider.xml", ], "installable": True, diff --git a/account_statement_import_online/models/__init__.py b/account_statement_import_online/models/__init__.py index 56bd827cc..d3f9d0d62 100644 --- a/account_statement_import_online/models/__init__.py +++ b/account_statement_import_online/models/__init__.py @@ -1,4 +1,5 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import account_journal +from . import account_bank_statement_line from . import online_bank_statement_provider diff --git a/account_statement_import_online/models/account_bank_statement_line.py b/account_statement_import_online/models/account_bank_statement_line.py new file mode 100644 index 000000000..1fc457bd7 --- /dev/null +++ b/account_statement_import_online/models/account_bank_statement_line.py @@ -0,0 +1,18 @@ +# Copyright 2021 Therp BV . +# @author: Ronald Portier . +# Licence LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0). +"""Add raw data to statement line, to solve import issues.""" + +from odoo import fields, models + + +class AccountBankStatementLine(models.Model): + """Add raw data to statement line, to solve import issues.""" + + _inherit = "account.bank.statement.line" + + raw_data = fields.Text( + help="The complete data retrieved online for this transaction", + readonly=True, + copy=False, + ) diff --git a/account_statement_import_online/models/online_bank_statement_provider.py b/account_statement_import_online/models/online_bank_statement_provider.py index 00cdb6b45..3b03f54ec 100644 --- a/account_statement_import_online/models/online_bank_statement_provider.py +++ b/account_statement_import_online/models/online_bank_statement_provider.py @@ -292,13 +292,11 @@ def _get_statement_filtered_lines( continue bank_account_number = line_values.get("account_number") if bank_account_number: - line_values.update( - { - "account_number": ( - self._sanitize_bank_account_number(bank_account_number) - ), - } + sanitized_account_number = self._sanitize_bank_account_number( + bank_account_number ) + line_values["account_number"] = sanitized_account_number + self._update_partner_from_account_number(line_values) if not line_values.get("payment_ref"): line_values["payment_ref"] = line_values.get("ref") filtered_lines.append(line_values) @@ -365,6 +363,14 @@ def _sanitize_bank_account_number(self, bank_account_number): self.ensure_one() return sanitize_account_number(bank_account_number) + def _update_partner_from_account_number(self, line_values): + partner_bank = self.env["res.partner.bank"].search( + [("acc_number", "=", line_values["account_number"])], limit=1 + ) + if partner_bank: + line_values["partner_bank_id"] = partner_bank.id + line_values["partner_id"] = partner_bank.partner_id.id + def _get_next_run_period(self): self.ensure_one() if self.interval_type == "minutes": diff --git a/account_statement_import_online/views/account_bank_statement_line.xml b/account_statement_import_online/views/account_bank_statement_line.xml new file mode 100644 index 000000000..88d13b368 --- /dev/null +++ b/account_statement_import_online/views/account_bank_statement_line.xml @@ -0,0 +1,21 @@ + + + + account.bank.statement.line + + + + + + + + + + + + + + From efb9a1ef99987014b57e95ef7477a238097194f5 Mon Sep 17 00:00:00 2001 From: Ronald Portier Date: Mon, 13 Dec 2021 22:11:22 +0100 Subject: [PATCH 08/30] [FIX] *_online Improvements after review --- .../models/account_bank_statement_line.py | 2 +- .../models/online_bank_statement_provider.py | 10 +++++++++- .../views/account_bank_statement_line.xml | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/account_statement_import_online/models/account_bank_statement_line.py b/account_statement_import_online/models/account_bank_statement_line.py index 1fc457bd7..7f0c7f081 100644 --- a/account_statement_import_online/models/account_bank_statement_line.py +++ b/account_statement_import_online/models/account_bank_statement_line.py @@ -11,7 +11,7 @@ class AccountBankStatementLine(models.Model): _inherit = "account.bank.statement.line" - raw_data = fields.Text( + online_raw_data = fields.Text( help="The complete data retrieved online for this transaction", readonly=True, copy=False, diff --git a/account_statement_import_online/models/online_bank_statement_provider.py b/account_statement_import_online/models/online_bank_statement_provider.py index 3b03f54ec..2366fb726 100644 --- a/account_statement_import_online/models/online_bank_statement_provider.py +++ b/account_statement_import_online/models/online_bank_statement_provider.py @@ -364,8 +364,16 @@ def _sanitize_bank_account_number(self, bank_account_number): return sanitize_account_number(bank_account_number) def _update_partner_from_account_number(self, line_values): + """Lookup partner using account number.""" + self.ensure_one() partner_bank = self.env["res.partner.bank"].search( - [("acc_number", "=", line_values["account_number"])], limit=1 + [ + ("acc_number", "=", line_values["account_number"]), + "|", + ("company_id", "=", False), + ("company_id", "=", self.company_id.id), + ], + limit=1, ) if partner_bank: line_values["partner_bank_id"] = partner_bank.id diff --git a/account_statement_import_online/views/account_bank_statement_line.xml b/account_statement_import_online/views/account_bank_statement_line.xml index 88d13b368..1b7dd2f97 100644 --- a/account_statement_import_online/views/account_bank_statement_line.xml +++ b/account_statement_import_online/views/account_bank_statement_line.xml @@ -13,7 +13,11 @@ - +
From dc844e6c165dd86fddedf34be4eb6ca69edd99c6 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 18 Feb 2022 06:52:44 +0000 Subject: [PATCH 09/30] [UPD] Update account_statement_import_online.pot --- .../__manifest__.py | 2 +- .../i18n/account_statement_import_online.pot | 23 ++++++++++++++ account_statement_import_online/i18n/it.po | 30 +++++++++++++++++-- account_statement_import_online/i18n/nl.po | 23 ++++++++++++++ 4 files changed, 74 insertions(+), 4 deletions(-) diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py index 0f58bf6bf..25150d5fc 100644 --- a/account_statement_import_online/__manifest__.py +++ b/account_statement_import_online/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Online Bank Statements", - "version": "14.0.2.0.1", + "version": "14.0.2.1.0", "author": "CorporateHub, Odoo Community Association (OCA)", "maintainers": ["alexey-pelykh"], "website": "https://github.com/OCA/bank-statement-import", diff --git a/account_statement_import_online/i18n/account_statement_import_online.pot b/account_statement_import_online/i18n/account_statement_import_online.pot index 4eb3a7ec0..d8a2d9648 100644 --- a/account_statement_import_online/i18n/account_statement_import_online.pot +++ b/account_statement_import_online/i18n/account_statement_import_online.pot @@ -49,6 +49,11 @@ msgstr "" msgid "Attachment Count" msgstr "" +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + #. module: account_statement_import_online #: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form msgid "Cancel" @@ -117,6 +122,7 @@ msgid "Day(s)" msgstr "" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name @@ -157,6 +163,7 @@ msgid "Hour(s)" msgstr "" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__id #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id @@ -210,6 +217,7 @@ msgid "Key" msgstr "" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update @@ -334,6 +342,11 @@ msgstr "" msgid "Online Bank Statements Pull Wizard" msgstr "" +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__online_raw_data +msgid "Online Raw Data" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_journal_id_uniq msgid "Only one online banking statement provider per journal!" @@ -381,6 +394,11 @@ msgstr "" msgid "Pull Online Bank Statements" msgstr "" +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_bank_statement_line_form +msgid "Raw Data" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error msgid "SMS Delivery error" @@ -434,6 +452,11 @@ msgstr "" msgid "Statement Provider" msgstr "" +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_account_bank_statement_line__online_raw_data +msgid "The complete data retrieved online for this transaction" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__currency_id msgid "The currency used to enter statement" diff --git a/account_statement_import_online/i18n/it.po b/account_statement_import_online/i18n/it.po index 0cc838ff4..ebff4cae5 100644 --- a/account_statement_import_online/i18n/it.po +++ b/account_statement_import_online/i18n/it.po @@ -52,6 +52,11 @@ msgstr "" msgid "Attachment Count" msgstr "" +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + #. module: account_statement_import_online #: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form msgid "Cancel" @@ -120,6 +125,7 @@ msgid "Day(s)" msgstr "" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name @@ -130,8 +136,8 @@ msgstr "Nome visualizzato" #: code:addons/account_statement_import_online/models/online_bank_statement_provider.py:0 #, python-format msgid "" -"Failed to obtain statement data for period since %s until %s: %s. See server" -" logs for more details." +"Failed to obtain statement data for period since %s until %s: %s. See server " +"logs for more details." msgstr "" #. module: account_statement_import_online @@ -160,6 +166,7 @@ msgid "Hour(s)" msgstr "" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__id #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id @@ -213,6 +220,7 @@ msgid "Key" msgstr "Chiave" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update @@ -337,6 +345,11 @@ msgstr "" msgid "Online Bank Statements Pull Wizard" msgstr "" +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__online_raw_data +msgid "Online Raw Data" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_journal_id_uniq msgid "Only one online banking statement provider per journal!" @@ -384,6 +397,11 @@ msgstr "" msgid "Pull Online Bank Statements" msgstr "" +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_bank_statement_line_form +msgid "Raw Data" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error msgid "SMS Delivery error" @@ -413,7 +431,8 @@ msgstr "" #: model:ir.model.fields,help:account_statement_import_online.field_account_journal__online_bank_statement_provider_id msgid "" "Select the actual instance of a configured provider (a record).\n" -"Selecting a type of provider will automatically create a provider record linked to this journal." +"Selecting a type of provider will automatically create a provider record " +"linked to this journal." msgstr "" #. module: account_statement_import_online @@ -437,6 +456,11 @@ msgstr "" msgid "Statement Provider" msgstr "" +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_account_bank_statement_line__online_raw_data +msgid "The complete data retrieved online for this transaction" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__currency_id msgid "The currency used to enter statement" diff --git a/account_statement_import_online/i18n/nl.po b/account_statement_import_online/i18n/nl.po index a629645f2..068c39fde 100644 --- a/account_statement_import_online/i18n/nl.po +++ b/account_statement_import_online/i18n/nl.po @@ -52,6 +52,11 @@ msgstr "" msgid "Attachment Count" msgstr "Aantal Bijlagen" +#. module: account_statement_import_online +#: model:ir.model,name:account_statement_import_online.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + #. module: account_statement_import_online #: model_terms:ir.ui.view,arch_db:account_statement_import_online.online_bank_statement_pull_wizard_form msgid "Cancel" @@ -120,6 +125,7 @@ msgid "Day(s)" msgstr "Dag(en)" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__display_name #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__display_name @@ -162,6 +168,7 @@ msgid "Hour(s)" msgstr "Uur/Uren" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__id #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__id #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard__id @@ -215,6 +222,7 @@ msgid "Key" msgstr "Sleutel" #. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_account_journal____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider____last_update #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_pull_wizard____last_update @@ -339,6 +347,11 @@ msgstr "Online Bank Afschriften (OCA)" msgid "Online Bank Statements Pull Wizard" msgstr "" +#. module: account_statement_import_online +#: model:ir.model.fields,field_description:account_statement_import_online.field_account_bank_statement_line__online_raw_data +msgid "Online Raw Data" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.constraint,message:account_statement_import_online.constraint_online_bank_statement_provider_journal_id_uniq msgid "Only one online banking statement provider per journal!" @@ -387,6 +400,11 @@ msgstr "" msgid "Pull Online Bank Statements" msgstr "Online Bank afschrifte opvragen" +#. module: account_statement_import_online +#: model_terms:ir.ui.view,arch_db:account_statement_import_online.view_bank_statement_line_form +msgid "Raw Data" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.fields,field_description:account_statement_import_online.field_online_bank_statement_provider__message_has_sms_error msgid "SMS Delivery error" @@ -441,6 +459,11 @@ msgstr "Bankafschrift creatie modus" msgid "Statement Provider" msgstr "Afschrift leverancier" +#. module: account_statement_import_online +#: model:ir.model.fields,help:account_statement_import_online.field_account_bank_statement_line__online_raw_data +msgid "The complete data retrieved online for this transaction" +msgstr "" + #. module: account_statement_import_online #: model:ir.model.fields,help:account_statement_import_online.field_online_bank_statement_provider__currency_id msgid "The currency used to enter statement" From f2be23d41f2e34e9d8853886c1abd26c784f29b3 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Wed, 9 Mar 2022 11:32:07 +0000 Subject: [PATCH 10/30] [FIX] account_statement_import_online: use unittest.mock and don't import tests at install Installing this module failed because `mock` couldn't be found. Indeed there was a migration problem. However, I was not testing the module; just installing. At install, tests shouldn't be imported. This file was being imported because the dummy model was expected to exist in database for tests. Using odoo-test-helper for that now. @moduon MT-295 --- account_statement_import_online/__init__.py | 1 - .../__manifest__.py | 3 +- ...st_account_bank_statement_import_online.py | 32 ++++++++++++------- .../tests/test_account_journal.py | 2 +- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/account_statement_import_online/__init__.py b/account_statement_import_online/__init__.py index a82a91d66..adc6207fd 100644 --- a/account_statement_import_online/__init__.py +++ b/account_statement_import_online/__init__.py @@ -2,4 +2,3 @@ from . import models from . import wizards -from .tests import online_bank_statement_provider_dummy diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py index 25150d5fc..177135c9c 100644 --- a/account_statement_import_online/__manifest__.py +++ b/account_statement_import_online/__manifest__.py @@ -4,13 +4,14 @@ { "name": "Online Bank Statements", - "version": "14.0.2.1.0", + "version": "14.0.2.1.1", "author": "CorporateHub, Odoo Community Association (OCA)", "maintainers": ["alexey-pelykh"], "website": "https://github.com/OCA/bank-statement-import", "license": "AGPL-3", "category": "Accounting", "summary": "Online bank statements update", + "external_dependencies": {"python": ["odoo_test_helper"]}, "depends": [ "account", "account_statement_import", diff --git a/account_statement_import_online/tests/test_account_bank_statement_import_online.py b/account_statement_import_online/tests/test_account_bank_statement_import_online.py index ad132adf7..7d0a5c178 100644 --- a/account_statement_import_online/tests/test_account_bank_statement_import_online.py +++ b/account_statement_import_online/tests/test_account_bank_statement_import_online.py @@ -7,6 +7,7 @@ from urllib.error import HTTPError from dateutil.relativedelta import relativedelta +from odoo_test_helper import FakeModelLoader from psycopg2 import IntegrityError from odoo import fields @@ -20,18 +21,27 @@ ) -class TestAccountBankAccountStatementImportOnline(common.TransactionCase): - def setUp(self): - super().setUp() +class TestAccountBankAccountStatementImportOnline(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() - self.now = fields.Datetime.now() - self.AccountJournal = self.env["account.journal"] - self.OnlineBankStatementProvider = self.env["online.bank.statement.provider"] - self.OnlineBankStatementPullWizard = self.env[ - "online.bank.statement.pull.wizard" - ] - self.AccountBankStatement = self.env["account.bank.statement"] - self.AccountBankStatementLine = self.env["account.bank.statement.line"] + # Load fake model + cls.loader = FakeModelLoader(cls.env, cls.__module__) + cls.loader.backup_registry() + cls.addClassCleanup(cls.loader.restore_registry) + from .online_bank_statement_provider_dummy import ( + OnlineBankStatementProviderDummy, + ) + + cls.loader.update_registry((OnlineBankStatementProviderDummy,)) + + cls.now = fields.Datetime.now() + cls.AccountJournal = cls.env["account.journal"] + cls.OnlineBankStatementProvider = cls.env["online.bank.statement.provider"] + cls.OnlineBankStatementPullWizard = cls.env["online.bank.statement.pull.wizard"] + cls.AccountBankStatement = cls.env["account.bank.statement"] + cls.AccountBankStatementLine = cls.env["account.bank.statement.line"] def test_provider_unlink_restricted(self): journal = self.AccountJournal.create( diff --git a/account_statement_import_online/tests/test_account_journal.py b/account_statement_import_online/tests/test_account_journal.py index 476200a58..f0d63c90e 100644 --- a/account_statement_import_online/tests/test_account_journal.py +++ b/account_statement_import_online/tests/test_account_journal.py @@ -1,6 +1,6 @@ # Copyright 2021 Therp BV (https://therp.nl). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from mock import patch +from unittest.mock import patch from odoo.tests import common From cef8e3a852be378ed0ddefb42a581826a77255a4 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Mon, 8 Aug 2022 00:05:18 +0200 Subject: [PATCH 11/30] Add module account_statement_import_base The 2 modules account_statement_import_online and account_statement_import depend on account_statement_import_base (and not on each other) and share common code, in particular a hook to update the statement line. So we can now have reconciliation modules that use this hook and therefore work both on file import and online import. More details on https://github.com/OCA/bank-statement-import/issues/481. Improve bank statement line form view and journal form view. --- .../__manifest__.py | 6 +-- .../models/__init__.py | 1 - .../models/account_bank_statement_line.py | 18 -------- .../models/online_bank_statement_provider.py | 46 +++---------------- .../views/account_bank_statement_line.xml | 25 ---------- .../views/account_journal.xml | 4 +- 6 files changed, 10 insertions(+), 90 deletions(-) delete mode 100644 account_statement_import_online/models/account_bank_statement_line.py delete mode 100644 account_statement_import_online/views/account_bank_statement_line.xml diff --git a/account_statement_import_online/__manifest__.py b/account_statement_import_online/__manifest__.py index 177135c9c..8d5f5ad9a 100644 --- a/account_statement_import_online/__manifest__.py +++ b/account_statement_import_online/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Online Bank Statements", - "version": "14.0.2.1.1", + "version": "14.0.3.0.0", "author": "CorporateHub, Odoo Community Association (OCA)", "maintainers": ["alexey-pelykh"], "website": "https://github.com/OCA/bank-statement-import", @@ -13,8 +13,7 @@ "summary": "Online bank statements update", "external_dependencies": {"python": ["odoo_test_helper"]}, "depends": [ - "account", - "account_statement_import", + "account_statement_import_base", "web_widget_dropdown_dynamic", ], "data": [ @@ -24,7 +23,6 @@ "wizards/online_bank_statement_pull_wizard.xml", "views/actions.xml", "views/account_journal.xml", - "views/account_bank_statement_line.xml", "views/online_bank_statement_provider.xml", ], "installable": True, diff --git a/account_statement_import_online/models/__init__.py b/account_statement_import_online/models/__init__.py index d3f9d0d62..56bd827cc 100644 --- a/account_statement_import_online/models/__init__.py +++ b/account_statement_import_online/models/__init__.py @@ -1,5 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from . import account_journal -from . import account_bank_statement_line from . import online_bank_statement_provider diff --git a/account_statement_import_online/models/account_bank_statement_line.py b/account_statement_import_online/models/account_bank_statement_line.py deleted file mode 100644 index 7f0c7f081..000000000 --- a/account_statement_import_online/models/account_bank_statement_line.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2021 Therp BV . -# @author: Ronald Portier . -# Licence LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0). -"""Add raw data to statement line, to solve import issues.""" - -from odoo import fields, models - - -class AccountBankStatementLine(models.Model): - """Add raw data to statement line, to solve import issues.""" - - _inherit = "account.bank.statement.line" - - online_raw_data = fields.Text( - help="The complete data retrieved online for this transaction", - readonly=True, - copy=False, - ) diff --git a/account_statement_import_online/models/online_bank_statement_provider.py b/account_statement_import_online/models/online_bank_statement_provider.py index 2366fb726..11021f474 100644 --- a/account_statement_import_online/models/online_bank_statement_provider.py +++ b/account_statement_import_online/models/online_bank_statement_provider.py @@ -12,7 +12,6 @@ from odoo import _, api, fields, models -from odoo.addons.base.models.res_bank import sanitize_account_number from odoo.addons.base.models.res_partner import _tz_get _logger = logging.getLogger(__name__) @@ -259,6 +258,8 @@ def _get_statement_filtered_lines( """Get lines from line data, but only for the right date.""" AccountBankStatementLine = self.env["account.bank.statement.line"] provider_tz = timezone(self.tz) if self.tz else utc + journal = self.journal_id + speeddict = journal._statement_line_import_speeddict() filtered_lines = [] for line_values in lines_data: date = line_values["date"] @@ -282,23 +283,18 @@ def _get_statement_filtered_lines( date = date.replace(tzinfo=utc) date = date.astimezone(provider_tz).replace(tzinfo=None) line_values["date"] = date + journal._statement_line_import_update_unique_import_id( + line_values, self.account_number + ) unique_import_id = line_values.get("unique_import_id") if unique_import_id: - unique_import_id = self._generate_unique_import_id(unique_import_id) - line_values.update({"unique_import_id": unique_import_id}) if AccountBankStatementLine.sudo().search( [("unique_import_id", "=", unique_import_id)], limit=1 ): continue - bank_account_number = line_values.get("account_number") - if bank_account_number: - sanitized_account_number = self._sanitize_bank_account_number( - bank_account_number - ) - line_values["account_number"] = sanitized_account_number - self._update_partner_from_account_number(line_values) if not line_values.get("payment_ref"): line_values["payment_ref"] = line_values.get("ref") + journal._statement_line_import_update_hook(line_values, speeddict) filtered_lines.append(line_values) return filtered_lines @@ -349,36 +345,6 @@ def _get_statement_date(self, date_since, date_until): date_since = date_since.replace(tzinfo=utc).astimezone(tz) return date_since.date() - def _generate_unique_import_id(self, unique_import_id): - self.ensure_one() - return ( - (self.account_number and self.account_number + "-" or "") - + str(self.journal_id.id) - + "-" - + unique_import_id - ) - - def _sanitize_bank_account_number(self, bank_account_number): - """Hook for extension""" - self.ensure_one() - return sanitize_account_number(bank_account_number) - - def _update_partner_from_account_number(self, line_values): - """Lookup partner using account number.""" - self.ensure_one() - partner_bank = self.env["res.partner.bank"].search( - [ - ("acc_number", "=", line_values["account_number"]), - "|", - ("company_id", "=", False), - ("company_id", "=", self.company_id.id), - ], - limit=1, - ) - if partner_bank: - line_values["partner_bank_id"] = partner_bank.id - line_values["partner_id"] = partner_bank.partner_id.id - def _get_next_run_period(self): self.ensure_one() if self.interval_type == "minutes": diff --git a/account_statement_import_online/views/account_bank_statement_line.xml b/account_statement_import_online/views/account_bank_statement_line.xml deleted file mode 100644 index 1b7dd2f97..000000000 --- a/account_statement_import_online/views/account_bank_statement_line.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - account.bank.statement.line - - - - - - - - - - - - - - diff --git a/account_statement_import_online/views/account_journal.xml b/account_statement_import_online/views/account_journal.xml index f2b7bf832..980442889 100644 --- a/account_statement_import_online/views/account_journal.xml +++ b/account_statement_import_online/views/account_journal.xml @@ -11,7 +11,7 @@ account.journal - + - +
+ +