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

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. # -*- coding: utf-8 -*-
  2. # Copyright 2016 Eficent Business and IT Consulting Services S.L.
  3. # Copyright 2016 Serpent Consulting Services Pvt. Ltd.
  4. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  5. import time
  6. from odoo import api, models
  7. class SummaryReport(models.AbstractModel):
  8. _name = 'report.bank_statement_reconciliation_summary.summary_report'
  9. @api.model
  10. def _plus_outstanding_payments_domain(self, journal, start_date,
  11. end_date):
  12. account_id = journal.default_debit_account_id.id
  13. domain_search = [
  14. ('account_id', '=', account_id),
  15. ('move_id.statement_line_id', '=', False),
  16. ('credit', '>', 0.00),
  17. ('date', '<=', end_date),
  18. ]
  19. if start_date:
  20. domain_search += [('date', '>=', start_date)]
  21. return domain_search
  22. @api.model
  23. def _plus_outstanding_payments(self, journals, start_date, end_date):
  24. rec = {}
  25. for journal in journals:
  26. domain_search = self._plus_outstanding_payments_domain(
  27. journal, start_date, end_date)
  28. account_move_line_records = self.env['account.move.line'].search(
  29. domain_search, order='date')
  30. rec[journal.id] = account_move_line_records
  31. return rec
  32. @api.model
  33. def _less_outstanding_receipts_domain(self, journal, start_date,
  34. end_date):
  35. account_id = journal.default_debit_account_id.id
  36. domain_search = [
  37. ('account_id', '=', account_id),
  38. ('move_id.statement_line_id', '=', False),
  39. ('debit', '>', 0.00),
  40. ('date', '<=', end_date),
  41. ]
  42. if start_date:
  43. domain_search += [('date', '>=', start_date)]
  44. return domain_search
  45. @api.model
  46. def _less_outstanding_receipts(self, journals, start_date, end_date):
  47. rec = {}
  48. for journal in journals:
  49. domain_search = self._less_outstanding_receipts_domain(
  50. journal, start_date, end_date)
  51. account_move_line_records = self.env['account.move.line'].search(
  52. domain_search, order='date')
  53. rec[journal.id] = account_move_line_records
  54. return rec
  55. @api.model
  56. def _plus_unreconciled_statement_lines(self, journals, start_date,
  57. end_date):
  58. rec = {}
  59. for journal in journals:
  60. domain_search = [
  61. ('date', '<=', end_date),
  62. ('journal_id', '=', journal.id),
  63. ('journal_entry_ids', '=', False)]
  64. if start_date:
  65. domain_search += [('date', '>=', start_date)]
  66. statement_lines = self.env['account.bank.statement.line'].search(
  67. domain_search)
  68. rec[journal.id] = statement_lines
  69. return rec
  70. @api.model
  71. def _get_bank_end_balance(self, journals, end_date):
  72. rec = {}
  73. for journal in journals:
  74. bank_account = journal.default_credit_account_id
  75. amount_field = 'balance'
  76. query = """
  77. SELECT sum(%s) FROM account_move_line
  78. WHERE account_id=%%s
  79. AND date<=%%s""" % (amount_field,)
  80. self.env.cr.execute(query, (bank_account.id, end_date))
  81. query_results = self.env.cr.dictfetchall()
  82. if query_results:
  83. account_bal = query_results[0].get('sum') or 0.0
  84. else:
  85. account_bal = 0.0
  86. rec[journal.id] = account_bal
  87. return rec
  88. @api.multi
  89. def render_html(self, docids, data=None):
  90. Report = self.env['report']
  91. report_name = 'bank_statement_reconciliation_summary.summary_report'
  92. report = Report._get_report_from_name(report_name)
  93. records = self.env['account.journal'].browse(docids)
  94. docargs = {
  95. 'doc_ids': docids,
  96. 'doc_model': report.model,
  97. 'data': data,
  98. 'docs': records,
  99. 'time': time,
  100. 'plus_outstanding_payments':
  101. self._plus_outstanding_payments(records, data['start_date'],
  102. data['end_date']),
  103. 'less_outstanding_receipts':
  104. self._less_outstanding_receipts(records, data['start_date'],
  105. data['end_date']),
  106. 'plus_unreconciled_statement_lines':
  107. self._plus_unreconciled_statement_lines(records,
  108. data['start_date'],
  109. data['end_date']),
  110. 'bank_end_balance': self._get_bank_end_balance(
  111. records, data['end_date']),
  112. 'balance_end_real': data['balance_end_real']
  113. }
  114. return self.env['report'].render(report_name, docargs)