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

图片.png

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


在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数据文件))