Passa al contenuto
Odoo Menu
  • Accedi
  • Provalo gratis
  • App
    Finanze
    • Contabilità
    • Fatturazione
    • Note spese
    • Fogli di calcolo (BI)
    • Documenti
    • Firma
    Vendite
    • CRM
    • Vendite
    • Punto vendita Negozio
    • Punto vendita Ristorante
    • Abbonamenti
    • Noleggi
    Siti web
    • Configuratore sito web
    • E-commerce
    • Blog
    • Forum
    • Live chat
    • E-learning
    Supply chain
    • Magazzino
    • Produzione
    • PLM
    • Acquisti
    • Manutenzione
    • Qualità
    Risorse umane
    • Dipendenti
    • Assunzioni
    • Ferie
    • Valutazioni
    • Referral dipendenti
    • Parco veicoli
    Marketing
    • Social marketing
    • E-mail marketing
    • SMS marketing
    • Eventi
    • Marketing automation
    • Sondaggi
    Servizi
    • Progetti
    • Fogli ore
    • Assistenza sul campo
    • Helpdesk
    • Pianificazione
    • Appuntamenti
    Produttività
    • Comunicazioni
    • Approvazioni
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    App di terze parti Odoo Studio Piattaforma cloud Odoo
  • Settori
    Retail
    • Libreria
    • Negozio di abbigliamento
    • Negozio di arredamento
    • Alimentari
    • Ferramenta
    • Negozio di giocattoli
    Cibo e ospitalità
    • Bar e pub
    • Ristorante
    • Fast food
    • Pensione
    • Grossista di bevande
    • Hotel
    Agenzia immobiliare
    • Agenzia immobiliare
    • Studio di architettura
    • Edilizia
    • Gestione immobiliare
    • Impresa di giardinaggio
    • Associazione di proprietari immobiliari
    Consulenza
    • Società di contabilità
    • Partner Odoo
    • Agenzia di marketing
    • Studio legale
    • Selezione del personale
    • Audit e certificazione
    Produzione
    • Tessile
    • Metallo
    • Arredamenti
    • Alimentare
    • Birrificio
    • Ditta di regalistica aziendale
    Benessere e sport
    • Club sportivo
    • Negozio di ottica
    • Centro fitness
    • Centro benessere
    • Farmacia
    • Parrucchiere
    Commercio
    • Tuttofare
    • Hardware e assistenza IT
    • Ditta di installazione di pannelli solari
    • Calzolaio
    • Servizi di pulizia
    • Servizi di climatizzazione
    Altro
    • Organizzazione non profit
    • Ente per la tutela ambientale
    • Agenzia di cartellonistica pubblicitaria
    • Studio fotografico
    • Punto noleggio di biciclette
    • Rivenditore di software
    Carica tutti i settori
  • Community
    Apprendimento
    • Tutorial
    • Documentazione
    • Certificazioni 
    • Formazione
    • Blog
    • Podcast
    Potenzia la tua formazione
    • Programma educativo
    • Scale Up! Business Game
    • Visita Odoo
    Ottieni il software
    • Scarica
    • Versioni a confronto
    • Note di versione
    Collabora
    • Github
    • Forum
    • Eventi
    • Traduzioni
    • Diventa nostro partner
    • Servizi per partner
    • Registra la tua società di contabilità
    Ottieni servizi
    • Trova un partner
    • Trova un contabile
    • Incontra un esperto
    • Servizi di implementazione
    • Testimonianze dei clienti
    • Supporto
    • Aggiornamenti
    GitHub Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Richiedi una demo
  • Prezzi
  • Aiuto

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Contabilità
  • Magazzino
  • PoS
  • Progetti
  • MRP
All apps
È necessario essere registrati per interagire con la community.
Tutti gli articoli Persone Badge
Etichette (Mostra tutto)
odoo accounting v14 pos v15
Sul forum
È necessario essere registrati per interagire con la community.
Tutti gli articoli Persone Badge
Etichette (Mostra tutto)
odoo accounting v14 pos v15
Sul forum
Assistenza

Invoice number into the pdf file name

Iscriviti

Ricevi una notifica quando c'è un'attività per questo post

La domanda è stata contrassegnata
pdfinvoicefilename
27 Risposte
41602 Visualizzazioni
Avatar
Christian Douville

