Skip to content

Commit

Permalink
[ADD][8.0] module "bank_statement_reconciliation_summary"
Browse files Browse the repository at this point in the history
  • Loading branch information
JordiBForgeFlow committed May 31, 2016
1 parent 0eb262e commit 2994f9e
Show file tree
Hide file tree
Showing 15 changed files with 693 additions and 0 deletions.
141 changes: 141 additions & 0 deletions bank_statement_reconciliation_summary/README.rst
@@ -0,0 +1,141 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

=====================================
Bank Statement Reconciliation Summary
=====================================

The Bank Reconciliation Summary shows how your actual bank statement balance
and the balance of the bank account in Odoo match, after taking into account
any unreconciled items.

This report is useful if your bank account's statement balance and balance
in Odoo do not match, and you need to check for duplicate or manually created
transactions that might cause the discrepancy.

This report was created, inspired by Xero’s bank reconciliation summary,
https://help.xero.com/Report_BankRec, and from a basic explanation of the
bank statement reconciliation summary:
http://www.accountingcoach.com/bank-reconciliation/explanation.


Usage
=====

Define Accounts
---------------
There are three accounts associated to a bank account:
* Bank account view
* Bank Account. Matches the statement
* Bank Clearing Account. Is used for uncleared payments and receipts. The
Bank Clearing Account is a reconcilable account.

In the definition of the bank account that is used to match with the bank
statement, define what will be the GL account used to record the uncleared
payments and receipts.

Define Account Journals
-----------------------
Create the following journals:
* Journal for Bank Statement reconciliation
* Journal to enter Payments and Receipts that have not yet cleared to the bank


Enter payments and receipts
---------------------------
Every time an invoice is paid, use the Journal to enter Payments and Receipts.
It will generate:
Dr. Accounts Payable
Cr. Bank Clearing Account

Create a bank statement
-----------------------
Create a bank statement and select the Journal defined for bank statement
reconciliation.

If you do not use a tool to integrate automatically the bank statement feed
into Odoo, you can press press the button “Import Payments and Receipts”
in order to add to the statements the payments and receipts that have been
generated, but that have not yet cleared the bank.

Use the “Reconcile” button to reconcile the entries in the bank statement
with the payments and receipts that have already cleared the bank.

If you chose to import the statement lines from uncleared payments and
receipts, this will be the moment where you will visually compare with the
online/paper bank statement, and reconcile the items that truly cleared the
bank.

The Odoo Bank Reconciliation Wizard will be used by the user to specifically
create the Bank Account entries by linking the Bank Statement lines with the
Bank Clearing Account items.

Dr. Bank Clearing Account
Cr. Bank Account

Once you have completed this process, some statement lines may be left
unreconciled (because they were truly not present in the online/physical
statement). In that case you can press the button “Remove Unreconciled”.

Print bank statement reconciliation summary
-------------------------------------------
It will report on the current balance of the Bank Account, and will show the
unreconciled entries of the Bank Clearing Account, classifying the them
between Outstanding Payments (that is, credits in the Bank Clearing Account)
and Outstanding Receipts (that is, debits in the Bank Clearing Account).

The application will also show the bank statement lines that have not yet
been reconciled yet, if any exists.

Once the user has fully processed the reconciliation with the bank clearing
account, all the entries in this bank clearing account should be reconciled,
and the bank account (used to match with the Statement) will truly
reflect the same information as the bank statement balance.

From a bank account perspective, the total amount held in the bank is the
sum of the balances of the bank clearing account (which should normally
show undeposited checks, for example) and the bank account used to match
with the statement.


.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/91/8.0


Known issues / Roadmap
======================

