Merge PR #268 into 12.0

Signed-off-by max3903
pull/274/head
OCA-git-bot 2019-07-12 22:19:13 +00:00
commit e9c9723c21
25 changed files with 3738 additions and 1 deletions

View File

@ -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 <https://github.com/OCA/account-reconcile/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 <https://github.com/OCA/account-reconcile/issues/new?body=module:%20account_banking_reconciliation%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* NovaPoint Group LLC
* Open Source Integrators
Contributors
~~~~~~~~~~~~
* Nova Point Group <info@novapointgroup.com>
* Balaji Kannan <bkannan@opensourceintegrators.com>
* Bhavesh Odedra <bodedra@opensourceintegrators.com>
* Sandeep Mangukiya <smangukiya@opensourceintegrators.com>
* Murtuza Saleh <murtuza.saleh@serpentcs.com>
Other credits
~~~~~~~~~~~~~
* Nova Point Group <https://www.novapointgroup.com>
* Open Source Integrators <https://www.opensourceintegrators.com>
* Serpent Consulting Services Pvt. Ltd. <https://www.serpentcs.com>
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 <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-max3903|
This module is part of the `OCA/account-reconcile <https://github.com/OCA/account-reconcile/tree/12.0/account_banking_reconciliation>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models

View File

@ -0,0 +1,30 @@
# Copyright (C) 2019 Open Source Integrators
# <https://www.opensourceintegrators.com>
# Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>)
# Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>)
# 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"],
}

View File

@ -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 "<b>\n"
" <span>Cleared Balance</span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc
msgid "<b>\n"
" <span>Ending Balance</span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc
msgid "<b>\n"
" <span>Total Checks &amp; Payments\n"
" </span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc
msgid "<b>\n"
" <span>Total Cleared Transactions\n"
" </span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_detail_doc
msgid "<b>\n"
" <span>Total Deposits &amp;\n"
" Credits\n"
" </span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc
msgid "<b>\n"
" <span>Cleared Balance</span>\n"
" </b>"
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 "<b>\n"
" <span>Cleared Transactions</span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc
msgid "<b>\n"
" <span>Ending Balance:</span>\n"
" </b>"
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 "<b>\n"
" <span>Initial Balance:</span>\n"
" </b>"
msgstr ""
#. module: account_banking_reconciliation
#: model_terms:ir.ui.view,arch_db:account_banking_reconciliation.report_bank_statement_summary_doc
msgid "<b>\n"
" <span>Total Cleared Transactions</span>\n"
" </b>"
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 "<span>Checks &amp; Payments-</span>"
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 "<span>Deposits &amp; Credits-</span>"
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 "<span>Period Ending</span>"
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 ""

View File

@ -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

View File

@ -0,0 +1,613 @@
# Copyright (C) 2019 Open Source Integrators
# <https://www.opensourceintegrators.com>
# Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>)
# Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>)
# 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()

View File

@ -0,0 +1,26 @@
# Copyright (C) 2019 Open Source Integrators
# <https://www.opensourceintegrators.com>
# Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>)
# Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>)
# 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')

View File

@ -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

View File

@ -0,0 +1,5 @@
* Nova Point Group <info@novapointgroup.com>
* Balaji Kannan <bkannan@opensourceintegrators.com>
* Bhavesh Odedra <bodedra@opensourceintegrators.com>
* Sandeep Mangukiya <smangukiya@opensourceintegrators.com>
* Murtuza Saleh <murtuza.saleh@serpentcs.com>

View File

@ -0,0 +1,3 @@
* Nova Point Group <https://www.novapointgroup.com>
* Open Source Integrators <https://www.opensourceintegrators.com>
* Serpent Consulting Services Pvt. Ltd. <https://www.serpentcs.com>

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- QWeb Reports -->
<report id="bank_statement_detail" model="bank.acc.rec.statement"
string="Bank Statement-Detail" report_type="qweb-pdf"
name="account_banking_reconciliation.report_bank_statement_detail"
file="account_banking_reconciliation.report_bank_statement_detail"
attachment="'Detail Statement-'+(object.name)+'.pdf'"/>
<report id="bank_statement_summary" model="bank.acc.rec.statement"
string="Bank Statement-Summary" report_type="qweb-pdf"
name="account_banking_reconciliation.report_bank_statement_summary"
file="account_banking_reconciliation.report_bank_statement_summary"
attachment="'Summary Statement-'+(object.name)+'.pdf'"/>
</odoo>

View File

@ -0,0 +1,484 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_bank_statement_detail_doc">
<t t-call="web.external_layout">
<t t-set="o"
t-value="o.with_context({'lang':o.company_id.partner_id.lang})"/>
<div class="page">
<p style='text-align:center;'>
Reconciliation Detail
</p>
<h5 style='text-align:center;'>
<span>Period Ending</span>
<span t-field="o.ending_date"/>
</h5>
<div class="row">
<table class="table table-condensed"
t-if="not o.account_id.currency_id">
<thead>
<tr>
<th></th>
<th>Date</th>
<th class="text-center">Comment</th>
<th class="text-center">Partner</th>
<th class="text-center">Reference</th>
<th class="text-center">Cleared</th>
<th class="text-right">
<span t-field="o.company_id.currency_id.symbol"/>
</th>
<th class="text-right">
<span t-field="o.account_id.currency_id.symbol"/>
</th>
</tr>
</thead>
</table>
<table class="table table-condensed"
t-if="o.account_id.currency_id">
<thead>
<tr>
<th></th>
<th>Date</th>
<th class="text-center">Comment</th>
<th class="text-center">Partner</th>
<th class="text-center">Reference</th>
<th class="text-center">Cleared</th>
<th class="text-right">
<span t-field="o.company_id.currency_id.symbol"/>
</th>
<th class="text-right">Cleared</th>
</tr>
</thead>
</table>
<table class="table table-condensed"
t-if="not o.account_id.currency_id">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Initial Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.starting_balance"/>
</td>
</tr>
<tr>
<td>
<b>
<span>Cleared Transactions</span>
</b>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<b>
<span>Deposits &amp; Credits-</span>
<span t-field="o.sum_of_debits_lines"/>
items
</b>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed"
t-if="o.account_id.currency_id">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Initial Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.starting_balance"/>
</td>
</tr>
<tr>
<td>
<b>
<span>Cleared Transactions</span>
</b>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<b>
<span>Deposits &amp; Credits-</span>
<span t-field="o.sum_of_debits_lines"/>
items
</b>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed"
t-if="not o.account_id.currency_id">
<tbody class="invoice_tbody">
<tr t-foreach="o.debit_move_line_ids" t-as="debit"
t-if="debit.cleared_bank_account">
<td></td>
<td>
<span t-field="debit.date"/>
</td>
<td>
<span t-field="debit.name"/>
</td>
<td>
<span t-field="debit.partner_id.name"/>
</td>
<td>
<span t-field="debit.ref"/>
</td>
<td class="text-right">
<t t-if="debit.cleared_bank_account">
<input type="checkbox" checked="1"/>
</t>
</td>
<td class="text-right">
<span t-field="debit.amount"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-field="debit.amountcur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed"
t-if="o.account_id.currency_id">
<tbody class="invoice_tbody">
<tr t-foreach="o.debit_move_line_ids" t-as="debit"
t-if="debit.cleared_bank_account">
<td></td>
<td>
<span t-field="debit.date"/>
</td>
<td>
<span t-field="debit.name"/>
</td>
<td>
<span t-field="debit.partner_id.name"/>
</td>
<td>
<span t-field="debit.ref"/>
</td>
<td class="text-right">
<t t-if="debit.cleared_bank_account">
<input type="checkbox" checked="1"/>
</t>
</td>
<td class="text-right">
<span t-field="debit.amount"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<div t-if="not o.account_id.currency_id">
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Total Deposits &amp;
Credits
</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-if="o.sum_of_debits"
t-field="o.sum_of_debits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-if="o.sum_of_debits_cur"
t-field="o.sum_of_debits_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Checks &amp; Payments-</span>
<span t-field="o.sum_of_credits_lines"/>
items
</b>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div t-if="o.account_id.currency_id">
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Total Deposits &amp;
Credits
</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-if="o.sum_of_debits"
t-field="o.sum_of_debits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Checks &amp; Payments-</span>
<span t-field="o.sum_of_credits_lines"/>
items
</b>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<table class="table table-condensed"
t-if="not o.account_id.currency_id">
<tbody class="invoice_tbody">
<tr t-foreach="o.credit_move_line_ids"
t-as="credit"
t-if="credit.cleared_bank_account">
<td></td>
<td>
<span t-field="credit.date"/>
</td>
<td>
<span t-field="credit.name"/>
</td>
<td>
<span t-field="credit.partner_id.name"/>
</td>
<td>
<span t-field="credit.ref"/>
</td>
<td class="text-right">
<t t-if="credit.cleared_bank_account">
<input type="checkbox" checked="1"/>
</t>
</td>
<td class="text-right">
<span t-field="credit.amount"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-field="credit.amountcur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed"
t-if="o.account_id.currency_id">
<tbody class="invoice_tbody">
<tr t-foreach="o.credit_move_line_ids"
t-as="credit"
t-if="credit.cleared_bank_account">
<td></td>
<td>
<span t-field="credit.date"/>
</td>
<td>
<span t-field="credit.name"/>
</td>
<td>
<span t-field="credit.partner_id.name"/>
</td>
<td>
<span t-field="credit.ref"/>
</td>
<td class="text-right">
<t t-if="credit.cleared_bank_account">
<input type="checkbox" checked="1"/>
</t>
</td>
<td class="text-right">
<span t-field="credit.amount"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<div t-if="not o.account_id.currency_id">
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Total Checks &amp; Payments
</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-if="o.sum_of_credits"
t-field="o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-if="o.sum_of_credits_cur"
t-field="o.sum_of_credits_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Total Cleared Transactions
</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-esc="o.sum_of_debits - o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-esc="o.sum_of_debits_cur - o.sum_of_credits_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
<tr>
<td>
<b>
<span>Cleared Balance</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.cleared_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-field="o.cleared_balance_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
<tr>
<td>
<b>
<span>Ending Balance</span>
</b>
</td>
<td></td>
<td></td>
<td class="text-right">
<span t-field="o.ending_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
</div>
<div t-if="o.account_id.currency_id">
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Total Deposits &amp;
Credits
</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-if="o.sum_of_credits"
t-field="o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Total Cleared Transactions
</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-esc="o.sum_of_debits - o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
<tr>
<td>
<b>
<span>Cleared Balance</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.cleared_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
<tr>
<td>
<b>
<span>Ending Balance</span>
</b>
</td>
<td></td>
<td></td>
<td class="text-right">
<span t-field="o.ending_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</t>
</template>
<template id="report_bank_statement_detail">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="account_banking_reconciliation.report_bank_statement_detail_doc"
t-lang="o.company_id.partner_id.lang"/>
</t>
</t>
</template>
</odoo>

View File

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_bank_statement_summary_doc">
<t t-call="web.external_layout">
<t t-set="o"
t-value="o.with_context({'lang':o.company_id.partner_id.lang})"/>
<div class="page">
<p style='text-align:center;'>
Reconciliation Summary
</p>
<h5 style='text-align:center;'>
<span>Period Ending</span>
<span t-field="o.ending_date"/>
</h5>
<div class="row" t-if="not o.account_id.currency_id">
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Initial Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.starting_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td></td>
<td>
<b>
<span>Deposits &amp; Credits-</span>
<span t-field="o.sum_of_debits_lines"/>
items
</b>
</td>
<td class="text-right">
<span t-if="o.sum_of_debits"
t-field="o.sum_of_debits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-if="o.sum_of_debits_cur"
t-field="o.sum_of_debits_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td>
<b>
<span>Checks &amp; Payments-</span>
<span t-field="o.sum_of_credits_lines"/>
items
</b>
</td>
<td class="text-right">
<span t-if="o.sum_of_credits"
t-field="o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-if="o.sum_of_credits_cur"
t-field="o.sum_of_credits_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td></td>
<td>
<b>
<span>Total Cleared Transactions</span>
</b>
</td>
<td class="text-right">
<span t-esc="o.sum_of_debits - o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-esc="o.sum_of_debits_cur - o.sum_of_credits_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Cleared Balance</span>
</b>
</td>
<td class="text-right">
<span t-field="o.cleared_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-field="o.cleared_balance_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<b>
<span t-field="o.cleared_balance_cur"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</b>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Ending Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.ending_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
</div>
<div class="row" t-if="o.account_id.currency_id">
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Initial Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.starting_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Ending Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.ending_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td></td>
<td>
<b>
<span>Cleared Transactions</span>
</b>
</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td></td>
<td>
<b>
<span>Deposits &amp; Credits-</span>
<span t-field="o.sum_of_debits_lines"/>
items
</b>
</td>
<td></td>
<td class="text-right">
<span t-if="o.sum_of_debits"
t-field="o.sum_of_debits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td>
<b>
<span>Checks &amp; Payments-</span>
<span t-field="o.sum_of_credits_lines"/>
items
</b>
</td>
<td></td>
<td class="text-right">
<span t-if="o.sum_of_credits"
t-field="o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td></td>
<td>
<b>
<span>Total Cleared Transactions</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-esc="o.sum_of_debits - o.sum_of_credits"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td></td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Cleared Balance</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.cleared_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
<td class="text-right">
<span t-field="o.cleared_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
<table class="table table-condensed">
<tbody class="invoice_tbody">
<tr>
<td>
<b>
<span>Ending Balance:</span>
</b>
</td>
<td></td>
<td class="text-right">
<span t-field="o.ending_balance"
t-options='{"widget": "monetary", "display_currency": o.account_id.currency_id}'/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</t>
</template>
<template id="report_bank_statement_summary">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t
t-call="account_banking_reconciliation.report_bank_statement_summary_doc"
t-lang="o.company_id.partner_id.lang"/>
</t>
</t>
</template>
</odoo>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Groups - Bank Stmt Preparer , Bank Stmt Verifier -->
<record id="group_bank_stmt_preparer" model="res.groups">
<field name="name">Bank Statement Preparer</field>
<field name="category_id" ref="base.module_category_hidden"/>
<field name="implied_ids" eval="[(4, ref('account.group_account_user'))]"/>
</record>
<record id="group_bank_stmt_verifier" model="res.groups">
<field name="name">Bank Statement Verifier</field>
<field name="category_id" ref="base.module_category_hidden"/>
<field name="implied_ids" eval="[(4, ref('group_bank_stmt_preparer'))]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<!-- Security Rule for Bank Rec Stmts -->
<record id="comp_rule" model="ir.rule">
<field name="name">Bank Statements</field>
<field ref="model_bank_acc_rec_statement" name="model_id"/>
<field eval="True" name="global"/>
<field name="domain_force">
['|',
('company_id', '=', False),
('company_id', 'child_of', [user.company_id.id])]
</field>
</record>
</odoo>

View File

@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 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
3 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
4 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
5 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,603 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
<title>Bank Account Reconciliation</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="bank-account-reconciliation">
<h1 class="title">Bank Account Reconciliation</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/account-reconcile/tree/12.0/account_banking_reconciliation"><img alt="OCA/account-reconcile" src="https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/account-reconcile-12-0/account-reconcile-12-0-account_banking_reconciliation"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/98/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>Users can save their in-process reconciliations.</p>
<div class="section" id="background">
<h1>Background</h1>
<p>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.</p>
<p>The need for this module is driven by the following:</p>
<ul class="simple">
<li>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.</li>
<li>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 dont assume the bank correctly processed any
transaction.</li>
<li>Users want to understand what payments theyve made are still outstanding and
have not been paid by the bank.</li>
<li>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.</li>
</ul>
</div>
<div class="section" id="assumptions">
<h1>Assumptions</h1>
<ol class="arabic">
<li><p class="first">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:</p>
<table border="1" class="docutils">
<colgroup>
<col width="27%" />
<col width="73%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Odoo GL Account #</th>
<th class="head">Corresponding Bank Account</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>10100</td>
<td>Bank (AR) Account Checking 5434 (held at Institution A)</td>
</tr>
<tr><td>10200</td>
<td>Master Bank Account 2343 (held at Institution A)</td>
</tr>
<tr><td>10300</td>
<td>Bank Payable Account Checking 5678 (held at Institution A)</td>
</tr>
<tr><td>10400</td>
<td>Bank Payroll Account 6656 (held at Institution B)</td>
</tr>
<tr><td>10500</td>
<td>Paypal Account 3343 (held at Paypal)</td>
</tr>
<tr><td>10600</td>
<td>Google Wallet Account 6788</td>
</tr>
<tr><td>10700</td>
<td>AMEX Corporate Card Account 9989</td>
</tr>
</tbody>
</table>
</li>
<li><p class="first">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.</p>
</li>
</ol>
</div>
<div class="section" id="recommendations">
<h1>Recommendations</h1>
<p>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):</p>
<ul class="simple">
<li>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).</li>
<li>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.</li>
<li>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).</li>
<li>Bank Payroll Account 6656. This is a checking account designated for a company
to pay their employees and payroll.</li>
</ul>
</div>
<div class="section" id="note">
<h1>Note</h1>
<p>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.</p>
</div>
<div class="section" id="why-this-approach">
<h1>Why this approach?</h1>
<p>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).</p>
<ul class="simple">
<li>Payment Order Payments (using the direct Method) - Payments are instantly recorded
and financial transactions posted into the GL</li>
<li>Voucher Payments - Payments are instantly recorded and financial transactions
posted into the GL</li>
<li>Sales Receipts/Refunds</li>
<li>Transfers between accounts (a new module is being developed to help manage this)</li>
<li>Funds moved from the Undeposited Funds GL account to a Bank Account GL account.</li>
<li>Direct Journal Entries</li>
</ul>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="id7">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="id8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#id1">Configuration</a></h2>
<p>To configure this module</p>
<ul class="simple">
<li>Go to Settings and activate the developer mode</li>
<li>Go to Settings &gt; Users and Companies &gt; Users</li>
<li>Add users who will prepare the bank statements to the “Bank Statement Preparer”</li>
<li>Add users who will verify them to the “Bank Statement Manager” group</li>
</ul>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#id2">Usage</a></h2>
<p>To use this module:</p>
<ul class="simple">
<li>Go to Accounting &gt; Adviser &gt; Bank Statements</li>
<li>Create a new bank statement</li>
<li>Select the account and provide a name</li>
<li>Enter the ending balance from the bank statement</li>
<li>Check the transactions that cleared the bank</li>
<li>Check the balances</li>
<li>Save and submit for review</li>
<li>As a reviewer, check the transactions, totals and balances</li>
<li>Click on Process</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#id3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-reconcile/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/account-reconcile/issues/new?body=module:%20account_banking_reconciliation%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#id4">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#id5">Authors</a></h3>
<ul class="simple">
<li>NovaPoint Group LLC</li>
<li>Open Source Integrators</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#id6">Contributors</a></h3>
<ul class="simple">
<li>Nova Point Group &lt;<a class="reference external" href="mailto:info&#64;novapointgroup.com">info&#64;novapointgroup.com</a>&gt;</li>
<li>Balaji Kannan &lt;<a class="reference external" href="mailto:bkannan&#64;opensourceintegrators.com">bkannan&#64;opensourceintegrators.com</a>&gt;</li>
<li>Bhavesh Odedra &lt;<a class="reference external" href="mailto:bodedra&#64;opensourceintegrators.com">bodedra&#64;opensourceintegrators.com</a>&gt;</li>
<li>Sandeep Mangukiya &lt;<a class="reference external" href="mailto:smangukiya&#64;opensourceintegrators.com">smangukiya&#64;opensourceintegrators.com</a>&gt;</li>
<li>Murtuza Saleh &lt;<a class="reference external" href="mailto:murtuza.saleh&#64;serpentcs.com">murtuza.saleh&#64;serpentcs.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">
<h3><a class="toc-backref" href="#id7">Other credits</a></h3>
<ul class="simple">
<li>Nova Point Group &lt;<a class="reference external" href="https://www.novapointgroup.com">https://www.novapointgroup.com</a>&gt;</li>
<li>Open Source Integrators &lt;<a class="reference external" href="https://www.opensourceintegrators.com">https://www.opensourceintegrators.com</a>&gt;</li>
<li>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="https://www.serpentcs.com">https://www.serpentcs.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#id8">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/max3903"><img alt="max3903" src="https://github.com/max3903.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-reconcile/tree/12.0/account_banking_reconciliation">OCA/account-reconcile</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,315 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Bank Account Reconciliation Statement -->
<record id="view_bank_acc_rec_statement_tree" model="ir.ui.view">
<field name="name">bank.acc.rec.statement.tree</field>
<field name="model">bank.acc.rec.statement</field>
<field name="type">tree</field>
<field name="priority">2</field>
<field name="arch" type="xml">
<tree string="Bank Account Reconciliation Statements"
colors="grey:state=='cancel';blue:state in ('to_be_reviewed')">
<field name="name"/>
<field name="ending_date"/>
<field name="account_id"/>
<field name="verified_by_user_id"/>
<field name="state"/>
</tree>
</field>
</record>
<record id="view_bank_acc_rec_statement_form" model="ir.ui.view">
<field name="name">bank.acc.rec.statement.form</field>
<field name="model">bank.acc.rec.statement</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank Account Reconciliation Statement">
<header>
<button name="action_review" type="object" states="draft"
string="Submit for Review"
class="oe_highlight"/>
<button name="action_process" type="object"
states="to_be_reviewed"
string="Process"
class="oe_highlight"/>
<button name="action_cancel_draft" states="cancel,done"
string="Set to Draft" type="object"/>
<button name="action_cancel" type="object"
states="draft,to_be_reviewed"
string="Cancel"/>
<button name='refresh_record' string='Refresh'
confirm="Current edits in statement will be lost. Do you want to refresh?"
states="draft" type='object'/>
<field name="state" widget="statusbar" nolabel="1"/>
</header>
<sheet>
<div class="oe_title">
<h1>
<field name="name" placeholder="Enter Name"/>
</h1>
</div>
<group>
<group>
<field name="account_id"
placeholder="Select the account"/>
<field name="ending_date"
placeholder="Enter the ending date"/>
<field name="ending_balance"
placeholder="Enter the ending balance"/>
</group>
<group>
<field name="last_ending_date"
placeholder="Date of the last statement"
readonly="1" force_save="1"/>
<field name="starting_balance"
placeholder="Enter the starting balance"/>
<field name="suppress_ending_date_filter"/>
<field name="company_id"
groups="base.group_multi_company"
placeholder="Select the company"/>
</group>
</group>
<notebook colspan="5">
<page string="Journal Items">
<label for='account_label'
string='Deposits, Credits, and Interest'/>
<field colspan="4" mode="tree"
name="debit_move_line_ids"
nolabel="1" widget="one2many_list"
height="300">
<form string="Deposits, Credits, and Interest">
<group col="4">
<field name="cleared_bank_account"/>
<field name="date" readonly="1"
force_save="1"/>
<field name="name" readonly="1"
force_save="1"/>
<field name="ref" readonly="1"
force_save="1"/>
<field name="partner_id" readonly="1"
force_save="1"/>
<field name="amount" readonly="1"
force_save="1"/>
<field name="amountcur" readonly="1"
force_save="1"/>
<field name="currency_id" readonly="1"
force_save="1"/>
<field name="research_required"
readonly="1" force_save="1"/>
</group>
</form>
<tree string="Deposits, Credits, and Interest"
editable="top"
mute_additem="draft,to_be_reviewed,done, cancel"
create="0">
<field name="cleared_bank_account"/>
<field name="date" readonly="1"
force_save="1"/>
<field name="name" readonly="1"
force_save="1"/>
<field name="ref" readonly="1"/>
<field name="partner_id" readonly="1"
force_save="1"/>
<field name="amount" readonly="1"
force_save="1"/>
<field name="amountcur" readonly="1"
force_save="1"/>
<field name="currency_id" readonly="1"
force_save="1"/>
<field name="research_required"/>
<field name="move_line_id" readonly="1"
force_save="1"/>
</tree>
</field>
<label for='account_label2'
string='Checks, Withdrawals, Debits, and Service Charges'/>
<field colspan="4" mode="tree"
name="credit_move_line_ids"
nolabel="1" widget="one2many_list"
height="300">
<form string="Checks, Withdrawals, Debits, and Service Charges">
<group col="4">
<field name="cleared_bank_account"/>
<field name="date" readonly="1"
force_save="1"/>
<field name="name" readonly="1"
force_save="1"/>
<field name="ref" readonly="1"
force_save="1"/>
<field name="partner_id" readonly="1"
force_save="1"/>
<field name="amount" readonly="1"
force_save="1"/>
<field name="amountcur" readonly="1"
force_save="1"/>
<field name="currency_id" readonly="1"
force_save="1"/>
<field name="research_required"
readonly="1" force_save="1"/>
</group>
</form>
<tree string="Checks, Withdrawals, Debits, and Service Charges"
editable="top"
mute_additem="draft,to_be_reviewed,done, cancel"
create="0">
<field name="cleared_bank_account"/>
<field name="date" readonly="1"
force_save="1"/>
<field name="name" readonly="1"
force_save="1"/>
<field name="ref" readonly="1"
force_save="1"/>
<field name="partner_id" readonly="1"
force_save="1"/>
<field name="amount" readonly="1"
force_save="1"/>
<field name="amountcur" readonly="1"
force_save="1"/>
<field name="currency_id" readonly="1"
force_save="1"/>
<field name="research_required"/>
<field name="move_line_id" readonly="1"
force_save="1"/>
</tree>
</field>
<group col="2" colspan="1"
groups="account_banking_reconciliation.group_bank_stmt_verifier">
<button name="action_select_all"
confirm="Current edits in statement will be lost. Do you want to select all?"
type="object"
states="draft,to_be_reviewed"
string="Select All"
icon="fa-check"/>
<button name="action_unselect_all"
confirm="Current edits in statement will be lost. Do you want to unselect all?"
type="object"
states="draft,to_be_reviewed"
string="Unselect All"
icon="fa-close"/>
</group>
<group name="totals" string="Totals">
<group name="total1" string="Cleared">
<field name="sum_of_debits"/>
<field name="sum_of_debits_cur"/>
<field name="sum_of_debits_lines"/>
<field name="sum_of_credits"/>
<field name="sum_of_credits_cur"/>
<field name="sum_of_credits_lines"/>
</group>
<group name="total2" string="Uncleared">
<field name="sum_of_udebits"/>
<field name="sum_of_udebits_cur"/>
<field name="sum_of_udebits_lines"/>
<field name="sum_of_ucredits"/>
<field name="sum_of_ucredits_cur"/>
<field name="sum_of_ucredits_lines"/>
</group>
</group>
<group name="balances" string="Balances">
<group name="balance1" string="Cleared">
<field name="cleared_balance"/>
<field name="cleared_balance_cur"
attrs="{'invisible':[('cleared_balance_cur','=', 0.0)]}"/>
<field name="difference"/>
<field name="difference_cur"
attrs="{'invisible':[('cleared_balance_cur','=', 0.0)]}"/>
</group>
<group name="balance2" string="Uncleared">
<field name="uncleared_balance"/>
<field name="uncleared_balance_cur"
attrs="{'invisible':[('uncleared_balance_cur','=', 0.0)]}"/>
</group>
</group>
</page>
<page string="Other Information">
<group string="Tracking Information">
<group>
<field name="verified_by_user_id"
placeholder="Enter the user who verified"
readonly="1"/>
</group>
<group>
<field name="verified_date"
placeholder="Enter the verification date"
readonly="1"/>
</group>
</group>
</page>
<page string="Notes">
<field name="notes" nolabel="1"
placeholder="Enter notes about reconciliation"/>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="view_bank_acc_rec_statement_filter" model="ir.ui.view">
<field name="name">bank.acc.rec.statement.select</field>
<field name="model">bank.acc.rec.statement</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Bank Account Reconciliation Statements">
<filter name="draft" icon="terp-document-new" string="Draft"
domain="[('state','=','draft')]"
help="Statements that haven't yet been confirmed"/>
<filter name="to_be_reviewed" icon="terp-dolar" string="To be Reviewed"
domain="[('state','=','to_be_reviewed')]"
help="Statements that are ready for review"/>
<filter name="done" icon="terp-check" string="Done"
domain="[('state','=','done')]"
help="Statements that have been processed"/>
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="ending_date" select="1" string="Ending Date"/>
<field name="account_id" select="1"/>
<field name="verified_by_user_id" select="1">
<filter name="verified_by_user_id" domain="[('verified_by_user_id','=',uid)]"
help="Verified by me"
icon="terp-personal"/>
</field>
<newline/>
<group expand="0" string="Group By...">
<filter name="account_id" string="Account" icon="terp-personal" domain="[]"
context="{'group_by':'account_id'}"/>
<separator orientation="vertical"/>
<filter name="state" string="State"
icon="terp-stock_effects-object-colorize"
domain="[]" context="{'group_by':'state'}"/>
</group>
</search>
</field>
</record>
<record id="action_bank_acc_rec_statement" model="ir.actions.act_window">
<field name="name">Bank Statements</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">bank.acc.rec.statement</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_bank_acc_rec_statement_filter"/>
</record>
<menuitem id="bank_acc_rec_statement_menu"
icon="STOCK_JUSTIFY_FILL"
action="action_bank_acc_rec_statement"
parent="account.menu_finance_entries"
sequence="5"/>
<act_window id="act_account_move_line_to_add" name="Journal Items"
res_model="account.move.line"
src_model="bank.acc.rec.statement"/>
<act_window id="act_supplier_payment_to_add" name="Supplier Payment"
domain="[('voucher_type', 'in', ['bank', 'cash'])]"
context="{'type':'payment'}" res_model="account.voucher"
src_model="bank.acc.rec.statement"/>
<act_window id="act_customer_payment_to_add" name="Customer Payment"
domain="[('voucher_type', 'in', ['bank', 'cash'])]"
context="{'type':'receipt'}" res_model="account.voucher"
src_model="bank.acc.rec.statement"/>
</odoo>

View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--- Journal Items -->
<record id="view_account_move_line_bank_acc_rec_statement_id"
model="ir.ui.view">
<field name="name">account.move.line</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_account_move_line_filter"/>
<field name="type">search</field>
<field name="arch" type="xml">
<field name="move_id" position="after">
<field name="bank_acc_rec_statement_id"/>
</field>
<field name="move_id" position="before">
<filter name="uncleared_bank_account" icon="terp-document-new"
string="Uncleared Bank Account"
domain="[('cleared_bank_account','=',False)]"
help="Journal Entries not cleared"/>
<separator orientation="vertical"/>
</field>
</field>
</record>
<record id="view_account_move_line_bank_acc_rec_statement_id_form"
model="ir.ui.view">
<field name="name">account.move.line.form</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="statement_id" position="after">
<field name="bank_acc_rec_statement_id"/>
</field>
<field name="blocked" position="after">
<field name="cleared_bank_account"/>
</field>
</field>
</record>
</odoo>

View File

@ -1 +1 @@
12.0.20190517.0
12.0.20190712.0

View File

@ -8,6 +8,7 @@ setuptools.setup(
description="Meta package for oca-account-reconcile Odoo addons",
version=version,
install_requires=[
'odoo12-addon-account_banking_reconciliation',
'odoo12-addon-account_mass_reconcile',
'odoo12-addon-account_partner_reconcile',
'odoo12-addon-bank_statement_foreign_currency',

View File

@ -0,0 +1 @@
../../../../account_banking_reconciliation

View File

@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)