diff --git a/import_bank_statement_odoo/README.rst b/import_bank_statement_odoo/README.rst
new file mode 100644
index 000000000..0609fe283
--- /dev/null
+++ b/import_bank_statement_odoo/README.rst
@@ -0,0 +1,48 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Import Bank Statement
+=====================
+This module import bank statement in CSV, XLSX, OFX and QIF format.
+
+Configuration
+=============
+- www.odoo.com/documentation/15.0/setup/install.html
+- Install our custom addon
+- Install openpyxl, ofxparse, qifparse
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+Credits
+-------
+Developer: (V15) Sruthi Renjith, Contact: odoo@cybrosys.com
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+License
+-------
+GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 (AGPLv3)
+(https://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/import_bank_statement_odoo/__init__.py b/import_bank_statement_odoo/__init__.py
new file mode 100755
index 000000000..c846f2721
--- /dev/null
+++ b/import_bank_statement_odoo/__init__.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Sruthi Renjith (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from .import models
+from . import wizard
diff --git a/import_bank_statement_odoo/__manifest__.py b/import_bank_statement_odoo/__manifest__.py
new file mode 100755
index 000000000..943b13ecb
--- /dev/null
+++ b/import_bank_statement_odoo/__manifest__.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Sruthi Renjith (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+{
+ 'name': 'Import Bank Statement',
+ 'version': '15.0.1.0.0',
+ 'category': 'Accounting',
+ 'summary': 'Import Bank Statement in CSV, XLSX, QIF and OFX format',
+ 'description': """Uploading the data in CSV, XLSX, OFX and QIF format and
+ converting it into bank statement""",
+ 'author': "Cybrosys Techno Solutions",
+ 'company': 'Cybrosys Techno Solutions',
+ 'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
+ 'depends': ['base_accounting_kit'],
+ 'data': ['security/ir.model.access.csv',
+ 'views/account_journal_views.xml',
+ 'wizard/import_bank_statement_views.xml'
+ ],
+ 'external_dependencies': {
+ 'python': ['openpyxl', 'ofxparse']
+ },
+ 'images': ['static/description/banner.jpg'],
+ 'license': 'AGPL-3',
+ 'installable': True,
+ 'auto_install': False,
+ 'application': False,
+}
diff --git a/import_bank_statement_odoo/doc/RELEASE_NOTES.md b/import_bank_statement_odoo/doc/RELEASE_NOTES.md
new file mode 100644
index 000000000..e07c29e59
--- /dev/null
+++ b/import_bank_statement_odoo/doc/RELEASE_NOTES.md
@@ -0,0 +1,6 @@
+## Module
+
+#### 15.09.2023
+#### Version 15.0.1.0.0
+#### ADD
+- Initial commit for Import Bank Statement
diff --git a/import_bank_statement_odoo/models/__init__.py b/import_bank_statement_odoo/models/__init__.py
new file mode 100755
index 000000000..227471a43
--- /dev/null
+++ b/import_bank_statement_odoo/models/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Sruthi Renjith (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import account_journal
diff --git a/import_bank_statement_odoo/models/account_journal.py b/import_bank_statement_odoo/models/account_journal.py
new file mode 100644
index 000000000..978489ecb
--- /dev/null
+++ b/import_bank_statement_odoo/models/account_journal.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Sruthi Renjith (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from odoo import models
+
+
+class AccountJournal(models.Model):
+ """ Class to add import button in account_journal model """
+ _inherit = "account.journal"
+
+ def action_import_wizard(self):
+ """Function to open wizard"""
+ return {
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'form',
+ 'res_model': 'import.bank.statement',
+ 'target': 'new',
+ 'context': {
+ 'default_journal_id': self.id,
+ }
+ }
diff --git a/import_bank_statement_odoo/security/ir.model.access.csv b/import_bank_statement_odoo/security/ir.model.access.csv
new file mode 100755
index 000000000..a6eb6c3db
--- /dev/null
+++ b/import_bank_statement_odoo/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+access_import_bank_statement,access.import.bank.statement,model_import_bank_statement,base.group_user,1,1,1,1
diff --git a/import_bank_statement_odoo/static/description/assets/icons/cogs.png b/import_bank_statement_odoo/static/description/assets/icons/cogs.png
new file mode 100755
index 000000000..95d0bad62
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/cogs.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/consultation.png b/import_bank_statement_odoo/static/description/assets/icons/consultation.png
new file mode 100755
index 000000000..8319d4baa
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/consultation.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/ecom-black.png b/import_bank_statement_odoo/static/description/assets/icons/ecom-black.png
new file mode 100755
index 000000000..a9385ff13
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/ecom-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/education-black.png b/import_bank_statement_odoo/static/description/assets/icons/education-black.png
new file mode 100755
index 000000000..3eb09b27b
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/education-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/hotel-black.png b/import_bank_statement_odoo/static/description/assets/icons/hotel-black.png
new file mode 100755
index 000000000..130f613be
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/hotel-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/license.png b/import_bank_statement_odoo/static/description/assets/icons/license.png
new file mode 100755
index 000000000..a5869797e
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/license.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/lifebuoy.png b/import_bank_statement_odoo/static/description/assets/icons/lifebuoy.png
new file mode 100755
index 000000000..658d56ccc
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/lifebuoy.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/manufacturing-black.png b/import_bank_statement_odoo/static/description/assets/icons/manufacturing-black.png
new file mode 100755
index 000000000..697eb0e9f
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/manufacturing-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/pos-black.png b/import_bank_statement_odoo/static/description/assets/icons/pos-black.png
new file mode 100755
index 000000000..97c0f90c1
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/pos-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/puzzle.png b/import_bank_statement_odoo/static/description/assets/icons/puzzle.png
new file mode 100755
index 000000000..65cf854e7
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/puzzle.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/restaurant-black.png b/import_bank_statement_odoo/static/description/assets/icons/restaurant-black.png
new file mode 100755
index 000000000..4a35eb939
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/restaurant-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/service-black.png b/import_bank_statement_odoo/static/description/assets/icons/service-black.png
new file mode 100755
index 000000000..301ab51cb
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/service-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/trading-black.png b/import_bank_statement_odoo/static/description/assets/icons/trading-black.png
new file mode 100755
index 000000000..9398ba2f1
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/trading-black.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/training.png b/import_bank_statement_odoo/static/description/assets/icons/training.png
new file mode 100755
index 000000000..884ca024d
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/training.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/update.png b/import_bank_statement_odoo/static/description/assets/icons/update.png
new file mode 100755
index 000000000..ecbc5a01a
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/update.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/user.png b/import_bank_statement_odoo/static/description/assets/icons/user.png
new file mode 100755
index 000000000..6ffb23d9f
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/user.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/icons/wrench.png b/import_bank_statement_odoo/static/description/assets/icons/wrench.png
new file mode 100755
index 000000000..6c04dea0f
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/icons/wrench.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/categories.png b/import_bank_statement_odoo/static/description/assets/misc/categories.png
new file mode 100755
index 000000000..bedf1e0b1
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/categories.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/check-box.png b/import_bank_statement_odoo/static/description/assets/misc/check-box.png
new file mode 100755
index 000000000..42caf24b9
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/check-box.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/compass.png b/import_bank_statement_odoo/static/description/assets/misc/compass.png
new file mode 100755
index 000000000..d5fed8faa
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/compass.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/config.png b/import_bank_statement_odoo/static/description/assets/misc/config.png
new file mode 100755
index 000000000..71915e76c
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/config.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/corporate.png b/import_bank_statement_odoo/static/description/assets/misc/corporate.png
new file mode 100755
index 000000000..2eb13edbf
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/corporate.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/customer-support.png b/import_bank_statement_odoo/static/description/assets/misc/customer-support.png
new file mode 100755
index 000000000..79efc72ed
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/customer-support.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/features.png b/import_bank_statement_odoo/static/description/assets/misc/features.png
new file mode 100755
index 000000000..b41769f77
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/features.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/logo.png b/import_bank_statement_odoo/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/logo.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/pictures.png b/import_bank_statement_odoo/static/description/assets/misc/pictures.png
new file mode 100755
index 000000000..56d255fe9
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/pictures.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/pie-chart.png b/import_bank_statement_odoo/static/description/assets/misc/pie-chart.png
new file mode 100755
index 000000000..426e05244
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/pie-chart.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/right-arrow.png b/import_bank_statement_odoo/static/description/assets/misc/right-arrow.png
new file mode 100755
index 000000000..730984a06
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/right-arrow.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/star.png b/import_bank_statement_odoo/static/description/assets/misc/star.png
new file mode 100755
index 000000000..2eb9ab29f
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/star.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/support.png b/import_bank_statement_odoo/static/description/assets/misc/support.png
new file mode 100755
index 000000000..4f18b8b82
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/support.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/misc/whatsapp.png b/import_bank_statement_odoo/static/description/assets/misc/whatsapp.png
new file mode 100755
index 000000000..d513a5356
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/misc/whatsapp.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/modules/1.png b/import_bank_statement_odoo/static/description/assets/modules/1.png
new file mode 100644
index 000000000..b19bf9df7
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/modules/1.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/modules/2.png b/import_bank_statement_odoo/static/description/assets/modules/2.png
new file mode 100644
index 000000000..6f11d9e4b
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/modules/2.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/modules/3.png b/import_bank_statement_odoo/static/description/assets/modules/3.png
new file mode 100644
index 000000000..5238bdeab
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/modules/3.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/modules/4.png b/import_bank_statement_odoo/static/description/assets/modules/4.png
new file mode 100644
index 000000000..1bae9eabe
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/modules/4.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/modules/5.png b/import_bank_statement_odoo/static/description/assets/modules/5.png
new file mode 100644
index 000000000..3932f4062
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/modules/5.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/modules/6.png b/import_bank_statement_odoo/static/description/assets/modules/6.png
new file mode 100644
index 000000000..b50130c7d
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/modules/6.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/bank_statements.png b/import_bank_statement_odoo/static/description/assets/screenshots/bank_statements.png
new file mode 100644
index 000000000..1c0b1327e
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/screenshots/bank_statements.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/hero.gif b/import_bank_statement_odoo/static/description/assets/screenshots/hero.gif
new file mode 100644
index 000000000..551f1a6d5
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/screenshots/hero.gif differ
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/import_button.png b/import_bank_statement_odoo/static/description/assets/screenshots/import_button.png
new file mode 100644
index 000000000..f09d105b7
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/screenshots/import_button.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/import_wizard.png b/import_bank_statement_odoo/static/description/assets/screenshots/import_wizard.png
new file mode 100644
index 000000000..8e18513dc
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/screenshots/import_wizard.png differ
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/statement.csv b/import_bank_statement_odoo/static/description/assets/screenshots/statement.csv
new file mode 100644
index 000000000..04ca33a35
--- /dev/null
+++ b/import_bank_statement_odoo/static/description/assets/screenshots/statement.csv
@@ -0,0 +1,3 @@
+Account name,Amount,Amount in Currency,Date,Partner,Running Balance
+Bank-2023-04-14/1,2000,,2023-04-14,Deco Addict,10044.87
+Bank-2023-04-21/2,1000,,2023-03-20,Ready Mat,10044.8
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/statement.ofx b/import_bank_statement_odoo/static/description/assets/screenshots/statement.ofx
new file mode 100644
index 000000000..d246b13e5
--- /dev/null
+++ b/import_bank_statement_odoo/static/description/assets/screenshots/statement.ofx
@@ -0,0 +1,65 @@
+OFXHEADER:100
+DATA:OFXSGML
+VERSION:102
+SECURITY:NONE
+ENCODING:USASCII
+CHARSET:1252
+COMPRESSION:NONE
+OLDFILEUID:NONE
+NEWFILEUID:NONE
+
+
+
+
+
+ 0
+ INFO
+
+ 20230419
+ ENG
+
+ BANK123
+
+
+
+
+
+ 1234567890
+
+ 0
+ INFO
+
+
+ USD
+
+ Bank-2023-04-14/1
+ 1234567890
+ CHECKING
+
+
+ 20220101
+ 20220131
+
+ DEBIT
+ 20230419
+ -3000.00
+ 1234567890-20220102-1
+ Deco Addict
+
+
+ CREDIT
+ 20220115
+ 1000.00
+ 1234567890-20220115-1
+ Ready Mat
+
+
+
+ 10044.87
+ 20220131
+
+
+
+
+
+
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/statement.qif b/import_bank_statement_odoo/static/description/assets/screenshots/statement.qif
new file mode 100644
index 000000000..837d2fc4f
--- /dev/null
+++ b/import_bank_statement_odoo/static/description/assets/screenshots/statement.qif
@@ -0,0 +1,15 @@
+!Type:Bank
+D14/04/2023
+T2000.00
+PBank-2023-02-11/1
+^
+!Type:Bank
+D09/04/2023
+T-500.00
+PBank-2023-04-09/2
+^
+!Type:Bank
+D19/06/2022
+T1000.00
+PBank-2023-04-21/3
+^
diff --git a/import_bank_statement_odoo/static/description/assets/screenshots/statement.xlsx b/import_bank_statement_odoo/static/description/assets/screenshots/statement.xlsx
new file mode 100644
index 000000000..2cc0bc564
Binary files /dev/null and b/import_bank_statement_odoo/static/description/assets/screenshots/statement.xlsx differ
diff --git a/import_bank_statement_odoo/static/description/banner.jpg b/import_bank_statement_odoo/static/description/banner.jpg
new file mode 100644
index 000000000..f0fd020dd
Binary files /dev/null and b/import_bank_statement_odoo/static/description/banner.jpg differ
diff --git a/import_bank_statement_odoo/static/description/icon.png b/import_bank_statement_odoo/static/description/icon.png
new file mode 100644
index 000000000..2c3df7650
Binary files /dev/null and b/import_bank_statement_odoo/static/description/icon.png differ
diff --git a/import_bank_statement_odoo/static/description/index.html b/import_bank_statement_odoo/static/description/index.html
new file mode 100644
index 000000000..fc3f5059a
--- /dev/null
+++ b/import_bank_statement_odoo/static/description/index.html
@@ -0,0 +1,1256 @@
+
+
+
+

+
+
+
+
+
+
+
+
+
Import Bank Statement
+
Import bank statement in csv, xlsx, ofx and qif file
+ format.
+
+

+
+
+
+
+
+
+
+
+

+
+
Explore This
+ Module
+
+
+
+
+
+
+
+

+
+
Overview
+
+
+
+
+ Import Bank Statement allows to import bank statement in different
+ format.
+ Using this module we can import statement in csv, xlsx, ofx and qif
+ format.
+
+
+
+
+
+
+
+

+
+
Features
+
+
+
+
+
+

+
+ Import ofx file format
+
+
+
+
+

+
+ Import qif file format
+
+
+
+
+

+
+ Import csv file format
+
+
+
+
+

+
+ Import xlsx file format
+
+
+
+
+
+
+
+
+
+
+

+
+
Screenshots
+
+
+
+
+
+
+ Import Button
+
+ A quick option to import bank statements
+

+
+
+
+ Import Wizard
+
+ A wizard that allows user to upload file.
+

+
+
+
+ Bank Statement view
+
+ After importing the file user can view the statements that
+ imported
+

+
+
+
+ (The example format for csv, xlsx, ofx and qif are added in
+ the module.)
+
+
+
+
+
+
+
+
+

+
+
Suggested Products
+
+
+
+
+
+
+
+

+
+
Our Services
+
+
+
+
+
+
+
+

+
+
+ Odoo
+ Customization
+
+
+
+
+

+
+
+ Odoo
+ Implementation
+
+
+
+
+

+
+
+ Odoo
+ Support
+
+
+
+
+
+

+
+
+ Hire
+ Odoo
+ Developer
+
+
+
+
+

+
+
+ Odoo
+ Integration
+
+
+
+
+

+
+
+ Odoo
+ Migration
+
+
+
+
+
+

+
+
+ Odoo
+ Consultancy
+
+
+
+
+

+
+
+ Odoo
+ Implementation
+
+
+
+
+

+
+
+ Odoo
+ Licensing Consultancy
+
+
+
+
+
+
+
+
+
+
+
+

+
+
Our
+ Industries
+
+
+
+
+
+
+
+

+
+ Trading
+
+
+ Easily procure
+ and
+ sell your products
+
+
+
+
+
+

+
+ POS
+
+
+ Easy
+ configuration
+ and convivial experience
+
+
+
+
+
+

+
+ Education
+
+
+ A platform for
+ educational management
+
+
+
+
+
+

+
+ Manufacturing
+
+
+ Plan, track and
+ schedule your operations
+
+
+
+
+
+

+
+ E-commerce & Website
+
+
+ Mobile
+ friendly,
+ awe-inspiring product pages
+
+
+
+
+
+

+
+ Service Management
+
+
+ Keep track of
+ services and invoice
+
+
+
+
+
+

+
+ Restaurant
+
+
+ Run your bar or
+ restaurant methodically
+
+
+
+
+
+

+
+ Hotel Management
+
+
+ An
+ all-inclusive
+ hotel management application
+
+
+
+
+
+
+
+
+
+
+

+
+
Support
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/import_bank_statement_odoo/views/account_journal_views.xml b/import_bank_statement_odoo/views/account_journal_views.xml
new file mode 100644
index 000000000..3e7d156f6
--- /dev/null
+++ b/import_bank_statement_odoo/views/account_journal_views.xml
@@ -0,0 +1,21 @@
+
+
+
+
+ account.journal.view.kanban.inherit.import.bank.statement.odoo
+ account.journal
+
+
+
+
+ Import
+
+
+
+
+
+
diff --git a/import_bank_statement_odoo/wizard/__init__.py b/import_bank_statement_odoo/wizard/__init__.py
new file mode 100644
index 000000000..e79418aed
--- /dev/null
+++ b/import_bank_statement_odoo/wizard/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Sruthi Renjith (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+from . import import_bank_statement
diff --git a/import_bank_statement_odoo/wizard/import_bank_statement.py b/import_bank_statement_odoo/wizard/import_bank_statement.py
new file mode 100644
index 000000000..d0d57b719
--- /dev/null
+++ b/import_bank_statement_odoo/wizard/import_bank_statement.py
@@ -0,0 +1,372 @@
+# -*- coding: utf-8 -*-
+################################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies().
+# Author: Sruthi Renjith (odoo@cybrosys.com)
+#
+# You can modify it under the terms of the GNU AFFERO
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program.
+# If not, see .
+#
+################################################################################
+import base64
+import codecs
+import os
+import sys
+from datetime import datetime
+from io import BytesIO
+import openpyxl
+from ofxparse import OfxParser
+from qifparse.parser import QifParser
+from odoo import fields, models, _
+from odoo.exceptions import ValidationError
+
+
+class ImportBankStatement(models.TransientModel):
+ """ Class to create a wizard for importing bank statement in csv, xlsx,
+ ofx and qif format """
+ _name = "import.bank.statement"
+ _description = "Import Button"
+ _rec_name = "file_name"
+
+ attachment = fields.Binary(string="Attachment File", required=True,
+ help="Choose the file to import")
+ file_name = fields.Char(string="File Name", help="Name of the file")
+ journal_id = fields.Many2one('account.journal',
+ string="Journal ID",
+ help="Journal id to identify the journal")
+
+ def is_valid_date_format(self, date_string, accepted_formats):
+ """ Function to check the date is a valid date """
+ for date_format in accepted_formats:
+ try:
+ datetime.strptime(date_string, date_format)
+ return True
+ except ValueError:
+ pass
+ return False
+
+ def action_import(self):
+ """ Function to import csv, xlsx, ofx and qif file format """
+ accepted_date_formats = ["%Y-%m-%d", "%y-%m-%d", "%d/%m/%Y",
+ "%d/%m/%y"]
+ split_tup = os.path.splitext(self.file_name)
+ if (split_tup[1] == '.csv' or split_tup[1] == '.xlsx' or
+ split_tup[1] == '.ofx' or split_tup[1] == '.qif'):
+ if split_tup[1] == '.csv':
+ # Reading csv file
+ try:
+ file = base64.b64decode(self.attachment)
+ file_string = file.decode('utf-8')
+ file_string = file_string.split('\n')
+ except Exception:
+ raise ValidationError(_("Choose correct file"))
+ # Skipping the first line
+ firstline = True
+ for file_item in file_string:
+ if firstline:
+ firstline = False
+ continue
+ # Reading the content from csv file
+ if file_item.split(',') != ['']:
+ if (file_item.split(',')[0] and
+ file_item.split(',')[1] and
+ file_item.split(',')[4]):
+ if not file_item.split(',')[3]:
+ date_obj = str(fields.date.today())
+ else:
+ date_obj = file_item.split(',')[3]
+ if not self.is_valid_date_format(
+ date_obj, accepted_date_formats):
+ raise ValidationError(
+ _("Date format should be in "
+ "%Y-%m-%d or %y-%m-%d or %d/%m/%Y or"
+ " %d/%m/%y format"))
+ transaction_date = datetime.strptime(
+ date_obj, "%Y-%m-%d")
+ partner = self.env['res.partner'].search(
+ [('name', '=', file_item.split(',')[4])])
+ # Creating a record in account.bank.statement model
+ statement_amount = file_item.split(',')[1]
+ statement_amount = statement_amount.replace('.',
+ '')
+ if not statement_amount.isdigit():
+ raise ValidationError(
+ _("Amount should be integer"))
+ if partner:
+ statement = self.env[
+ 'account.bank.statement'].create({
+ 'name': file_item.split(',')[0],
+ 'line_ids': [
+ (0, 0, {
+ 'date': transaction_date,
+ 'payment_ref': 'csv file',
+ 'partner_id': partner.id,
+ 'journal_id':
+ self.journal_id.id,
+ 'amount':
+ file_item.split(',')[1],
+ 'amount_currency':
+ file_item.split(',')[2],
+ }),
+ ],
+ })
+ else:
+ raise ValidationError(_("Partner not exist"))
+ else:
+ raise ValidationError(
+ _("Mandatory field is not set"))
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Statements',
+ 'view_mode': 'tree',
+ 'res_model': 'account.bank.statement',
+ 'res_id': statement.id,
+ }
+ elif split_tup[1] == '.xlsx':
+ # Reading xlsx file
+ try:
+ order = openpyxl.load_workbook(
+ filename=BytesIO(base64.b64decode(self.attachment)))
+ xl_order = order.active
+ except Exception:
+ raise ValidationError(_("Choose correct file"))
+ for record in xl_order.iter_rows(min_row=2, max_row=None,
+ min_col=None,
+ max_col=None,
+ values_only=True):
+ line = list(record)
+ # Reading the content from file
+ if line[0] and line[1] and line[3]:
+ partner = self.env['res.partner'].search(
+ [('name', '=', line[3])])
+ if not line[2]:
+ date_obj = fields.date.today()
+ elif type(line[2]) == str:
+ raise ValidationError(
+ _("Date format should be in"
+ " %Y-%m-%d or %y-%m-%d or %d/%m/%Y or "
+ "%d/%m/%y format"))
+ else:
+ date_obj = line[2].date()
+ if not self.is_valid_date_format(
+ str(date_obj), accepted_date_formats):
+ raise ValidationError(
+ _("Date format should be in "
+ "%Y-%m-%d or %y-%m-%d or "
+ "%d/%m/%Y or %d/%m/%y format"))
+ statement_amount = str(line[1])
+ statement_amount = statement_amount.replace('.', '')
+ if not statement_amount.isdigit():
+ raise ValidationError(
+ _("Amount should be integer"))
+ # Creating record
+ if partner:
+ statement = self.env[
+ 'account.bank.statement'].create({
+ 'name': line[0],
+ 'line_ids': [
+ (0, 0, {
+ 'date': date_obj,
+ 'payment_ref': 'xlsx file',
+ 'partner_id': partner.id,
+ 'journal_id': self.journal_id.id,
+ 'amount': line[1],
+ }),
+ ],
+ })
+ else:
+ raise ValidationError(_("Partner not exist"))
+ else:
+ raise ValidationError(_("Mandatory field is not set"))
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Statements',
+ 'view_mode': 'tree',
+ 'res_model': 'account.bank.statement',
+ 'res_id': statement.id,
+ }
+ elif split_tup[1] == '.ofx':
+ # Searching the path of the file
+ file_attachment = self.env["ir.attachment"].search(
+ ['|', ('res_field', '!=', False),
+ ('res_field', '=', False),
+ ('res_id', '=', self.id),
+ ('res_model', '=', 'import.bank.statement')],
+ limit=1)
+ file_path = file_attachment._full_path(
+ file_attachment.store_fname)
+ # Parsing the file
+ try:
+ with codecs.open(file_path) as fileobj:
+ ofx_file = OfxParser.parse(fileobj)
+ except Exception:
+ raise ValidationError(_("Wrong file format"))
+ sys.exit()
+ if not ofx_file.account:
+ raise ValidationError(
+ _("No account information found in OFX file."))
+ sys.exit()
+ if not ofx_file.account.statement:
+ raise ValidationError(
+ _("No statement information found in OFX file."))
+ sys.exit()
+ statement_list = []
+ # Reading the content from file
+ for transaction in ofx_file.account.statement.transactions:
+ if transaction.type == "debit" and transaction.amount != 0:
+ payee = transaction.payee
+ amount = transaction.amount
+ date = transaction.date
+ if not date:
+ date = fields.date.today()
+ else:
+ date = date.strftime("%Y-%m-%d")
+ if not self.is_valid_date_format(
+ str(date), accepted_date_formats):
+ raise ValidationError(
+ _("Date format should be in "
+ "%Y-%m-%d or %y-%m-%d or %d/%m/%Y or "
+ "%d/%m/%y format"))
+ partner = self.env['res.partner'].search(
+ [('name', '=', payee)])
+ if partner:
+ statement_list.append([partner.id, amount, date])
+ else:
+ raise ValidationError(_("Partner not exist"))
+ if (transaction.type == "credit" and
+ transaction.amount != 0):
+ payee = transaction.payee
+ amount = transaction.amount
+ date = transaction.date
+ if not date:
+ date = fields.date.today()
+ else:
+ date = date.strftime("%Y-%m-%d")
+ if not self.is_valid_date_format(
+ str(date), accepted_date_formats):
+ raise ValidationError(
+ _("Date format should be in "
+ "%Y-%m-%d or %y-%m-%d or "
+ "%d/%m/%Y or %d/%m/%y format"))
+ partner = self.env['res.partner'].search(
+ [('name', '=', payee)])
+ if partner:
+ statement_list.append([partner.id, amount, date])
+ else:
+ raise ValidationError(_("Partner not exist"))
+ # Creating record
+ if statement_list:
+ for item in statement_list:
+ statement_amount = str(abs(item[1]))
+ statement_amount = statement_amount.replace('.', '')
+ if not statement_amount.isdigit():
+ raise ValidationError(
+ _("Amount should be integer"))
+ statement = self.env['account.bank.statement'].create({
+ 'name': ofx_file.account.routing_number,
+ 'line_ids': [
+ (0, 0, {
+ 'date': item[2],
+ 'payment_ref': 'ofx file',
+ 'partner_id': item[0],
+ 'journal_id': self.journal_id.id,
+ 'amount': item[1],
+ }),
+ ],
+ })
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Statements',
+ 'view_mode': 'tree',
+ 'res_model': 'account.bank.statement',
+ 'res_id': statement.id,
+ }
+ else:
+ raise ValidationError(_("There is no data to import"))
+ elif split_tup[1] == '.qif':
+ # Searching the path of qif file
+ file_attachment = self.env["ir.attachment"].search(
+ ['|', ('res_field', '!=', False),
+ ('res_field', '=', False),
+ ('res_id', '=', self.id),
+ ('res_model', '=', 'import.bank.statement')],
+ limit=1)
+ file_path = file_attachment._full_path(
+ file_attachment.store_fname)
+ # Parsing the qif file
+ try:
+ parser = QifParser()
+ with open(file_path, 'r') as qiffile:
+ qif = parser.parse(qiffile)
+ except Exception:
+ raise ValidationError(_("Wrong file format"))
+ sys.exit()
+ file_string = str(qif)
+ file_item = file_string.split('^')
+ file_item[-1] = file_item[-1].rstrip('\n')
+ if file_item[-1] == '':
+ file_item.pop()
+ statement_list = []
+ for item in file_item:
+ if not item.startswith('!Type:Bank'):
+ item = '!Type:Bank' + item
+ data = item.split('\n')
+ # Reading the file content
+ date_entry = data[1][1:]
+ amount = float(data[2][1:])
+ payee = data[3][1:]
+ if amount and payee:
+ if not date_entry:
+ date_entry = str(fields.date.today())
+ else:
+ if not self.is_valid_date_format(
+ date_entry, accepted_date_formats):
+ raise ValidationError(
+ _("Date format should be in"
+ "%Y-%m-%d or %y-%m-%d or "
+ "%d/%m/%Y or %d/%m/%y format"))
+ date_object = datetime.strptime(date_entry,
+ '%d/%m/%Y')
+ date = date_object.strftime('%Y-%m-%d')
+ statement_list.append([payee, amount, date])
+ else:
+ raise ValidationError(_("Mandatory field is not set"))
+ # Creating record
+ if statement_list:
+ for item in statement_list:
+ statement_amount = str(abs(item[1]))
+ statement_amount = statement_amount.replace('.', '')
+ if not statement_amount.isdigit():
+ raise ValidationError(
+ _("Amount should be integer"))
+ statement = self.env['account.bank.statement'].create({
+ 'name': item[0],
+ 'line_ids': [
+ (0, 0, {
+ 'date': item[2],
+ 'payment_ref': 'qif file',
+ 'journal_id': self.journal_id.id,
+ 'amount': item[1],
+ }),
+ ],
+ })
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Statements',
+ 'view_mode': 'tree',
+ 'res_model': 'account.bank.statement',
+ 'res_id': statement.id,
+ }
+ else:
+ raise ValidationError(_("Choose correct file"))
diff --git a/import_bank_statement_odoo/wizard/import_bank_statement_views.xml b/import_bank_statement_odoo/wizard/import_bank_statement_views.xml
new file mode 100644
index 000000000..9fcf9f536
--- /dev/null
+++ b/import_bank_statement_odoo/wizard/import_bank_statement_views.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ import.bank.statement.view.form
+ import.bank.statement
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bank Statement
+ ir.actions.act_window
+ import.bank.statement
+ form
+
+ new
+
+