odoo word导出数据为word文档

@route('/download/transcript')
    def download_transcript(self, **post):
        # 获取当前用户
        user_id = request.env.user
        # 获取学生数据
        student_id = user_id.partner_id
        # 数据文件
        template_file = None
        # 获取模板
        template_id = request.env['hw.exam.import.template'].sudo().search([('name', '=', '毕业生成绩单')])
        # 获取成绩
        score_ids = request.env['hw.score.enter'].sudo().search([('student_number', '=', student_id.student_number), ('score_efficient', '=', '1')])
        score_list = []
        # 总学分
        overall_credit = 0
        if score_ids.exists():
            for score_id in score_ids:
                overall_credit += score_id.credit
                score_list.append({
                    'course': score_id.course_id.name,  # 课程名称
                    'typee': '必修课' if score_id.typee=='Compulsory' else '选修课',  # 课程性质
                    'semester_id': score_id.semester_id.name,  # 学期
                    'credit': score_id.credit,  # 学分
                    'scoresemester': score_id.scoresemester,  # 成绩
                })
        else:
            return
        # 获取文件
        if template_id.exists():
            template_file = template_id.template
        else:
            return
        datas=base64.b64decode(template_file or b'')
        doc = DocxTemplate(io.BytesIO(datas))
        # 计算出生日期
        date_of_birth = ''
        identification = student_id.identification
        if len(identification) == 18:
            date_of_birth = datetime.datetime.strptime(identification[6:14:], '%Y%m%d').date()
        else:
            return
        # 生成数据
        context = {
            'student_number': student_id.student_number,  # 学号
            'name': student_id.name,  # 姓名
            'sex': '男' if student_id.sex == 'male' else '女',  # 性别
            'date_of_birth': date_of_birth,  # 出生日期
            'department_id': student_id.department_id.name,  # 院系
            'major_id': student_id.major_id.name,  # 专业
            'address': student_id.address, # 家庭住址
            'educational_system_id':student_id.educational_system_id.name,  # 学制
            'class_id': student_id.class_id.name,  # 班级
            'mobile': student_id.mobile,  # 手机号
            'overall_credit': overall_credit,  # 总学分
            'identification': student_id.identification,  # 身份证号
            'score_list': score_list,  # 成绩列表
            'date': datetime.date.today(),  # 下载申请表日期
        }
        # 生成模板
        doc.render(context)
        # 获取选然后的数据
        buffer = io.BytesIO()
        doc.save(buffer)
        binary = base64.encodebytes(buffer.getvalue())
        # 返回下载文档
        return request.make_response(base64.b64decode(binary),
                                     [('Content-Type', 'application/octet-stream'), (
                                         'Content-Disposition',
                                         "attachment; filename=%s" % template_id.template_name.encode(
                                             "utf-8").decode("latin1"))])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值