odoo 响应下载文件
odoo中如何实现点击按钮下载文件报告、报表到页面左下角
models.py
# -*- coding: utf-8 -*-
from openerp import models, fields, api
import logging try:
import xlwt
except ImportError:
xlwt = None import json
import urllib2 _logger = logging.getLogger(__name__) class test_module_template(models.Model):
_name = 'test.module.template'
_description = u'测试模块' def request_pdf_from(self, data, response):
""" 从服务器请求pdf """ server_url = "https://zhaichangyuan.jsreportonline.net/api/report"
server_data = {
"template": {"name": "template-main"},
'Headers': 'Content-Type: application/json',
# 'subject': '测试jsreport接口',
# 'BODY': {
# # "name": "invoice-main",
# # "recipe": "html-to-xlsx",
# # "engine": "handlebars",
# # "content": "<h1>sample content</h1>",
# },
"data": {
"number": "FP201904120003",
"seller": {
"name": u"北京百星电子系统有限公司",
"road": u"北京·枢密院",
"country": u"中国.北京"
},
"buyer": {
"name": u"中国建筑研究设计院",
"road": u"北京市海淀区中关村创业大厦",
"country": u"中国.北京"
},
"items": [
{
"name": u"网页设计",
"price": 400.00,
"city": "Beijing"
},
{
"name": u"程序开发",
"price": 1500.00,
"city": "Shanghai"
},
{
"name": u"系统运维",
"price": 600.00,
"city": "Beijing"
},
{
"name": u"硬件维护",
"price": 700.00,
"city": "Shenzhen"
},
{
"name": u"AI智能",
"price": 300.00,
"city": "Shanghai"
},
{
"name": u"软件开发",
"price": 100.00,
"city": "Wuhan"
},
{
"name": u"程序测试",
"price": 800.00,
"city": "Shanghai"
}
]
},
"options": {"timeout": 60000}
} headers = {
# "Accept": "application/pdf",
"Content-Type": "application/json",
"Authorization": "Basic d29ybWVyQHdvcm1lLmNuOklPUGlvcCooKTg5MA==",
}
request = urllib2.Request(server_url, data=json.dumps(server_data), headers=headers)
res = urllib2.urlopen(request)
#print res.read()
# file_Handle = open('report_test111.xlsx', 'w')
# file_Handle.write(response.read())
# file_Handle.close()
response.set_data(res.read())
return response @api.multi
def action_print(self):
return {
'type': 'ir_actions_jsreport_xls_download',
'data': {
'model': '',
'options': '',
'report_name': ''
}
} controllers/mains.py
# -*- coding: utf-8 -*- import logging
import simplejson
from openerp import http
from openerp.http import request, Response _logger = logging.getLogger(__name__) class JsreportPrint(http.Controller): @http.route('/jsreport/xls/download', type='http', auth='public', methods=['POST'], csrf=False)
def jsreport_xls_download(self, action, token, **kw):
_logger.info(action)
data = simplejson.loads(action)
options = data.get('data').get('options')
report_name = u"jsreport_report"
uid = request.session.uid response = request.make_response(None,
headers=[('Content-Type', 'application/vnd.ms-excel'),
('Content-Disposition', 'attachment; filename=' + report_name + '.xlsx;')],
cookies={'fileToken': token}) obj = request.env['test.module.template'].sudo(uid)
return obj.request_pdf_from(options, response) static/src/js/jsreport_xls_print.js
openerp.test_module_template = function (instance) {
instance.web.ActionManager = instance.web.ActionManager.extend({
ir_actions_jsreport_xls_download: function (action, options) {
var self = this;
instance.web.blockUI();
action = _.clone(action);
var c = instance.webclient.crashmanager;
console.log(action);
return $.Deferred(function (d) {
self.session.get_file({
url: '/jsreport/xls/download',
data: {action: JSON.stringify(action)},
complete: instance.web.unblockUI,
success: function () {
if (!self.dialog) {
options.on_close();
}
self.dialog_stop();
d.resolve();
},
error: function () {
c.rpc_error.apply(c, arguments);
d.reject();
}
});
});
}
})
}
views/template.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- vim:fdn=3:
-->
<openerp>
<data>
<template id="jsreport_xls_print" name="jsreport_xls_print" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/test_module_template/static/src/js/jsreport_xls_print.js"></script>
</xpath>
</template>
</data>
</openerp> views/views.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="test_module_template_form" model="ir.ui.view">
<field name="name">test.module.template.form</field>
<field name="model">test.module.template</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form>
<header>
<button name="action_print" class="oe_highlight" string="打印" type="object"/>
</header>
</form>
</field>
</record> <record id="test_module_template_action" model="ir.actions.act_window">
<field name="name">测试</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">test.module.template</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">测试单</p>
</field>
</record>
<menuitem name="主测试按钮" id="test_module_template_1" sequence="10"/>
<menuitem name="主测试按钮1" id="test_module_template_2" parent="test_module_template_1" sequence="10"/>
<menuitem name="测试按钮" id="test_module_template" sequence="10" parent="test_module_template_2"
action="test_module_template_action"/>
</data>
</openerp>
odoo 响应下载文件的更多相关文章
- CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口
上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...
- Servlet下载文件和http响应
下载文件等: 1.得到公共的内容ServletContext sc = this.getServletContext(); 2.在链接名字后面加个? 一个参数?参数1=值 两个参数?参数1=值& ...
- odoo按钮触发下载文件
测试环境:Odoo8.0 1.在你的模块中创建一个方法,返回url 举个例子, @api.multi def get_stock_file(self): return{'type':'ir.actio ...
- [ASP.NET] 解决点击控件下载文件没有响应的问题
下载文件的方法是使用http响应输出流来实现的,使用到了response.write() 导致下载文件时点击控件出错,没有响应,也获取不了文件 是因为在母版页使用了updatepanel,因此回传时发 ...
- 下载文件时HttpServletResponse设置响应头的Content-Disposition属性
Content-Disposition属性有两种类型 inline :将文件内容直接显示在页面 attachment:弹出对话框让用户下载 弹出对话框下载文件 resp.setHeader(" ...
- Vue.js +pdf.js 处理响应pdf文件流数据,前端转图片预览不可下载
使用场景及原因 实际业务中,一些说明书或协议仅支持用户在线预览,为避免用户自行下载,并进行修改,引发纠纷,特将文件已文件流的形式,传给前端并转为图片显示,此时可能会有人问,为什么不直接在后端转图片,前 ...
- .net 下载文件几种方式
方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件. protected void Button1_Click(object sender, ...
- LoadRunner上传及下载文件
(1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/cons ...
- LoadRunner下载文件脚本
LoadRunner下载文件脚本 在看普泽关于pezybase的测试报告的时候,发现里面有用到jmeter(http协议)并发测试下载文件,考虑到后面可能需要在公司pezybase的并发下载,把之前 ...
随机推荐
- spring cloud 注册中心--eureka注册与发现
本文详细介绍spring cloud微服务的默认注册中心--eureka注册与发现.开发环境需要Windows系统.jdk和intellij idea.与zookeeper注册中心相比,eureka不 ...
- 手把手教你写vue插件并发布(一)
vue的插件开发 这篇文章较长,需要一定的阅读时间.这里有一份改善版本的插件笔记,在一个项目下完成开发.测试.发布的全过程.https://www.cnblogs.com/adouwt/p/96555 ...
- centos 搭建 leanote
centos 搭建leanote(蚂蚁笔记) 至于蚂蚁笔记是什么可以看官网的介绍,https://leanote.com/ ,我只能说 nice,你值得拥有. 开始搭建(源码安装,安装路径在 /et ...
- 【原创】Java基础之常用JVM工具
查看当前所有java进程 # jps 查看某个进程的堆内存占用情况 # jmap -heap $pid 查看某个进程的堆内存中对象分布情况 # jmap -histo $pid 将某个进程的堆内存导出 ...
- unity setactive的使用
1.可以用本身移出布局来实现隐藏 2.RawImage的texture的设置生成的一定要及时消除,避免内存泄漏
- python 基于机器学习识别验证码
1.背景 验证码自动识别在模拟登陆上使用的较为广泛,一直有耳闻好多人在使用机器学习来识别验证码,最近因为刚好接触这方面的知识,所以特定研究了一番.发现网上已有很多基于machine learni ...
- 办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL
办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL 总体来说,VB的EXCEL导出效率还是蛮低的,就是一个小型化的办公用品管理软件,不再优化了. 时间紧迫,就没有从头到尾的用C#编写, ...
- C# 解压与压缩文件
解压文件 ,引用 SharpZipLib.dll类库 方法一: public void UnGzipFile(string zipfilename) { //同压缩文件同级同名的非压缩文件路径 var ...
- 枚举特性FlagsAttribute的用法
先看官方的解释:指示可以将枚举作为位域(即一组标志)处理. 看起来并不好理解,到底什么是作为位域处理? 其实说的通俗点就是用二进制的表示方式来处理数学集合概念中关于集合的或与非等运算方法. 有什么用 ...
- Android+openCV 的坑
之前一直用IntelliJ IDEA 导入 opencv_android_sdk 的 java 包,在最后一步finish时,始终出错. 后来重新安装Android Studio 重复以上步骤,能顺利 ...