Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Report 如何在qWeb报表中设置PDF名称,Odoo?_Report_Odoo 8_Qweb - Fatal编程技术网

Report 如何在qWeb报表中设置PDF名称,Odoo?

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

我正在使用Odoo8中的qWeb制作报告。生成的PDF文件以“默认”名称保存。我想为每个生成的文件设置一个特定的名称(不是在保存文件之后,而是在“生成”时间)

可能吗?如果是,怎么做


提前感谢。

一般情况下,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>