From c555df2eec832dad3d441cc27f6767bf4519866a Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Tue, 12 Nov 2019 08:26:19 +0000 Subject: [PATCH 01/15] [ADD] account_bank_statement_import_split: split statements during import --- .../__init__.py | 3 + .../__manifest__.py | 21 ++ .../models/__init__.py | 3 + .../models/account_bank_statement_import.py | 153 ++++++++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 5 + .../tests/__init__.py | 3 + ...est_account_bank_statement_import_split.py | 267 ++++++++++++++++++ .../views/account_bank_statement_import.xml | 19 ++ 9 files changed, 475 insertions(+) create mode 100644 account_bank_statement_import_split/__init__.py create mode 100644 account_bank_statement_import_split/__manifest__.py create mode 100644 account_bank_statement_import_split/models/__init__.py create mode 100644 account_bank_statement_import_split/models/account_bank_statement_import.py create mode 100644 account_bank_statement_import_split/readme/CONTRIBUTORS.rst create mode 100644 account_bank_statement_import_split/readme/DESCRIPTION.rst create mode 100644 account_bank_statement_import_split/tests/__init__.py create mode 100644 account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py create mode 100644 account_bank_statement_import_split/views/account_bank_statement_import.xml diff --git a/account_bank_statement_import_split/__init__.py b/account_bank_statement_import_split/__init__.py new file mode 100644 index 00000000..31660d6a --- /dev/null +++ b/account_bank_statement_import_split/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/account_bank_statement_import_split/__manifest__.py b/account_bank_statement_import_split/__manifest__.py new file mode 100644 index 00000000..a8d133b8 --- /dev/null +++ b/account_bank_statement_import_split/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + 'name': 'Online Bank Statements Import Split', + 'version': '12.0.1.0.0', + 'author': + 'Brainbean Apps, ' + 'Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/bank-statement-import/', + 'license': 'AGPL-3', + 'category': 'Accounting', + 'summary': 'Split statements during import', + 'depends': [ + 'account_bank_statement_import', + ], + 'data': [ + 'views/account_bank_statement_import.xml', + ], + 'installable': True, +} diff --git a/account_bank_statement_import_split/models/__init__.py b/account_bank_statement_import_split/models/__init__.py new file mode 100644 index 00000000..89d280ce --- /dev/null +++ b/account_bank_statement_import_split/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import account_bank_statement_import diff --git a/account_bank_statement_import_split/models/account_bank_statement_import.py b/account_bank_statement_import_split/models/account_bank_statement_import.py new file mode 100644 index 00000000..c28f6b0c --- /dev/null +++ b/account_bank_statement_import_split/models/account_bank_statement_import.py @@ -0,0 +1,153 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + +from dateutil.relativedelta import relativedelta, MO +from decimal import Decimal + + +class AccountBankStatementImport(models.TransientModel): + _inherit = 'account.bank.statement.import' + + import_mode = fields.Selection( + selection=[ + ('single', 'Single statement'), + ('daily', 'Daily statements'), + ('weekly', 'Weekly statements'), + ('monthly', 'Monthly statements'), + ], + default='single', + ) + + def _complete_stmts_vals(self, stmts_vals, journal, account_number): + stmts_vals = super()._complete_stmts_vals( + stmts_vals, + journal, + account_number + ) + if not self.import_mode or self.import_mode == 'single': + return stmts_vals + statements = [] + for st_vals in stmts_vals: + transactions = list(sorted( + map( + lambda transaction: self._prepare_transaction( + transaction + ), + st_vals['transactions'] + ), + key=lambda transaction: transaction['date'] + )) + if not transactions: + continue + del st_vals['transactions'] + + balance_start = Decimal(st_vals['balance_start']) \ + if 'balance_start' in st_vals else None + balance_end = Decimal(st_vals['balance_end_real']) \ + if 'balance_end_real' in st_vals else None + statement_date_since = self._get_statement_date_since( + transactions[0]['date'] + ) + while transactions: + statement_date_until = ( + statement_date_since + self._get_statement_date_step() + ) + + last_transaction_index = None + for index, transaction in enumerate(transactions): + if transaction['date'] >= statement_date_until: + break + last_transaction_index = index + if last_transaction_index is None: + # NOTE: No transactions for current period + statement_date_since = statement_date_until + continue + + statement_transactions = \ + transactions[0:last_transaction_index + 1] + transactions = transactions[last_transaction_index + 1:] + + statement_values = dict(st_vals) + statement_values.update({ + 'name': self._get_statement_name( + journal, + statement_date_since, + statement_date_until, + ), + 'date': self._get_statement_date( + statement_date_since, + statement_date_until, + ), + 'transactions': statement_transactions, + }) + if balance_start is not None: + statement_values.update({ + 'balance_start': float(balance_start), + }) + for transaction in statement_transactions: + balance_start += Decimal(transaction['amount']) + if balance_end is not None: + statement_balance_end = balance_end + for transaction in transactions: + statement_balance_end -= Decimal(transaction['amount']) + statement_values.update({ + 'balance_end_real': float(statement_balance_end), + }) + + statements.append(statement_values) + statement_date_since = statement_date_until + return statements + + @api.multi + def _prepare_transaction(self, transaction): + transaction.update({ + 'date': fields.Date.from_string(transaction['date']), + }) + return transaction + + @api.multi + def _get_statement_date_since(self, date): + self.ensure_one() + if self.import_mode == 'daily': + return date + elif self.import_mode == 'weekly': + return date + relativedelta(weekday=MO(-1)) + elif self.import_mode == 'monthly': + return date.replace( + day=1, + ) + + @api.multi + def _get_statement_date_step(self): + self.ensure_one() + if self.import_mode == 'daily': + return relativedelta( + days=1, + ) + elif self.import_mode == 'weekly': + return relativedelta( + weeks=1, + weekday=MO, + ) + elif self.import_mode == 'monthly': + return relativedelta( + months=1, + day=1, + ) + + @api.multi + 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() + return date_since + + @api.multi + def _get_statement_name(self, journal, date_since, date_until): + self.ensure_one() + return journal.sequence_id.with_context( + ir_sequence_date=self._get_statement_date(date_since, date_until) + ).next_by_id() diff --git a/account_bank_statement_import_split/readme/CONTRIBUTORS.rst b/account_bank_statement_import_split/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..1c6a35a1 --- /dev/null +++ b/account_bank_statement_import_split/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Alexey Pelykh diff --git a/account_bank_statement_import_split/readme/DESCRIPTION.rst b/account_bank_statement_import_split/readme/DESCRIPTION.rst new file mode 100644 index 00000000..492d6413 --- /dev/null +++ b/account_bank_statement_import_split/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module allows splitting statements by date during import: + +* as daily statements +* as weekly statements +* as monthly statements diff --git a/account_bank_statement_import_split/tests/__init__.py b/account_bank_statement_import_split/tests/__init__.py new file mode 100644 index 00000000..edaecbe0 --- /dev/null +++ b/account_bank_statement_import_split/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_split diff --git a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py new file mode 100644 index 00000000..d352fc36 --- /dev/null +++ b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py @@ -0,0 +1,267 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields +from odoo.tests import common + +from base64 import b64encode +from unittest import mock + +_parse_file_method = ( + 'odoo.addons.account_bank_statement_import' + '.account_bank_statement_import.AccountBankStatementImport._parse_file' +) + + +class TestAccountBankAccountStatementImportSplit(common.TransactionCase): + + def setUp(self): + super().setUp() + + self.now = fields.Datetime.now() + self.currency_usd = self.env.ref('base.USD') + self.empty_data_file = b64encode( + 'TestAccountBankAccountStatementImportSplit'.encode('utf-8') + ) + self.AccountJournal = self.env['account.journal'] + self.AccountBankStatement = self.env['account.bank.statement'] + self.AccountBankStatementImport = self.env[ + 'account.bank.statement.import' + ] + + def test_default_import_mode(self): + journal = self.AccountJournal.create({ + 'name': 'Bank', + 'type': 'bank', + 'code': 'BANK', + 'currency_id': self.currency_usd.id, + }) + wizard = self.AccountBankStatementImport.with_context({ + 'journal_id': journal.id, + }).create({ + 'filename': 'file.ext', + 'data_file': self.empty_data_file, + }) + data = ( + journal.currency_id.name, + journal.bank_account_id.acc_number, + [{ + 'name': 'STATEMENT', + 'date': '2019-01-01', + 'balance_start': 0.0, + 'balance_end_real': 100.0, + 'transactions': [{ + 'name': 'TRANSACTION', + 'amount': '100.0', + 'date': '2019-01-01', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID', + }], + }], + ) + with mock.patch(_parse_file_method, return_value=data): + wizard.with_context({ + 'journal_id': journal.id, + }).import_file() + statement = self.AccountBankStatement.search([ + ('journal_id', '=', journal.id), + ]) + self.assertEqual(len(statement), 1) + self.assertEqual(len(statement.line_ids), 1) + + def test_single_import_mode(self): + journal = self.AccountJournal.create({ + 'name': 'Bank', + 'type': 'bank', + 'code': 'BANK', + 'currency_id': self.currency_usd.id, + }) + wizard = self.AccountBankStatementImport.with_context({ + 'journal_id': journal.id, + }).create({ + 'filename': 'file.ext', + 'data_file': self.empty_data_file, + 'import_mode': 'single', + }) + data = ( + journal.currency_id.name, + journal.bank_account_id.acc_number, + [{ + 'name': 'STATEMENT', + 'date': '2019-01-01', + 'balance_start': 0.0, + 'balance_end_real': 100.0, + 'transactions': [{ + 'name': 'TRANSACTION', + 'amount': '100.0', + 'date': '2019-01-01', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID', + }], + }], + ) + with mock.patch(_parse_file_method, return_value=data): + wizard.with_context({ + 'journal_id': journal.id, + }).import_file() + statement = self.AccountBankStatement.search([ + ('journal_id', '=', journal.id), + ]) + self.assertEqual(len(statement), 1) + self.assertEqual(len(statement.line_ids), 1) + + def test_daily_import_mode(self): + journal = self.AccountJournal.create({ + 'name': 'Bank', + 'type': 'bank', + 'code': 'BANK', + 'currency_id': self.currency_usd.id, + }) + wizard = self.AccountBankStatementImport.with_context({ + 'journal_id': journal.id, + }).create({ + 'filename': 'file.ext', + 'data_file': self.empty_data_file, + 'import_mode': 'daily', + }) + data = ( + journal.currency_id.name, + journal.bank_account_id.acc_number, + [{ + 'name': 'STATEMENT', + 'date': '2019-01-01', + 'balance_start': 0.0, + 'balance_end_real': 100.0, + 'transactions': [{ + 'name': 'TRANSACTION-1', + 'amount': '50.0', + 'date': '2019-01-01', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID-1', + }, { + 'name': 'TRANSACTION-2', + 'amount': '50.0', + 'date': '2019-01-03', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID-2', + }], + }], + ) + with mock.patch(_parse_file_method, return_value=data): + wizard.with_context({ + 'journal_id': journal.id, + }).import_file() + statements = self.AccountBankStatement.search([ + ('journal_id', '=', journal.id), + ]).sorted(key=lambda statement: statement.date) + self.assertEqual(len(statements), 2) + self.assertEqual(len(statements[0].line_ids), 1) + self.assertEqual(statements[0].balance_start, 0.0) + self.assertEqual(statements[0].balance_end_real, 50.0) + self.assertEqual(len(statements[1].line_ids), 1) + self.assertEqual(statements[1].balance_start, 50.0) + self.assertEqual(statements[1].balance_end_real, 100.0) + + def test_weekly_import_mode(self): + journal = self.AccountJournal.create({ + 'name': 'Bank', + 'type': 'bank', + 'code': 'BANK', + 'currency_id': self.currency_usd.id, + }) + wizard = self.AccountBankStatementImport.with_context({ + 'journal_id': journal.id, + }).create({ + 'filename': 'file.ext', + 'data_file': self.empty_data_file, + 'import_mode': 'weekly', + }) + data = ( + journal.currency_id.name, + journal.bank_account_id.acc_number, + [{ + 'name': 'STATEMENT', + 'date': '2019-01-01', + 'balance_start': 0.0, + 'balance_end_real': 100.0, + 'transactions': [{ + 'name': 'TRANSACTION-1', + 'amount': '50.0', + 'date': '2019-01-01', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID-1', + }, { + 'name': 'TRANSACTION-2', + 'amount': '50.0', + 'date': '2019-01-15', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID-2', + }], + }], + ) + with mock.patch(_parse_file_method, return_value=data): + wizard.with_context({ + 'journal_id': journal.id, + }).import_file() + statements = self.AccountBankStatement.search([ + ('journal_id', '=', journal.id), + ]).sorted(key=lambda statement: statement.date) + self.assertEqual(len(statements), 2) + self.assertEqual(len(statements[0].line_ids), 1) + self.assertEqual(statements[0].balance_start, 0.0) + self.assertEqual(statements[0].balance_end_real, 50.0) + self.assertEqual(len(statements[1].line_ids), 1) + self.assertEqual(statements[1].balance_start, 50.0) + self.assertEqual(statements[1].balance_end_real, 100.0) + + def test_monthly_import_mode(self): + journal = self.AccountJournal.create({ + 'name': 'Bank', + 'type': 'bank', + 'code': 'BANK', + 'currency_id': self.currency_usd.id, + }) + wizard = self.AccountBankStatementImport.with_context({ + 'journal_id': journal.id, + }).create({ + 'filename': 'file.ext', + 'data_file': self.empty_data_file, + 'import_mode': 'monthly', + }) + data = ( + journal.currency_id.name, + journal.bank_account_id.acc_number, + [{ + 'name': 'STATEMENT', + 'date': '2019-01-01', + 'balance_start': 0.0, + 'balance_end_real': 100.0, + 'transactions': [{ + 'name': 'TRANSACTION-1', + 'amount': '50.0', + 'date': '2019-01-01', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID-1', + }, { + 'name': 'TRANSACTION-2', + 'amount': '50.0', + 'date': '2019-03-01', + 'note': 'NOTE', + 'unique_import_id': 'TRANSACTION-ID-2', + }], + }], + ) + with mock.patch(_parse_file_method, return_value=data): + wizard.with_context({ + 'journal_id': journal.id, + }).import_file() + statements = self.AccountBankStatement.search([ + ('journal_id', '=', journal.id), + ]).sorted(key=lambda statement: statement.date) + self.assertEqual(len(statements), 2) + self.assertEqual(len(statements[0].line_ids), 1) + self.assertEqual(statements[0].balance_start, 0.0) + self.assertEqual(statements[0].balance_end_real, 50.0) + self.assertEqual(len(statements[1].line_ids), 1) + self.assertEqual(statements[1].balance_start, 50.0) + self.assertEqual(statements[1].balance_end_real, 100.0) diff --git a/account_bank_statement_import_split/views/account_bank_statement_import.xml b/account_bank_statement_import_split/views/account_bank_statement_import.xml new file mode 100644 index 00000000..fe35a52f --- /dev/null +++ b/account_bank_statement_import_split/views/account_bank_statement_import.xml @@ -0,0 +1,19 @@ + + + + + + account.bank.statement.import + + + +

