Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

70 rindas
2.8KB

  1. # © 2016 Elico Corp (www.elico-corp.com).
  2. # © 2019 信莱德软件 (www.zhsunlight.cn).
  3. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  4. from odoo import fields, models, api
  5. from odoo.tools.safe_eval import safe_eval
  6. import time
  7. class IrActionsReportXml(models.Model):
  8. _inherit = 'ir.actions.report'
  9. """
  10. 从14.0版本开始Selection字段开始支持ondelete属性,并且如果Selection字段是通过继承方式拓展了选项,
  11. 那么ondelete属性是必须要指定的。因此,要指定ondelete方法来指明模块在卸载时,应该如何处理这个新增的类型数据。
  12. set null:默认选项,将字段设置为False
  13. cascade:设置了这个选项的记录将被一同删除
  14. set default:将所有设置的了这个值的记录还原为默认值
  15. """
  16. report_type = fields.Selection(selection_add=[('docx', 'Docx')],
  17. ondelete={'docx': "set default"}, default="docx")
  18. template_file = fields.Char('Template File')
  19. output_type = fields.Selection(
  20. [
  21. ('pdf', 'PDF'),
  22. ('docx', 'Docx'),
  23. ],
  24. 'Output Type', required=True, default='docx'
  25. )
  26. @api.model
  27. def get_from_report_name(self, report_name, report_type):
  28. return self.search(
  29. [("report_name", "=", report_name),
  30. ("report_type", "=", report_type)])
  31. def render_docx(self, res_ids, data):
  32. self.ensure_one()
  33. if self.report_type != "docx":
  34. raise RuntimeError(
  35. "docx rendition is only available on docx report.\n"
  36. "(current: '{}', expected 'docx'".format(self.report_type))
  37. docx = self.env['gooderp.report.docx'].create({
  38. 'ir_actions_report_id': self.id
  39. })
  40. return docx.create_report(res_ids, data)
  41. def gen_report_download_filename(self, res_ids, data):
  42. """Override this function to change the name of the downloaded report
  43. """
  44. self.ensure_one()
  45. report = self.get_from_report_name(self.report_name, self.report_type)
  46. if report.print_report_name and not len(res_ids) > 1:
  47. obj = self.env[self.model].browse(res_ids)
  48. return safe_eval(report.print_report_name,
  49. {'object': obj, 'time': time})
  50. return "%s.%s" % (self.name, self.output_type)
  51. """模型ir_action_repport从13版本升14版本后,其中方法render名称变为_render,
  52. 下面是参照13版本重新定义了render方法
  53. """
  54. def render(self, res_ids, data=None):
  55. report_type = self.report_type.lower().replace('-', '_')
  56. render_func = getattr(self, 'render_' + report_type, None)
  57. if not render_func:
  58. return None
  59. return render_func(res_ids, data=data)
上海开阖软件有限公司 沪ICP备12045867号-1