[WIP][MIG][11.0] account_banking_reconciliation

pull/268/head
Murtuza Saleh 2019-05-25 15:51:10 +05:30
parent 2e4c668d09
commit 253b8db6d4
13 changed files with 851 additions and 163 deletions

View File

@ -1,10 +1,29 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg ===========================
Bank Account Reconciliation
===========================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3 :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github
:target: https://github.com/OCA/account-reconcile/tree/11.0/account_banking_reconciliation
:alt: OCA/account-reconcile
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-reconcile-11-0/account-reconcile-11-0-account_banking_reconciliation
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/98/11.0
:alt: Try me on Runbot
============================= |badge1| |badge2| |badge3| |badge4| |badge5|
Bank Statement Reconciliation
=============================
This module is designed to provide an easy method in which Odoo accounting users This module is designed to provide an easy method in which Odoo accounting users
can manually reconcile/validate their financial transactions from their financial can manually reconcile/validate their financial transactions from their financial
@ -136,72 +155,52 @@ common in Europe due to the electronic nature of transactions).
* Funds moved from the Undeposited Funds GL account to a Bank Account GL account. * Funds moved from the Undeposited Funds GL account to a Bank Account GL account.
* Direct Journal Entries * Direct Journal Entries
Usage **Table of contents**
=====
* Go to Accounting .. contents::
:local:
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/98/10.0
Roadmap
=======
* Include a wizard to pre-filter the tree view, and include additional reports for
accountants. And include the ability to execute quick entry of common statement
related transactions such as recording bank service fees (an Expense), and
Interest Income Earned on the bank account (Income), when allowed by law.
Often, companies will print their reconciliation, staple it to their bank
statement and file the documents for future review and audit.
* Include more information to add further clarity throughout Odoo for financial
transactions, and include the ability to quickly compare an imported bank
statement with a GL Bank Account's recorded transaction, including
autoreconciling them - and providing the information available for review.
Bug Tracker Bug Tracker
=========== ===========
Bugs are tracked on `GitHub Issues Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-reconcile/issues>`_.
<https://github.com/OCA/bank-statement-reconcile/issues>`_. In case of trouble, please In case of trouble, please check there if your issue has already been reported.
check there if your issue has already been reported. If you spotted it first, If you spotted it first, help us smashing it by providing a detailed and welcomed
help us smash it by providing detailed and welcomed feedback. `feedback <https://github.com/OCA/account-reconcile/issues/new?body=module:%20account_banking_reconciliation%0Aversion:%2011.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 Credits
======= =======
Images Authors
------ ~~~~~~~
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_. * NovaPoint Group LLC
* Open Source Integrators
Contributors Contributors
------------ ~~~~~~~~~~~~
* Nova Point Group <info@novapointgroup.com> * Nova Point Group <info@novapointgroup.com>
* Balaji Kannan <bkannan@opensourceintegrators.com> * Balaji Kannan <bkannan@opensourceintegrators.com>
* Bhavesh Odedra <bodedra@opensourceintegrators.com> * Bhavesh Odedra <bodedra@opensourceintegrators.com>
* Sandeep Mangukiya <smangukiya@opensourceintegrators.com> * Sandeep Mangukiya <smangukiya@opensourceintegrators.com>
* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
Funders Maintainers
------- ~~~~~~~~~~~
The development of this module has been financially supported by: This module is maintained by the OCA.
* Nova Point Group <http://www.novapointgroup.com>
* Open Source Integrators <https://opensourceintegrators.com>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png .. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association :alt: Odoo Community Association
:target: https://odoo-community.org :target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and mission is to support the collaborative development of Odoo features and
promote its widespread use. promote its widespread use.
To contribute to this module, please visit https://odoo-community.org. This module is part of the `OCA/account-reconcile <https://github.com/OCA/account-reconcile/tree/11.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