Please select how you'd like to split the imported statement file:

+ +
+
+
+ +
From 6b5f8d7c37c1ca7f47ff5731babf0e1083bf8dfe Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 17 Nov 2019 12:36:19 +0000 Subject: [PATCH 02/15] [UPD] Update account_bank_statement_import_split.pot --- .../account_bank_statement_import_split.pot | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 account_bank_statement_import_split/i18n/account_bank_statement_import_split.pot diff --git a/account_bank_statement_import_split/i18n/account_bank_statement_import_split.pot b/account_bank_statement_import_split/i18n/account_bank_statement_import_split.pot new file mode 100644 index 00000000..41f92b49 --- /dev/null +++ b/account_bank_statement_import_split/i18n/account_bank_statement_import_split.pot @@ -0,0 +1,50 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_bank_statement_import_split +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_bank_statement_import_split +#: selection:account.bank.statement.import,import_mode:0 +msgid "Daily statements" +msgstr "" + +#. module: account_bank_statement_import_split +#: model:ir.model,name:account_bank_statement_import_split.model_account_bank_statement_import +msgid "Import Bank Statement" +msgstr "" + +#. module: account_bank_statement_import_split +#: model:ir.model.fields,field_description:account_bank_statement_import_split.field_account_bank_statement_import__import_mode +msgid "Import Mode" +msgstr "" + +#. module: account_bank_statement_import_split +#: selection:account.bank.statement.import,import_mode:0 +msgid "Monthly statements" +msgstr "" + +#. module: account_bank_statement_import_split +#: model_terms:ir.ui.view,arch_db:account_bank_statement_import_split.account_bank_statement_import_view +msgid "Please select how you'd like to split the imported statement file:" +msgstr "" + +#. module: account_bank_statement_import_split +#: selection:account.bank.statement.import,import_mode:0 +msgid "Single statement" +msgstr "" + +#. module: account_bank_statement_import_split +#: selection:account.bank.statement.import,import_mode:0 +msgid "Weekly statements" +msgstr "" + From 9cc996a29fa07ec1e70bef849d2de683d2afe765 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 17 Nov 2019 12:40:46 +0000 Subject: [PATCH 03/15] [UPD] README.rst --- .../README.rst | 77 ++++ .../static/description/index.html | 424 ++++++++++++++++++ 2 files changed, 501 insertions(+) create mode 100644 account_bank_statement_import_split/README.rst create mode 100644 account_bank_statement_import_split/static/description/index.html diff --git a/account_bank_statement_import_split/README.rst b/account_bank_statement_import_split/README.rst new file mode 100644 index 00000000..0ca2d4e1 --- /dev/null +++ b/account_bank_statement_import_split/README.rst @@ -0,0 +1,77 @@ +=================================== +Online Bank Statements Import Split +=================================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/12.0/account_bank_statement_import_split + :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-12-0/bank-statement-import-12-0-account_bank_statement_import_split + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows splitting statements by date during import: + +* as daily statements +* as weekly statements +* as monthly statements + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Brainbean Apps + +Contributors +~~~~~~~~~~~~ + +* Alexey Pelykh + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/bank-statement-import `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_bank_statement_import_split/static/description/index.html b/account_bank_statement_import_split/static/description/index.html new file mode 100644 index 00000000..2a73b220 --- /dev/null +++ b/account_bank_statement_import_split/static/description/index.html @@ -0,0 +1,424 @@ + + + + + + +Online Bank Statements Import Split + + + +
+

