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.

159 lines
4.8 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=False,
  13. ondelete='cascade',
  14. )
  15. date_range_id = fields.Many2one(
  16. comodel_name='date.range',
  17. string='Date range'
  18. )
  19. date_from = fields.Date(
  20. string="Start date",
  21. required=True
  22. )
  23. date_to = fields.Date(
  24. string="End date",
  25. required=True
  26. )
  27. journal_ids = fields.Many2many(
  28. comodel_name='account.journal',
  29. string="Journals",
  30. required=False,
  31. )
  32. move_target = fields.Selection(
  33. selection='_get_move_targets',
  34. default='all',
  35. required=True,
  36. )
  37. foreign_currency = fields.Boolean()
  38. sort_option = fields.Selection(
  39. selection='_get_sort_options',
  40. string="Sort entries by",
  41. default='move_name',
  42. required=True,
  43. )
  44. group_option = fields.Selection(
  45. selection='_get_group_options',
  46. string="Group entries by",
  47. default='journal',
  48. required=True,
  49. )
  50. with_account_name = fields.Boolean(
  51. default=False,
  52. )
  53. @api.model
  54. def _get_move_targets(self):
  55. return [
  56. ('all', _("All")),
  57. ('posted', _("Posted")),
  58. ('draft', _("Not Posted"))
  59. ]
  60. @api.model
  61. def _get_sort_options(self):
  62. return [
  63. ('move_name', _("Entry number")),
  64. ('date', _("Date")),
  65. ]
  66. @api.model
  67. def _get_group_options(self):
  68. return [
  69. ('journal', _("Journal")),
  70. ('none', _("No group")),
  71. ]
  72. @api.onchange('date_range_id')
  73. def onchange_date_range_id(self):
  74. self.date_from = self.date_range_id.date_start
  75. self.date_to = self.date_range_id.date_end
  76. @api.onchange('company_id')
  77. def onchange_company_id(self):
  78. """Handle company change."""
  79. if self.company_id and self.date_range_id.company_id and \
  80. self.date_range_id.company_id != self.company_id:
  81. self.date_range_id = False
  82. if self.company_id and self.journal_ids:
  83. self.journal_ids = self.journal_ids.filtered(
  84. lambda p: p.company_id == self.company_id or not p.company_id)
  85. res = {'domain': {'journal_ids': []}}
  86. if not self.company_id:
  87. return res
  88. else:
  89. res['domain']['journal_ids'] += [
  90. ('company_id', '=', self.company_id.id)]
  91. return res
  92. @api.multi
  93. def button_export_html(self):
  94. self.ensure_one()
  95. action = self.env.ref(
  96. 'account_financial_report_qweb.action_report_journal_ledger')
  97. vals = action.read()[0]
  98. context1 = vals.get('context', {})
  99. if isinstance(context1, basestring):
  100. context1 = safe_eval(context1)
  101. model = self.env['report_journal_qweb']
  102. report = model.create(self._prepare_report_journal())
  103. report.compute_data_for_report()
  104. context1['active_id'] = report.id
  105. context1['active_ids'] = report.ids
  106. vals['context'] = context1
  107. return vals
  108. @api.multi
  109. def button_export_pdf(self):
  110. self.ensure_one()
  111. report_type = 'qweb-pdf'
  112. return self._export(report_type)
  113. @api.multi
  114. def button_export_xlsx(self):
  115. self.ensure_one()
  116. report_type = 'xlsx'
  117. return self._export(report_type)
  118. @api.multi
  119. def _prepare_report_journal(self):
  120. self.ensure_one()
  121. journals = self.journal_ids
  122. if not journals:
  123. # Not selecting a journal means that we'll display all journals
  124. journals = self.env['account.journal'].search(
  125. [('company_id', '=', self.company_id.id)])
  126. return {
  127. 'date_from': self.date_from,
  128. 'date_to': self.date_to,
  129. 'move_target': self.move_target,
  130. 'foreign_currency': self.foreign_currency,
  131. 'company_id': self.company_id.id,
  132. 'journal_ids': [(6, 0, journals.ids)],
  133. 'sort_option': self.sort_option,
  134. 'group_option': self.group_option,
  135. 'with_account_name': self.with_account_name,
  136. }
  137. @api.multi
  138. def _export(self, report_type):
  139. """Default export is PDF."""
  140. self.ensure_one()
  141. model = self.env['report_journal_qweb']
  142. report = model.create(self._prepare_report_journal())
  143. report.compute_data_for_report()
  144. return report.print_report(report_type)