On Print Invoice action, the .pdf file name is not, by default, completed with the invoice number. Is there any variable i can put into the Report name header that would retrieve the Invoice number ?

24
Avatar
Abbandona
Christian Douville
Autore

Thanks. The pdf content does report the invoice number. My aim is to have the file name with the invoice number. Something like "Invoice IN-FR-1303-0008.pdf"

Ahmet Altinisik

I also need this so tired of renaming filenames for every report.

Christian Douville
Autore

Additional information, the xml for creating the report contains attachment="(object.state in ('open','paid')) and ('INVOICE_'+(object.number or '').replace('/','')+'.pdf')", so the assumption is that the number should be available into the file name

Christian Douville
Autore

Implementing/activating the Knowledge module provides the solution, as the pdf document is attached to the Account with the accurate file name (ie INVOICE + invoice number+.pdf)

Ahmet Altinisik

@Christian You have to download again the file so it is a workaround but not the solution you have to download it again after downloading the file.

Michael Karrer

The same problem for me!

I really want to have the same functionality as for "save as attachment" for all of the print buttons! Drives me nuts to always download the document twice just for the right file name...

Any idea?!?

Avatar
AJ Schrafel Paper Corp
Risposta migliore

You must edit the account/report/account_print_invoice.rml filename dynamically.

<document filename="Invoices.pdf">

is one of the first lines. I am not exactly sure how to do this, but I would love to know the answer.

2
Avatar
Abbandona
Christian Douville
Autore

Not sure i have to do it, as the Settings-Technical/Actions/Reports and Settings-Technical/Actions/Action Bindings look like doing this (with the optional parameters)

AJ Schrafel Paper Corp

Yes, i agree, but that action is not applied to files created when you hit the print button, just the file that is attached to the invoice after you hit the print button. There must be a way to apply that same action to the file that is automatically downloaded when you hit print.

Avatar
Nikunj Nakum
Risposta migliore

yes you can give 'name': 'Invoice ' + 'today date' in return from wizard to print report.

for example: this is function is call from print button in wizard.

def print_report(self,cr, uid, ids, context=None):
        if context is None:
           context = {}
        data = self.read(cr, uid, ids)[0]
        self_browse = self.browse(cr, uid, ids)
        
        datas = {
            'ids': [data.get('id')],
            'model': 'sale.order',
            'form': data
            }
        return {
            'type': 'ir.actions.report.xml',
            'report_name': 'custom.invvoice.report',
            'datas': datas,
            'name': 'Invoice ' + self_browse[0].start_date + ' To ' + self_browse[0].end_date  
            }

 

 

 

4
Avatar
Abbandona
Ankit H Gandhi(AHG)

Thanks @ Nikunj Nakum Your code is working

Avatar
Lara Freeke
Risposta migliore

I think you can use this module

https://github.com/OCA/reporting-engine/tree/8.0/report_custom_filename

Kind regard, 


3
Avatar
Abbandona
Sakli

Thanks @Lara

Avatar
Jérôme Thériault
Risposta migliore

For Odoo 9+:

Go to configuration, reports, look for the report you want, then use the Printed Report Filename field which can contain python expressions. Two variables can be used inside: object which is the object being printed, and time which is python time module. So you can input "object.name" without the quotes.

No need for extra module or code.

More here: http://gitlab.opengest.solutions/opengest/odoo/commit/da3d2fb1dc76654e630fba27ca3dcf03002d9431

Look for print_report_name

2
Avatar
Abbandona
Avatar
J4nus
Risposta migliore

I have also the same problem..

0
Avatar
Abbandona
Gunther Kohn

The problem seems to be unsolved. Is there possibly an easy solution? When I send the invoice or sale order via email, everything is well. The file name have the number included. But when I only print the invoice, I have no number in the file name. Thanks for any help

Avatar
Pascal Tremblay
Risposta migliore

Here is our solution to customize the sale order report PDF name with the « print » buttons.

https://www.odoo.com/forum/help-1/question/change-printed-file-name-in-webkit-report-in-odoo-59901

0
Avatar
Abbandona
Avatar
Pravitha
Risposta migliore

Hello,

I too faced the same problem of printing invoice pdf with Invoice number.pdf as its name.

