Report 如何在qWeb报表中设置PDF名称,Odoo?
我正在使用Odoo8中的qWeb制作报告。生成的PDF文件以“默认”名称保存。我想为每个生成的文件设置一个特定的名称(不是在保存文件之后,而是在“生成”时间) 可能吗?如果是,怎么做Report 如何在qWeb报表中设置PDF名称,Odoo?,report,odoo-8,qweb,Report,Odoo 8,Qweb,我正在使用Odoo8中的qWeb制作报告。生成的PDF文件以“默认”名称保存。我想为每个生成的文件设置一个特定的名称(不是在保存文件之后,而是在“生成”时间) 可能吗?如果是,怎么做 提前感谢。一般情况下,Qweb报告菜单可以在Odoo 8.0中打印Qweb报告 <?xml version="1.0" encoding="utf-8"?> <openerp> <data> <report id="repo
提前感谢。一般情况下,Qweb报告菜单可以在Odoo 8.0中打印Qweb报告
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report
id="report_sale_order"
string="Quotation / Order"
model="sale.order"
report_type="qweb-pdf"
file="sale.report_saleorder"
name="sale.report_saleorder"
/>
</data>
</openerp>
在
中,标签具有用于在Qweb中打印报告的不同属性
如果您想更改打印的PDF的名称,则名称属性对我们来说更为重要
根据“名称”属性,我们的报告PDF文件名将显示出来
在generalize one中,您应该根据您的\u模块\u名称设置名称属性。报告\u名称
如果要更改PDF文件的自定义名称,请根据sweet report name更改name属性
我希望这会对您有所帮助:)在ODOO8中,您可以像下面那样(在修复开始和结束之间)修补方法报告\下载addons/report/controllers/main.py。然后,它将在报告操作定义中使用附件属性的代码。由于系统将始终将文件另存为数据库中的附件,因此您可以进一步更改行为,使其仅在附件使用设置为True时保存在数据库中。这样就不需要添加额外的字段和更改视图
@route(['/report/download'],type='http',auth=“user”)
def报告_下载(自身、数据、令牌):
“”“此函数由'qwebactionmanager.js'用于触发下载
pdf/controller报告。
:param data:javascript数组JSON.stringized包含报告内部url([0])和
类型[1]
:返回:带有filetoken cookie和附件头的响应
"""
requestcontent=simplejson.loads(数据)
url,类型=requestcontent[0],requestcontent[1]
尝试:
如果类型==“qweb pdf”:
reportname=url.split('/report/pdf/')[1]。split('?')[0]
docids=None
如果报表名称中有“/”:
reportname,docId=reportname.split(“/”)
如果文件ID:
#一般报告:
response=self.report\u路由(reportname,docids=docids,converter='pdf')
#####修复开始:使用操作的已评估附件属性(如果可用)切换reportname
docids=[docids.split(',')中i的int(i)]
report\u obj=request.registry['report']
cr,uid,context=request.cr,request.uid,request.context
报告=报告对象。从报告名称(cr、uid、报告名称)获取报告
如果报告。附件:
obj=report\u obj.pool[report.model]。浏览(cr、uid、docID[0])
reportname=eval(report.attachment,{'object':obj,'time':time}).split('.pdf')[0]
#####固定端
其他:
#特别报告:
data=url_decode(url.split(“?”)[1]).items()#解码JSON中表示的参数
response=self.report_routes(reportname,converter='pdf',**dict(data))
response.headers.add('Content-Disposition','attachment;filename=%s.pdf;'%reportname)
response.set_cookie('fileToken',token)
返回响应
elif类型==“控制器”:
reqheaders=标题(request.httprequest.Headers)
response=Client(request.httprequest.app,BaseResponse).get(url,headers=reqheaders,follow\u redirects=True)
response.set_cookie('fileToken',token)
返回响应
其他:
返回
除例外情况外,e:
se=_序列化_异常(e)
错误={
“代码”:200,
“消息”:“Odoo服务器错误”,
“数据”:se
}
返回请求.make_响应(html_转义(simplejson.dumps(错误)))
例如,可以通过以下方式设置报表操作的附件属性:
'RFQ_u'+object.name+'.pdf'
这是addons/Report/Report.py中报告对象的_check_attachment的补丁,用于修改附件的使用行为:
@api.v7
def检查附件的使用(自身、cr、uid、ID、报告):
“”“检查附件\u使用字段。如果设置为true且已保存现有pdf,请加载
现在是这个。否则,马克保存它。
"""
将_保存在_附件={}
将_保存在_附件['model']=report.model中
将_保存在_附件['loaded_documents']={}
如果报告。附件:
对于id中的记录\u id:
obj=self.pool[report.model]。浏览(cr、uid、记录\u id)
filename=eval(report.attachment,{'object':obj,'time':time})
#如果用户已选中“从附件重新加载”
如果使用report.attachment\u:
alreadyindb=[('datas_fname','=',filename),
('res_model','=',report.model),
('res_id','=',record_id)]
attach_id=self.pool['ir.attachment'].search(cr、uid、alreadyindb)
如果要附加\u ID:
#在已加载的文档列表中添加已加载的pdf
pdf=self.pool['ir.attachment'].浏览(cr、uid、attach_id[0]).数据
pdf=base64.decodestring(pdf)
将_保存在_附件['loaded_documents'][record_id]=pdf
_logger.info('PDF文档%s是从数据库“%filename”加载的)
继续#不要保存此文档,因为我们已经忽略了它
#修复开始(在行下方注释,并将else子句缩进一级)
#如果用户已选中“另存为附件前缀”
#~如果文件名为False:
response.headers.add('Content-Disposition', 'attachment; filename=%s.pdf;' % reportname)
invoicename="ma_facture" #create a variable you can add date for example stfftime("%d-%m-%Y")
response.headers.add('Content-Disposition', 'attachment; filename=%s.pdf;' % invoicename)
<report
id="report_sale_order"
string="Quotation / Order"
model="sale.order"
report_type="qweb-pdf"
file="sale.report_saleorder"
name="sale.report_saleorder"
/>
from openerp import models, fields
class IrActionsReportXml(models.Model):
_inherit = 'ir.actions.report.xml'
download_filename = fields.Char(
'Download filename')
from openerp import http
from openerp.addons.mail.models import mail_template
from openerp.addons.report.controllers.main import ReportController
from openerp.addons.web.controllers.main import content_disposition
class ReportController(ReportController):
@http.route([
'/report/<path:converter>/<reportname>',
'/report/<path:converter>/<reportname>/<docids>',
])
def report_routes(self, reportname, docids=None, converter=None, **data):
response = super(ReportController, self).report_routes(
reportname, docids=docids, converter=converter, **data)
if docids:
docids = [int(i) for i in docids.split(',')]
report_xml = http.request.session.model('ir.actions.report.xml')
report_ids = report_xml.search(
[('report_name', '=', reportname)])
for report in report_xml.browse(report_ids):
if not report.download_filename:
continue
objects = http.request.session.model(report.model)\
.browse(docids or [])
generated_filename = mail_template.mako_template_env\
.from_string(report.download_filename)\
.render({
'objects': objects,
'o': objects[:1],
'object': objects[:1],
'ext': report.report_type.replace('qweb-', ''),
})
response.headers['Content-Disposition'] = content_disposition(
generated_filename)
return response
@http.route(['/report/download'])
def report_download(self, data, token):
response = super(ReportController, self).report_download(data, token)
# if we got another content disposition before, ditch the one added
# by super()
last_index = None
for i in range(len(response.headers) - 1, -1, -1):
if response.headers[i][0] == 'Content-Disposition':
if last_index:
response.headers.pop(last_index)
last_index = i
return response
import json
from openerp import http
from openerp.addons.web.controllers import main
from openerp.addons.mail.models import mail_template
class Reports(main.Reports):
@http.route('/web/report', type='http', auth="user")
@main.serialize_exception
def index(self, action, token):
result = super(Reports, self).index(action, token)
action = json.loads(action)
context = dict(http.request.context)
context.update(action["context"])
report_xml = http.request.env['ir.actions.report.xml']
reports = report_xml.search([
('report_name', '=', action['report_name']),
('download_filename', '!=', False)])
for report in reports:
objects = http.request.session.model(context['active_model'])\
.browse(context['active_ids'])
generated_filename = mail_template.mako_template_env\
.from_string(report.download_filename)\
.render({
'objects': objects,
'o': objects[0],
'object': objects[0],
})
result.headers['Content-Disposition'] = main.content_disposition(
generated_filename)
return result
<report id="report_quote_temp" string="Quote Template" model="sale.order" report_type="qweb-pdf"
file="custom_template.report_quote_custom" name="custom_template.report_quote_custom"
menu="True" paperformat="custom_template.custom_paperformat" />
<record id="report_quote_temp" model="ir.actions.report.xml">
<field name="print_report_name">'SALES_'+object.name+'.pdf'</field>
</record>