diff --git a/account_banking_reconciliation/__manifest__.py b/account_banking_reconciliation/__manifest__.py index abb44f01..7c63cb36 100644 --- a/account_banking_reconciliation/__manifest__.py +++ b/account_banking_reconciliation/__manifest__.py @@ -18,7 +18,9 @@ "security/ir.model.access.csv", "views/account_banking_reconciliation.xml", "views/account_move_line.xml", - "report/bank_statement_report.xml"], + "report/bank_statement_report.xml", + "views/report_bank_statement_summary.xml", + "views/report_bank_statement_detail.xml"], "demo": [], - "installable": False, + "installable": True, } diff --git a/account_banking_reconciliation/models/account_banking_reconciliation.py b/account_banking_reconciliation/models/account_banking_reconciliation.py index c7416d8c..02ec2c45 100644 --- a/account_banking_reconciliation/models/account_banking_reconciliation.py +++ b/account_banking_reconciliation/models/account_banking_reconciliation.py @@ -5,153 +5,157 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import time -from openerp.osv import fields, osv -from openerp.tools.translate import _ -import openerp.addons.decimal_precision as dp +from odoo import fields, models, api, _ +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 bank_acc_rec_statement(osv.osv): - def check_group(self, cr, uid, ids, context=None): +class bank_acc_rec_statement(models.Model): + + @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.pool.get('ir.model.data') - res_groups_obj = self.pool.get('res.groups') - group_verifier_id = model_data_obj._get_id(cr, uid, 'ursa_npg_bank_account_reconciliation', 'group_bank_stmt_verifier') - for statement in self.browse(cr, uid, ids, context=context): + 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.read(cr, uid, [group_verifier_id], ['res_id'])[0]['res_id'] - group_verifier = res_groups_obj.browse(cr, uid, res_id, context=context) + 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 uid not in group_user_ids: - raise osv.except_osv(_('User Error !'), - _("Only a member of '%s' group may delete/edit bank statements when not in draft state!" %(group_verifier.name))) + 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 - def copy(self, cr, uid, id, default={}, context=None): + @api.model + def copy(self, default={}): default.update({ 'credit_move_line_ids': [], 'debit_move_line_ids': [], 'name': '', }) - return super(bank_acc_rec_statement, self).copy(cr, uid, id, default=default, context=context) + return super(bank_acc_rec_statement, self).copy(default=default) - def write(self, cr, uid, ids, vals, context=None): - self.check_group(cr, uid, ids, context) # Check if the user is allowed to perform the action - return super(bank_acc_rec_statement, self).write(cr, uid, ids, vals, context=context) + @api.multi + def write(self, vals): + self.check_group() # Check if the user is allowed to perform the action + return super(bank_acc_rec_statement, self).write(vals) - def unlink(self, cr, uid, ids, context=None): + @api.model + def unlink(self): "Reset the related account.move.line to be re-assigned later to statement." - statement_line_obj = self.pool.get('bank.acc.rec.statement.line') - self.check_group(cr, uid, ids, context) # Check if the user is allowed to perform the action - for statement in self.browse(cr, uid, ids, context=context): + statement_line_obj = self.env['bank.acc.rec.statement.line'] + self.check_group() # Check if the user is allowed to perform the action + for statement in self: statement_lines = statement.credit_move_line_ids + statement.debit_move_line_ids statement_line_ids = map(lambda x: x.id, statement_lines) - statement_line_obj.unlink(cr, uid, statement_line_ids, context=context) # call unlink method to reset - return super(bank_acc_rec_statement, self).unlink(cr, uid, ids, context=context) + statement_line_brws = statement_line_obj.browse(statement_line_ids) + statement_line_brws.unlink() # call unlink method to reset + return super(bank_acc_rec_statement, self).unlink() - def check_difference_balance(self, cr, uid, ids, context=None): + @api.multi + def check_difference_balance(self): "Check if difference balance is zero or not." - for statement in self.browse(cr, uid, ids, context=context): + for statement in self: if statement.cleared_balance_cur: if statement.difference_cur != 0.0: - raise osv.except_osv(_('Warning!'), - _("Prior to reconciling a statement, all differences must be accounted for and the Difference balance must be zero." \ + 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 osv.except_osv(_('Warning!'), - _("Prior to reconciling a statement, all differences must be accounted for and the Difference balance must be zero." \ + 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 - def action_cancel(self, cr, uid, ids, context=None): + @api.multi + def action_cancel(self): "Cancel the the statement." - self.write(cr, uid, ids, {'state': 'cancel'}, context=context) + self.write({'state': 'cancel'}) return True - def action_review(self, cr, uid, ids, context=None): + @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(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'state': 'to_be_reviewed'}, context=context) + self.check_difference_balance() + self.write({'state': 'to_be_reviewed'}) return True - def action_process(self, cr, uid, ids, context=None): + @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'.""" - account_move_line_obj = self.pool.get('account.move.line') - statement_line_obj = self.pool.get('bank.acc.rec.statement.line') # If difference balance not zero prevent further processing - self.check_difference_balance(cr, uid, ids, context=context) - for statement in self.browse(cr, uid, ids, context=context): + 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' - account_move_line_obj.write(cr, uid, [statement_line.move_line_id.id], - {'cleared_bank_account': statement_line.cleared_bank_account, + statement_line.move_line_id.write({'cleared_bank_account': statement_line.cleared_bank_account, 'bank_acc_rec_statement_id': statement_line.cleared_bank_account and statement.id or False - }, context=context) + }) - self.write(cr, uid, [statement.id], {'state': 'done', - 'verified_by_user_id': uid, - 'verified_date': time.strftime('%Y-%m-%d') - }, context=context) + statement.write({'state': 'done', + 'verified_by_user_id': self.env.uid, + 'verified_date': time.strftime('%Y-%m-%d') + }) return True - def action_cancel_draft(self, cr, uid, ids, context=None): + @api.multi + def action_cancel_draft(self): """Reset the statement to draft and perform resetting operations.""" - account_move_line_obj = self.pool.get('account.move.line') - statement_line_obj = self.pool.get('bank.acc.rec.statement.line') - for statement in self.browse(cr, uid, ids, context=context): + for statement in self: statement_lines = statement.credit_move_line_ids + statement.debit_move_line_ids line_ids = [] statement_line_ids = [] for statement_line in statement_lines: - statement_line_ids.append(statement_line.id) + statement_line_ids.append(statement_line) if statement_line.move_line_id: - line_ids.append(statement_line.move_line_id.id) # Find move lines related to statement lines + line_ids.append(statement_line.move_line_id) # Find move lines related to statement lines # Reset 'Cleared' and 'Bank Acc Rec Statement ID' to False - account_move_line_obj.write(cr, uid, line_ids, {'cleared_bank_account': False, - 'bank_acc_rec_statement_id': False, - }, context=context) + line_ids.write({'cleared_bank_account': False, + 'bank_acc_rec_statement_id': False, + }) # Reset 'Cleared' in statement lines - statement_line_obj.write(cr, uid, statement_line_ids, {'cleared_bank_account': False, - 'research_required': False - }, context=context) + statement_line_ids.write({'cleared_bank_account': False, + 'research_required': False + }) # Reset statement - self.write(cr, uid, [statement.id], {'state': 'draft', - 'verified_by_user_id': False, - 'verified_date': False - }, context=context) - + statement.write({'state': 'draft', + 'verified_by_user_id': False, + 'verified_date': False + }) return True - def action_select_all(self, cr, uid, ids, context=None): + @api.multi + def action_select_all(self): """Mark all the statement lines as 'Cleared'.""" - statement_line_obj = self.pool.get('bank.acc.rec.statement.line') - for statement in self.browse(cr, uid, ids, context=context): + for statement in self: statement_lines = statement.credit_move_line_ids + statement.debit_move_line_ids statement_line_ids = map(lambda x: x.id, statement_lines) - statement_line_obj.write(cr, uid, statement_line_ids, {'cleared_bank_account': True}, context=context) + statement_line_ids.write({'cleared_bank_account': True}) return True - def action_unselect_all(self, cr, uid, ids, context=None): + @api.multi + def action_unselect_all(self): """Reset 'Cleared' in all the statement lines.""" - statement_line_obj = self.pool.get('bank.acc.rec.statement.line') - for statement in self.browse(cr, uid, ids, context=context): + for statement in self: statement_lines = statement.credit_move_line_ids + statement.debit_move_line_ids statement_line_ids = map(lambda x: x.id, statement_lines) - statement_line_obj.write(cr, uid, statement_line_ids, {'cleared_bank_account': False}, context=context) + statement_line_ids.write({'cleared_bank_account': False}) return True - def _get_balance(self, cr, uid, ids, name, args, context=None): + def _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 @@ -160,60 +164,38 @@ class bank_acc_rec_statement(osv.osv): 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. """ - res = {} - account_precision = self.pool.get('decimal.precision').precision_get(cr, uid, 'Account') - for statement in self.browse(cr, uid, ids, context=context): - res[statement.id] = { - 'sum_of_credits': 0.0, - 'sum_of_debits': 0.0, - 'sum_of_credits_cur': 0.0, - 'sum_of_debits_cur': 0.0, - 'sum_of_ucredits': 0.0, - 'sum_of_udebits': 0.0, - 'sum_of_ucredits_cur': 0.0, - 'sum_of_udebits_cur': 0.0, - 'cleared_balance': 0.0, - 'cleared_balance_cur': 0.0, - 'uncleared_balance': 0.0, - 'uncleared_balance_cur': 0.0, - 'difference': 0.0, - 'difference_cur': 0.0, - 'sum_of_credits_lines': 0.0, - 'sum_of_debits_lines': 0.0, - 'sum_of_ucredits_lines': 0.0, - 'sum_of_udebits_lines': 0.0 - } + account_precision = self.env['decimal.precision'].precision_get('Account') + for statement in self: for line in statement.credit_move_line_ids: - res[statement.id]['sum_of_credits'] += line.cleared_bank_account and round(line.amount, account_precision) or 0.0 - res[statement.id]['sum_of_credits_cur'] += line.cleared_bank_account and round(line.amountcur, account_precision) or 0.0 - res[statement.id]['sum_of_credits_lines'] += line.cleared_bank_account and 1.0 or 0.0 - res[statement.id]['sum_of_ucredits'] += (not line.cleared_bank_account) and round(line.amount, account_precision) or 0.0 - res[statement.id]['sum_of_ucredits_cur'] += (not line.cleared_bank_account) and round(line.amountcur, account_precision) or 0.0 - res[statement.id]['sum_of_ucredits_lines'] += (not line.cleared_bank_account) and 1.0 or 0.0 + 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.0 or 0.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.0 or 0.0 for line in statement.debit_move_line_ids: - res[statement.id]['sum_of_debits'] += line.cleared_bank_account and round(line.amount, account_precision) or 0.0 - res[statement.id]['sum_of_debits_cur'] += line.cleared_bank_account and round(line.amountcur, account_precision) or 0.0 - res[statement.id]['sum_of_debits_lines'] += line.cleared_bank_account and 1.0 or 0.0 - res[statement.id]['sum_of_udebits'] += (not line.cleared_bank_account) and round(line.amount, account_precision) or 0.0 - res[statement.id]['sum_of_udebits_cur'] += (not line.cleared_bank_account) and round(line.amountcur, account_precision) or 0.0 - res[statement.id]['sum_of_udebits_lines'] += (not line.cleared_bank_account) and 1.0 or 0.0 + 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.0 or 0.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.0 or 0.0 - res[statement.id]['cleared_balance'] = round(res[statement.id]['sum_of_debits'] - res[statement.id]['sum_of_credits'], account_precision) - res[statement.id]['cleared_balance_cur'] = round(res[statement.id]['sum_of_debits_cur'] - res[statement.id]['sum_of_credits_cur'], account_precision) - res[statement.id]['difference'] = round((statement.ending_balance - statement.starting_balance) - res[statement.id]['cleared_balance'], account_precision) - res[statement.id]['difference_cur'] = round((statement.ending_balance - statement.starting_balance) - res[statement.id]['cleared_balance_cur'], account_precision) - res[statement.id]['uncleared_balance'] = round(res[statement.id]['sum_of_udebits'] - res[statement.id]['sum_of_ucredits'], account_precision) - res[statement.id]['uncleared_balance_cur'] = round(res[statement.id]['sum_of_udebits_cur'] - res[statement.id]['sum_of_ucredits_cur'], account_precision) - return res + 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 - def refresh_record(self, cr, uid, ids, context=None): - + @api.multi + def refresh_record(self): retval = True refdict = {} # get current state of moves in the statement - for statement in self.browse(cr, uid, ids, context=context): + for statement in self: if statement.state == 'draft': for cr_item in statement.credit_move_line_ids: @@ -225,14 +207,14 @@ class bank_acc_rec_statement(osv.osv): refdict[dr_item.move_line_id.id] = dr_item.cleared_bank_account # for the statement - for statement in self.browse(cr, uid, ids, context=context): + for statement in self: # process only if the statement is in draft state if statement.state == 'draft': account_id = statement.account_id and statement.account_id.id ending_date = statement.ending_date suppress_ending_date_filter = statement.suppress_ending_date_filter - vals = self.onchange_account_id(cr, uid, ids, account_id, ending_date, suppress_ending_date_filter, context=context) + vals = self.onchange_account_id(statement.account_id, statement.ending_date, statement.suppress_ending_date_filter) # list of credit lines outlist = [] @@ -253,22 +235,23 @@ class bank_acc_rec_statement(osv.osv): inlist.append(item) # write it to the record so it is visible on the form - retval = self.write(cr, uid, ids, {'last_ending_date':vals['value']['last_ending_date'],'starting_balance': vals['value']['starting_balance'], - 'credit_move_line_ids':outlist, 'debit_move_line_ids': inlist}, context=context) + 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 - def get_starting_balance(self, cr, uid, account_id, ending_date, context=None): + # 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.pool.get('bank.acc.rec.statement') + statement_obj = self.env['bank.acc.rec.statement'] domain = [('account_id', '=', account_id), ('state', '=', 'done')] - statement_ids = statement_obj.search(cr, uid, domain, context=context) + statement_ids = statement_obj.search(domain).ids # get all statements for this account in the past - for statement in statement_obj.browse(cr, uid, statement_ids, context=context): + for statement in statement_obj.browse(statement_ids): if statement.ending_date < ending_date: reslist.append((statement.ending_date, statement.ending_balance)) @@ -279,175 +262,162 @@ class bank_acc_rec_statement(osv.osv): return result - def onchange_account_id(self, cr, uid, ids, account_id, ending_date, suppress_ending_date_filter, context=None): - account_move_line_obj = self.pool.get('account.move.line') - statement_line_obj = self.pool.get('bank.acc.rec.statement.line') + @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 account_id: - for statement in self.browse(cr, uid, ids, context=context): - statement_line_ids = statement_line_obj.search(cr, uid, [('statement_id', '=', statement.id)], context=context) + if 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_obj.unlink(cr, uid, statement_line_ids, context=context) + 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', '=', account_id), ('move_id.state', '=', 'posted'), ('cleared_bank_account', '=', False)] - if not suppress_ending_date_filter: - domain += [('date', '<=', ending_date)] - line_ids = account_move_line_obj.search(cr, uid, domain, context=context) - for line in account_move_line_obj.browse(cr, uid, line_ids, context=context): + 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)] + line_ids = account_move_line_obj.search(domain).ids + for line in account_move_line_obj.browse(line_ids): - if not line.journal_id.centralisation: - 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, - '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) + 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, + '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(cr, uid, account_id, ending_date, context=context) + 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 = "bank.acc.rec.statement" - _columns = { - '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), ('type', '!=', 'view')]", - help="The Bank/Gl Account that is being reconciled."), - 'ending_date': fields.date('Ending Date', required=True, states={'done':[('readonly', True)]}, 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_compute=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_compute=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, - 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)]}, - help="Date in which Deposit Ticket was verified."), - 'verified_by_user_id': fields.many2one('res.users', 'Verified By', states={'done':[('readonly', True)]}, - 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', - domain=[('type','=','cr')], context={'default_type':'cr'}, states={'done':[('readonly', True)]}), - 'debit_move_line_ids': fields.one2many('bank.acc.rec.statement.line', 'statement_id', 'Debits', - domain=[('type','=','dr')], context={'default_type':'dr'}, states={'done':[('readonly', True)]}), - 'cleared_balance': fields.function(_get_balance, method=True, string='Cleared Balance', digits_compute=dp.get_precision('Account'), - type='float', help="Total Sum of the Deposit Amount Cleared – Total Sum of Checks, Withdrawals, Debits, and Service Charges Amount Cleared", - multi="balance"), - 'difference': fields.function(_get_balance, method=True, type='float', string='Difference', digits_compute=dp.get_precision('Account'), - help="(Ending Balance – Beginning Balance) - Cleared Balance.", multi="balance"), - 'cleared_balance_cur': fields.function(_get_balance, method=True, string='Cleared Balance (Cur)', digits_compute=dp.get_precision('Account'), - type='float', help="Total Sum of the Deposit Amount Cleared – Total Sum of Checks, Withdrawals, Debits, and Service Charges Amount Cleared", - multi="balance"), - 'difference_cur': fields.function(_get_balance, method=True, type='float', string='Difference (Cur)', digits_compute=dp.get_precision('Account'), - help="(Ending Balance – Beginning Balance) - Cleared Balance.", multi="balance"), - 'uncleared_balance': fields.function(_get_balance, method=True, string='Uncleared Balance', digits_compute=dp.get_precision('Account'), - type='float', help="Total Sum of the Deposit Amount Uncleared – Total Sum of Checks, Withdrawals, Debits, and Service Charges Amount Uncleared", - multi="balance"), - 'uncleared_balance_cur': fields.function(_get_balance, method=True, string='Unleared Balance (Cur)', digits_compute=dp.get_precision('Account'), - type='float', help="Total Sum of the Deposit Amount Uncleared – Total Sum of Checks, Withdrawals, Debits, and Service Charges Amount Uncleared", - multi="balance"), - 'sum_of_credits': fields.function(_get_balance, method=True, string='Checks, Withdrawals, Debits, and Service Charges Amount', digits_compute=dp.get_precision('Account'), - type='float', help="Total SUM of Amts of lines with Cleared = True", - multi="balance"), - 'sum_of_debits': fields.function(_get_balance, method=True, type='float', string='Deposits, Credits, and Interest Amount', digits_compute=dp.get_precision('Account'), - help="Total SUM of Amts of lines with Cleared = True", multi="balance"), - 'sum_of_credits_cur': fields.function(_get_balance, method=True, string='Checks, Withdrawals, Debits, and Service Charges Amount (Cur)', digits_compute=dp.get_precision('Account'), - type='float', help="Total SUM of Amts of lines with Cleared = True", - multi="balance"), - 'sum_of_debits_cur': fields.function(_get_balance, method=True, type='float', string='Deposits, Credits, and Interest Amount (Cur)', digits_compute=dp.get_precision('Account'), - help="Total SUM of Amts of lines with Cleared = True", multi="balance"), - 'sum_of_credits_lines': fields.function(_get_balance, method=True, string='Checks, Withdrawals, Debits, and Service Charges # of Items', - type='float', help="Total of number of lines with Cleared = True", - multi="balance"), - 'sum_of_debits_lines': fields.function(_get_balance, method=True, type='float', string='Deposits, Credits, and Interest # of Items', - help="Total of number of lines with Cleared = True", multi="balance"), - 'sum_of_ucredits': fields.function(_get_balance, method=True, string='Uncleared - Checks, Withdrawals, Debits, and Service Charges Amount', digits_compute=dp.get_precision('Account'), - type='float', help="Total SUM of Amts of lines with Cleared = False", - multi="balance"), - 'sum_of_udebits': fields.function(_get_balance, method=True, type='float', string='Uncleared - Deposits, Credits, and Interest Amount', digits_compute=dp.get_precision('Account'), - help="Total SUM of Amts of lines with Cleared = False", multi="balance"), - 'sum_of_ucredits_cur': fields.function(_get_balance, method=True, string='Uncleared - Checks, Withdrawals, Debits, and Service Charges Amount (Cur)', digits_compute=dp.get_precision('Account'), - type='float', help="Total SUM of Amts of lines with Cleared = False", - multi="balance"), - 'sum_of_udebits_cur': fields.function(_get_balance, method=True, type='float', string='Uncleared - Deposits, Credits, and Interest Amount (Cur)', digits_compute=dp.get_precision('Account'), - help="Total SUM of Amts of lines with Cleared = False", multi="balance"), - 'sum_of_ucredits_lines': fields.function(_get_balance, method=True, string='Uncleared - Checks, Withdrawals, Debits, and Service Charges # of Items', - type='float', help="Total of number of lines with Cleared = False", - multi="balance"), - 'sum_of_udebits_lines': fields.function(_get_balance, method=True, type='float', string='Uncleared - Deposits, Credits, and Interest # of Items', - help="Total of number of lines with Cleared = False", multi="balance"), - '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([ + 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_compute=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_compute=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)]}, + help="Date in which Deposit Ticket was verified.") + verified_by_user_id = fields.Many2one('res.users', 'Verified By', states={'done':[('readonly', True)]}, + 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', + domain=[('type','=','cr')], states={'done':[('readonly', True)]}) + debit_move_line_ids = fields.One2many('bank.acc.rec.statement.line', 'statement_id', 'Debits', + domain=[('type','=','dr')], states={'done':[('readonly', True)]}) + cleared_balance = fields.Float(compute='_get_balance', string='Cleared Balance', digits_compute=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='_get_balance', string='Difference', digits_compute=dp.get_precision('Account'), + help="(Ending Balance – Beginning Balance) - Cleared Balance.") + cleared_balance_cur = fields.Float(compute='_get_balance', string='Cleared Balance (Cur)', digits_compute=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='_get_balance', string='Difference (Cur)', digits_compute=dp.get_precision('Account'), + help="(Ending Balance – Beginning Balance) - Cleared Balance.") + uncleared_balance = fields.Float(compute='_get_balance', string='Uncleared Balance', digits_compute=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='_get_balance', string='Unleared Balance (Cur)', digits_compute=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='_get_balance', string='Checks, Withdrawals, Debits, and Service Charges Amount', digits_compute=dp.get_precision('Account'), + type='float', help="Total SUM of Amts of lines with Cleared = True") + sum_of_debits = fields.Float(compute='_get_balance', string='Deposits, Credits, and Interest Amount', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = True") + sum_of_credits_cur = fields.Float(compute='_get_balance', string='Checks, Withdrawals, Debits, and Service Charges Amount (Cur)', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = True") + sum_of_debits_cur = fields.Float(compute='_get_balance', string='Deposits, Credits, and Interest Amount (Cur)', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = True") + sum_of_credits_lines = fields.Float(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.Float(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='_get_balance', string='Uncleared - Checks, Withdrawals, Debits, and Service Charges Amount', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = False") + sum_of_udebits = fields.Float(compute='_get_balance', string='Uncleared - Deposits, Credits, and Interest Amount', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = False") + sum_of_ucredits_cur = fields.Float(compute='_get_balance', string='Uncleared - Checks, Withdrawals, Debits, and Service Charges Amount (Cur)', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = False") + sum_of_udebits_cur = fields.Float(compute='_get_balance', string='Uncleared - Deposits, Credits, and Interest Amount (Cur)', digits_compute=dp.get_precision('Account'), + help="Total SUM of Amts of lines with Cleared = False") + sum_of_ucredits_lines = fields.Float(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.Float(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', 'Cancel') - ],'State', select=True, readonly=True), - } - _defaults = { - 'state': 'draft', - 'company_id': lambda self, cr, uid, c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id, - 'ending_date': time.strftime('%Y-%m-%d'), - } + ],'State', select=True, readonly=True, default='draft') + _order = "ending_date desc" _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!') ] -class bank_acc_rec_statement_line(osv.osv): +class bank_acc_rec_statement_line(models.Model): _name = "bank.acc.rec.statement.line" _description = "Statement Line" - _columns = { - '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_compute=dp.get_precision('Account'), - help="Derived from the 'debit' amount from related Journal Item."), - 'amountcur': fields.float('Amount in Currency', digits_compute=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'), - } + 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_compute=dp.get_precision('Account'), + help="Derived from the 'debit' amount from related Journal Item.") + amountcur = fields.Float('Amount in Currency', digits_compute=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') - def create(self, cr, uid, vals, context=None): - account_move_line_obj = self.pool.get('account.move.line') + @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 osv.except_osv(_('Processing Error'),_('You cannot add any new bank statement line manually as of this revision!')) - account_move_line_obj.write(cr, uid, [vals['move_line_id']], {'draft_assigned_to_statement': True}, context=context) - return super(bank_acc_rec_statement_line, self).create(cr, uid, vals, context=context) - - def unlink(self, cr, uid, ids, context=None): - account_move_line_obj = self.pool.get('account.move.line') - move_line_ids = [x.move_line_id.id for x in self.browse(cr, uid, ids, context=context) if x.move_line_id] + 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(bank_acc_rec_statement_line, self).create(vals) + + @api.model + 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.write(cr, uid, move_line_ids, {'draft_assigned_to_statement': False, + account_move_line_obj.browse(move_line_ids).write({'draft_assigned_to_statement': False, 'cleared_bank_account': False, 'bank_acc_rec_statement_id': False, - }, context=context) - return super(bank_acc_rec_statement_line, self).unlink(cr, uid, ids, context=context) + }) + return super(bank_acc_rec_statement_line, self).unlink() diff --git a/account_banking_reconciliation/models/account_move_line.py b/account_banking_reconciliation/models/account_move_line.py index fa389fc2..8af8e085 100644 --- a/account_banking_reconciliation/models/account_move_line.py +++ b/account_banking_reconciliation/models/account_move_line.py @@ -10,6 +10,6 @@ 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.Noolean(string='Assigned to Statement? ', help='Check if the move line is assigned to statement lines') + cleared_bank_account = fields.Boolean(string='Cleared? ', help='Check if the transaction has cleared from the bank') + bank_acc_rec_statement_id = fields.Many2one('bank.acc.rec.statement', string='Bank Acc Rec Statement', help="The Bank Acc Rec Statement linked with the journal item") + draft_assigned_to_statement = fields.Boolean(string='Assigned to Statement? ', help='Check if the move line is assigned to statement lines') diff --git a/account_banking_reconciliation/report/bank_statement_detail.rml b/account_banking_reconciliation/report/bank_statement_detail.rml deleted file mode 100644 index a4a1619c..00000000 --- a/account_banking_reconciliation/report/bank_statement_detail.rml +++ /dev/null @@ -1,750 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects, 'stmt') ]] - [[ setLang(stmt.lang) ]] - -
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - - - - - - - - - - - Date - - - Comment - - - Partner - - - Reference - - - Cleared - - - Amount([[ company.currency_id.symbol ]]) - - - Amount([[ stmt.account_id.currency_id.symbol ]]) - - - -
-
- [[ (stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - - - - - - - - - - - Date - - - Comment - - - Partner - - - Reference - - - Cleared - - - Amount([[ company.currency_id.symbol ]]) - - - Amount([[ stmt.account_id.currency_id.symbol ]]) - - - -
-
-
- Reconciliation Detail - Period Ending [[ (stmt.ending_date) or '' ]] -
- - - - - - -
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - - - - Date - - - Comment - - - Partner - - - Reference - - - Cleared - - - Amount([[ company.currency_id.symbol ]]) - - - Amount([[ stmt.account_id.currency_id.symbol ]]) - - - -
-
- [[ stmt.account_id.currency_id and removeParentNode('section') or '' ]] - - - - - - - Date - - - Comment - - - Partner - - - Reference - - - Cleared - - - Amount([[ company.currency_id.symbol ]]) - - - -
-
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - Initial Balance - - - - [[ stmt.starting_balance ]] - - - - - - Cleared Transactions - - - - - - - - Deposits & Credits-[[ (stmt.sum_of_debits_lines) or '']] items - - - - - -
-
- [[ stmt.account_id.currency_id and removeParentNode('section') or '' ]] - - - - Initial Balance - - - - [[ stmt.starting_balance ]] - - - - - - Cleared Transactions - - - - - - - - Deposits & Credits-[[ (stmt.sum_of_debits_lines) or '']] items - - - - - -
-
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - [[ repeatIn(stmt.debit_move_line_ids, 'debit') ]] -
[[ (not debit['cleared_bank_account']) and removeParentNode('section') ]] - - - - - - - [[ formatLang(debit['date'],date=True) ]] - - - [[ debit['name'] ]] - - - [[ debit['partner_id'].name or '' ]] - - - [[ debit['ref'] ]] - - - [[ (debit['cleared_bank_account']) and 'X' or '' ]] - - - [[ formatLang((debit['amount'])) ]] - - - [[ formatLang((debit['amountcur'])) ]] - - - -
-
-
- [[ stmt.account_id.currency_id and removeParentNode('section') or '' ]] - [[ repeatIn(stmt.debit_move_line_ids, 'debit') ]] -
[[ (not debit['cleared_bank_account']) and removeParentNode('section') ]] - - - - - - - [[ formatLang(debit['date'],date=True) ]] - - - [[ debit['name'] ]] - - - [[ debit['partner_id'].name or '' ]] - - - [[ debit['ref'] ]] - - - [[ (debit['cleared_bank_account']) and 'X' or '' ]] - - - [[ formatLang((debit['amount'])) ]] - - - -
-
-
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - Total Deposits & Credits - - - [[ (stmt.sum_of_debits) or '']] - [[ (stmt.sum_of_debits_cur) or '']] - - - - - - - Checks & Payments-[[ (stmt.sum_of_credits_lines) or '']] items - - - - - -
-
- [[ (stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - Total Deposits & Credits - - - [[ (stmt.sum_of_debits) or '']] - - - - - - - Checks & Payments-[[ (stmt.sum_of_credits_lines) or '']] items - - - - - -
-
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - [[ repeatIn(stmt.credit_move_line_ids, 'credit') ]] - - - - - - - [[ formatLang(credit['date'],date=True) ]] - - - [[ credit['name'] ]] - - - [[ credit['partner_id'].name or '' ]] - - - [[ credit['ref'] ]] - - - [[ (credit['cleared_bank_account']) and 'X' or '' ]] - - - [[ formatLang((credit['amount'])) ]] - - - [[ formatLang((credit['amountcur']))]] - - - -
-
- [[ (stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - [[ repeatIn(stmt.credit_move_line_ids, 'credit') ]] - - - - - - - [[ formatLang(credit['date'],date=True) ]] - - - [[ credit['name'] ]] - - - [[ credit['partner_id'].name or '' ]] - - - [[ credit['ref'] ]] - - - [[ (credit['cleared_bank_account']) and 'X' or '' ]] - - - [[ formatLang((credit['amount'])) ]] - - - -
-
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - Total Checks & Payments - - - [[ (stmt.sum_of_credits) or '']] - [[ (stmt.sum_of_credits_cur) or '']] - - - - - - Total Cleared Transactions - - - [[ formatLang(stmt.sum_of_debits - stmt.sum_of_credits) or '']] - [[ formatLang(stmt.sum_of_debits_cur - stmt.sum_of_credits_cur) or '']] - - - - Cleared Balance - - - [[ (stmt.cleared_balance) or '']] - [[ (stmt.cleared_balance_cur) or '']] - - - - Ending Balance - - - - [[ (stmt.ending_balance) or '']] - - -
-
- [[ (stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - - Total Deposits and Credits - - - [[ (stmt.sum_of_credits) or '']] - - - - - - Total Cleared Transactions - - - [[ formatLang(stmt.sum_of_debits - stmt.sum_of_credits) or '']] - - - - Cleared Balance - - - [[ (stmt.cleared_balance) or '']] - - - - Ending Balance - - - [[ (stmt.ending_balance) or '']] - - -
-
-
-
diff --git a/account_banking_reconciliation/report/bank_statement_report.xml b/account_banking_reconciliation/report/bank_statement_report.xml index 34fe0373..c9945b05 100644 --- a/account_banking_reconciliation/report/bank_statement_report.xml +++ b/account_banking_reconciliation/report/bank_statement_report.xml @@ -1,17 +1,22 @@ - + - + + 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'" + /> diff --git a/account_banking_reconciliation/report/bank_statement_summary.rml b/account_banking_reconciliation/report/bank_statement_summary.rml deleted file mode 100644 index 55eb3ce0..00000000 --- a/account_banking_reconciliation/report/bank_statement_summary.rml +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [[ repeatIn(objects, 'stmt') ]] - [[ setLang(stmt.lang) ]] - - -
- Reconciliation Summary - Period Ending [[ (stmt.ending_date) or '' ]] -
- - - - - - -
- [[ (not stmt.account_id.currency_id) and removeParentNode('section') or '' ]] - - - Initial Balance - - [[ stmt.starting_balance ]] - - - - - - - Cleared Transactions - - - - - - - - Deposits & Credits-[[ (stmt.sum_of_debits_lines) or '']] items - [[ (stmt.sum_of_debits) or '']] - [[ (stmt.sum_of_debits_cur) or '']] - - - - - Checks & Payments-[[ (stmt.sum_of_credits_lines) or '']] items - [[ (stmt.sum_of_credits) or '']] - [[ (stmt.sum_of_credits_cur) or '']] - - - - - - - Total Cleared Transactions - [[ formatLang(stmt.sum_of_debits - stmt.sum_of_credits) or '']] - [[ formatLang(stmt.sum_of_debits_cur - stmt.sum_of_credits_cur) or '']] - - - - - - Cleared Balance - [[ (stmt.cleared_balance) or '']] - [[ (stmt.cleared_balance_cur) or '']] - [[ (stmt.cleared_balance_cur) or '']] - - - - - Ending Balance - - [[ (stmt.ending_balance) or '']] - - -
-
- [[ stmt.account_id.currency_id and removeParentNode('section') or '' ]] - - - Initial Balance - - [[ stmt.starting_balance ]] - - - - - - - Cleared Transactions - - - - - - - - Deposits & Credits-[[ (stmt.sum_of_debits_lines) or '']] items - - [[ (stmt.sum_of_debits) or '']] - - - - - Checks & Payments-[[ (stmt.sum_of_credits_lines) or '']] items - - [[ (stmt.sum_of_credits) or '']] - - - - - - - Total Cleared Transactions - - [[ formatLang(stmt.sum_of_debits - stmt.sum_of_credits) or '']] - - - - - - Cleared Balance - - [[ (stmt.cleared_balance) or '']] - [[ (stmt.cleared_balance) or '']] - - - - - Ending Balance - - [[ (stmt.ending_balance) or '']] - - -
-
-
-
diff --git a/account_banking_reconciliation/views/account_banking_reconciliation.xml b/account_banking_reconciliation/views/account_banking_reconciliation.xml index 9938cc72..d8ecf2f5 100644 --- a/account_banking_reconciliation/views/account_banking_reconciliation.xml +++ b/account_banking_reconciliation/views/account_banking_reconciliation.xml @@ -25,22 +25,22 @@
-
- + - + - + @@ -97,7 +97,7 @@ - +