美文网首页odoo
odoo12 动作按钮里面增加菜单(打印Execel数据文件)

odoo12 动作按钮里面增加菜单(打印Execel数据文件)

作者: 隔壁小红馆 | 来源:发表于2020-01-09 16:33 被阅读0次
    图片.png

    由于需求要在模型(ticket.management)的动作按钮里面添加菜单,并打印当前的execl数据表
    首先就是建立一个菜单

    <act_window id="export_wizard_action"
                 name="导出Excel"
                 src_model="ticket.management"
                 res_model="ticket.wizard"
                 view_type="form" view_mode="form"
                 target="new"/>
    

    在act_window里面,其中

    • src_model 表示在哪个 model 上添加这个 act_window
    • res_model 表示这个 act_window 将会跳转到哪一个 model
    • view_type res_model 显示的视图类型
    • view_mode res_model 显示的视图种类列表
    • target 视图在当前视图(src_model) 上的打开方式。
      1. 在当前视图上打开(current)
      2.使用全屏模式(fullscreen)
      3.使用弹出框(new)
      4.用main代替current来清除导航

    这是就是已经有了菜单,但是要直接点击菜单下载文件,要创建文件去存这个文件,以及进行进入操作。
    下面就是创建模型(自定义)和写入数据的操作:

    from odoo import fields, models, api
    import base64
    import xlwt
    from io import BytesIO
    
    
    class TicketWizard(models.Model):
        _name = 'ticket.wizard'
    
        file = fields.Binary('导出文件')
    
        def generate_excel(self, product_ids):
            """
            根据产品数据导出excel
            :param product_ids: product.template()
            :return:
            """
            workbook = xlwt.Workbook(encoding='utf-8')
            mf = xlwt.XFStyle() #处理时间格式
            mf.num_format_str = 'yyyy/mm/dd'
            worksheet = workbook.add_sheet('测试 ', cell_overwrite_ok=True)
    
            # add header
            header = ['名称', '价格', '总票数', '余票', '门票时间', '淡旺季', '售出', '实际进入']
            for col in range(len(header)):
                worksheet.write(0, col, header[col])
    
            # add data
            # product_ids = self.env['ticket.management'].search([])  #用于取的此模型的所有数据
            for row in range(1, len(product_ids)+1):
                product_id = product_ids[row-1]
                worksheet.write(row, 0, product_id.name)
                worksheet.write(row, 1, product_id.price)
                worksheet.write(row, 2, product_id.total_number)
                worksheet.write(row, 3, product_id.surplus)
                worksheet.write(row, 4, product_id.ticket_date, mf)
                worksheet.write(row, 5, product_id.price_id.name)
                worksheet.write(row, 6, product_id.sold_out)
                worksheet.write(row, 7, product_id.actual_entry)
    
    
            # save
            buffer = BytesIO()
            workbook.save(buffer)
            return base64.encodebytes(buffer.getvalue())
    
        @api.multi
        def action_export(self):
            context = dict(self._context or {})
            active_ids = context.get('active_ids', []) or []
            product_tmpl_ids = self.env['ticket.management'].search([('id', 'in', active_ids)])
            self.file = self.generate_excel(product_tmpl_ids)
    
            value = dict(
                type='ir.actions.act_url',
                target='new',
                url='/web/content?model=%s&id=%s&field=file&download=true&filename=product.xls' % (self._name, self.id),
            )
            return value
    

    即可打印成功

    • 未处理日期前


      未处理日期前.png
    • 处理日期后


      处理日期后.png

    相关文章

      网友评论

        本文标题:odoo12 动作按钮里面增加菜单(打印Execel数据文件)

        本文链接:https://www.haomeiwen.com/subject/mjgyactx.html