diff --git a/account_banking_reconciliation/README.rst b/account_banking_reconciliation/README.rst new file mode 100644 index 00000000..6f21d5b7 --- /dev/null +++ b/account_banking_reconciliation/README.rst @@ -0,0 +1,243 @@ +=========================== +Bank Account Reconciliation +=========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| 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 +.. |badge2| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github + :target: https://github.com/OCA/account-reconcile/tree/12.0/account_banking_reconciliation + :alt: OCA/account-reconcile +.. |badge3| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-reconcile-12-0/account-reconcile-12-0-account_banking_reconciliation + :alt: Translate me on Weblate +.. |badge4| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/98/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| + +This module is designed to provide an easy method in which Odoo accounting users +can manually reconcile/validate their financial transactions from their financial +institution/transaction providers (e.g. Paypal, A financial institution, google +wallet, etc) against Odoo GL Chart of Account bank accounts. + +Users will be able to validate and indicate if a transaction has "Cleared the +Bank" using a checkmark on a new Reconcile Financial Account Statement view on +each individual financial transaction. Users will also be able to mark +transactions on a bank account for future research. + +The idea is that as a first step users will manually look at their paper statement +and line-by-line check off which financial transactions have cleared the bank in +Odoo using the new Bank Reconciliation Wizard. These changes will be displayed on +the new Reconcile Financial Account Statement tree view screen. This is the +process in which many companies reconcile (aka Audit) their bank account statements +and accounting system today and represents good segregation of duties. + +Users can save their in-process reconciliations. + +Background +---------- + +Using the search view filters - users will also be able to effectively sort, +filter the transactions on a particular GL Financial Account. This new screen +will display the journal items associated with a particular bank account. +Several of the field labels have been relabeled to a more common vernacular. + +The need for this module is driven by the following: + +* Users want to easily record whether bank transactions sent to their bank have + "cleared the bank"- definition of "cleared the bank": presented to the bank for + payment and paid by the bank - added/subtracted funds on a bank account. +* Users want the ability to validate if the bank processed the transactions them + correctly (e.g. properly encoded transaction - e.g. company sent a payment of + $20.20 to the bank. Was it processed for $20.20?). This can be considered + "Auditing the bank statement". We don't assume the bank correctly processed any + transaction. +* Users want to understand what payments they've made are still outstanding and + have not been paid by the bank. +* The financial auditing segregation standard of separating the duties of: + recording customer payments and making deposits; recording supplier payments + and writing checks; and monitoring bank account activity. This segregation of + duties is necessary to monitor and help prevent fraud. + +Assumptions +----------- + +#. Companies using Odoo have setup a one-to-one relationship between their + bank accounts and their Odoo GL accounts. Each bank account should have a + corresponding GL account that is not shared with another account. + Example: + + +----------------------+------------------------------------------------------------+ + | Odoo GL Account # | Corresponding Bank Account | + +======================+============================================================+ + | 10100 | Bank (AR) Account Checking 5434 (held at Institution A) | + +----------------------+------------------------------------------------------------+ + | 10200 | Master Bank Account 2343 (held at Institution A) | + +----------------------+------------------------------------------------------------+ + | 10300 | Bank Payable Account Checking 5678 (held at Institution A)| + +----------------------+------------------------------------------------------------+ + | 10400 | Bank Payroll Account 6656 (held at Institution B) | + +----------------------+------------------------------------------------------------+ + | 10500 | Paypal Account 3343 (held at Paypal) | + +----------------------+------------------------------------------------------------+ + | 10600 | Google Wallet Account 6788 | + +----------------------+------------------------------------------------------------+ + | 10700 | AMEX Corporate Card Account 9989 | + +----------------------+------------------------------------------------------------+ + +#. Companies have included a Non-Deposited Funds Account in their GL account + (typically in current assets in their bank account areas). This account is + used to store payments that have been recorded in Odoo - but not yet + deposited into the financial institution. (NOTE: this account is important to + have if the user "batches check deposits"- which is the process of making a + large single deposits of customer payment into the bank (e.g. $20,000USD), but + it is made up of smaller checks (e.g. 20 checks of $1,000 each). Many banks + just record the total deposit amount ($20,000) and don¬タルt provide the + breakdown of the individual checks that make up the larger deposit. This + setup approach enables users to drill down and see the individual checks that + make up a larger deposit. + +Recommendations +--------------- + +From a cash management and financial control perspective, it is recommended that +users establish the following four (4) bank accounts at their financial +institution at a minimum to handle financial transactions. (NOTE: we recommend +users place the last 4 digits of their bank account in the GL account name of the +account. It helps accountants in their management of the system): + +* Bank (AR) Account Checking 5434. This is a checking account designated as the + account where payments made to the company are deposited (e.g. a customer + payment made by check is deposited here, or a customer paying by electronic + transaction EFT/ACH is deposited into this GL). +* Master Bank Account 2343. This is the master account in which the company + keeps the majority of their funds. Often with the most limited access. +* Bank Payable Account Checking 5678. This is a checking account designated for + the company to pay their expenses from. (e.g. Company writes a check to pay a + supplier for their office supplies). +* Bank Payroll Account 6656. This is a checking account designated for a company + to pay their employees and payroll. + +Note +---- + +There has been common confusion in the Odoo community about managing bank +statements in the base Odoo system. This module hopes to alleviate this gap and +provide users with a sound alternative to maintain fiscal control, be easy to +understand, and allow for future growth. + +Why this approach? +------------------ + +Users in Odoo have several options in which to record financial transactions that +affect the balances of a bank account (GL Bank Account entries). We believe our +approach allows these to work in conjunction with each other: Import Electronic +Bank Statements to enter payments (this approach follows the philosophy that you +first find out that a transaction has occurred from your bank which is very +common in Europe due to the electronic nature of transactions). + +* Payment Order Payments (using the direct Method) - Payments are instantly recorded + and financial transactions posted into the GL +* Voucher Payments - Payments are instantly recorded and financial transactions + posted into the GL +* Sales Receipts/Refunds +* Transfers between accounts (a new module is being developed to help manage this) +* Funds moved from the Undeposited Funds GL account to a Bank Account GL account. +* Direct Journal Entries + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module + +* Go to Settings and activate the developer mode +* Go to Settings > Users and Companies > Users +* Add users who will prepare the bank statements to the "Bank Statement Preparer" +* Add users who will verify them to the "Bank Statement Manager" group + +Usage +===== + +To use this module: + +* Go to Accounting > Adviser > Bank Statements +* Create a new bank statement +* Select the account and provide a name +* Enter the ending balance from the bank statement +* Check the transactions that cleared the bank +* Check the balances +* Save and submit for review +* As a reviewer, check the transactions, totals and balances +* Click on Process + +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 +~~~~~~~ + +* NovaPoint Group LLC +* Open Source Integrators + +Contributors +~~~~~~~~~~~~ + +* Nova Point Group +* Balaji Kannan +* Bhavesh Odedra +* Sandeep Mangukiya +* Murtuza Saleh + +Other credits +~~~~~~~~~~~~~ + +* Nova Point Group +* Open Source Integrators +* Serpent Consulting Services Pvt. Ltd. + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-max3903| image:: https://github.com/max3903.png?size=40px + :target: https://github.com/max3903 + :alt: max3903 + +Current `maintainer `__: + +|maintainer-max3903| + +This module is part of the `OCA/account-reconcile `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_banking_reconciliation/__init__.py b/account_banking_reconciliation/__init__.py new file mode 100644 index 00000000..69f7babd --- /dev/null +++ b/account_banking_reconciliation/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/account_banking_reconciliation/__manifest__.py b/account_banking_reconciliation/__manifest__.py new file mode 100644 index 00000000..2bdc6771 --- /dev/null +++ b/account_banking_reconciliation/__manifest__.py @@ -0,0 +1,30 @@ +# Copyright (C) 2019 Open Source Integrators +# +# Copyright (C) 2011 NovaPoint Group LLC () +# Copyright (C) 2004-2010 OpenERP SA () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Bank Account Reconciliation", + "summary": "Check transactions that cleared the bank", + "version": "12.0.1.0.0", + "license": "AGPL-3", + "category": "Accounting and Financial Management", + "author": "NovaPoint Group LLC, " + "Open Source Integrators, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/account-reconcile", + "depends": [ + "account_voucher", + ], + "data": [ + "security/account_banking_reconciliation.xml", + "security/ir.model.access.csv", + "views/account_banking_reconciliation.xml", + "views/account_move_line.xml", + "report/bank_statement_report.xml", + "report/report_bank_statement_summary.xml", + "report/report_bank_statement_detail.xml"], + "installable": True, + "development_status": "Stable", + "maintainers": ["max3903"], +} diff --git a/account_banking_reconciliation/i18n/account_banking_reconciliation.pot b/account_banking_reconciliation/i18n/account_banking_reconciliation.pot new file mode 100644 index 00000000..c81cab8a --- /dev/null +++ b/account_banking_reconciliation/i18n/account_banking_reconciliation.pot @@ -0,0 +1,866 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_banking_reconciliation +# +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_banking_reconciliation +#: code:addons/account_banking_reconciliation/models/account_banking_reconciliation.py:548 +#, python-format +msgid "%s (copy)" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__difference +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__difference_cur +msgid "(Ending Balance – Beginning Balance) - Cleared Balance." +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "\n" +" Cleared Balance\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "\n" +" Ending Balance\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "\n" +" Total Checks & Payments\n" +" \n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "\n" +" Total Cleared Transactions\n" +" \n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "\n" +" Total Deposits &\n" +" Credits\n" +" \n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "\n" +" Cleared Balance\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "\n" +" Cleared Transactions\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "\n" +" Ending Balance:\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "\n" +" Initial Balance:\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "\n" +" Total Cleared Transactions\n" +" " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "Checks & Payments-" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "Deposits & Credits-" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "Period Ending" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__account_id +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Account" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__amount +msgid "Amount" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__amountcur +msgid "Amount in Currency" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_account_move_line__draft_assigned_to_statement +msgid "Assigned to Statement? " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Balances" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model,name:account_banking_reconciliation.model_bank_acc_rec_statement +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_account_move_line__bank_acc_rec_statement_id +msgid "Bank Acc Rec Statement" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Bank Account Reconciliation Statement" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_tree +msgid "Bank Account Reconciliation Statements" +msgstr "" + +#. module: account_banking_reconciliation +#: model:res.groups,name:account_banking_reconciliation.group_bank_stmt_preparer +msgid "Bank Statement Preparer" +msgstr "" + +#. module: account_banking_reconciliation +#: model:res.groups,name:account_banking_reconciliation.group_bank_stmt_verifier +msgid "Bank Statement Verifier" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.actions.report,name:account_banking_reconciliation.bank_statement_detail +msgid "Bank Statement-Detail" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.actions.report,name:account_banking_reconciliation.bank_statement_summary +msgid "Bank Statement-Summary" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.actions.act_window,name:account_banking_reconciliation.action_bank_acc_rec_statement +#: model:ir.ui.menu,name:account_banking_reconciliation.bank_acc_rec_statement_menu +msgid "Bank Statements" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Cancel" +msgstr "" + +#. module: account_banking_reconciliation +#: selection:bank.acc.rec.statement,state:0 +msgid "Cancelled" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_account_move_line__draft_assigned_to_statement +msgid "Check if the move line is assigned to statement lines" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_account_move_line__cleared_bank_account +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__cleared_bank_account +msgid "Check if the transaction has cleared from the bank" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__research_required +msgid "Check if the transaction should be researched by Accounting personal" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_credits_lines +msgid "Checks, Withdrawals,\n" +" Debits, and Service Charges # of\n" +" Items" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Checks, Withdrawals, Debits, and Service Charges" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_credits +msgid "Checks, Withdrawals, Debits, and Service Charges Amount" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_credits_cur +msgid "Checks, Withdrawals, Debits, and Service Charges Amount (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Cleared" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__cleared_balance +msgid "Cleared Balance" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__cleared_balance_cur +msgid "Cleared Balance (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_account_move_line__cleared_bank_account +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__cleared_bank_account +msgid "Cleared? " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "Comment" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__company_id +msgid "Company" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__type +msgid "Cr/Dr" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__create_uid +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__create_uid +msgid "Created by" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__create_date +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__create_date +msgid "Created on" +msgstr "" + +#. module: account_banking_reconciliation +#: selection:bank.acc.rec.statement.line,type:0 +msgid "Credit" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__credit_move_line_ids +msgid "Credits" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__currency_id +msgid "Currency" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Current edits in statement will be lost. Do you want to refresh?" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Current edits in statement will be lost. Do you want to select all?" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Current edits in statement will be lost. Do you want to unselect all?" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.actions.act_window,name:account_banking_reconciliation.act_customer_payment_to_add +msgid "Customer Payment" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__date +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "Date" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__verified_date +msgid "Date in which Deposit Ticket was verified." +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Date of the last statement" +msgstr "" + +#. module: account_banking_reconciliation +#: selection:bank.acc.rec.statement.line,type:0 +msgid "Debit" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__debit_move_line_ids +msgid "Debits" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_debits_lines +msgid "Deposits, Credits, and\n" +" Interest # of Items" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Deposits, Credits, and Interest" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_debits +msgid "Deposits, Credits, and Interest Amount" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_debits_cur +msgid "Deposits, Credits, and Interest Amount (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__date +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__partner_id +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__ref +msgid "Derived from related Journal Item." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__amountcur +msgid "Derived from the 'amount currency' amount from related Journal Item." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__amount +msgid "Derived from the 'debit' amount from related Journal Item." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__name +msgid "Derived from the related Journal Item." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__difference +msgid "Difference" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__difference_cur +msgid "Difference (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__display_name +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__display_name +msgid "Display Name" +msgstr "" + +#. module: account_banking_reconciliation +#: selection:bank.acc.rec.statement,state:0 +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Done" +msgstr "" + +#. module: account_banking_reconciliation +#: selection:bank.acc.rec.statement,state:0 +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Draft" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__ending_balance +msgid "Ending Balance" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__ending_date +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Ending Date" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter Name" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter notes about reconciliation" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter the ending balance" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter the ending date" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter the starting balance" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter the user who verified" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Enter the verification date" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__verified_by_user_id +msgid "Entered automatically by the “last user” who saved it. System generated." +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Group By..." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__id +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__id +msgid "ID" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__suppress_ending_date_filter +msgid "If this is checked then the Statement End Date filter on the transactions below will not occur. All transactions would come over." +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_account_move_line_bank_acc_rec_statement_id +msgid "Journal Entries not cleared" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model,name:account_banking_reconciliation.model_account_move_line +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__move_line_id +msgid "Journal Item" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.actions.act_window,name:account_banking_reconciliation.act_account_move_line_to_add +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Journal Items" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement____last_update +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__last_ending_date +msgid "Last Stmt Date" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__write_uid +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__write_date +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__name +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__name +msgid "Name" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__notes +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Notes" +msgstr "" + +#. module: account_banking_reconciliation +#: code:addons/account_banking_reconciliation/models/account_banking_reconciliation.py:46 +#, python-format +msgid "Only a member of '%s' group may delete/edit bank statements when not in draft state!" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Other Information" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__partner_id +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "Partner" +msgstr "" + +#. module: account_banking_reconciliation +#: code:addons/account_banking_reconciliation/models/account_banking_reconciliation.py:68 +#: code:addons/account_banking_reconciliation/models/account_banking_reconciliation.py:75 +#, python-format +msgid "Prior to reconciling a statement, all differences must be accounted for and the Difference balance must be zero. Please review and make necessary changes." +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Process" +msgstr "" + +#. module: account_banking_reconciliation +#: selection:bank.acc.rec.statement,state:0 +msgid "Ready for Review" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "Reconciliation Detail" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "Reconciliation Summary" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__ref +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +msgid "Reference" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Refresh" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__move_line_id +msgid "Related Journal Item." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__suppress_ending_date_filter +msgid "Remove Ending Date Filter" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__research_required +msgid "Research Required? " +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Search Bank Account Reconciliation Statements" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Select All" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Select the account" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Select the company" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Set to Draft" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__starting_balance +msgid "Starting Balance" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__state +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "State" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement_line__statement_id +msgid "Statement" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model,name:account_banking_reconciliation.model_bank_acc_rec_statement_line +msgid "Statement Line" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Statements that are ready for review" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Statements that have been processed" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Statements that haven't yet been confirmed" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Submit for Review" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.actions.act_window,name:account_banking_reconciliation.act_supplier_payment_to_add +msgid "Supplier Payment" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_account_move_line__bank_acc_rec_statement_id +msgid "The Bank Acc Rec Statement linked with the journal item" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__account_id +msgid "The Bank/Gl Account that is being reconciled." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__company_id +msgid "The Company for which the deposit ticket is made to" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__ending_balance +msgid "The Ending Balance on your bank statement." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__starting_balance +msgid "The Starting Balance on your bank statement." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__ending_date +msgid "The ending date of your bank statement." +msgstr "" + +#. module: account_banking_reconciliation +#: sql_constraint:bank.acc.rec.statement:0 +msgid "The name of the statement must be unique per company and G/L account!" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement_line__currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__last_ending_date +msgid "The previous statement date of your bank statement." +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__name +msgid "This is a unique name identifying the statement (e.g. Bank X January 2012)." +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "To be Reviewed" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_ucredits +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_ucredits_cur +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_udebits +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_udebits_cur +msgid "Total SUM of Amts of lines with Cleared = False" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_credits +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_credits_cur +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_debits +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_debits_cur +msgid "Total SUM of Amts of lines with Cleared = True" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__cleared_balance +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__cleared_balance_cur +msgid "Total Sum of the Deposit Amount Cleared – Total Sum of Checks, Withdrawals, Debits, and Service Charges Amount Cleared" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__uncleared_balance +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__uncleared_balance_cur +msgid "Total Sum of the Deposit Amount Uncleared – Total Sum of Checks, Withdrawals, Debits, and Service Charges Amount Uncleared" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_ucredits_lines +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_udebits_lines +msgid "Total of number of lines with Cleared = False" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_credits_lines +#: model:ir.model.fields,help:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_debits_lines +msgid "Total of number of lines with Cleared = True" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Totals" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Tracking Information" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Uncleared" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_ucredits_lines +msgid "Uncleared - Checks, Withdrawals, Debits, and Service Charges # of Items" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_ucredits +msgid "Uncleared - Checks, Withdrawals, Debits, and Service Charges Amount" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_ucredits_cur +msgid "Uncleared - Checks, Withdrawals, Debits, and Service Charges Amount (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_udebits_lines +msgid "Uncleared - Deposits,\n" +" Credits, and Interest # of Items" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_udebits +msgid "Uncleared - Deposits, Credits, and Interest Amount" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__sum_of_udebits_cur +msgid "Uncleared - Deposits, Credits, and Interest Amount (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__uncleared_balance +msgid "Uncleared Balance" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_account_move_line_bank_acc_rec_statement_id +msgid "Uncleared Bank Account" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__uncleared_balance_cur +msgid "Unleared Balance (Cur)" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_form +msgid "Unselect All" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__verified_by_user_id +msgid "Verified By" +msgstr "" + +#. module: account_banking_reconciliation +#: model:ir.model.fields,field_description:account_banking_reconciliation.field_bank_acc_rec_statement__verified_date +msgid "Verified Date" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.view_bank_acc_rec_statement_filter +msgid "Verified by me" +msgstr "" + +#. module: account_banking_reconciliation +#: code:addons/account_banking_reconciliation/models/account_banking_reconciliation.py:595 +#, python-format +msgid "You cannot add any new bank statement line manually as of this revision!" +msgstr "" + +#. module: account_banking_reconciliation +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc +#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc +msgid "items" +msgstr "" + diff --git a/account_banking_reconciliation/models/__init__.py b/account_banking_reconciliation/models/__init__.py new file mode 100644 index 00000000..e21f0e2e --- /dev/null +++ b/account_banking_reconciliation/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import account_move_line +from . import account_banking_reconciliation diff --git a/account_banking_reconciliation/models/account_banking_reconciliation.py b/account_banking_reconciliation/models/account_banking_reconciliation.py new file mode 100644 index 00000000..1b1b8bf4 --- /dev/null +++ b/account_banking_reconciliation/models/account_banking_reconciliation.py @@ -0,0 +1,613 @@ +# Copyright (C) 2019 Open Source Integrators +# +# Copyright (C) 2011 NovaPoint Group LLC () +# Copyright (C) 2004-2010 OpenERP SA () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import time + +from odoo import api, fields, models, _ +from odoo.exceptions import UserError +import odoo.addons.decimal_precision as dp +from operator import itemgetter +from odoo.tools.float_utils import float_round + + +class BankAccRecStatement(models.Model): + _name = "bank.acc.rec.statement" + _description = "Bank Acc Rec Statement" + _order = "ending_date desc" + + @api.multi + def check_group(self): + """Check if following security constraints are implemented for groups: + Bank Statement Preparer– they can create, view and delete any of the + Bank Statements provided the Bank Statement is not in the DONE state, + or the Ready for Review state. + Bank Statement Verifier – they can create, view, edit, and delete any + of the Bank Statements information at any time. + NOTE: DONE Bank Statements are only allowed to be deleted by a + Bank Statement Verifier.""" + model_data_obj = self.env['ir.model.data'] + res_groups_obj = self.env['res.groups'] + group_verifier_id = model_data_obj._get_id( + 'account_banking_reconciliation', + 'group_bank_stmt_verifier') + + for statement in self: + if group_verifier_id: + res_id = model_data_obj.browse(group_verifier_id).res_id + group_verifier = res_groups_obj.browse([res_id]) + group_user_ids = [user.id for user in group_verifier.users] + if statement.state != 'draft' \ + and self.env.uid not in group_user_ids: + raise UserError(_("Only a member of '%s' " + "group may delete/edit " + "bank statements when not in draft " + "state!" % (group_verifier.name))) + return True + + @api.multi + def write(self, vals): + # Check if the user is allowed to perform the action + self.check_group() + return super(BankAccRecStatement, self).write(vals) + + @api.multi + def unlink(self): + """Check if the user is allowed to perform the action""" + self.check_group() + return super(BankAccRecStatement, self).unlink() + + @api.multi + def check_difference_balance(self): + # Check if difference balance is zero or not. + for statement in self: + + if statement.cleared_balance_cur: + if statement.difference_cur != 0.0: + raise UserError(_("Prior to reconciling a statement, " + "all differences must be accounted for " + "and the Difference balance must be " + "zero. Please review " + "and make necessary changes.")) + else: + if statement.difference != 0.0: + raise UserError(_("Prior to reconciling a statement, " + "all differences must be accounted for " + "and the Difference balance must " + "be zero. Please review " + "and make necessary changes.")) + return True + + @api.multi + def action_cancel(self): + """Cancel the the statement.""" + self.write({'state': 'cancel'}) + return True + + @api.multi + def action_review(self): + """Change the status of statement from 'draft' to 'to_be_reviewed'.""" + # If difference balance not zero prevent further processing + self.check_difference_balance() + self.write({'state': 'to_be_reviewed'}) + return True + + @api.multi + def action_process(self): + """Set the account move lines as 'Cleared' and + Assign 'Bank Acc Rec Statement ID' + for the statement lines which are marked as 'Cleared'.""" + # If difference balance not zero prevent further processing + self.check_difference_balance() + for statement in self: + statement_lines = \ + statement.credit_move_line_ids + statement.debit_move_line_ids + for statement_line in statement_lines: + # Mark the move lines as 'Cleared'mand assign + # the 'Bank Acc Rec Statement ID' + statement_id = \ + statement_line.cleared_bank_account and \ + statement.id or False + cleared_bank_account = \ + statement_line.cleared_bank_account + statement_line.move_line_id.write({ + 'cleared_bank_account': cleared_bank_account, + 'bank_acc_rec_statement_id': statement_id}) + + statement.write({'state': 'done', + 'verified_by_user_id': self.env.uid, + 'verified_date': time.strftime('%Y-%m-%d')}) + return True + + @api.multi + def action_cancel_draft(self): + """Reset the statement to draft and perform resetting operations.""" + for statement in self: + statement_lines = \ + statement.credit_move_line_ids + statement.debit_move_line_ids + line_ids = [] + for statement_line in statement_lines: + if statement_line.move_line_id: + # Find move lines related to statement lines + line_ids.append(statement_line.move_line_id.id) + # Reset 'Cleared' and 'Bank Acc Rec Statement ID' to False + self.env['account.move.line'].browse(line_ids).write( + {'cleared_bank_account': False, + 'bank_acc_rec_statement_id': False}) + + # Reset 'Cleared' in statement lines + statement_lines.write({'cleared_bank_account': False, + 'research_required': False}) + # Reset statement + statement.write({'state': 'draft', + 'verified_by_user_id': False, + 'verified_date': False}) + return True + + @api.multi + def action_select_all(self): + """Mark all the statement lines as 'Cleared'.""" + for statement in self: + statement_lines = \ + statement.credit_move_line_ids + statement.debit_move_line_ids + statement_lines.write({'cleared_bank_account': True}) + return True + + @api.multi + def action_unselect_all(self): + """Reset 'Cleared' in all the statement lines.""" + for statement in self: + statement_lines = \ + statement.credit_move_line_ids + statement.debit_move_line_ids + statement_lines.write({'cleared_bank_account': False}) + return True + + def _compute_get_balance(self): + """Computed as following: + A) Deposits, Credits, and Interest Amount: + Total SUM of Amts of lines with Cleared = True + Deposits, Credits, and Interest # of Items: + Total of number of lines with Cleared = True + B) Checks, Withdrawals, Debits, and Service Charges Amount: + Checks, Withdrawals, Debits, and Service Charges Amount # of Items: + Cleared Balance (Total Sum of the Deposit Amount Cleared (A) – + Total Sum of Checks Amount Cleared (B)) + Difference= (Ending Balance – Beginning Balance) - cleared balance = + should be zero. + """ + account_precision = self.env['decimal.precision'].precision_get( + 'Account') + for statement in self: + for line in statement.credit_move_line_ids: + statement.sum_of_credits += \ + line.cleared_bank_account and \ + float_round(line.amount, account_precision) or 0.0 + statement.sum_of_credits_cur += \ + line.cleared_bank_account and \ + float_round(line.amountcur, account_precision) or 0.0 + statement.sum_of_credits_lines += \ + line.cleared_bank_account and 1 or 0 + statement.sum_of_ucredits += \ + (not line.cleared_bank_account) and \ + float_round(line.amount, account_precision) or 0.0 + statement.sum_of_ucredits_cur += \ + (not line.cleared_bank_account) and \ + float_round(line.amountcur, account_precision) or 0.0 + statement.sum_of_ucredits_lines += \ + (not line.cleared_bank_account) and 1 or 0 + for line in statement.debit_move_line_ids: + statement.sum_of_debits += \ + line.cleared_bank_account and \ + float_round(line.amount, account_precision) or 0.0 + statement.sum_of_debits_cur += \ + line.cleared_bank_account and \ + float_round(line.amountcur, account_precision) or 0.0 + statement.sum_of_debits_lines += \ + line.cleared_bank_account and 1 or 0 + statement.sum_of_udebits += \ + (not line.cleared_bank_account) and \ + float_round(line.amount, account_precision) or 0.0 + statement.sum_of_udebits_cur += \ + (not line.cleared_bank_account) and \ + float_round(line.amountcur, account_precision) or 0.0 + statement.sum_of_udebits_lines += \ + (not line.cleared_bank_account) and 1 or 0 + statement.cleared_balance = float_round( + statement.sum_of_debits - statement.sum_of_credits, + account_precision) + statement.cleared_balance_cur = float_round( + statement.sum_of_debits_cur - statement.sum_of_credits_cur, + account_precision) + statement.difference = \ + float_round((statement.ending_balance - + statement.starting_balance) - + statement.cleared_balance, account_precision) + statement.difference_cur = \ + float_round((statement.ending_balance - + statement.starting_balance) - + statement.cleared_balance_cur, account_precision) + statement.uncleared_balance = float_round( + statement.sum_of_udebits - statement.sum_of_ucredits, + account_precision) + statement.uncleared_balance_cur = float_round( + statement.sum_of_udebits_cur - statement.sum_of_ucredits_cur, + account_precision) + + # refresh data + @api.multi + def refresh_record(self): + retval = True + refdict = {} + # get current state of moves in the statement + for statement in self: + if statement.state == 'draft': + for cr_item in statement.credit_move_line_ids: + if cr_item.move_line_id and cr_item.cleared_bank_account: + refdict[cr_item.move_line_id.id] = \ + cr_item.cleared_bank_account + for dr_item in statement.debit_move_line_ids: + if dr_item.move_line_id and dr_item.cleared_bank_account: + refdict[dr_item.move_line_id.id] = \ + dr_item.cleared_bank_account + + # for the statement + for statement in self: + # process only if the statement is in draft state + if statement.state == 'draft': + vals = statement.onchange_account_id() + # list of credit lines + outlist = [] + for cr_item in vals['value']['credit_move_line_ids']: + cr_item['cleared_bank_account'] = refdict and refdict.get( + cr_item['move_line_id'], False) or False + cr_item['research_required'] = False + item = [0, False, cr_item] + outlist.append(item) + # list of debit lines + inlist = [] + for dr_item in vals['value']['debit_move_line_ids']: + dr_item['cleared_bank_account'] = refdict and refdict.get( + dr_item['move_line_id'], False) or False + dr_item['research_required'] = False + item = [0, False, dr_item] + inlist.append(item) + # write it to the record so it is visible on the form + retval = self.write( + {'last_ending_date': vals['value']['last_ending_date'], + 'starting_balance': vals['value']['starting_balance'], + 'credit_move_line_ids': outlist, + 'debit_move_line_ids': inlist}) + return retval + + # get starting balance for the account + @api.multi + def get_starting_balance(self, account_id, ending_date): + result = (False, 0.0) + reslist = [] + statement_obj = self.env['bank.acc.rec.statement'] + domain = [('account_id', '=', account_id), ('state', '=', 'done')] + # get all statements for this account in the past + for statement in statement_obj.search(domain): + if statement.ending_date < ending_date: + reslist.append( + (statement.ending_date, statement.ending_balance)) + # get the latest statement value + if len(reslist): + reslist = sorted(reslist, key=itemgetter(0)) + result = reslist[len(reslist) - 1] + return result + + @api.onchange('account_id', 'ending_date', 'suppress_ending_date_filter') + def onchange_account_id(self): + account_move_line_obj = self.env['account.move.line'] + statement_line_obj = self.env['bank.acc.rec.statement.line'] + val = { + 'value': {'credit_move_line_ids': [], 'debit_move_line_ids': []}} + if self.ending_date and self.account_id: + for statement in self: + statement_line_ids = statement_line_obj.search( + [('statement_id', '=', statement.id)]) + # call unlink method to reset and + # remove existing statement lines and + # mark reset field values in related move lines + statement_line_ids.unlink() + # Apply filter on move lines to allow + # 1. credit and debit side journal items in posted state of + # the selected GL account + # 2. Journal items which are not cleared in + # previous bank statements + # 3. Date less than or equal to ending date provided the + # 'Suppress Ending Date Filter' is not checkec + domain = [('account_id', '=', self.account_id.id), + ('move_id.state', '=', 'posted'), + ('cleared_bank_account', '=', False)] + if not self.suppress_ending_date_filter: + domain += [('date', '<=', self.ending_date)] + for line in account_move_line_obj.search(domain): + amount_currency = (line.amount_currency < 0) and ( + -1 * line.amount_currency) or line.amount_currency + res = { + 'ref': line.ref, + 'date': line.date, + 'partner_id': line.partner_id.id, + 'currency_id': line.currency_id.id, + 'amount': line.credit or line.debit, + 'amountcur': amount_currency, + 'name': line.name or line.ref, + 'move_line_id': line.id, + 'type': line.credit and 'cr' or 'dr'} + if res['type'] == 'cr': + val['value']['credit_move_line_ids'].append(res) + else: + val['value']['debit_move_line_ids'].append(res) + # look for previous statement for the account to + # pull ending balance as starting balance + prev_stmt = self.get_starting_balance(self.account_id.id, + self.ending_date) + val['value']['last_ending_date'] = prev_stmt[0] + val['value']['starting_balance'] = prev_stmt[1] + return val + + def get_default_company_id(self): + return self.env['res.users'].browse([self.env.uid]).company_id.id + + name = fields.Char('Name', required=True, size=64, + states={'done': [('readonly', True)]}, + help="This is a unique name identifying " + "the statement (e.g. Bank X January 2012).") + account_id = fields.Many2one('account.account', 'Account', required=True, + states={'done': [('readonly', True)]}, + domain="[('company_id', '=', company_id)]", + help="The Bank/Gl Account that is being " + "reconciled.") + ending_date = fields.Date('Ending Date', required=True, + states={'done': [('readonly', True)]}, + default=time.strftime('%Y-%m-%d'), + help="The ending date of your bank statement.") + last_ending_date = fields.Date('Last Stmt Date', + help="The previous statement date " + "of your bank statement.") + starting_balance = fields.Float('Starting Balance', required=True, + digits=dp.get_precision('Account'), + help="The Starting Balance on your " + "bank statement.", + states={'done': [('readonly', True)]}) + ending_balance = fields.Float('Ending Balance', required=True, + digits=dp.get_precision('Account'), + help="The Ending Balance on your " + "bank statement.", + states={'done': [('readonly', True)]}) + company_id = fields.Many2one('res.company', 'Company', required=True, + readonly=True, default=get_default_company_id, + help="The Company for which the " + "deposit ticket is made to") + notes = fields.Text('Notes') + verified_date = fields.Date('Verified Date', + states={'done': [('readonly', True)]}, + copy=False, + help="Date in which Deposit " + "Ticket was verified.") + verified_by_user_id = fields.Many2one('res.users', 'Verified By', + states={ + 'done': [('readonly', True)]}, + copy=False, + help="Entered automatically by " + "the “last user” who saved it. " + "System generated.") + credit_move_line_ids = fields.One2many('bank.acc.rec.statement.line', + 'statement_id', 'Credits', + copy=False, + domain=[('type', '=', 'cr')], + states={ + 'done': [('readonly', True)]}) + debit_move_line_ids = fields.One2many('bank.acc.rec.statement.line', + 'statement_id', 'Debits', + copy=False, + domain=[('type', '=', 'dr')], + states={ + 'done': [('readonly', True)]}) + cleared_balance = fields.Float(compute='_compute_get_balance', + string='Cleared Balance', + digits=dp.get_precision('Account'), + help="Total Sum of the Deposit Amount " + "Cleared – Total Sum of Checks, " + "Withdrawals, Debits, and Service " + "Charges Amount Cleared") + difference = fields.Float(compute='_compute_get_balance', + string='Difference', + digits=dp.get_precision('Account'), + help="(Ending Balance – Beginning Balance) - " + "Cleared Balance.") + cleared_balance_cur = fields.Float(compute='_compute_get_balance', + string='Cleared Balance (Cur)', + digits=dp.get_precision('Account'), + help="Total Sum of the Deposit " + "Amount Cleared – Total Sum of " + "Checks, Withdrawals, Debits, and" + " Service Charges Amount Cleared") + difference_cur = fields.Float(compute='_compute_get_balance', + string='Difference (Cur)', + digits=dp.get_precision('Account'), + help="(Ending Balance – Beginning Balance)" + " - Cleared Balance.") + uncleared_balance = fields.Float(compute='_compute_get_balance', + string='Uncleared Balance', + digits=dp.get_precision('Account'), + help="Total Sum of the Deposit " + "Amount Uncleared – Total Sum of " + "Checks, Withdrawals, Debits, and" + " Service Charges Amount Uncleared") + uncleared_balance_cur = fields.Float(compute='_compute_get_balance', + string='Unleared Balance (Cur)', + digits=dp.get_precision('Account'), + help="Total Sum of the Deposit Amount" + " Uncleared – Total Sum of " + "Checks, Withdrawals, Debits, " + "and Service Charges " + "Amount Uncleared") + sum_of_credits = fields.Float(compute='_compute_get_balance', + string='Checks, Withdrawals, Debits, and' + ' Service Charges Amount', + digits=dp.get_precision('Account'), + type='float', + help="Total SUM of Amts of lines with" + " Cleared = True") + sum_of_debits = fields.Float(compute='_compute_get_balance', + string='Deposits, Credits, and ' + 'Interest Amount', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines with " + "Cleared = True") + sum_of_credits_cur = fields.Float(compute='_compute_get_balance', + string='Checks, Withdrawals, Debits, and' + ' Service Charges Amount (Cur)', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines " + "with Cleared = True") + sum_of_debits_cur = fields.Float(compute='_compute_get_balance', + string='Deposits, Credits, and ' + 'Interest Amount (Cur)', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines " + "with Cleared = True") + sum_of_credits_lines = fields.Integer(compute='_compute_get_balance', + string='''Checks, Withdrawals, + Debits, and Service Charges # of + Items''', + help="Total of number of lines with " + "Cleared = True") + sum_of_debits_lines = fields.Integer(compute='_compute_get_balance', + string='''Deposits, Credits, and + Interest # of Items''', + help="Total of number of lines with" + " Cleared = True") + sum_of_ucredits = fields.Float(compute='_compute_get_balance', + string='Uncleared - Checks, Withdrawals, ' + 'Debits, and Service Charges Amount', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines with " + "Cleared = False") + sum_of_udebits = fields.Float(compute='_compute_get_balance', + string='Uncleared - Deposits, Credits, ' + 'and Interest Amount', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines with " + "Cleared = False") + sum_of_ucredits_cur = fields.Float(compute='_compute_get_balance', + string='Uncleared - Checks, ' + 'Withdrawals, Debits, and ' + 'Service Charges Amount (Cur)', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines " + "with Cleared = False") + sum_of_udebits_cur = fields.Float(compute='_compute_get_balance', + string='Uncleared - Deposits, Credits, ' + 'and Interest Amount (Cur)', + digits=dp.get_precision('Account'), + help="Total SUM of Amts of lines with" + " Cleared = False") + sum_of_ucredits_lines = fields.Integer(compute='_compute_get_balance', + string='Uncleared - Checks, ' + 'Withdrawals, Debits, and ' + 'Service Charges # of Items', + help="Total of number of lines with" + " Cleared = False") + sum_of_udebits_lines = fields.Integer(compute='_compute_get_balance', + string='''Uncleared - Deposits, + Credits, and Interest # of Items''', + help="Total of number of lines " + "with Cleared = False") + suppress_ending_date_filter = fields.Boolean('Remove Ending Date Filter', + help="If this is checked then" + " the Statement End Date" + " filter on the " + "transactions below will" + " not occur. All " + "transactions would " + "come over.") + state = fields.Selection([ + ('draft', 'Draft'), + ('to_be_reviewed', 'Ready for Review'), + ('done', 'Done'), + ('cancel', 'Cancelled') + ], 'State', index=True, readonly=True, default='draft') + + _sql_constraints = [ + ('name_company_uniq', 'unique (name, company_id, account_id)', + 'The name of the statement must be unique per ' + 'company and G/L account!') + ] + + @api.multi + def copy(self, default=None): + for rec in self: + if default is None: + default = {} + if 'name' not in default: + default['name'] = _("%s (copy)") % rec.name + return super(BankAccRecStatement, self).copy(default=default) + + +class BankAccRecStatementLine(models.Model): + _name = "bank.acc.rec.statement.line" + _description = "Statement Line" + + name = fields.Char('Name', size=64, + help="Derived from the related Journal Item.", + required=True) + ref = fields.Char('Reference', size=64, + help="Derived from related Journal Item.") + partner_id = fields.Many2one('res.partner', string='Partner', + help="Derived from related Journal Item.") + amount = fields.Float('Amount', digits=dp.get_precision('Account'), + help="Derived from the 'debit' amount from " + "related Journal Item.") + amountcur = fields.Float('Amount in Currency', + digits=dp.get_precision('Account'), + help="Derived from the 'amount currency' " + "amount from related Journal Item.") + date = fields.Date('Date', required=True, + help="Derived from related Journal Item.") + statement_id = fields.Many2one('bank.acc.rec.statement', 'Statement', + required=True, ondelete='cascade') + move_line_id = fields.Many2one('account.move.line', 'Journal Item', + help="Related Journal Item.") + cleared_bank_account = fields.Boolean('Cleared? ', + help='Check if the transaction has ' + 'cleared from the bank') + research_required = fields.Boolean('Research Required? ', + help='Check if the transaction should ' + 'be researched by ' + 'Accounting personal') + currency_id = fields.Many2one('res.currency', 'Currency', + help="The optional other currency if " + "it is a multi-currency entry.") + type = fields.Selection([('dr', 'Debit'), ('cr', 'Credit')], 'Cr/Dr') + + @api.model + def create(self, vals): + account_move_line_obj = self.env['account.move.line'] + # Prevent manually adding new statement line. + # This would allow only onchange method to pre-populate statement lines + # based on the filter rules. + if not vals.get('move_line_id', False): + raise UserError(_( + "You cannot add any new bank statement line manually " + "as of this revision!")) + account_move_line_obj.browse([vals['move_line_id']]).write( + {'draft_assigned_to_statement': True}) + return super(BankAccRecStatementLine, self).create(vals) + + @api.multi + def unlink(self): + account_move_line_obj = self.env['account.move.line'] + move_line_ids = [x.move_line_id.id for x in self if x.move_line_id] + # map(lambda x: x.move_line_id.id if x.move_line_id, + # self.browse(cr, uid, ids, context=context)) + # Reset field values in move lines to be added later + account_move_line_obj.browse(move_line_ids).write( + {'draft_assigned_to_statement': False, + 'cleared_bank_account': False, + 'bank_acc_rec_statement_id': False}) + return super(BankAccRecStatementLine, self).unlink() diff --git a/account_banking_reconciliation/models/account_move_line.py b/account_banking_reconciliation/models/account_move_line.py new file mode 100644 index 00000000..6b43d851 --- /dev/null +++ b/account_banking_reconciliation/models/account_move_line.py @@ -0,0 +1,26 @@ +# Copyright (C) 2019 Open Source Integrators +# +# Copyright (C) 2011 NovaPoint Group LLC () +# Copyright (C) 2004-2010 OpenERP SA () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class AccountMoveLine(models.Model): + _inherit = 'account.move.line' + + cleared_bank_account = fields.Boolean(string='Cleared? ', + help='Check if the transaction ' + 'has cleared from the bank') + bank_acc_rec_statement_id = fields.Many2one('bank.acc.rec.statement', + string='Bank Acc Rec ' + 'Statement', + help="The Bank Acc Rec" + " Statement linked with " + "the journal item") + draft_assigned_to_statement = fields.Boolean(string='Assigned to ' + 'Statement? ', + help='Check if the move line' + ' is assigned to ' + 'statement lines') diff --git a/account_banking_reconciliation/readme/CONFIGURE.rst b/account_banking_reconciliation/readme/CONFIGURE.rst new file mode 100644 index 00000000..4907499f --- /dev/null +++ b/account_banking_reconciliation/readme/CONFIGURE.rst @@ -0,0 +1,6 @@ +To configure this module + +* Go to Settings and activate the developer mode +* Go to Settings > Users and Companies > Users +* Add users who will prepare the bank statements to the "Bank Statement Preparer" +* Add users who will verify them to the "Bank Statement Manager" group diff --git a/account_banking_reconciliation/readme/CONTRIBUTORS.rst b/account_banking_reconciliation/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..ba398eb5 --- /dev/null +++ b/account_banking_reconciliation/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Nova Point Group +* Balaji Kannan +* Bhavesh Odedra +* Sandeep Mangukiya +* Murtuza Saleh diff --git a/account_banking_reconciliation/readme/CREDITS.rst b/account_banking_reconciliation/readme/CREDITS.rst new file mode 100644 index 00000000..36ef7743 --- /dev/null +++ b/account_banking_reconciliation/readme/CREDITS.rst @@ -0,0 +1,3 @@ +* Nova Point Group +* Open Source Integrators +* Serpent Consulting Services Pvt. Ltd. diff --git a/account_banking_reconciliation/readme/DESCRIPTION.rst b/account_banking_reconciliation/readme/DESCRIPTION.rst new file mode 100644 index 00000000..ae971f07 --- /dev/null +++ b/account_banking_reconciliation/readme/DESCRIPTION.rst @@ -0,0 +1,129 @@ +This module is designed to provide an easy method in which Odoo accounting users +can manually reconcile/validate their financial transactions from their financial +institution/transaction providers (e.g. Paypal, A financial institution, google +wallet, etc) against Odoo GL Chart of Account bank accounts. + +Users will be able to validate and indicate if a transaction has "Cleared the +Bank" using a checkmark on a new Reconcile Financial Account Statement view on +each individual financial transaction. Users will also be able to mark +transactions on a bank account for future research. + +The idea is that as a first step users will manually look at their paper statement +and line-by-line check off which financial transactions have cleared the bank in +Odoo using the new Bank Reconciliation Wizard. These changes will be displayed on +the new Reconcile Financial Account Statement tree view screen. This is the +process in which many companies reconcile (aka Audit) their bank account statements +and accounting system today and represents good segregation of duties. + +Users can save their in-process reconciliations. + +Background +---------- + +Using the search view filters - users will also be able to effectively sort, +filter the transactions on a particular GL Financial Account. This new screen +will display the journal items associated with a particular bank account. +Several of the field labels have been relabeled to a more common vernacular. + +The need for this module is driven by the following: + +* Users want to easily record whether bank transactions sent to their bank have + "cleared the bank"- definition of "cleared the bank": presented to the bank for + payment and paid by the bank - added/subtracted funds on a bank account. +* Users want the ability to validate if the bank processed the transactions them + correctly (e.g. properly encoded transaction - e.g. company sent a payment of + $20.20 to the bank. Was it processed for $20.20?). This can be considered + "Auditing the bank statement". We don't assume the bank correctly processed any + transaction. +* Users want to understand what payments they've made are still outstanding and + have not been paid by the bank. +* The financial auditing segregation standard of separating the duties of: + recording customer payments and making deposits; recording supplier payments + and writing checks; and monitoring bank account activity. This segregation of + duties is necessary to monitor and help prevent fraud. + +Assumptions +----------- + +#. Companies using Odoo have setup a one-to-one relationship between their + bank accounts and their Odoo GL accounts. Each bank account should have a + corresponding GL account that is not shared with another account. + Example: + + +----------------------+------------------------------------------------------------+ + | Odoo GL Account # | Corresponding Bank Account | + +======================+============================================================+ + | 10100 | Bank (AR) Account Checking 5434 (held at Institution A) | + +----------------------+------------------------------------------------------------+ + | 10200 | Master Bank Account 2343 (held at Institution A) | + +----------------------+------------------------------------------------------------+ + | 10300 | Bank Payable Account Checking 5678 (held at Institution A)| + +----------------------+------------------------------------------------------------+ + | 10400 | Bank Payroll Account 6656 (held at Institution B) | + +----------------------+------------------------------------------------------------+ + | 10500 | Paypal Account 3343 (held at Paypal) | + +----------------------+------------------------------------------------------------+ + | 10600 | Google Wallet Account 6788 | + +----------------------+------------------------------------------------------------+ + | 10700 | AMEX Corporate Card Account 9989 | + +----------------------+------------------------------------------------------------+ + +#. Companies have included a Non-Deposited Funds Account in their GL account + (typically in current assets in their bank account areas). This account is + used to store payments that have been recorded in Odoo - but not yet + deposited into the financial institution. (NOTE: this account is important to + have if the user "batches check deposits"- which is the process of making a + large single deposits of customer payment into the bank (e.g. $20,000USD), but + it is made up of smaller checks (e.g. 20 checks of $1,000 each). Many banks + just record the total deposit amount ($20,000) and don¬タルt provide the + breakdown of the individual checks that make up the larger deposit. This + setup approach enables users to drill down and see the individual checks that + make up a larger deposit. + +Recommendations +--------------- + +From a cash management and financial control perspective, it is recommended that +users establish the following four (4) bank accounts at their financial +institution at a minimum to handle financial transactions. (NOTE: we recommend +users place the last 4 digits of their bank account in the GL account name of the +account. It helps accountants in their management of the system): + +* Bank (AR) Account Checking 5434. This is a checking account designated as the + account where payments made to the company are deposited (e.g. a customer + payment made by check is deposited here, or a customer paying by electronic + transaction EFT/ACH is deposited into this GL). +* Master Bank Account 2343. This is the master account in which the company + keeps the majority of their funds. Often with the most limited access. +* Bank Payable Account Checking 5678. This is a checking account designated for + the company to pay their expenses from. (e.g. Company writes a check to pay a + supplier for their office supplies). +* Bank Payroll Account 6656. This is a checking account designated for a company + to pay their employees and payroll. + +Note +---- + +There has been common confusion in the Odoo community about managing bank +statements in the base Odoo system. This module hopes to alleviate this gap and +provide users with a sound alternative to maintain fiscal control, be easy to +understand, and allow for future growth. + +Why this approach? +------------------ + +Users in Odoo have several options in which to record financial transactions that +affect the balances of a bank account (GL Bank Account entries). We believe our +approach allows these to work in conjunction with each other: Import Electronic +Bank Statements to enter payments (this approach follows the philosophy that you +first find out that a transaction has occurred from your bank which is very +common in Europe due to the electronic nature of transactions). + +* Payment Order Payments (using the direct Method) - Payments are instantly recorded + and financial transactions posted into the GL +* Voucher Payments - Payments are instantly recorded and financial transactions + posted into the GL +* Sales Receipts/Refunds +* Transfers between accounts (a new module is being developed to help manage this) +* Funds moved from the Undeposited Funds GL account to a Bank Account GL account. +* Direct Journal Entries diff --git a/account_banking_reconciliation/readme/USAGE.rst b/account_banking_reconciliation/readme/USAGE.rst new file mode 100644 index 00000000..c38984e9 --- /dev/null +++ b/account_banking_reconciliation/readme/USAGE.rst @@ -0,0 +1,11 @@ +To use this module: + +* Go to Accounting > Adviser > Bank Statements +* Create a new bank statement +* Select the account and provide a name +* Enter the ending balance from the bank statement +* Check the transactions that cleared the bank +* Check the balances +* Save and submit for review +* As a reviewer, check the transactions, totals and balances +* Click on Process diff --git a/account_banking_reconciliation/report/bank_statement_report.xml b/account_banking_reconciliation/report/bank_statement_report.xml new file mode 100644 index 00000000..8b4be15a --- /dev/null +++ b/account_banking_reconciliation/report/bank_statement_report.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/account_banking_reconciliation/report/report_bank_statement_detail.xml b/account_banking_reconciliation/report/report_bank_statement_detail.xml new file mode 100644 index 00000000..99daf24f --- /dev/null +++ b/account_banking_reconciliation/report/report_bank_statement_detail.xml @@ -0,0 +1,484 @@ + + + + + + + + diff --git a/account_banking_reconciliation/report/report_bank_statement_summary.xml b/account_banking_reconciliation/report/report_bank_statement_summary.xml new file mode 100644 index 00000000..4c22f4b9 --- /dev/null +++ b/account_banking_reconciliation/report/report_bank_statement_summary.xml @@ -0,0 +1,298 @@ + + + + + + + + diff --git a/account_banking_reconciliation/security/account_banking_reconciliation.xml b/account_banking_reconciliation/security/account_banking_reconciliation.xml new file mode 100644 index 00000000..24363fa2 --- /dev/null +++ b/account_banking_reconciliation/security/account_banking_reconciliation.xml @@ -0,0 +1,30 @@ + + + + + + Bank Statement Preparer + + + + + + Bank Statement Verifier + + + + + + + + Bank Statements + + + + ['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id])] + + + + diff --git a/account_banking_reconciliation/security/ir.model.access.csv b/account_banking_reconciliation/security/ir.model.access.csv new file mode 100644 index 00000000..d630197c --- /dev/null +++ b/account_banking_reconciliation/security/ir.model.access.csv @@ -0,0 +1,5 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_bank_acc_rec_statement_preparer","access.bank.acc.rec.statement.preparer","model_bank_acc_rec_statement","group_bank_stmt_preparer",1,1,1,1 +"access_bank_acc_rec_statement_verifier","access.bank.acc.rec.statement.verifier","model_bank_acc_rec_statement","group_bank_stmt_verifier",1,1,1,1 +"access_bank_acc_rec_statement_line_preparer","access.bank.acc.rec.statement.line.preparer","model_bank_acc_rec_statement_line","group_bank_stmt_preparer",1,1,1,1 +"access_bank_acc_rec_statement_line_verifier","access.bank.acc.rec.statement.line.verifier","model_bank_acc_rec_statement_line","group_bank_stmt_verifier",1,1,1,1 diff --git a/account_banking_reconciliation/static/description/icon.png b/account_banking_reconciliation/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/account_banking_reconciliation/static/description/icon.png differ diff --git a/account_banking_reconciliation/static/description/index.html b/account_banking_reconciliation/static/description/index.html new file mode 100644 index 00000000..c4fc86aa --- /dev/null +++ b/account_banking_reconciliation/static/description/index.html @@ -0,0 +1,603 @@ + + + + + + +Bank Account Reconciliation + + + +
+

