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.

141 lines
4.0 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2017 ACSONE SA/NV
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
  4. from odoo import api, fields, models, _
  5. from odoo.tools.safe_eval import safe_eval
  6. class JournalReportWizard(models.TransientModel):
  7. _name = 'journal.report.wizard'
  8. company_id = fields.Many2one(
  9. comodel_name='res.company',
  10. default=lambda self: self.env.user.company_id,
  11. string='Company',
  12. required=True,
  13. ondelete='cascade',
  14. )
  15. date_range_id = fields.Many2one(
  16. comodel_name='date.range',
  17. string='Date range',
  18. domain="['|', "
  19. "('company_id', '=', False),"
  20. "('company_id', '=', company_id)]",
  21. )
  22. date_from = fields.Date(
  23. string="Start date",
  24. required=True
  25. )
  26. date_to = fields.Date(
  27. string="End date",
  28. required=True
  29. )
  30. journal_ids = fields.Many2many(
  31. comodel_name='account.journal',
  32. string="Journals",
  33. domain="[('company_id', '=', company_id)]",
  34. required=True,
  35. )
  36. move_target = fields.Selection(
  37. selection='_get_move_targets',
  38. default='all',
  39. required=True,
  40. )
  41. foreign_currency = fields.Boolean()
  42. sort_option = fields.Selection(
  43. selection='_get_sort_options',
  44. string="Sort entries by",
  45. default='move_name',
  46. required=True,
  47. )
  48. group_option = fields.Selection(
  49. selection='_get_group_options',
  50. string="Group entries by",
  51. default='journal',
  52. required=True,
  53. )
  54. with_account_name = fields.Boolean(
  55. default=False,
  56. )
  57. @api.model
  58. def _get_move_targets(self):
  59. return [
  60. ('all', _("All")),
  61. ('posted', _("Posted")),
  62. ('draft', _("Not Posted"))
  63. ]
  64. @api.model
  65. def _get_sort_options(self):
  66. return [
  67. ('move_name', _("Entry number")),
  68. ('date', _("Date")),
  69. ]
  70. @api.model
  71. def _get_group_options(self):
  72. return [
  73. ('journal', _("Journal")),
  74. ('none', _("No group")),
  75. ]
  76. @api.onchange('date_range_id')
  77. def onchange_date_range_id(self):
  78. self.date_from = self.date_range_id.date_start
  79. self.date_to = self.date_range_id.date_end
  80. @api.multi
  81. def button_export_html(self):
  82. self.ensure_one()
  83. action = self.env.ref(
  84. 'account_financial_report_qweb.action_report_journal_ledger')
  85. vals = action.read()[0]
  86. context1 = vals.get('context', {})
  87. if isinstance(context1, basestring):
  88. context1 = safe_eval(context1)
  89. model = self.env['report_journal_qweb']
  90. report = model.create(self._prepare_report_journal())
  91. report.compute_data_for_report()
  92. context1['active_id'] = report.id
  93. context1['active_ids'] = report.ids
  94. vals['context'] = context1
  95. return vals
  96. @api.multi
  97. def button_export_pdf(self):
  98. self.ensure_one()
  99. report_type = 'qweb-pdf'
  100. return self._export(report_type)
  101. @api.multi
  102. def button_export_xlsx(self):
  103. self.ensure_one()
  104. report_type = 'xlsx'
  105. return self._export(report_type)
  106. @api.multi
  107. def _prepare_report_journal(self):
  108. self.ensure_one()
  109. return {
  110. 'date_from': self.date_from,
  111. 'date_to': self.date_to,
  112. 'move_target': self.move_target,
  113. 'foreign_currency': self.foreign_currency,
  114. 'company_id': self.company_id.id,
  115. 'journal_ids': [(6, 0, self.journal_ids.ids)],
  116. 'sort_option': self.sort_option,
  117. 'group_option': self.group_option,
  118. 'with_account_name': self.with_account_name,
  119. }
  120. @api.multi
  121. def _export(self, report_type):
  122. """Default export is PDF."""
  123. self.ensure_one()
  124. model = self.env['report_journal_qweb']
  125. report = model.create(self._prepare_report_journal())
  126. report.compute_data_for_report()
  127. return report.print_report(report_type)