You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

123 lines
4.9 KiB

# -*- coding: utf-8 -*-
# Copyright 2016 Eficent Business and IT Consulting Services S.L.
# Copyright 2016 Serpent Consulting Services Pvt. Ltd.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
import time
from odoo import api, models
class SummaryReport(models.AbstractModel):
_name = 'report.bank_statement_reconciliation_summary.summary_report'
@api.model
def _plus_outstanding_payments_domain(self, journal, start_date,
end_date):
account_id = journal.default_debit_account_id.id
domain_search = [
('account_id', '=', account_id),
('move_id.statement_line_id', '=', False),
('credit', '>', 0.00),
('date', '<=', end_date),
]
if start_date:
domain_search += [('date', '>=', start_date)]
return domain_search
@api.model
def _plus_outstanding_payments(self, journals, start_date, end_date):
rec = {}
for journal in journals:
domain_search = self._plus_outstanding_payments_domain(
journal, start_date, end_date)
account_move_line_records = self.env['account.move.line'].search(
domain_search, order='date')
rec[journal.id] = account_move_line_records
return rec
@api.model
def _less_outstanding_receipts_domain(self, journal, start_date,
end_date):
account_id = journal.default_debit_account_id.id
domain_search = [
('account_id', '=', account_id),
('move_id.statement_line_id', '=', False),
('debit', '>', 0.00),
('date', '<=', end_date),
]
if start_date:
domain_search += [('date', '>=', start_date)]
return domain_search
@api.model
def _less_outstanding_receipts(self, journals, start_date, end_date):
rec = {}
for journal in journals:
domain_search = self._less_outstanding_receipts_domain(
journal, start_date, end_date)
account_move_line_records = self.env['account.move.line'].search(
domain_search, order='date')
rec[journal.id] = account_move_line_records
return rec
@api.model
def _plus_unreconciled_statement_lines(self, journals, start_date,
end_date):
rec = {}
for journal in journals:
domain_search = [
('date', '<=', end_date),
('journal_id', '=', journal.id),
('journal_entry_ids', '=', False)]
if start_date:
domain_search += [('date', '>=', start_date)]
statement_lines = self.env['account.bank.statement.line'].search(
domain_search)
rec[journal.id] = statement_lines
return rec
@api.model
def _get_bank_end_balance(self, journals, end_date):
rec = {}
for journal in journals:
bank_account = journal.default_credit_account_id
amount_field = 'balance'
query = """
SELECT sum(%s) FROM account_move_line
WHERE account_id=%%s
AND date<=%%s""" % (amount_field,)
self.env.cr.execute(query, (bank_account.id, end_date))
query_results = self.env.cr.dictfetchall()
if query_results:
account_bal = query_results[0].get('sum') or 0.0
else:
account_bal = 0.0
rec[journal.id] = account_bal
return rec
@api.multi
def render_html(self, docids, data=None):
Report = self.env['report']
report_name = 'bank_statement_reconciliation_summary.summary_report'
report = Report._get_report_from_name(report_name)
records = self.env['account.journal'].browse(docids)
docargs = {
'doc_ids': docids,
'doc_model': report.model,
'data': data,
'docs': records,
'time': time,
'plus_outstanding_payments':
self._plus_outstanding_payments(records, data['start_date'],
data['end_date']),
'less_outstanding_receipts':
self._less_outstanding_receipts(records, data['start_date'],
data['end_date']),
'plus_unreconciled_statement_lines':
self._plus_unreconciled_statement_lines(records,
data['start_date'],
data['end_date']),
'bank_end_balance': self._get_bank_end_balance(
records, data['end_date']),
'balance_end_real': data['balance_end_real']
}
return self.env['report'].render(report_name, docargs)