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.

107 lines
3.6 KiB

  1. # Copyright 2018 Forest and Biomass Romania
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. from odoo import api, fields, models, _
  4. from odoo.exceptions import ValidationError
  5. class VATReportWizard(models.TransientModel):
  6. _name = "vat.report.wizard"
  7. _description = "VAT Report Wizard"
  8. company_id = fields.Many2one(
  9. comodel_name='res.company',
  10. default=lambda self: self.env.user.company_id,
  11. required=False,
  12. string='Company'
  13. )
  14. date_range_id = fields.Many2one(
  15. comodel_name='date.range',
  16. string='Date range'
  17. )
  18. date_from = fields.Date('Start Date', required=True)
  19. date_to = fields.Date('End Date', required=True)
  20. based_on = fields.Selection([('taxtags', 'Tax Tags'),
  21. ('taxgroups', 'Tax Groups')],
  22. string='Based On',
  23. required=True,
  24. default='taxtags')
  25. tax_detail = fields.Boolean('Detail Taxes')
  26. @api.onchange('company_id')
  27. def onchange_company_id(self):
  28. if self.company_id and self.date_range_id.company_id and \
  29. self.date_range_id.company_id != self.company_id:
  30. self.date_range_id = False
  31. res = {'domain': {'date_range_id': [],
  32. }
  33. }
  34. if not self.company_id:
  35. return res
  36. else:
  37. res['domain']['date_range_id'] += [
  38. '|', ('company_id', '=', self.company_id.id),
  39. ('company_id', '=', False)]
  40. return res
  41. @api.onchange('date_range_id')
  42. def onchange_date_range_id(self):
  43. """Handle date range change."""
  44. self.date_from = self.date_range_id.date_start
  45. self.date_to = self.date_range_id.date_end
  46. @api.multi
  47. @api.constrains('company_id', 'date_range_id')
  48. def _check_company_id_date_range_id(self):
  49. for rec in self.sudo():
  50. if rec.company_id and rec.date_range_id.company_id and\
  51. rec.company_id != rec.date_range_id.company_id:
  52. raise ValidationError(
  53. _('The Company in the Vat Report Wizard and in '
  54. 'Date Range must be the same.'))
  55. @api.multi
  56. def _print_report(self, report_type):
  57. self.ensure_one()
  58. data = self._prepare_vat_report()
  59. if report_type == 'xlsx':
  60. report_name = 'a_f_r.report_vat_report_xlsx'
  61. else:
  62. report_name = 'account_financial_report.vat_report'
  63. return self.env['ir.actions.report'].search(
  64. [('report_name', '=', report_name),
  65. ('report_type', '=', report_type)], limit=1).report_action(
  66. self, data=data)
  67. @api.multi
  68. def button_export_html(self):
  69. self.ensure_one()
  70. report_type = 'qweb-html'
  71. return self._export(report_type)
  72. @api.multi
  73. def button_export_pdf(self):
  74. self.ensure_one()
  75. report_type = 'qweb-pdf'
  76. return self._export(report_type)
  77. @api.multi
  78. def button_export_xlsx(self):
  79. self.ensure_one()
  80. report_type = 'xlsx'
  81. return self._export(report_type)
  82. def _prepare_vat_report(self):
  83. self.ensure_one()
  84. return {
  85. 'wizard_id': self.id,
  86. 'company_id': self.company_id.id,
  87. 'date_from': self.date_from,
  88. 'date_to': self.date_to,
  89. 'based_on': self.based_on,
  90. 'tax_detail': self.tax_detail,
  91. }
  92. def _export(self, report_type):
  93. """Default export is PDF."""
  94. return self._print_report(report_type)