Online Bank Statements Import Split

+ + +

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

+

This module allows splitting statements by date during import:

+
    +
  • as daily statements
  • +
  • as weekly statements
  • +
  • as monthly statements
  • +
+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Brainbean Apps
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/bank-statement-import project on GitHub.

+

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

+
+
+
+ + From d539931339fa6d4e6eeac9b9600e04aa3d2f4b4c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 17 Nov 2019 12:40:46 +0000 Subject: [PATCH 04/15] [ADD] icon.png --- .../static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 account_bank_statement_import_split/static/description/icon.png diff --git a/account_bank_statement_import_split/static/description/icon.png b/account_bank_statement_import_split/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 32d266a278b50328521ae87d6f4c20781487a4d5 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Wed, 1 Apr 2020 08:42:37 +0200 Subject: [PATCH 05/15] [FIX] account_bank_statement_import_split: name --- account_bank_statement_import_split/__manifest__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/account_bank_statement_import_split/__manifest__.py b/account_bank_statement_import_split/__manifest__.py index a8d133b8..0978e726 100644 --- a/account_bank_statement_import_split/__manifest__.py +++ b/account_bank_statement_import_split/__manifest__.py @@ -1,8 +1,8 @@ -# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': 'Online Bank Statements Import Split', + 'name': 'Account Bank Statement Import: Split by date', 'version': '12.0.1.0.0', 'author': 'Brainbean Apps, ' @@ -10,7 +10,7 @@ 'website': 'https://github.com/OCA/bank-statement-import/', 'license': 'AGPL-3', 'category': 'Accounting', - 'summary': 'Split statements during import', + 'summary': 'Split statements by date during import', 'depends': [ 'account_bank_statement_import', ], From 839f763259e5b028a6458a83ccfd6725f382ae33 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 1 Apr 2020 07:03:04 +0000 Subject: [PATCH 06/15] [UPD] README.rst --- account_bank_statement_import_split/README.rst | 6 +++--- .../static/description/index.html | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/account_bank_statement_import_split/README.rst b/account_bank_statement_import_split/README.rst index 0ca2d4e1..04e39802 100644 --- a/account_bank_statement_import_split/README.rst +++ b/account_bank_statement_import_split/README.rst @@ -1,6 +1,6 @@ -=================================== -Online Bank Statements Import Split -=================================== +============================================ +Account Bank Statement Import: Split by date +============================================ .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! diff --git a/account_bank_statement_import_split/static/description/index.html b/account_bank_statement_import_split/static/description/index.html index 2a73b220..e05f23fc 100644 --- a/account_bank_statement_import_split/static/description/index.html +++ b/account_bank_statement_import_split/static/description/index.html @@ -4,7 +4,7 @@ -Online Bank Statements Import Split +Account Bank Statement Import: Split by date -
-