Bank Account Reconciliation

+ + +

License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runbot

+

This module is designed to provide an easy method in which Odoo accounting users +can manually reconcile/validate their financial transactions from their financial +institution/transaction providers (e.g. Paypal, A financial institution, google +wallet, etc) against Odoo GL Chart of Account bank accounts.

+

Users will be able to validate and indicate if a transaction has “Cleared the +Bank” using a checkmark on a new Reconcile Financial Account Statement view on +each individual financial transaction. Users will also be able to mark +transactions on a bank account for future research.

+

The idea is that as a first step users will manually look at their paper statement +and line-by-line check off which financial transactions have cleared the bank in +Odoo using the new Bank Reconciliation Wizard. These changes will be displayed on +the new Reconcile Financial Account Statement tree view screen. This is the +process in which many companies reconcile (aka Audit) their bank account statements +and accounting system today and represents good segregation of duties.

+

Users can save their in-process reconciliations.

+
+

Background

+

Using the search view filters - users will also be able to effectively sort, +filter the transactions on a particular GL Financial Account. This new screen +will display the journal items associated with a particular bank account. +Several of the field labels have been relabeled to a more common vernacular.

+

The need for this module is driven by the following:

+
    +
  • Users want to easily record whether bank transactions sent to their bank have +“cleared the bank”- definition of “cleared the bank”: presented to the bank for +payment and paid by the bank - added/subtracted funds on a bank account.
  • +
  • Users want the ability to validate if the bank processed the transactions them +correctly (e.g. properly encoded transaction - e.g. company sent a payment of +$20.20 to the bank. Was it processed for $20.20?). This can be considered +“Auditing the bank statement”. We don’t assume the bank correctly processed any +transaction.
  • +
  • Users want to understand what payments they’ve made are still outstanding and +have not been paid by the bank.
  • +
  • The financial auditing segregation standard of separating the duties of: +recording customer payments and making deposits; recording supplier payments +and writing checks; and monitoring bank account activity. This segregation of +duties is necessary to monitor and help prevent fraud.
  • +
