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