I modified @Nikunj Nakum  answer and I got the result. Below given is the code

  #=================================================
  # Class             :    account_invoice (inherited)
  # Method          :    custom_invoice_print button
  # Description   :    This function prints the invoice and mark it as sent, so that
  #                            we can see more easily the next step of the workflow. 

  #                            Prints Invoice with invoice number as its name
  #================================================

  def custom_invoice_print(self, cr, uid, ids, context=None):
        self.write(cr, uid, ids, {'sent': True}, context=context)
        data = self.read(cr, uid, ids)[0]
        self_browse = self.browse(cr, uid, ids)
        datas = {
             'ids': ids,
             'model': 'account.invoice',
             'form': self.read(cr, uid, ids[0], context=context)
        }
        return {
            'type': 'ir.actions.report.xml',
            'report_name': 'account.invoice2',
            'datas': datas,
            'name': 'Invoice ' + self_browse[0].number  ,
            'nodestroy' : True
        }

Result:  Invoice INV14-09_018.pdf

0
Avatar
Abbandona
sengottuvel

Thanks.. It's woking well..

PY

Can we use this in place of the standards print buttons ? (the one in the bar and th one in the drop down menu) If yes, how ?

Pascal Tremblay

I'm not sure of the place to put it...

Pascal Tremblay

Should it works in Odoo V8 too?

Avatar
Michael Karrer
Risposta migliore

The same problem for me!

I really want to have the same functionality as for "save as attachment" for all of the print buttons! Drives me nuts to always download the document twice just for the right file name...

Any idea?!?

0
Avatar
Abbandona
Prakash

Hi to all, I updated my answer to shows invoice-number-into-the-pdf-file-name

Avatar
harsh jain
Risposta migliore

# -*- coding: utf-8 -*-

import ast
import base64
import csv
import glob
import itertools
import logging
import operator
import datetime
import hashlib
import os
import re
import simplejson
import time
import urllib
import urllib2
import urlparse
import xmlrpclib
import zlib
from xml.etree import ElementTree
from cStringIO import StringIO

import babel.messages.pofile
import werkzeug.utils
import werkzeug.wrappers
try:
    import xlwt
except ImportError:
    xlwt = None

import openerp
import openerp.modules.registry
from openerp.tools.translate import _
from openerp.tools import config


from openerp.addons.web import http
openerpweb = http
from openerp.addons.web.controllers.main import Reports

def content_disposition(filename, req):
    filename = filename.encode('utf8')
    escaped = urllib2.quote(filename)
    browser = req.httprequest.user_agent.browser
    version = int((req.httprequest.user_agent.version or '0').split('.')[0])
    if browser == 'msie' and version < 9:
        return "attachment; filename=%s" % escaped
    elif browser == 'safari':
        return "attachment; filename=%s" % filename
    else:
        return "attachment; filename*=UTF-8''%s" % escaped

 

class change_main(Reports):

    @openerpweb.httprequest
    def index1(self, req, action, token):
        
        action = simplejson.loads(action)

        report_srv = req.session.proxy("report")
        context = dict(req.context)
        
        context.update(action["context"])

        report_data = {}
        report_ids = context["active_ids"]
        if 'report_type' in action:
            report_data['report_type'] = action['report_type']
        if 'datas' in action:
            if 'ids' in action['datas']:
                report_ids = action['datas'].pop('ids')
            report_data.update(action['datas'])

        report_id = report_srv.report(
            req.session._db, req.session._uid, req.session._password,
            action["report_name"], report_ids,
            report_data, context)

        report_struct = None
        while True:
            report_struct = report_srv.report_get(
                req.session._db, req.session._uid, req.session._password, report_id)
            if report_struct["state"]:
                break

            time.sleep(self.POLLING_DELAY)

        report = base64.b64decode(report_struct['result'])
        if report_struct.get('code') == 'zlib':
            report = zlib.decompress(report)
        report_mimetype = self.TYPES_MAPPING.get(
            report_struct['format'], 'octet-stream')
        file_name = action.get('name', 'report')
        if 'name' not in action:
            reports = req.session.model('ir.actions.report.xml')
            res_id = reports.search([('report_name', '=', action['report_name']),],
                                    0, False, False, context)
            if len(res_id) > 0:
                file_name = reports.read(res_id[0], ['name'], context)['name']
            else:
                file_name = action['report_name']
        file_name = '%s.%s' % (file_name, report_struct['format'])
        
        ########################################################
        # PATCH TO PRINT PARTNER-ID AND INVOICE NO IN FILE NAME
        if context['active_model'] in ['sale.order','purchase.order','account.invoice']:
            model1 =req.session.model(context['active_model'])
            read=model1.read(context['active_id'],[],context)
            if read['name']!=False:
                file_name = read['name'] + ' ' + read['partner_id'][1]
                print file_name
                file_name = '%s.%s' % (file_name, report_struct['format'])
            # PATCH END
        #########################################################
        
        return req.make_response(report,
             headers=[
                 ('Content-Disposition', content_disposition(file_name, req)),
                 ('Content-Type', report_mimetype),
                 ('Content-Length', len(report))],
             cookies={'fileToken': token})
        
        
    Reports.index=index1