@ -1,7 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2015 Ursa Information Systems (http://www.ursainfosystems.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). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import models from . import models

View File

@ -1,11 +1,11 @@
# -*- coding: utf-8 -*- # Copyright (C) 2019 Open Source Integrators
# Copyright (C) 2015 Ursa Information Systems (http://www.ursainfosystems.com>) # <https://www.opensourceintegrators.com>
# Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>) # Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>)
# Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>) # Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{ {
"name": "Bank Account Reconciliation", "name": "Bank Account Reconciliation",
"version": "10.0.1.0.0", "version": "11.0.1.0.0",
"license": "AGPL-3", "license": "AGPL-3",
"category": "Accounting and Financial Management", "category": "Accounting and Financial Management",
"author": "NovaPoint Group LLC, Open Source Integrators, " "author": "NovaPoint Group LLC, Open Source Integrators, "
@ -22,6 +22,5 @@
"report/bank_statement_report.xml", "report/bank_statement_report.xml",
"views/report_bank_statement_summary.xml", "views/report_bank_statement_summary.xml",
"views/report_bank_statement_detail.xml"], "views/report_bank_statement_detail.xml"],
"demo": [],
"installable": True, "installable": True,
} }

View File

@ -1,7 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2015 Ursa Information Systems (http://www.ursainfosystems.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). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import account_move_line from . import account_move_line

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # Copyright (C) 2019 Open Source Integrators
# Copyright (C) 2015 Ursa Information Systems (http://www.ursainfosystems.com>) # <https://www.opensourceintegrators.com>
# Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>) # Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>)
# Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>) # Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
@ -13,6 +13,10 @@ from odoo.tools.float_utils import float_round
class BankAccRecStatement(models.Model): class BankAccRecStatement(models.Model):
_name = "bank.acc.rec.statement"
_description = "Bank Acc Rec Statement"
_order = "ending_date desc"
@api.multi @api.multi
def check_group(self): def check_group(self):
"""Check if following security constraints are implemented for groups: """Check if following security constraints are implemented for groups:
@ -42,31 +46,17 @@ class BankAccRecStatement(models.Model):
"state!" % (group_verifier.name))) "state!" % (group_verifier.name)))
return True return True
@api.multi
def copy(self, default=None):
self.ensure_one()
if default is None:
default = {}
default.update({'credit_move_line_ids': [],
'debit_move_line_ids': [],
'name': ''})
return super(BankAccRecStatement, self).copy(default=default)
@api.multi @api.multi
def write(self, vals): def write(self, vals):
# Check if the user is allowed to perform the action # Check if the user is allowed to perform the action
self.check_group() self.check_group()
return super(BankAccRecStatement, self).write(vals) return super(BankAccRecStatement, self).write(vals)
@api.model @api.multi
def unlink(self): def unlink(self):
"""Reset the related account.move.line to be re-assigned later """Reset the related account.move.line to be re-assigned later
to statement.""" to statement."""
self.check_group() # Check if user is allowed to perform the action self.check_group() # Check if user is allowed to perform the action
for statement in self:
statement_lines = \
statement.credit_move_line_ids + statement.debit_move_line_ids
statement_lines.unlink() # call unlink method to reset
return super(BankAccRecStatement, self).unlink() return super(BankAccRecStatement, self).unlink()
@api.multi @api.multi
@ -224,7 +214,6 @@ class BankAccRecStatement(models.Model):
float_round(line.amountcur, account_precision) or 0.0 float_round(line.amountcur, account_precision) or 0.0
statement.sum_of_udebits_lines += \ statement.sum_of_udebits_lines += \
(not line.cleared_bank_account) and 1.0 or 0.0 (not line.cleared_bank_account) and 1.0 or 0.0
statement.cleared_balance = float_round( statement.cleared_balance = float_round(
statement.sum_of_debits - statement.sum_of_credits, statement.sum_of_debits - statement.sum_of_credits,
account_precision) account_precision)
@ -251,16 +240,13 @@ class BankAccRecStatement(models.Model):
def refresh_record(self): def refresh_record(self):
retval = True retval = True
refdict = {} refdict = {}
# get current state of moves in the statement # get current state of moves in the statement
for statement in self: for statement in self:
if statement.state == 'draft': if statement.state == 'draft':
for cr_item in statement.credit_move_line_ids: for cr_item in statement.credit_move_line_ids:
if cr_item.move_line_id and cr_item.cleared_bank_account: if cr_item.move_line_id and cr_item.cleared_bank_account:
refdict[cr_item.move_line_id.id] = \ refdict[cr_item.move_line_id.id] = \
cr_item.cleared_bank_account cr_item.cleared_bank_account
for dr_item in statement.debit_move_line_ids: for dr_item in statement.debit_move_line_ids:
if dr_item.move_line_id and dr_item.cleared_bank_account: if dr_item.move_line_id and dr_item.cleared_bank_account:
refdict[dr_item.move_line_id.id] = \ refdict[dr_item.move_line_id.id] = \
@ -268,61 +254,50 @@ class BankAccRecStatement(models.Model):
# for the statement # for the statement
for statement in self: for statement in self:
# process only if the statement is in draft state # process only if the statement is in draft state
if statement.state == 'draft': if statement.state == 'draft':
vals = statement.onchange_account_id() vals = statement.onchange_account_id()
# list of credit lines # list of credit lines
outlist = [] outlist = []
for cr_item in vals['value']['credit_move_line_ids']: for cr_item in vals['value']['credit_move_line_ids']:
cr_item['cleared_bank_account'] = refdict and refdict.get( cr_item['cleared_bank_account'] = refdict and refdict.get(
cr_item['move_line_id'], False) or False cr_item['move_line_id'], False) or False
cr_item['research_required'] = False cr_item['research_required'] = False
item = [0, False, cr_item] item = [0, False, cr_item]
outlist.append(item) outlist.append(item)
# list of debit lines # list of debit lines
inlist = [] inlist = []
for dr_item in vals['value']['debit_move_line_ids']: for dr_item in vals['value']['debit_move_line_ids']:
dr_item['cleared_bank_account'] = refdict and refdict.get( dr_item['cleared_bank_account'] = refdict and refdict.get(
dr_item['move_line_id'], False) or False dr_item['move_line_id'], False) or False
dr_item['research_required'] = False dr_item['research_required'] = False
item = [0, False, dr_item] item = [0, False, dr_item]
inlist.append(item) inlist.append(item)
# write it to the record so it is visible on the form # write it to the record so it is visible on the form
retval = self.write( retval = self.write(
{'last_ending_date': vals['value']['last_ending_date'], {'last_ending_date': vals['value']['last_ending_date'],
'starting_balance': vals['value']['starting_balance'], 'starting_balance': vals['value']['starting_balance'],
'credit_move_line_ids': outlist, 'credit_move_line_ids': outlist,
'debit_move_line_ids': inlist}) 'debit_move_line_ids': inlist})
return retval return retval
# get starting balance for the account # get starting balance for the account
@api.multi @api.multi
def get_starting_balance(self, account_id, ending_date): def get_starting_balance(self, account_id, ending_date):
result = (False, 0.0) result = (False, 0.0)
reslist = [] reslist = []
statement_obj = self.env['bank.acc.rec.statement'] statement_obj = self.env['bank.acc.rec.statement']
domain = [('account_id', '=', account_id), ('state', '=', 'done')] domain = [('account_id', '=', account_id), ('state', '=', 'done')]
statement_ids = statement_obj.search(domain).ids statement_ids = statement_obj.search(domain)
# get all statements for this account in the past # get all statements for this account in the past
for statement in statement_obj.browse(statement_ids): for statement in statement_ids:
if statement.ending_date < ending_date: if statement.ending_date < ending_date:
reslist.append( reslist.append(
(statement.ending_date, statement.ending_balance)) (statement.ending_date, statement.ending_balance))
# get the latest statement value # get the latest statement value
if len(reslist): if len(reslist):
reslist = sorted(reslist, key=itemgetter(0)) reslist = sorted(reslist, key=itemgetter(0))
result = reslist[len(reslist) - 1] result = reslist[len(reslist) - 1]
return result return result
@api.onchange('account_id', 'ending_date', 'suppress_ending_date_filter') @api.onchange('account_id', 'ending_date', 'suppress_ending_date_filter')
@ -339,7 +314,6 @@ class BankAccRecStatement(models.Model):
# remove existing statement lines and # remove existing statement lines and
# mark reset field values in related move lines # mark reset field values in related move lines
statement_line_ids.unlink() statement_line_ids.unlink()
# Apply filter on move lines to allow # Apply filter on move lines to allow
# 1. credit and debit side journal items in posted state of # 1. credit and debit side journal items in posted state of
# the selected GL account # the selected GL account
@ -352,9 +326,8 @@ class BankAccRecStatement(models.Model):
('cleared_bank_account', '=', False)] ('cleared_bank_account', '=', False)]
if not self.suppress_ending_date_filter: if not self.suppress_ending_date_filter:
domain += [('date', '<=', self.ending_date)] domain += [('date', '<=', self.ending_date)]
line_ids = account_move_line_obj.search(domain).ids line_ids = account_move_line_obj.search(domain)
for line in account_move_line_obj.browse(line_ids): for line in line_ids:
amount_currency = (line.amount_currency < 0) and ( amount_currency = (line.amount_currency < 0) and (
-1 * line.amount_currency) or line.amount_currency -1 * line.amount_currency) or line.amount_currency
res = { res = {
@ -364,29 +337,25 @@ class BankAccRecStatement(models.Model):
'currency_id': line.currency_id.id, 'currency_id': line.currency_id.id,
'amount': line.credit or line.debit, 'amount': line.credit or line.debit,
'amountcur': amount_currency, 'amountcur': amount_currency,
'name': line.name, 'name': line.name or line.ref,
'move_line_id': line.id, 'move_line_id': line.id,
'type': line.credit and 'cr' or 'dr'} 'type': line.credit and 'cr' or 'dr'}
if res['type'] == 'cr': if res['type'] == 'cr':
val['value']['credit_move_line_ids'].append(res) val['value']['credit_move_line_ids'].append(res)
else: else:
val['value']['debit_move_line_ids'].append(res) val['value']['debit_move_line_ids'].append(res)
# look for previous statement for the account to # look for previous statement for the account to
# pull ending balance as starting balance # pull ending balance as starting balance
prev_stmt = self.get_starting_balance(self.account_id.id, prev_stmt = self.get_starting_balance(self.account_id.id,
self.ending_date) self.ending_date)
val['value']['last_ending_date'] = prev_stmt[0] val['value']['last_ending_date'] = prev_stmt[0]
val['value']['starting_balance'] = prev_stmt[1] val['value']['starting_balance'] = prev_stmt[1]
return val return val
def get_default_company_id(self): def get_default_company_id(self):
return self.env['res.users'].browse([self.env.uid]).company_id.id return self.env['res.users'].browse([self.env.uid]).company_id.id
_name = "bank.acc.rec.statement" name = fields.Char('Name', required=True, size=64, copy=False, default='',
name = fields.Char('Name', required=True, size=64,
states={'done': [('readonly', True)]}, states={'done': [('readonly', True)]},
help="This is a unique name identifying " help="This is a unique name identifying "
"the statement (e.g. Bank X January 2012).") "the statement (e.g. Bank X January 2012).")
@ -429,11 +398,13 @@ class BankAccRecStatement(models.Model):
"System generated.") "System generated.")
credit_move_line_ids = fields.One2many('bank.acc.rec.statement.line', credit_move_line_ids = fields.One2many('bank.acc.rec.statement.line',
'statement_id', 'Credits', 'statement_id', 'Credits',
copy=False,
domain=[('type', '=', 'cr')], domain=[('type', '=', 'cr')],
states={ states={
'done': [('readonly', True)]}) 'done': [('readonly', True)]})
debit_move_line_ids = fields.One2many('bank.acc.rec.statement.line', debit_move_line_ids = fields.One2many('bank.acc.rec.statement.line',
'statement_id', 'Debits', 'statement_id', 'Debits',
copy=False,
domain=[('type', '=', 'dr')], domain=[('type', '=', 'dr')],
states={ states={
'done': [('readonly', True)]}) 'done': [('readonly', True)]})
@ -561,9 +532,8 @@ class BankAccRecStatement(models.Model):
('to_be_reviewed', 'Ready for Review'), ('to_be_reviewed', 'Ready for Review'),
('done', 'Done'), ('done', 'Done'),
('cancel', 'Cancel') ('cancel', 'Cancel')
], 'State', select=True, readonly=True, default='draft') ], 'State', index=True, readonly=True, default='draft')
_order = "ending_date desc"
_sql_constraints = [ _sql_constraints = [
('name_company_uniq', 'unique (name, company_id, account_id)', ('name_company_uniq', 'unique (name, company_id, account_id)',
'The name of the statement must be unique per ' 'The name of the statement must be unique per '
@ -574,6 +544,7 @@ class BankAccRecStatement(models.Model):
class BankAccRecStatementLine(models.Model): class BankAccRecStatementLine(models.Model):
_name = "bank.acc.rec.statement.line" _name = "bank.acc.rec.statement.line"
_description = "Statement Line" _description = "Statement Line"
name = fields.Char('Name', size=64, name = fields.Char('Name', size=64,
help="Derived from the related Journal Item.", help="Derived from the related Journal Item.",
required=True) required=True)
@ -620,7 +591,7 @@ class BankAccRecStatementLine(models.Model):
{'draft_assigned_to_statement': True}) {'draft_assigned_to_statement': True})
return super(BankAccRecStatementLine, self).create(vals) return super(BankAccRecStatementLine, self).create(vals)
@api.model @api.multi
def unlink(self): def unlink(self):
account_move_line_obj = self.env['account.move.line'] 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] move_line_ids = [x.move_line_id.id for x in self if x.move_line_id]

View File

@ -1,5 +1,5 @@
# -*- coding: utf-8 -*- # Copyright (C) 2019 Open Source Integrators
# Copyright (C) 2015 Ursa Information Systems (http://www.ursainfosystems.com>) # <https://www.opensourceintegrators.com>
# Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>) # Copyright (C) 2011 NovaPoint Group LLC (<http://www.novapointgroup.com>)
# Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>) # Copyright (C) 2004-2010 OpenERP SA (<http://www.openerp.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

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>
* Serpent Consulting Services Pvt. Ltd. <support@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,565 @@
<?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="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <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/11.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-11-0/account-reconcile-11-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/11.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="#bug-tracker" id="id1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id5">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#id1">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:%2011.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="#id2">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#id3">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="#id4">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>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="mailto:support&#64;serpentcs.com">support&#64;serpentcs.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#id5">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>This module is part of the <a class="reference external" href="https://github.com/OCA/account-reconcile/tree/11.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

@ -24,7 +24,7 @@
<field name="model">bank.acc.rec.statement</field> <field name="model">bank.acc.rec.statement</field>
<field name="type">form</field> <field name="type">form</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Bank Account Reconciliation Statement" version="7.0"> <form string="Bank Account Reconciliation Statement">
<header> <header>
<button name="action_cancel" type="object" <button name="action_cancel" type="object"
states="draft,to_be_reviewed" states="draft,to_be_reviewed"
@ -54,7 +54,7 @@
placeholder="Enter Ending Balance"/> placeholder="Enter Ending Balance"/>
<field name="last_ending_date" <field name="last_ending_date"
placeholder="Last Statement Date" placeholder="Last Statement Date"
readonly="1"/> readonly="1" force_save="1"/>
<field name="suppress_ending_date_filter"/> <field name="suppress_ending_date_filter"/>
<field name="company_id" <field name="company_id"
groups="base.group_multi_company" groups="base.group_multi_company"
@ -68,32 +68,46 @@
name="debit_move_line_ids" name="debit_move_line_ids"
nolabel="1" widget="one2many_list" nolabel="1" widget="one2many_list"
height="300"> height="300">
<form string="Deposits, Credits, and Interest" <form string="Deposits, Credits, and Interest">
version="7.0">
<field name="cleared_bank_account"/> <field name="cleared_bank_account"/>
<field name="date" readonly="1"/> <field name="date" readonly="1"
<field name="name" readonly="1"/> force_save="1"/>
<field name="ref" readonly="1"/> <field name="name" readonly="1"
<field name="partner_id" readonly="1"/> force_save="1"/>
<field name="amount" readonly="1"/> <field name="ref" readonly="1"
<field name="amountcur" readonly="1"/> force_save="1"/>
<field name="currency_id" 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="research_required"
readonly="1"/> readonly="1" force_save="1"/>
</form> </form>
<tree string="Deposits, Credits, and Interest" <tree string="Deposits, Credits, and Interest"
editable="top" editable="top"
mute_additem="draft,to_be_reviewed,done, cancel"> mute_additem="draft,to_be_reviewed,done, cancel">
<field name="cleared_bank_account"/> <field name="cleared_bank_account"/>
<field name="date" readonly="1"/> <field name="date" readonly="1"
<field name="name" readonly="1"/> force_save="1"/>
<field name="ref" readonly="1"/> <field name="name" readonly="1"
<field name="partner_id" readonly="1"/> force_save="1"/>
<field name="amount" readonly="1"/> <field name="ref" readonly="1"
<field name="amountcur" readonly="1"/> force_save="1"/>
<field name="currency_id" 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="research_required"/>
<field name="move_line_id" readonly="1"/> <field name="move_line_id" readonly="1"
force_save="1"/>
</tree> </tree>
</field> </field>
<label for='account_label2' <label for='account_label2'
@ -102,32 +116,46 @@
name="credit_move_line_ids" name="credit_move_line_ids"
nolabel="1" widget="one2many_list" nolabel="1" widget="one2many_list"
height="300"> height="300">
<form string="Checks, Withdrawals, Debits, and Service Charges" <form string="Checks, Withdrawals, Debits, and Service Charges">
version="7.0">
<field name="cleared_bank_account"/> <field name="cleared_bank_account"/>
<field name="date" readonly="1"/> <field name="date" readonly="1"
<field name="name" readonly="1"/> force_save="1"/>
<field name="ref" readonly="1"/> <field name="name" readonly="1"
<field name="partner_id" readonly="1"/> force_save="1"/>
<field name="amount" readonly="1"/> <field name="ref" readonly="1"
<field name="amountcur" readonly="1"/> force_save="1"/>
<field name="currency_id" 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="research_required"
readonly="1"/> readonly="1" force_save="1"/>
</form> </form>
<tree string="Checks, Withdrawals, Debits, and Service Charges" <tree string="Checks, Withdrawals, Debits, and Service Charges"
editable="top" editable="top"
mute_additem="draft,to_be_reviewed,done, cancel"> mute_additem="draft,to_be_reviewed,done, cancel">
<field name="cleared_bank_account"/> <field name="cleared_bank_account"/>
<field name="date" readonly="1"/> <field name="date" readonly="1"
<field name="name" readonly="1"/> force_save="1"/>
<field name="ref" readonly="1"/> <field name="name" readonly="1"
<field name="partner_id" readonly="1"/> force_save="1"/>
<field name="amount" readonly="1"/> <field name="ref" readonly="1"
<field name="amountcur" readonly="1"/> force_save="1"/>
<field name="currency_id" 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="research_required"/>
<field name="move_line_id" readonly="1"/> <field name="move_line_id" readonly="1"
force_save="1"/>
</tree> </tree>
</field> </field>
<group col="2" colspan="1" <group col="2" colspan="1"
@ -137,13 +165,13 @@
type="object" type="object"
states="draft,to_be_reviewed" states="draft,to_be_reviewed"
string="Select All" string="Select All"
icon="gtk-go-forward"/> icon="fa-check"/>
<button name="action_unselect_all" <button name="action_unselect_all"
confirm="Current edits in statement will be lost. Do you want to unselect all?" confirm="Current edits in statement will be lost. Do you want to unselect all?"
type="object" type="object"
states="draft,to_be_reviewed" states="draft,to_be_reviewed"
string="Unselect All" string="Unselect All"
icon="gtk-cancel"/> icon="fa-close"/>
</group> </group>
<newline/> <newline/>
<separator string="Totals - Cleared and Uncleared" <separator string="Totals - Cleared and Uncleared"
@ -233,10 +261,8 @@
icon="terp-personal"/> icon="terp-personal"/>
</field> </field>
<newline/> <newline/>
<group expand="0" string="Group By..." colspan="11" col="11" <group expand="0" string="Group By...">
groups="base.group_extended"> <filter string="Account" icon="terp-personal" domain="[]" context="{'group_by':'account_id'}"/>
<filter string="Account" icon="terp-personal" domain="[]"
context="{'group_by':'account_id'}"/>
<separator orientation="vertical"/> <separator orientation="vertical"/>
<filter string="State" <filter string="State"
icon="terp-stock_effects-object-colorize" icon="terp-stock_effects-object-colorize"
@ -255,12 +281,9 @@
<field name="search_view_id" ref="view_bank_acc_rec_statement_filter"/> <field name="search_view_id" ref="view_bank_acc_rec_statement_filter"/>
</record> </record>
<!-- <record id="account.menu_bank_statement_tree" model="ir.ui.menu"> --> <menuitem id="bank_acc_rec_statement_menu"
<!-- <field name="groups_id" eval="[(4,ref('base.group_system'))]"/> --> icon="STOCK_JUSTIFY_FILL"
<!-- </record> --> action="action_bank_acc_rec_statement"
<menuitem icon="STOCK_JUSTIFY_FILL" action="action_bank_acc_rec_statement"
id="bank_acc_rec_statement_menu"
parent="account.menu_finance_entries" parent="account.menu_finance_entries"
sequence="5"/> sequence="5"/>
@ -269,12 +292,12 @@
src_model="bank.acc.rec.statement"/> src_model="bank.acc.rec.statement"/>
<act_window id="act_supplier_payment_to_add" name="Supplier Payment" <act_window id="act_supplier_payment_to_add" name="Supplier Payment"
domain="[('voucher_type', 'in', ['bank', 'cash']), ('type','=','receipt')]" domain="[('voucher_type', 'in', ['bank', 'cash'])]"
context="{'type':'payment'}" res_model="account.voucher" context="{'type':'payment'}" res_model="account.voucher"
src_model="bank.acc.rec.statement"/> src_model="bank.acc.rec.statement"/>
<act_window id="act_customer_payment_to_add" name="Customer Payment" <act_window id="act_customer_payment_to_add" name="Customer Payment"
domain="[('voucher_type', 'in', ['bank', 'cash']), ('type','=','receipt')]" domain="[('voucher_type', 'in', ['bank', 'cash'])]"
context="{'type':'receipt'}" res_model="account.voucher" context="{'type':'receipt'}" res_model="account.voucher"
src_model="bank.acc.rec.statement"/> src_model="bank.acc.rec.statement"/>

View File

@ -24,7 +24,8 @@
<record id="view_account_move_line_bank_acc_rec_statement_id_form" <record id="view_account_move_line_bank_acc_rec_statement_id_form"
model="ir.ui.view"> model="ir.ui.view">
<field name="name">account.move.line.bank.acc.rec.statement.id.form</field> <field name="name">account.move.line.bank.acc.rec.statement.id.form
</field>
<field name="model">account.move.line</field> <field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/> <field name="inherit_id" ref="account.view_move_line_form"/>
<field name="type">form</field> <field name="type">form</field>

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<template id="report_bank_statement_detail_doc"> <template id="report_bank_statement_detail_doc">
<t t-call="report.external_layout"> <t t-call="web.external_layout">
<t t-set="o" <t t-set="o"
t-value="o.with_context({'lang':o.company_id.partner_id.lang})"/> t-value="o.with_context({'lang':o.company_id.partner_id.lang})"/>
<div class="page"> <div class="page">
@ -464,11 +465,12 @@
</template> </template>
<template id="report_bank_statement_detail"> <template id="report_bank_statement_detail">
<t t-call="report.html_container"> <t t-call="web.html_container">
<t t-foreach="docs" t-as="o"> <t t-foreach="docs" t-as="o">
<t t-call="account_banking_reconciliation.report_bank_statement_detail_doc" <t t-call="account_banking_reconciliation.report_bank_statement_detail_doc"
t-lang="o.company_id.partner_id.lang"/> t-lang="o.company_id.partner_id.lang"/>
</t> </t>
</t> </t>
</template> </template>
</odoo> </odoo>

View File

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<template id="report_bank_statement_summary_doc"> <template id="report_bank_statement_summary_doc">
<t t-call="report.external_layout"> <t t-call="web.external_layout">
<t t-set="o" <t t-set="o"
t-value="o.with_context({'lang':o.company_id.partner_id.lang})"/> t-value="o.with_context({'lang':o.company_id.partner_id.lang})"/>
<div class="page"> <div class="page">
@ -286,7 +287,7 @@
</template> </template>
<template id="report_bank_statement_summary"> <template id="report_bank_statement_summary">
<t t-call="report.html_container"> <t t-call="web.html_container">
<t t-foreach="docs" t-as="o"> <t t-foreach="docs" t-as="o">
<t <t
t-call="account_banking_reconciliation.report_bank_statement_summary_doc" t-call="account_banking_reconciliation.report_bank_statement_summary_doc"
@ -294,4 +295,5 @@
</t> </t>
</t> </t>
</template> </template>
</odoo> </odoo>