* For Odoo v9 there will be no need to use the clearing account.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-financial-reporting/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
`here <https://github.com/OCA/account-financial-reporting/issues/new?body=module:%20account_tax_report_no_zeroes%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Credits
=======

Contributors
------------

* Jordi Ballester Alomar <contact@eficent.com>

Maintainer
----------

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

This module is maintained by the OCA.

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.

To contribute to this module, please visit http://odoo-community.org.
8 changes: 8 additions & 0 deletions bank_statement_reconciliation_summary/__init__.py
@@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

import models
import report
import wizard
21 changes: 21 additions & 0 deletions bank_statement_reconciliation_summary/__openerp__.py
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
'name': 'Bank Statement Reconciliation Summary',
'category': 'Account',
'summary': 'Bank Statement Reconciliation Summary',
'version': '8.0.1.0.0',
'author': 'Eficent Business and IT Consulting Services S.L., '
'Serpent Consulting Services Pvt. Ltd.',
'depends': ['account'],
'data': [
'report/summary_report.xml',
'report/report.xml',
'view/account_account_view.xml',
'wizard/account_bank_unreconcile_view.xml',
'view/account_bank_statement.xml',
],
'installable': True,
}
6 changes: 6 additions & 0 deletions bank_statement_reconciliation_summary/models/__init__.py
@@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import account_account
from . import account_bank_statement
12 changes: 12 additions & 0 deletions bank_statement_reconciliation_summary/models/account_account.py
@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from openerp import models, fields


class AccountAccount(models.Model):
_inherit = 'account.account'

clearing_account_id = fields.Many2one('account.account',
'Clearing Account')
@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from openerp import api, fields, models


class AccountBankStatement(models.Model):
_inherit = 'account.bank.statement'

@api.multi
def delete_unreconciled(self):
self.ensure_one()
for line in self.line_ids:
if not line.journal_entry_id:
line.unlink()


class AccountBankStatementLine(models.Model):
_inherit = 'account.bank.statement.line'

clearing_move_line_id = fields.Many2one('account.move.line',
'Clearing Move Line')
5 changes: 5 additions & 0 deletions bank_statement_reconciliation_summary/report/__init__.py
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import summary_report
33 changes: 33 additions & 0 deletions bank_statement_reconciliation_summary/report/report.xml
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>

<record id="summary_report_paperformat" model="report.paperformat">
<field name="name">Bank Statement Reconcillation Summary Paperformat</field>
<field name="default" eval="True" />
<field name="format">A4</field>
<field name="page_height">0</field>
<field name="page_width">0</field>
<field name="orientation">Portrait</field>
<field name="margin_top">0</field>
<field name="margin_bottom">0</field>
<field name="margin_left">5</field>
<field name="margin_right">5</field>
<field name="header_line" eval="False" />
<field name="header_spacing">0</field>
<field name="dpi">90</field>
</record>

<report id="report_bank_stmt_reconcile_summary"
string="Bank Statement Reconcillation Summary"
model="account.bank.statement"
report_type="qweb-pdf"
file="bank_statement_reconciliation_summary.summary_report"
name="bank_statement_reconciliation_summary.summary_report"/>

<record id="report_bank_stmt_reconcile_summary" model="ir.actions.report.xml">
<field name="paperformat_id" ref="summary_report_paperformat"/>
</record>

</data>
</openerp>
63 changes: 63 additions & 0 deletions bank_statement_reconciliation_summary/report/summary_report.py
@@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
# © 2016 Eficent Business and IT Consulting Services S.L.
# © 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import time
from openerp import api, models


class SummaryReport(models.AbstractModel):
_name = 'report.bank_statement_reconciliation_summary.summary_report'

@api.model
def _plus_outstanding_payments(self, journal_record):
account_id = journal_record.default_credit_account_id and\
journal_record.default_credit_account_id.clearing_account_id and\
journal_record.default_credit_account_id.clearing_account_id.id
account_move_line_records = self.env['account.move.line'].search([
('account_id', '=', account_id),
('reconcile_id', '=', False),
('account_id.reconcile', '=', True),
('credit', '>', 0.00)
], order='date')
return account_move_line_records

@api.model
def _less_outstanding_receipts(self, journal_record):
account_id = journal_record.default_credit_account_id and\
journal_record.default_credit_account_id.clearing_account_id and\
journal_record.default_credit_account_id.clearing_account_id.id
account_move_line_records = self.env['account.move.line'].search([
('account_id', '=', account_id),
('reconcile_id', '=', False),
('account_id.reconcile', '=', True),
('debit', '>', 0.00)
], order='date')
return account_move_line_records

@api.model
def _plus_unreconciled_statement_lines(self, statement):
statement_lines = self.env['account.bank.statement.line'].browse()
for line in statement.line_ids:
if not line.journal_entry_id:
statement_lines += line
return statement_lines or False

@api.multi
def render_html(self, data=None):
Report = self.env['report']
report_name = 'bank_statement_reconciliation_summary.summary_report'
report = Report._get_report_from_name(report_name)
records = self.env['account.bank.statement'].browse(self.ids)
docargs = {
'doc_ids': self.ids,
'doc_model': report.model,
'data': data,
'docs': records,
'time': time,
'plus_outstanding_payments': self._plus_outstanding_payments,
'less_outstanding_receipts': self._less_outstanding_receipts,
'plus_unreconciled_statement_lines':
self._plus_unreconciled_statement_lines
}
return self.env['report'].render(report_name, docargs)

0 comments on commit 2994f9e

Please sign in to comment.