|
- # © 2016 Elico Corp (www.elico-corp.com).
- # © 2019 信莱德软件 (www.zhsunlight.cn).
- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
- from odoo import fields, models, api
- from odoo.tools.safe_eval import safe_eval
- import time
-
-
- class IrActionsReportXml(models.Model):
- _inherit = 'ir.actions.report'
- """
- 从14.0版本开始Selection字段开始支持ondelete属性,并且如果Selection字段是通过继承方式拓展了选项,
- 那么ondelete属性是必须要指定的。因此,要指定ondelete方法来指明模块在卸载时,应该如何处理这个新增的类型数据。
- set null:默认选项,将字段设置为False
- cascade:设置了这个选项的记录将被一同删除
- set default:将所有设置的了这个值的记录还原为默认值
- """
- report_type = fields.Selection(selection_add=[('docx', 'Docx')],
- ondelete={'docx': "set default"}, default="docx")
- template_file = fields.Char('Template File')
- output_type = fields.Selection(
- [
- ('pdf', 'PDF'),
- ('docx', 'Docx'),
- ],
- 'Output Type', required=True, default='docx'
- )
-
- @api.model
- def get_from_report_name(self, report_name, report_type):
- return self.search(
- [("report_name", "=", report_name),
- ("report_type", "=", report_type)])
-
- def render_docx(self, res_ids, data):
- self.ensure_one()
- if self.report_type != "docx":
- raise RuntimeError(
- "docx rendition is only available on docx report.\n"
- "(current: '{}', expected 'docx'".format(self.report_type))
-
- docx = self.env['gooderp.report.docx'].create({
- 'ir_actions_report_id': self.id
- })
-
- return docx.create_report(res_ids, data)
-
-
-
- def gen_report_download_filename(self, res_ids, data):
- """Override this function to change the name of the downloaded report
- """
- self.ensure_one()
- report = self.get_from_report_name(self.report_name, self.report_type)
- if report.print_report_name and not len(res_ids) > 1:
- obj = self.env[self.model].browse(res_ids)
- return safe_eval(report.print_report_name,
- {'object': obj, 'time': time})
- return "%s.%s" % (self.name, self.output_type)
-
- """模型ir_action_repport从13版本升14版本后,其中方法render名称变为_render,
- 下面是参照13版本重新定义了render方法
- """
- def render(self, res_ids, data=None):
- report_type = self.report_type.lower().replace('-', '_')
- render_func = getattr(self, 'render_' + report_type, None)
- if not render_func:
- return None
- return render_func(res_ids, data=data)
|