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.

86 lines
2.9 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2013 Joaquin Gutierrez (http://www.gutierrezweb.es)
  3. # Copyright 2015 Tecnativa - Pedro M. Baeza
  4. # Copyright 2017 RGB Consulting
  5. # Copyright 2017 Eficent - Miquel Raich
  6. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  7. from datetime import date, timedelta
  8. from openerp import api, fields, models, exceptions, _
  9. class AccountJournalLedgerReport(models.TransientModel):
  10. _name = "account.journal.entries.report"
  11. _description = "Print Journal Ledger"
  12. @api.model
  13. def _default_journal_ids(self):
  14. return self.env['account.journal'].search([])
  15. journal_ids = fields.Many2many(
  16. comodel_name='account.journal',
  17. relation="account_journal_entries_report_journals_rel",
  18. string='Journals', required=True, default=_default_journal_ids,
  19. )
  20. date_start = fields.Date(required=True,
  21. default=fields.Date.to_string(
  22. date.today()-timedelta(days=90)))
  23. date_end = fields.Date(required=True,
  24. default=fields.Date.to_string(date.today()))
  25. sort_selection = fields.Selection(
  26. [('date', 'By date'),
  27. ('name', 'By entry number'),
  28. ('ref', 'By reference number')],
  29. string='Entries Sorted By', required=True, default='name',
  30. )
  31. landscape = fields.Boolean(string='Landscape mode', default=True)
  32. @api.multi
  33. def _check_data(self):
  34. if not self.journal_ids:
  35. return False
  36. journal_obj = self.env['account.journal']
  37. for journal in self.journal_ids:
  38. ids_journal = journal_obj.search(
  39. [('id', '=', journal.id)])
  40. if ids_journal:
  41. return True
  42. return False
  43. @api.multi
  44. def print_report(self):
  45. """Print report PDF"""
  46. # Check data
  47. if not self._check_data():
  48. raise exceptions.Warning(
  49. _('No data available'),
  50. _('No records found for your selection!'))
  51. report_name = 'account_journal_report.journal_ledger'
  52. # Call report
  53. data = self.read()[0]
  54. return self.env['report'].with_context(
  55. {'landscape': self.landscape}).get_action(self,
  56. report_name=report_name,
  57. data=data)
  58. @api.multi
  59. def print_report_xlsx(self):
  60. """Print report XLSX"""
  61. # Check data
  62. if not self._check_data():
  63. raise exceptions.Warning(
  64. _('No data available'),
  65. _('No records found for your selection!'))
  66. # Call report
  67. data = self.read()[0]
  68. report_name = 'account_journal_report.journal_ledger_xlsx'
  69. return {
  70. 'type': 'ir.actions.report.xml',
  71. 'report_name': report_name,
  72. 'report_type': 'xlsx',
  73. 'datas': data}