0
Avatar
Abbandona
harsh jain

DO NOT CHANGE THE BASE CODE JUST MAKE A MODULE AND INSTALL IT

Avatar
Prakash
Risposta migliore

In Existing Report Module after adding the below code able to generate Invoice Number in PDF File.

server\openerp\report\report_sxw.py in the create_single_pdf method.


    def create_single_pdf(self, cr, uid, ids, data, report_xml, context=None):
        if not context:
            context={}
        logo = None
        context = context.copy()
        title = report_xml.name
        rml = report_xml.report_rml_content
        model = context.get('active_model')
        record_id = context.get('active_id')    
        pool = pooler.get_pool(cr.dbname)

        invoice_obj = pool.get('account.invoice')
        type = report_xml.report_type
        if model == 'account.invoice' and record_id:
            invoice_val = invoice_obj.browse(cr, uid, record_id)     
            orderreference_type = invoice_val.reference or invoice_val.origin + report_xml.report_type
            type = orderreference_type.replace("pdf", ".pdf");        

        # if no rml file is found
        if not rml:
            return False
        rml_parser = self.parser(cr, uid, self.name2, context=context)
        objs = self.getObjects(cr, uid, ids, context)
        rml_parser.set_context(objs, data, ids, report_xml.report_type)
        processed_rml = etree.XML(rml)
        if report_xml.header:
            rml_parser._add_header(processed_rml, self.header)
        processed_rml = self.preprocess_rml(processed_rml,report_xml.report_type)
        if rml_parser.logo:
            logo = base64.decodestring(rml_parser.logo)
        create_doc = self.generators[report_xml.report_type]
        pdf = create_doc(etree.tostring(processed_rml),rml_parser.localcontext,logo,title.encode('utf8'))
        return pdf, type
        #return pdf, report_xml.report_type
      

Note: Core Report Module added extra code (Invoice Number in PDF File). But Better way to override  create_single_pdf method in a custom module.

 

0
Avatar
Abbandona
Ti stai godendo la conversazione? Non leggere soltanto, partecipa anche tu!

Crea un account oggi per scoprire funzionalità esclusive ed entrare a far parte della nostra fantastica community!

Registrati
Post correlati Risposte Visualizzazioni Attività
PDF Invoice line overflow
pdf invoice
Avatar
Avatar
Avatar
2
lug 25
1487
Quote PDF Spacing & Layout
pdf invoice
Avatar
Avatar
1
ago 25
2035
How to apply a customized invoice pdf to an email template
pdf invoice
Avatar
Avatar
1
giu 24
3217
combine several lines into 1 row in print pdf odoo 15
pdf invoice odoo15
Avatar
0
gen 25
1648
Odoo Invoice PDF download from External API
pdf invoice odoo17
Avatar
0
ott 24
2836
Community
  • Tutorial
  • Documentazione
  • Forum
Open source
  • Scarica
  • Github
  • Runbot
  • Traduzioni
Servizi
  • Hosting Odoo.sh
  • Supporto
  • Aggiornamenti
  • Sviluppi personalizzati
  • Formazione
  • Trova un contabile
  • Trova un partner
  • Diventa nostro partner
Chi siamo
  • La nostra azienda
  • Branding
  • Contattaci
  • Lavora con noi
  • Eventi
  • Podcast
  • Blog
  • Clienti
  • Note legali • Privacy
  • Sicurezza
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo è un gestionale di applicazioni aziendali open source pensato per coprire tutte le esigenze della tua azienda: CRM, Vendite, E-commerce, Magazzino, Produzione, Fatturazione elettronica, Project Management e molto altro.

Il punto di forza di Odoo è quello di offrire un ecosistema unico di app facili da usare, intuitive e completamente integrate tra loro.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now