Online Bank Statements Import Split

+
+

Account Bank Statement Import: Split by date

From 9987c7dc19db231ac15481fab3a80cbbf2167abc Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 30 Sep 2020 05:50:20 +0000 Subject: [PATCH 11/15] [UPD] README.rst --- account_bank_statement_import_split/README.rst | 6 ++++-- .../static/description/index.html | 5 +++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/account_bank_statement_import_split/README.rst b/account_bank_statement_import_split/README.rst index e72a37a6..f2996f0a 100644 --- a/account_bank_statement_import_split/README.rst +++ b/account_bank_statement_import_split/README.rst @@ -31,6 +31,8 @@ This module allows splitting statements by date during import: * as weekly statements * as monthly statements +For support please contact `CorporateHub `__. + **Table of contents** .. contents:: @@ -52,12 +54,12 @@ Credits Authors ~~~~~~~ -* Brainbean Apps +* CorporateHub Contributors ~~~~~~~~~~~~ -* Alexey Pelykh +* Alexey Pelykh (`CorporateHub `__) Maintainers ~~~~~~~~~~~ diff --git a/account_bank_statement_import_split/static/description/index.html b/account_bank_statement_import_split/static/description/index.html index 16d7ebca..00e14a24 100644 --- a/account_bank_statement_import_split/static/description/index.html +++ b/account_bank_statement_import_split/static/description/index.html @@ -374,6 +374,7 @@ ul.auto-toc {
  • as weekly statements
  • as monthly statements
  • +

    For support please contact CorporateHub.

    Table of contents

      @@ -399,13 +400,13 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

      Authors

        -
      • Brainbean Apps
      • +
      • CorporateHub
      From f2b4f41ad32413f68c35bf8140ff4e67fb36c0f9 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Fri, 2 Oct 2020 09:43:28 +0300 Subject: [PATCH 12/15] [UPD] Brainbean Apps => CorporateHub --- .../models/account_bank_statement_import.py | 1 - account_bank_statement_import_split/readme/CONTRIBUTORS.rst | 4 +++- account_bank_statement_import_split/readme/DESCRIPTION.rst | 2 -- .../tests/test_account_bank_statement_import_split.py | 1 - .../views/account_bank_statement_import.xml | 1 - 5 files changed, 3 insertions(+), 6 deletions(-) diff --git a/account_bank_statement_import_split/models/account_bank_statement_import.py b/account_bank_statement_import_split/models/account_bank_statement_import.py index 32e2a4e0..c28f6b0c 100644 --- a/account_bank_statement_import_split/models/account_bank_statement_import.py +++ b/account_bank_statement_import_split/models/account_bank_statement_import.py @@ -1,5 +1,4 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) -# Copyright 2020 CorporateHub (https://corporatehub.eu) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo import api, fields, models diff --git a/account_bank_statement_import_split/readme/CONTRIBUTORS.rst b/account_bank_statement_import_split/readme/CONTRIBUTORS.rst index f6a08cb7..724bc1d0 100644 --- a/account_bank_statement_import_split/readme/CONTRIBUTORS.rst +++ b/account_bank_statement_import_split/readme/CONTRIBUTORS.rst @@ -1 +1,3 @@ -* Alexey Pelykh (`CorporateHub `__) +* `CorporateHub `__ + + * Alexey Pelykh diff --git a/account_bank_statement_import_split/readme/DESCRIPTION.rst b/account_bank_statement_import_split/readme/DESCRIPTION.rst index 947efe12..492d6413 100644 --- a/account_bank_statement_import_split/readme/DESCRIPTION.rst +++ b/account_bank_statement_import_split/readme/DESCRIPTION.rst @@ -3,5 +3,3 @@ This module allows splitting statements by date during import: * as daily statements * as weekly statements * as monthly statements - -For support please contact `CorporateHub `__. diff --git a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py index 69010715..d352fc36 100644 --- a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py +++ b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py @@ -1,5 +1,4 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) -# Copyright 2020 CorporateHub (https://corporatehub.eu) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo import fields diff --git a/account_bank_statement_import_split/views/account_bank_statement_import.xml b/account_bank_statement_import_split/views/account_bank_statement_import.xml index 26e08f8d..fe35a52f 100644 --- a/account_bank_statement_import_split/views/account_bank_statement_import.xml +++ b/account_bank_statement_import_split/views/account_bank_statement_import.xml @@ -1,7 +1,6 @@ From 255022ecb2b5ab8af6424252dc0bfa1d1cb6c6f9 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 2 Oct 2020 08:10:04 +0000 Subject: [PATCH 13/15] [UPD] README.rst --- account_bank_statement_import_split/README.rst | 6 +++--- .../static/description/index.html | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/account_bank_statement_import_split/README.rst b/account_bank_statement_import_split/README.rst index f2996f0a..fb850de0 100644 --- a/account_bank_statement_import_split/README.rst +++ b/account_bank_statement_import_split/README.rst @@ -31,8 +31,6 @@ This module allows splitting statements by date during import: * as weekly statements * as monthly statements -For support please contact `CorporateHub `__. - **Table of contents** .. contents:: @@ -59,7 +57,9 @@ Authors Contributors ~~~~~~~~~~~~ -* Alexey Pelykh (`CorporateHub `__) +* `CorporateHub `__ + + * Alexey Pelykh Maintainers ~~~~~~~~~~~ diff --git a/account_bank_statement_import_split/static/description/index.html b/account_bank_statement_import_split/static/description/index.html index 00e14a24..e559b9f5 100644 --- a/account_bank_statement_import_split/static/description/index.html +++ b/account_bank_statement_import_split/static/description/index.html @@ -374,7 +374,6 @@ ul.auto-toc {
    • as weekly statements
    • as monthly statements
    -

    For support please contact CorporateHub.

    Table of contents

      @@ -406,7 +405,10 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
      From d94e9040a5f1ba5344e80d6956775bbc2f9eadac Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Thu, 23 Sep 2021 11:51:25 +0200 Subject: [PATCH 14/15] [IMP] account_bank_statement_import_split: black, isort, prettier --- .../__manifest__.py | 28 +- .../models/account_bank_statement_import.py | 143 +++---- ...est_account_bank_statement_import_split.py | 401 +++++++++--------- .../views/account_bank_statement_import.xml | 14 +- .../account_bank_statement_import_split | 1 + .../setup.py | 6 + 6 files changed, 304 insertions(+), 289 deletions(-) create mode 120000 setup/account_bank_statement_import_split/odoo/addons/account_bank_statement_import_split create mode 100644 setup/account_bank_statement_import_split/setup.py diff --git a/account_bank_statement_import_split/__manifest__.py b/account_bank_statement_import_split/__manifest__.py index 4d4162c9..434819e3 100644 --- a/account_bank_statement_import_split/__manifest__.py +++ b/account_bank_statement_import_split/__manifest__.py @@ -3,21 +3,15 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': 'Account Bank Statement Import: Split by date', - 'version': '12.0.1.0.1', - 'author': - 'CorporateHub, ' - 'Odoo Community Association (OCA)', - 'maintainers': ['alexey-pelykh'], - 'website': 'https://github.com/OCA/bank-statement-import/', - 'license': 'AGPL-3', - 'category': 'Accounting', - 'summary': 'Split statements by date during import', - 'depends': [ - 'account_bank_statement_import', - ], - 'data': [ - 'views/account_bank_statement_import.xml', - ], - 'installable': True, + "name": "Account Bank Statement Import: Split by date", + "version": "12.0.1.0.1", + "author": "CorporateHub, " "Odoo Community Association (OCA)", + "maintainers": ["alexey-pelykh"], + "website": "https://github.com/OCA/bank-statement-import/", + "license": "AGPL-3", + "category": "Accounting", + "summary": "Split statements by date during import", + "depends": ["account_bank_statement_import",], + "data": ["views/account_bank_statement_import.xml",], + "installable": True, } diff --git a/account_bank_statement_import_split/models/account_bank_statement_import.py b/account_bank_statement_import_split/models/account_bank_statement_import.py index c28f6b0c..a73adac0 100644 --- a/account_bank_statement_import_split/models/account_bank_statement_import.py +++ b/account_bank_statement_import_split/models/account_bank_statement_import.py @@ -1,54 +1,57 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models - -from dateutil.relativedelta import relativedelta, MO from decimal import Decimal +from dateutil.relativedelta import MO, relativedelta + +from odoo import api, fields, models + class AccountBankStatementImport(models.TransientModel): - _inherit = 'account.bank.statement.import' + _inherit = "account.bank.statement.import" import_mode = fields.Selection( selection=[ - ('single', 'Single statement'), - ('daily', 'Daily statements'), - ('weekly', 'Weekly statements'), - ('monthly', 'Monthly statements'), + ("single", "Single statement"), + ("daily", "Daily statements"), + ("weekly", "Weekly statements"), + ("monthly", "Monthly statements"), ], - default='single', + default="single", ) def _complete_stmts_vals(self, stmts_vals, journal, account_number): - stmts_vals = super()._complete_stmts_vals( - stmts_vals, - journal, - account_number - ) - if not self.import_mode or self.import_mode == 'single': + stmts_vals = super()._complete_stmts_vals(stmts_vals, journal, account_number) + if not self.import_mode or self.import_mode == "single": return stmts_vals statements = [] for st_vals in stmts_vals: - transactions = list(sorted( - map( - lambda transaction: self._prepare_transaction( - transaction + transactions = list( + sorted( + map( + lambda transaction: self._prepare_transaction(transaction), + st_vals["transactions"], ), - st_vals['transactions'] - ), - key=lambda transaction: transaction['date'] - )) + key=lambda transaction: transaction["date"], + ) + ) if not transactions: continue - del st_vals['transactions'] + del st_vals["transactions"] - balance_start = Decimal(st_vals['balance_start']) \ - if 'balance_start' in st_vals else None - balance_end = Decimal(st_vals['balance_end_real']) \ - if 'balance_end_real' in st_vals else None + balance_start = ( + Decimal(st_vals["balance_start"]) + if "balance_start" in st_vals + else None + ) + balance_end = ( + Decimal(st_vals["balance_end_real"]) + if "balance_end_real" in st_vals + else None + ) statement_date_since = self._get_statement_date_since( - transactions[0]['date'] + transactions[0]["date"] ) while transactions: statement_date_until = ( @@ -57,7 +60,7 @@ class AccountBankStatementImport(models.TransientModel): last_transaction_index = None for index, transaction in enumerate(transactions): - if transaction['date'] >= statement_date_until: + if transaction["date"] >= statement_date_until: break last_transaction_index = index if last_transaction_index is None: @@ -65,36 +68,34 @@ class AccountBankStatementImport(models.TransientModel): statement_date_since = statement_date_until continue - statement_transactions = \ - transactions[0:last_transaction_index + 1] - transactions = transactions[last_transaction_index + 1:] + statement_transactions = transactions[0 : last_transaction_index + 1] + transactions = transactions[last_transaction_index + 1 :] statement_values = dict(st_vals) - statement_values.update({ - 'name': self._get_statement_name( - journal, - statement_date_since, - statement_date_until, - ), - 'date': self._get_statement_date( - statement_date_since, - statement_date_until, - ), - 'transactions': statement_transactions, - }) + statement_values.update( + { + "name": self._get_statement_name( + journal, statement_date_since, statement_date_until, + ), + "date": self._get_statement_date( + statement_date_since, statement_date_until, + ), + "transactions": statement_transactions, + } + ) if balance_start is not None: - statement_values.update({ - 'balance_start': float(balance_start), - }) + statement_values.update( + {"balance_start": float(balance_start),} + ) for transaction in statement_transactions: - balance_start += Decimal(transaction['amount']) + balance_start += Decimal(transaction["amount"]) if balance_end is not None: statement_balance_end = balance_end for transaction in transactions: - statement_balance_end -= Decimal(transaction['amount']) - statement_values.update({ - 'balance_end_real': float(statement_balance_end), - }) + statement_balance_end -= Decimal(transaction["amount"]) + statement_values.update( + {"balance_end_real": float(statement_balance_end),} + ) statements.append(statement_values) statement_date_since = statement_date_until @@ -102,40 +103,30 @@ class AccountBankStatementImport(models.TransientModel): @api.multi def _prepare_transaction(self, transaction): - transaction.update({ - 'date': fields.Date.from_string(transaction['date']), - }) + transaction.update( + {"date": fields.Date.from_string(transaction["date"]),} + ) return transaction @api.multi def _get_statement_date_since(self, date): self.ensure_one() - if self.import_mode == 'daily': + if self.import_mode == "daily": return date - elif self.import_mode == 'weekly': + elif self.import_mode == "weekly": return date + relativedelta(weekday=MO(-1)) - elif self.import_mode == 'monthly': - return date.replace( - day=1, - ) + elif self.import_mode == "monthly": + return date.replace(day=1,) @api.multi def _get_statement_date_step(self): self.ensure_one() - if self.import_mode == 'daily': - return relativedelta( - days=1, - ) - elif self.import_mode == 'weekly': - return relativedelta( - weeks=1, - weekday=MO, - ) - elif self.import_mode == 'monthly': - return relativedelta( - months=1, - day=1, - ) + if self.import_mode == "daily": + return relativedelta(days=1,) + elif self.import_mode == "weekly": + return relativedelta(weeks=1, weekday=MO,) + elif self.import_mode == "monthly": + return relativedelta(months=1, day=1,) @api.multi def _get_statement_date(self, date_since, date_until): diff --git a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py index d352fc36..5b167998 100644 --- a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py +++ b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py @@ -1,159 +1,166 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from odoo import fields -from odoo.tests import common - from base64 import b64encode from unittest import mock +from odoo import fields +from odoo.tests import common + _parse_file_method = ( - 'odoo.addons.account_bank_statement_import' - '.account_bank_statement_import.AccountBankStatementImport._parse_file' + "odoo.addons.account_bank_statement_import" + ".account_bank_statement_import.AccountBankStatementImport._parse_file" ) class TestAccountBankAccountStatementImportSplit(common.TransactionCase): - def setUp(self): super().setUp() self.now = fields.Datetime.now() - self.currency_usd = self.env.ref('base.USD') + self.currency_usd = self.env.ref("base.USD") self.empty_data_file = b64encode( - 'TestAccountBankAccountStatementImportSplit'.encode('utf-8') + b"TestAccountBankAccountStatementImportSplit" ) - self.AccountJournal = self.env['account.journal'] - self.AccountBankStatement = self.env['account.bank.statement'] - self.AccountBankStatementImport = self.env[ - 'account.bank.statement.import' - ] + self.AccountJournal = self.env["account.journal"] + self.AccountBankStatement = self.env["account.bank.statement"] + self.AccountBankStatementImport = self.env["account.bank.statement.import"] def test_default_import_mode(self): - journal = self.AccountJournal.create({ - 'name': 'Bank', - 'type': 'bank', - 'code': 'BANK', - 'currency_id': self.currency_usd.id, - }) - wizard = self.AccountBankStatementImport.with_context({ - 'journal_id': journal.id, - }).create({ - 'filename': 'file.ext', - 'data_file': self.empty_data_file, - }) + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "currency_id": self.currency_usd.id, + } + ) + wizard = self.AccountBankStatementImport.with_context( + {"journal_id": journal.id,} + ).create({"filename": "file.ext", "data_file": self.empty_data_file,}) data = ( journal.currency_id.name, journal.bank_account_id.acc_number, - [{ - 'name': 'STATEMENT', - 'date': '2019-01-01', - 'balance_start': 0.0, - 'balance_end_real': 100.0, - 'transactions': [{ - 'name': 'TRANSACTION', - 'amount': '100.0', - 'date': '2019-01-01', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID', - }], - }], + [ + { + "name": "STATEMENT", + "date": "2019-01-01", + "balance_start": 0.0, + "balance_end_real": 100.0, + "transactions": [ + { + "name": "TRANSACTION", + "amount": "100.0", + "date": "2019-01-01", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID", + } + ], + } + ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({ - 'journal_id': journal.id, - }).import_file() - statement = self.AccountBankStatement.search([ - ('journal_id', '=', journal.id), - ]) + wizard.with_context({"journal_id": journal.id,}).import_file() + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id),]) self.assertEqual(len(statement), 1) self.assertEqual(len(statement.line_ids), 1) def test_single_import_mode(self): - journal = self.AccountJournal.create({ - 'name': 'Bank', - 'type': 'bank', - 'code': 'BANK', - 'currency_id': self.currency_usd.id, - }) - wizard = self.AccountBankStatementImport.with_context({ - 'journal_id': journal.id, - }).create({ - 'filename': 'file.ext', - 'data_file': self.empty_data_file, - 'import_mode': 'single', - }) + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "currency_id": self.currency_usd.id, + } + ) + wizard = self.AccountBankStatementImport.with_context( + {"journal_id": journal.id,} + ).create( + { + "filename": "file.ext", + "data_file": self.empty_data_file, + "import_mode": "single", + } + ) data = ( journal.currency_id.name, journal.bank_account_id.acc_number, - [{ - 'name': 'STATEMENT', - 'date': '2019-01-01', - 'balance_start': 0.0, - 'balance_end_real': 100.0, - 'transactions': [{ - 'name': 'TRANSACTION', - 'amount': '100.0', - 'date': '2019-01-01', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID', - }], - }], + [ + { + "name": "STATEMENT", + "date": "2019-01-01", + "balance_start": 0.0, + "balance_end_real": 100.0, + "transactions": [ + { + "name": "TRANSACTION", + "amount": "100.0", + "date": "2019-01-01", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID", + } + ], + } + ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({ - 'journal_id': journal.id, - }).import_file() - statement = self.AccountBankStatement.search([ - ('journal_id', '=', journal.id), - ]) + wizard.with_context({"journal_id": journal.id,}).import_file() + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id),]) self.assertEqual(len(statement), 1) self.assertEqual(len(statement.line_ids), 1) def test_daily_import_mode(self): - journal = self.AccountJournal.create({ - 'name': 'Bank', - 'type': 'bank', - 'code': 'BANK', - 'currency_id': self.currency_usd.id, - }) - wizard = self.AccountBankStatementImport.with_context({ - 'journal_id': journal.id, - }).create({ - 'filename': 'file.ext', - 'data_file': self.empty_data_file, - 'import_mode': 'daily', - }) + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "currency_id": self.currency_usd.id, + } + ) + wizard = self.AccountBankStatementImport.with_context( + {"journal_id": journal.id,} + ).create( + { + "filename": "file.ext", + "data_file": self.empty_data_file, + "import_mode": "daily", + } + ) data = ( journal.currency_id.name, journal.bank_account_id.acc_number, - [{ - 'name': 'STATEMENT', - 'date': '2019-01-01', - 'balance_start': 0.0, - 'balance_end_real': 100.0, - 'transactions': [{ - 'name': 'TRANSACTION-1', - 'amount': '50.0', - 'date': '2019-01-01', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID-1', - }, { - 'name': 'TRANSACTION-2', - 'amount': '50.0', - 'date': '2019-01-03', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID-2', - }], - }], + [ + { + "name": "STATEMENT", + "date": "2019-01-01", + "balance_start": 0.0, + "balance_end_real": 100.0, + "transactions": [ + { + "name": "TRANSACTION-1", + "amount": "50.0", + "date": "2019-01-01", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID-1", + }, + { + "name": "TRANSACTION-2", + "amount": "50.0", + "date": "2019-01-03", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID-2", + }, + ], + } + ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({ - 'journal_id': journal.id, - }).import_file() - statements = self.AccountBankStatement.search([ - ('journal_id', '=', journal.id), - ]).sorted(key=lambda statement: statement.date) + wizard.with_context({"journal_id": journal.id,}).import_file() + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id),] + ).sorted(key=lambda statement: statement.date) self.assertEqual(len(statements), 2) self.assertEqual(len(statements[0].line_ids), 1) self.assertEqual(statements[0].balance_start, 0.0) @@ -163,49 +170,56 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): self.assertEqual(statements[1].balance_end_real, 100.0) def test_weekly_import_mode(self): - journal = self.AccountJournal.create({ - 'name': 'Bank', - 'type': 'bank', - 'code': 'BANK', - 'currency_id': self.currency_usd.id, - }) - wizard = self.AccountBankStatementImport.with_context({ - 'journal_id': journal.id, - }).create({ - 'filename': 'file.ext', - 'data_file': self.empty_data_file, - 'import_mode': 'weekly', - }) + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "currency_id": self.currency_usd.id, + } + ) + wizard = self.AccountBankStatementImport.with_context( + {"journal_id": journal.id,} + ).create( + { + "filename": "file.ext", + "data_file": self.empty_data_file, + "import_mode": "weekly", + } + ) data = ( journal.currency_id.name, journal.bank_account_id.acc_number, - [{ - 'name': 'STATEMENT', - 'date': '2019-01-01', - 'balance_start': 0.0, - 'balance_end_real': 100.0, - 'transactions': [{ - 'name': 'TRANSACTION-1', - 'amount': '50.0', - 'date': '2019-01-01', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID-1', - }, { - 'name': 'TRANSACTION-2', - 'amount': '50.0', - 'date': '2019-01-15', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID-2', - }], - }], + [ + { + "name": "STATEMENT", + "date": "2019-01-01", + "balance_start": 0.0, + "balance_end_real": 100.0, + "transactions": [ + { + "name": "TRANSACTION-1", + "amount": "50.0", + "date": "2019-01-01", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID-1", + }, + { + "name": "TRANSACTION-2", + "amount": "50.0", + "date": "2019-01-15", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID-2", + }, + ], + } + ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({ - 'journal_id': journal.id, - }).import_file() - statements = self.AccountBankStatement.search([ - ('journal_id', '=', journal.id), - ]).sorted(key=lambda statement: statement.date) + wizard.with_context({"journal_id": journal.id,}).import_file() + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id),] + ).sorted(key=lambda statement: statement.date) self.assertEqual(len(statements), 2) self.assertEqual(len(statements[0].line_ids), 1) self.assertEqual(statements[0].balance_start, 0.0) @@ -215,49 +229,56 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): self.assertEqual(statements[1].balance_end_real, 100.0) def test_monthly_import_mode(self): - journal = self.AccountJournal.create({ - 'name': 'Bank', - 'type': 'bank', - 'code': 'BANK', - 'currency_id': self.currency_usd.id, - }) - wizard = self.AccountBankStatementImport.with_context({ - 'journal_id': journal.id, - }).create({ - 'filename': 'file.ext', - 'data_file': self.empty_data_file, - 'import_mode': 'monthly', - }) + journal = self.AccountJournal.create( + { + "name": "Bank", + "type": "bank", + "code": "BANK", + "currency_id": self.currency_usd.id, + } + ) + wizard = self.AccountBankStatementImport.with_context( + {"journal_id": journal.id,} + ).create( + { + "filename": "file.ext", + "data_file": self.empty_data_file, + "import_mode": "monthly", + } + ) data = ( journal.currency_id.name, journal.bank_account_id.acc_number, - [{ - 'name': 'STATEMENT', - 'date': '2019-01-01', - 'balance_start': 0.0, - 'balance_end_real': 100.0, - 'transactions': [{ - 'name': 'TRANSACTION-1', - 'amount': '50.0', - 'date': '2019-01-01', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID-1', - }, { - 'name': 'TRANSACTION-2', - 'amount': '50.0', - 'date': '2019-03-01', - 'note': 'NOTE', - 'unique_import_id': 'TRANSACTION-ID-2', - }], - }], + [ + { + "name": "STATEMENT", + "date": "2019-01-01", + "balance_start": 0.0, + "balance_end_real": 100.0, + "transactions": [ + { + "name": "TRANSACTION-1", + "amount": "50.0", + "date": "2019-01-01", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID-1", + }, + { + "name": "TRANSACTION-2", + "amount": "50.0", + "date": "2019-03-01", + "note": "NOTE", + "unique_import_id": "TRANSACTION-ID-2", + }, + ], + } + ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({ - 'journal_id': journal.id, - }).import_file() - statements = self.AccountBankStatement.search([ - ('journal_id', '=', journal.id), - ]).sorted(key=lambda statement: statement.date) + wizard.with_context({"journal_id": journal.id,}).import_file() + statements = self.AccountBankStatement.search( + [("journal_id", "=", journal.id),] + ).sorted(key=lambda statement: statement.date) self.assertEqual(len(statements), 2) self.assertEqual(len(statements[0].line_ids), 1) self.assertEqual(statements[0].balance_start, 0.0) diff --git a/account_bank_statement_import_split/views/account_bank_statement_import.xml b/account_bank_statement_import_split/views/account_bank_statement_import.xml index fe35a52f..c1c4541c 100644 --- a/account_bank_statement_import_split/views/account_bank_statement_import.xml +++ b/account_bank_statement_import_split/views/account_bank_statement_import.xml @@ -1,19 +1,21 @@ - + - account.bank.statement.import - + -

      Please select how you'd like to split the imported statement file:

      - +

      Please select how you'd like to split the imported statement file:

      +
      -
      diff --git a/setup/account_bank_statement_import_split/odoo/addons/account_bank_statement_import_split b/setup/account_bank_statement_import_split/odoo/addons/account_bank_statement_import_split new file mode 120000 index 00000000..2687a326 --- /dev/null +++ b/setup/account_bank_statement_import_split/odoo/addons/account_bank_statement_import_split @@ -0,0 +1 @@ +../../../../account_bank_statement_import_split \ No newline at end of file diff --git a/setup/account_bank_statement_import_split/setup.py b/setup/account_bank_statement_import_split/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/account_bank_statement_import_split/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From c7bfdfbbce4316743f9e34b107815ecda78ddd12 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Thu, 23 Sep 2021 11:56:29 +0200 Subject: [PATCH 15/15] [MIG] account_bank_statement_import_split: Migration to 13.0 --- .../__manifest__.py | 12 +-- .../models/account_bank_statement_import.py | 18 +--- ...est_account_bank_statement_import_split.py | 98 ++++++++++++++----- 3 files changed, 82 insertions(+), 46 deletions(-) diff --git a/account_bank_statement_import_split/__manifest__.py b/account_bank_statement_import_split/__manifest__.py index 434819e3..a3ada7b8 100644 --- a/account_bank_statement_import_split/__manifest__.py +++ b/account_bank_statement_import_split/__manifest__.py @@ -1,17 +1,17 @@ # Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com) -# Copyright 2020 CorporateHub (https://corporatehub.eu) +# Copyright 2020-2021 CorporateHub (https://corporatehub.eu) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { "name": "Account Bank Statement Import: Split by date", - "version": "12.0.1.0.1", - "author": "CorporateHub, " "Odoo Community Association (OCA)", + "version": "13.0.1.0.0", + "author": "CorporateHub, Odoo Community Association (OCA)", "maintainers": ["alexey-pelykh"], - "website": "https://github.com/OCA/bank-statement-import/", + "website": "https://github.com/OCA/bank-statement-import", "license": "AGPL-3", "category": "Accounting", "summary": "Split statements by date during import", - "depends": ["account_bank_statement_import",], - "data": ["views/account_bank_statement_import.xml",], + "depends": ["account_bank_statement_import"], + "data": ["views/account_bank_statement_import.xml"], "installable": True, } diff --git a/account_bank_statement_import_split/models/account_bank_statement_import.py b/account_bank_statement_import_split/models/account_bank_statement_import.py index a73adac0..7263a6d3 100644 --- a/account_bank_statement_import_split/models/account_bank_statement_import.py +++ b/account_bank_statement_import_split/models/account_bank_statement_import.py @@ -1,11 +1,12 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2021 CorporateHub (https://corporatehub.eu) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from decimal import Decimal from dateutil.relativedelta import MO, relativedelta -from odoo import api, fields, models +from odoo import fields, models class AccountBankStatementImport(models.TransientModel): @@ -84,9 +85,7 @@ class AccountBankStatementImport(models.TransientModel): } ) if balance_start is not None: - statement_values.update( - {"balance_start": float(balance_start),} - ) + statement_values.update({"balance_start": float(balance_start)}) for transaction in statement_transactions: balance_start += Decimal(transaction["amount"]) if balance_end is not None: @@ -94,21 +93,17 @@ class AccountBankStatementImport(models.TransientModel): for transaction in transactions: statement_balance_end -= Decimal(transaction["amount"]) statement_values.update( - {"balance_end_real": float(statement_balance_end),} + {"balance_end_real": float(statement_balance_end)} ) statements.append(statement_values) statement_date_since = statement_date_until return statements - @api.multi def _prepare_transaction(self, transaction): - transaction.update( - {"date": fields.Date.from_string(transaction["date"]),} - ) + transaction.update({"date": fields.Date.from_string(transaction["date"])}) return transaction - @api.multi def _get_statement_date_since(self, date): self.ensure_one() if self.import_mode == "daily": @@ -118,7 +113,6 @@ class AccountBankStatementImport(models.TransientModel): elif self.import_mode == "monthly": return date.replace(day=1,) - @api.multi def _get_statement_date_step(self): self.ensure_one() if self.import_mode == "daily": @@ -128,7 +122,6 @@ class AccountBankStatementImport(models.TransientModel): elif self.import_mode == "monthly": return relativedelta(months=1, day=1,) - @api.multi def _get_statement_date(self, date_since, date_until): self.ensure_one() # NOTE: Statement date is treated by Odoo as start of period. Details @@ -136,7 +129,6 @@ class AccountBankStatementImport(models.TransientModel): # - def get_line_graph_datas() return date_since - @api.multi def _get_statement_name(self, journal, date_since, date_until): self.ensure_one() return journal.sequence_id.with_context( diff --git a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py index 5b167998..7a49cf35 100644 --- a/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py +++ b/account_bank_statement_import_split/tests/test_account_bank_statement_import_split.py @@ -1,4 +1,5 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2021 CorporateHub (https://corporatehub.eu) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from base64 import b64encode @@ -19,9 +20,7 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): self.now = fields.Datetime.now() self.currency_usd = self.env.ref("base.USD") - self.empty_data_file = b64encode( - b"TestAccountBankAccountStatementImportSplit" - ) + self.empty_data_file = b64encode(b"TestAccountBankAccountStatementImportSplit") self.AccountJournal = self.env["account.journal"] self.AccountBankStatement = self.env["account.bank.statement"] self.AccountBankStatementImport = self.env["account.bank.statement.import"] @@ -36,8 +35,21 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): } ) wizard = self.AccountBankStatementImport.with_context( - {"journal_id": journal.id,} - ).create({"filename": "file.ext", "data_file": self.empty_data_file,}) + {"journal_id": journal.id} + ).create( + { + "attachment_ids": [ + ( + 0, + 0, + { + "name": "fixtures/statement_en.csv", + "datas": self.empty_data_file, + }, + ) + ], + } + ) data = ( journal.currency_id.name, journal.bank_account_id.acc_number, @@ -60,8 +72,8 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({"journal_id": journal.id,}).import_file() - statement = self.AccountBankStatement.search([("journal_id", "=", journal.id),]) + wizard.with_context({"journal_id": journal.id}).import_file() + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) self.assertEqual(len(statement), 1) self.assertEqual(len(statement.line_ids), 1) @@ -75,11 +87,19 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): } ) wizard = self.AccountBankStatementImport.with_context( - {"journal_id": journal.id,} + {"journal_id": journal.id} ).create( { - "filename": "file.ext", - "data_file": self.empty_data_file, + "attachment_ids": [ + ( + 0, + 0, + { + "name": "fixtures/statement_en.csv", + "datas": self.empty_data_file, + }, + ) + ], "import_mode": "single", } ) @@ -105,8 +125,8 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({"journal_id": journal.id,}).import_file() - statement = self.AccountBankStatement.search([("journal_id", "=", journal.id),]) + wizard.with_context({"journal_id": journal.id}).import_file() + statement = self.AccountBankStatement.search([("journal_id", "=", journal.id)]) self.assertEqual(len(statement), 1) self.assertEqual(len(statement.line_ids), 1) @@ -120,11 +140,19 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): } ) wizard = self.AccountBankStatementImport.with_context( - {"journal_id": journal.id,} + {"journal_id": journal.id} ).create( { - "filename": "file.ext", - "data_file": self.empty_data_file, + "attachment_ids": [ + ( + 0, + 0, + { + "name": "fixtures/statement_en.csv", + "datas": self.empty_data_file, + }, + ) + ], "import_mode": "daily", } ) @@ -157,9 +185,9 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({"journal_id": journal.id,}).import_file() + wizard.with_context({"journal_id": journal.id}).import_file() statements = self.AccountBankStatement.search( - [("journal_id", "=", journal.id),] + [("journal_id", "=", journal.id)] ).sorted(key=lambda statement: statement.date) self.assertEqual(len(statements), 2) self.assertEqual(len(statements[0].line_ids), 1) @@ -179,11 +207,19 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): } ) wizard = self.AccountBankStatementImport.with_context( - {"journal_id": journal.id,} + {"journal_id": journal.id} ).create( { - "filename": "file.ext", - "data_file": self.empty_data_file, + "attachment_ids": [ + ( + 0, + 0, + { + "name": "fixtures/statement_en.csv", + "datas": self.empty_data_file, + }, + ) + ], "import_mode": "weekly", } ) @@ -216,9 +252,9 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({"journal_id": journal.id,}).import_file() + wizard.with_context({"journal_id": journal.id}).import_file() statements = self.AccountBankStatement.search( - [("journal_id", "=", journal.id),] + [("journal_id", "=", journal.id)] ).sorted(key=lambda statement: statement.date) self.assertEqual(len(statements), 2) self.assertEqual(len(statements[0].line_ids), 1) @@ -238,11 +274,19 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): } ) wizard = self.AccountBankStatementImport.with_context( - {"journal_id": journal.id,} + {"journal_id": journal.id} ).create( { - "filename": "file.ext", - "data_file": self.empty_data_file, + "attachment_ids": [ + ( + 0, + 0, + { + "name": "fixtures/statement_en.csv", + "datas": self.empty_data_file, + }, + ) + ], "import_mode": "monthly", } ) @@ -275,9 +319,9 @@ class TestAccountBankAccountStatementImportSplit(common.TransactionCase): ], ) with mock.patch(_parse_file_method, return_value=data): - wizard.with_context({"journal_id": journal.id,}).import_file() + wizard.with_context({"journal_id": journal.id}).import_file() statements = self.AccountBankStatement.search( - [("journal_id", "=", journal.id),] + [("journal_id", "=", journal.id)] ).sorted(key=lambda statement: statement.date) self.assertEqual(len(statements), 2) self.assertEqual(len(statements[0].line_ids), 1)