Das deutschsprachige Odoo / OpenERP Forum - Das Suchen hat ein Ende

Odoo11: How do I get a PDF of an Invoice via PHP?

Web-Portal, Web Client, GTK Client, or QT Client
Hallo, ich arbeite seit einiger Zeit mit dem Webclienten (Ripcord) um die Daten in Odoo zu schauffeln und auch wieder raus. Jedoch habe ich bisher keinen Weg gefunden für eine Invoice das PDF-Dokument zu laden.
Für Odoo10 hätte ich den perfekten Codeschnipsel, leider ist dieser nicht auf Odoo11 anwendbar. Hat vielleicht jemand das gleiche Problem gehabt und eine Lösung?

Code: Alles auswählen

 $result = $this->reports->render_report(
            $this->api['db'],
            $this->api['uid'],
            $this->api['pass'],
            'account.report_invoice',
            array($invoiceId)
        );
Leider erhalte ich nur folgende Fehlermeldung:

Code: Alles auswählen

  "faultCode" => 1
  "faultString" => """
    Traceback (most recent call last):\n
      File "/usr/lib/python3/dist-packages/odoo/service/wsgi_server.py", line 124, in wsgi_xmlrpc\n
        result = odoo.http.dispatch_rpc(service, method, params)\n
      File "/usr/lib/python3/dist-packages/odoo/http.py", line 118, in dispatch_rpc\n
        result = dispatch(method, params)\n
    UnboundLocalError: local variable 'dispatch' referenced before assignment\n
Nach mehrstündiger Suche, habe ich gedacht ich versuch mein Glück mal in diesem Forum, leider hat Google mir bisher nicht helfen können. Ich bin für jeden Tipp dankbar.
Hallo Alex,

in odoo 11 gab es größere Änderungen bei der Reporterzeugung im Vergleich zu odoo 10. So gibt es z.B. die Methode render_report() nicht mehr.

Außerdem gibt es den Service "report" in odoo 11 nicht mehr, so dass

Code: Alles auswählen

$report = ripcord::client("$url/xmlrpc/2/report");
nicht mehr funktioniert. Hier zum Vergleich die relevante Stelle der Methode dispatch_rpc() in odoo 10

Code: Alles auswählen

        if service_name == 'common':
            dispatch = odoo.service.common.dispatch
        elif service_name == 'db':
            dispatch = odoo.service.db.dispatch
        elif service_name == 'object':
            dispatch = odoo.service.model.dispatch
        elif service_name == 'report':
            dispatch = odoo.service.report.dispatch
        result = dispatch(method, params)
und in odoo 11

Code: Alles auswählen

        if service_name == 'common':
            dispatch = odoo.service.common.dispatch
        elif service_name == 'db':
            dispatch = odoo.service.db.dispatch
        elif service_name == 'object':
            dispatch = odoo.service.model.dispatch
        result = dispatch(method, params)
Deshalb ist die Variable "dispatch" nicht definiert.

Ich weiß nicht, ob es über das XML-RPC-API in odoo 11 überhaupt möglich ist, Reports zu erzeugen. Zumindest in der Doku steht dazu im Gegensatz zu odoo 10 nichts mehr: https://www.odoo.com/documentation/11.0 ... /odoo.html.

Eine Lösung hab ich für Dich leider nicht...

Viele Grüße
Josef
*seufzt* so etwas ab ich mir schon gedacht.
Meine Alternative wäre jetzt mir das PDF direkt bei Odoo über die URL zu holen. Muss ich mir nur noch etwas für das Login einfallen lassen.
Vielen Dank Josef, ich werde eine andere Lösung finden. Wenn sie funktioniert teile ich sie gern mit.

Wer ist online?

Insgesamt ist 1 Besucher online :: 0 sichtbare Mitglieder, 0 unsichtbare Mitglieder und 1 Gast (basierend auf den aktiven Besuchern der letzten 5 Minuten)
Der Besucherrekord liegt bei 25 Besuchern, die am 9. Jul 2018, 18:41 gleichzeitig online waren.

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast