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.

139 lines
4.6 KiB

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