添加了一个三级菜单,由此创建向导,可选择按照性别分类进行打印,打印符合条件的PDF报表
打印出的PDF表如图所示:
代码部分:先写向导部分,创建一个新的向导 patient_report:【向导文件放在wizard里】
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】文件中:
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字段下面再说。
xml文件代码:【all_patient_list.xml】
Patients
Name
Gender
Age
Email
模板中添加email的视图 Emai l
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】
这个动作ID【action_report_all_patient_details】在瞬态模型的return中出现过,应该是它的一个return动作
至于打印出来的公司logo与公司名可以在: 【设置---> 用户和公司--->公司】中设置。
总结:本节非常的迷茫,并没有搞太懂这个案例,如果可以我希望能听中文的视频,英文的教程真是太难懂了。