+
+
+

Assumptions

+
    +
  1. Companies using Odoo have setup a one-to-one relationship between their +bank accounts and their Odoo GL accounts. Each bank account should have a +corresponding GL account that is not shared with another account. +Example:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Odoo GL Account #Corresponding Bank Account
    10100Bank (AR) Account Checking 5434 (held at Institution A)
    10200Master Bank Account 2343 (held at Institution A)
    10300Bank Payable Account Checking 5678 (held at Institution A)
    10400Bank Payroll Account 6656 (held at Institution B)
    10500Paypal Account 3343 (held at Paypal)
    10600Google Wallet Account 6788
    10700AMEX Corporate Card Account 9989
    +
  2. +
  3. Companies have included a Non-Deposited Funds Account in their GL account +(typically in current assets in their bank account areas). This account is +used to store payments that have been recorded in Odoo - but not yet +deposited into the financial institution. (NOTE: this account is important to +have if the user “batches check deposits”- which is the process of making a +large single deposits of customer payment into the bank (e.g. $20,000USD), but +it is made up of smaller checks (e.g. 20 checks of $1,000 each). Many banks +just record the total deposit amount ($20,000) and don¬タルt provide the +breakdown of the individual checks that make up the larger deposit. This +setup approach enables users to drill down and see the individual checks that +make up a larger deposit.

    +
  4. +
+
+
+

Recommendations

+

From a cash management and financial control perspective, it is recommended that +users establish the following four (4) bank accounts at their financial +institution at a minimum to handle financial transactions. (NOTE: we recommend +users place the last 4 digits of their bank account in the GL account name of the +account. It helps accountants in their management of the system):

+
    +
  • Bank (AR) Account Checking 5434. This is a checking account designated as the +account where payments made to the company are deposited (e.g. a customer +payment made by check is deposited here, or a customer paying by electronic +transaction EFT/ACH is deposited into this GL).
  • +
  • Master Bank Account 2343. This is the master account in which the company +keeps the majority of their funds. Often with the most limited access.
  • +
  • Bank Payable Account Checking 5678. This is a checking account designated for +the company to pay their expenses from. (e.g. Company writes a check to pay a +supplier for their office supplies).
  • +
  • Bank Payroll Account 6656. This is a checking account designated for a company +to pay their employees and payroll.
  • +
+
+
+

Note

+

There has been common confusion in the Odoo community about managing bank +statements in the base Odoo system. This module hopes to alleviate this gap and +provide users with a sound alternative to maintain fiscal control, be easy to +understand, and allow for future growth.

+
+
+

Why this approach?

+

Users in Odoo have several options in which to record financial transactions that +affect the balances of a bank account (GL Bank Account entries). We believe our +approach allows these to work in conjunction with each other: Import Electronic +Bank Statements to enter payments (this approach follows the philosophy that you +first find out that a transaction has occurred from your bank which is very +common in Europe due to the electronic nature of transactions).

+
    +
  • Payment Order Payments (using the direct Method) - Payments are instantly recorded +and financial transactions posted into the GL
  • +
  • Voucher Payments - Payments are instantly recorded and financial transactions +posted into the GL
  • +
  • Sales Receipts/Refunds
  • +
  • Transfers between accounts (a new module is being developed to help manage this)
  • +
  • Funds moved from the Undeposited Funds GL account to a Bank Account GL account.
  • +
  • Direct Journal Entries
  • +
+

Table of contents

+ +
+

Configuration

+

To configure this module

+
    +
  • Go to Settings and activate the developer mode
  • +
  • Go to Settings > Users and Companies > Users
  • +
  • Add users who will prepare the bank statements to the “Bank Statement Preparer”
  • +
  • Add users who will verify them to the “Bank Statement Manager” group
  • +
+
+
+

Usage

+

To use this module:

+
    +
  • Go to Accounting > Adviser > Bank Statements
  • +
  • Create a new bank statement
  • +
  • Select the account and provide a name
  • +
  • Enter the ending balance from the bank statement
  • +
  • Check the transactions that cleared the bank
  • +
  • Check the balances
  • +
  • Save and submit for review
  • +
  • As a reviewer, check the transactions, totals and balances
  • +
  • Click on Process
  • +
+
+
+

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

+
    +
  • NovaPoint Group LLC
  • +
  • Open Source Integrators
  • +
+
+ +
+

Other credits

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

max3903

+

This module is part of the OCA/account-reconcile project on GitHub.

+

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

+
+
+
+
+ + diff --git a/account_banking_reconciliation/views/account_banking_reconciliation.xml b/account_banking_reconciliation/views/account_banking_reconciliation.xml new file mode 100644 index 00000000..3e91c2bf --- /dev/null +++ b/account_banking_reconciliation/views/account_banking_reconciliation.xml @@ -0,0 +1,315 @@ + + + + + + bank.acc.rec.statement.tree + bank.acc.rec.statement + tree + 2 + + + + + + + + + + + + + bank.acc.rec.statement.form + bank.acc.rec.statement + form + +
+
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + +