是否可以从其他模型打印报告?

问题描述

我正在开发一个模块来计算工资。

在计算完所有工资后,以“hr.contract”形式,我可以选择打印报告。

这份报告必须与我可以以“hr.payslip”形式打印的报告相同。

所以,问题是是否有可能做到这一点。我试过了,但结果很糟糕。

我已经试过了:

class HrContract(models.Model):
    _inherit = 'hr.contract'

    def print_nominee_report(self):
        # I get this values from another methods,# I put 1 and 20 just to avoid confution in the question.
        run_id = 1
        indicador_id = 20

        # this method generate a payslip from which I want the report.
        payslip = self.generate_payslip(run_id,self.employee_id.id,indicador_id,self.id) 
        ids = [payslip.id]
        data = {
            'ids': ids,'model': 'hr.payslip','form': self.env['hr.payslip'].search([('id','=',payslip.id)])
        }
        return self.env.ref('hr_payroll.action_report_payslip').report_action(self,data=data)

但结果是一个空的 PDF。

解决方法

自己想办法。

首先,我做了功能打印原始模型'hr.payslip'的报告:

class HrPayslip(models.Model):
    _inherit = 'hr.payslip'

    def print_nominee_report(self):
        return self.env.ref('hr_payroll.action_report_payslip').report_action(self)

然后,从 hr.contract 调用函数以使用工资单实例打印报告:

class HrContract(models.Model):
    _inherit = 'hr.contract'

    def print_nominee_report(self):
        # I get this values from another methods,# I put 1 and 20 just to avoid confution in the question.
        run_id = 1
        indicador_id = 20

        payslip = self.generate_payslip(run_id,self.employee_id.id,indicador_id,self.id) 
        return payslip.print_nominee_report()