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.

99 lines
4.3 KiB

  1. # -*- encoding: utf-8 -*-
  2. ##############################################################################
  3. # For copyright and license notices, see __openerp__.py file in root directory
  4. ##############################################################################
  5. from openerp import models, api, exceptions, _
  6. class IrActionsReport(models.Model):
  7. _inherit = 'ir.actions.report.xml'
  8. def _prepare_qweb_view_data(self, qweb_name, arch):
  9. return {
  10. 'name': qweb_name,
  11. 'mode': 'primary',
  12. 'type': 'qweb',
  13. 'arch': arch,
  14. }
  15. def _prepare_model_data_data(self, qweb_name, module, qweb_view):
  16. return {
  17. 'module': module,
  18. 'name': qweb_name,
  19. 'res_id': qweb_view.id,
  20. 'model': 'ir.ui.view',
  21. }
  22. def _prepare_value_view_data(self, name, model):
  23. return {
  24. 'name': name,
  25. 'model': model,
  26. 'key2': 'client_print_multi',
  27. 'value_unpickle': 'ir.actions.report.xml,%s' % self.id,
  28. }
  29. def _create_qweb(self, name, qweb_name, module, model, arch):
  30. qweb_view_data = self._prepare_qweb_view_data(qweb_name, arch)
  31. qweb_view = self.env['ir.ui.view'].create(qweb_view_data)
  32. model_data_data = self._prepare_model_data_data(
  33. qweb_name, module, qweb_view)
  34. self.env['ir.model.data'].create(model_data_data)
  35. value_view_data = self._prepare_value_view_data(
  36. name, model)
  37. self.env['ir.values'].sudo().create(value_view_data)
  38. @api.model
  39. def create(self, values):
  40. if not self.env.context.get('enable_duplication', False):
  41. return super(IrActionsReport, self).create(values)
  42. if (values.get('report_type') in ['qweb-pdf', 'qweb-html'] and
  43. values.get('report_name') and
  44. values['report_name'].find('.') == -1):
  45. raise exceptions.Warning(
  46. _("Template Name must contain at least a dot in it's name"))
  47. report_xml = super(IrActionsReport, self).create(values)
  48. if values.get('report_type') in ['qweb-pdf', 'qweb-html']:
  49. report_view_ids = self.env.context.get('report_views', False)
  50. suffix = self.env.context.get('suffix', 'copy')
  51. name = values['name']
  52. model = values['model']
  53. report = values['report_name']
  54. module = report.split('.')[0]
  55. report_name = report.split('.')[1]
  56. for report_view in self.env['ir.ui.view'].browse(report_view_ids):
  57. origin_name = report_name.replace(('_%s' % suffix), '')
  58. origin_module = module.replace(('_%s' % suffix), '')
  59. new_report_name = '%s_%s' % (origin_name, suffix)
  60. qweb_name = report_view.name.replace(
  61. origin_name, new_report_name)
  62. arch = report_view.arch.replace(
  63. origin_name, new_report_name).replace(origin_module + '.',
  64. module + '.')
  65. report_xml._create_qweb(
  66. name, qweb_name, module, model, arch)
  67. if not report_view_ids:
  68. arch = ('<?xml version="1.0"?>\n'
  69. '<t t-name="%s">\n</t>' % report_name)
  70. report_xml._create_qweb(name, report_name, module, model, arch)
  71. return report_xml
  72. @api.one
  73. def copy(self, default=None):
  74. if not self.env.context.get('enable_duplication', False):
  75. return super(IrActionsReport, self).copy(default=default)
  76. if default is None:
  77. default = {}
  78. suffix = self.env.context.get('suffix', 'copy')
  79. default['name'] = '%s (%s)' % (self.name, suffix)
  80. module = '%s_%s' % (
  81. self.report_name.split('.')[0], suffix.lower())
  82. report = '%s_%s' % (self.report_name.split('.')[1], suffix.lower())
  83. default['report_name'] = '%s.%s' % (module, report)
  84. report_views = self.env['ir.ui.view'].search([
  85. ('name', 'ilike', self.report_name.split('.')[1]),
  86. ('type', '=', 'qweb')])
  87. return super(IrActionsReport,
  88. self.with_context(
  89. report_views=report_views.ids,
  90. suffix=suffix.lower())).copy(default=default)