【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件

添加了一个三级菜单,由此创建向导,可选择按照性别分类进行打印,打印符合条件的PDF报表

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第1张图片

打印出的PDF表如图所示:

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第2张图片

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第3张图片

 代码部分:先写向导部分,创建一个新的向导 patient_report:【向导文件放在wizard里】

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第4张图片

py文件代码:【all_patient_report.py】

from odoo import fields, models, api, _


class PatientReportWizard(models.TransientModel):
    _name = "patient.report.wizard"
    _description = "这是一个瞬态模型patient_report_wizard"

    gender = fields.Selection([('male', '男的'), ('female', '女的'), ('other', '其它')],
                              required=True, default='other')
    age = fields.Integer(string="Age")

    def action_print_report(self):
        data = {
            'form_data': self.read()[0],
            'email': '[email protected]',
        }
        return self.env.ref('mysale.action_report_all_patient_details').report_action(self, data=data)

xml文件代码:【all_patient_report_view.xml】



    
        patient_report
        ir.actions.act_window
        patient.report.wizard
        form
        
        new
    

    
        patient_report_form
        patient.report.wizard
        
            

还是要在init与manifest文件里配置一下的,导入模块以及添加视图文件,还有就是设置权限。

再写报告与模板部分:放在【report】文件中:

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第5张图片

 py文件代码:【all_patient_report.py】

from odoo import api, fields, models


class AllPatientReport(models.AbstractModel):
    _name = 'report.mysale.report_all_patient_list'
    _description = 'patient Report'

    @api.model
    def _get_report_values(self, docids, data=None):
        print("----", docids, data)
        domain = []
        gender = data.get('form_data').get('gender')
        age = data.get('form_data').get('age')
        if gender:
            domain += [('gender', '=', gender)]
        if age != 0:
            domain += [('age', '=', age)]
        docs = self.env['mysale.mysale'].search(domain)
        return {
            'docs': docs,
            'email': '[email protected]'
        }

这里是一个简单逻辑:首先我们可以先打印出来data里边的东西看一下:【data内容】

---- None {'context': {'lang': 'zh_CN', 'tz': 'Asia/Shanghai', 
'uid': 2, 'allowed_company_ids': [1], 'active_model': 'patient.report.wizard', 
'active_id': 18, 'active_ids': [18]}, 
'form_data': {'id': 18, 'gender': 'other', 'age': 0, 
'__last_update': '2022-04-24 08:18:12', 
'display_name': 'patient.report.wizard,18', 
'create_uid': [2, 'Administrator'], 'create_date': '2022-04-24 08:18:12',
 'write_uid': [2, 'Administrator'], 'write_date': '2022-04-24 08:18:12'}, 
'email': '[email protected]', 'report_type': 'pdf'}

'form_data'出现在wizard/all_patient_report.py中,从data.get('form_data').get('gender')拿到gender里边的value然后进行对比判断里边的值是【male】【female】或者【other】然后通过domain域做筛选,年龄判断的话不为0即可。email字段下面再说。

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第6张图片

xml文件代码:【all_patient_list.xml】



    

模板中添加email的视图   Emai  lreport的py的return中添加了'email': '自定义的邮箱@163.com'在模板中能直接显示出来打印,但是控制台的data里拿不到,把这个'email': '自定义的邮箱@163.com'放在瞬态模型的py中控制台输出data中就能拿得到email这个字段以及后面的值,暂且没搞懂,记录一下以后研究。

xml文件代码:【report.xml】




    
        patient details
        patient.report.wizard
        qweb-pdf
        mysale.report_all_patient_list
        mysale.report_all_patient_list
        
        report
    

在report.xml里添加的动作都是ir.actions.report的动作,直接在这里显示:【patient details】

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第7张图片

 这个动作ID【action_report_all_patient_details】在瞬态模型的return中出现过,应该是它的一个return动作

【odoo15】odoo中用向导创建PDF报告,并添加简单的打印条件_第8张图片

至于打印出来的公司logo与公司名可以在: 【设置---> 用户和公司--->公司】中设置。

总结:本节非常的迷茫,并没有搞太懂这个案例,如果可以我希望能听中文的视频,英文的教程真是太难懂了。

你可能感兴趣的:(odoo,python)