Bestelldaten exportieren

Thema wurde von jochen_hauer, 3. Februar 2021 erstellt.

  1. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    Till und ich wissen, dass CSV Handling nicht die neuste Technik ist. Wir sagen, dass sie weit verbreitet ist und es auch für Gambio zu früh ist, den Grabstein aufzustellen, weil dann drauf steht: Leider viel zu früh von uns gegangen, weil noch gebraucht und stark vermisst.

    Realitäts- und Praxischeck: Wilken, was empfiehlst du Jochen und all euren anderen Cloud-Kunden, wenn sie für die Buchhaltung einen Bestelldatenexport brauchen? Bestellungen aus dem Gambio Admin abtippen, Wechsel den Steuerberater und such dir einen der eine Rest API Anbindung an Gambio hat? Oder kündige deinen Cloud Shop und geh zurück wo du herkommst, zu Jimdo?
     
  2. Wilken (Gambio)

    Wilken (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    17.237
    Danke erhalten:
    6.566
    Danke vergeben:
    2.000
    Wenn es darum geht Funktionalitätslücken zu schliessen, und dafür heute neue Lösungswege zu suchen: So ziemlich alles andere.

    Zum Beispiel Billbee und Debitoor.
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    13. Mai 2019
    Beiträge:
    203
    Danke erhalten:
    34
    Danke vergeben:
    55
    Ich denke das hat keinen Zweck. Das Wort Abwärtskompatibilität existiert offenbar nicht im Gambio-Universum. Und die Probleme von Leuten aus der Praxis sind grundsätzlich lächerlich und müssen nicht ernst genommen werden. Liegt nur daran, dass wir alle von gestern sind.

    Ich finde die Beiträge von Wilken ja schon immer recht selbstbewusst, dafür dass sein Arbeitgeber eine Shopsoftware auf dem Markt hat, die Probleme hat die Mehrwertsteuer korrekt zu berechnen oder 4 Produktbilder in einer Galerie anzuzeigen und dann wieder beim ersten Bild anzufangen. Achja, oder Lagerbuchung erst nach erfolgreicher Bestellung, kann mich bei den Beispielen direkt aus der Signatur von L&B bedienen.

    Mein Lagerbestand wird in 9 von 10 Stellen von der Shopsoftware selbst kaputt gemacht, nicht von einem csv-Import oder -Export. Aber ja, csv ist das Problem. Auf jeden Fall.
     
  4. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    31.941
    Danke erhalten:
    9.812
    Danke vergeben:
    1.443
    Wilken sagt, wie Gambio das sieht und handhabt. Da kommt kein wischi-waschi blabla, das die User einlullt und wo am Ende doch alles ganz anders ist.
    Man weiß immer woran man ist - und kann seine Entscheidungen entsprechend treffen.
    Ich hoffe, dass das so bleibt.
     
  5. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    Also ich habe da jetzt mal einen Bestell-Export auf REST-API Basis zum Üben erstellt. Wer testen möchte, gerne melden.

    Das Ding läuft aber nicht so wie das von Steffen oder ecomanescu, die abgerufene Bestellungen in der Datenbank markieren. Das läuft auf Datum-Basis, z.B. Abruf aller Bestellungen seit 2021-02-09

    Leider gibt es da keine Steuerinformationen drin. Wäre ja eigentlich aus meiner Sicht sinnvoll, wenn man schon eine Bestellabruf-API macht und dort den Gesamtbetrag abrufen kann, dass dann auch Nettobetrag, Bruttobetrag und MwSt. aus der order_totals mit abgerufen würde. Zumindest wenn man den Export für Steuerberater-Zwecke verwenden möchte, essentiell.
     
  6. Wilken (Gambio)

    Wilken (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    17.237
    Danke erhalten:
    6.566
    Danke vergeben:
    2.000
    Das stimmt so würde ich sagen nicht, da ist was.

    upload_2021-2-11_1-43-5.png
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    Huh?

    Wenn ich diesen Call aufrufe api.php/v2/orders/search und nach Erstelldatum greater xy suche, bekomme ich nur dies:

    Code:
    [ { "id": 30679, "statusId": 4, "statusName": "Paypal Bezahlung erhalten", "totalSum": "164,71 EUR", "purchaseDate": "2021-02-10 22:44:15", "comment": "", "withdrawalIds": [], "mailStatus": true, "customerId": 0, "customerName": "Gxxx Bxxx", "customerEmail": "xxx@web.de", "customerStatusId": 1, "customerStatusName": "Gast", "customerMemos": [], "deliveryAddress": { "firstName": "Gxxx", "lastName": "Bxxx", "company": "Herr", "street": "Hxxxxx 38a", "houseNumber": "", "additionalAddressInfo": "", "postcode": "xxxxx", "city": "Unterschlei\u00dfheim", "state": "", "country": "Germany", "countryIsoCode": "DE" }, "billingAddress": { "firstName": "Gxxx", "lastName": "Bxxx", "company": "Herr", "street": "Hxxxx 38a", "houseNumber": "", "additionalAddressInfo": "", "postcode": "xxxx", "city": "Unterschlei\u00dfheim", "state": "", "country": "Germany", "countryIsoCode": "DE" }, "paymentType": { "title": "PayPal", "module": "paypal3" }, "shippingType": { "title": "Versandkosten (Standard)", "module": "table_table" }, "trackingLinks": [], "_links": { "status": "https://xxxxx/api.php/v2/customer_groups/4", "payment_details": "https://xxxx/api.php/v2/orders/30679/payment_details", "tracking_codes": "https://xxxx/api.php/v2/orders/30679/tracking_codes" } } ]
    Da ist gar nichts aus orders_total enthalten glaube ich - oder mache ich was falsch? Man muss jetzt nicht noch für jede orders_id noch einen extra orders_total call machen, oder?
     
  8. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    Oder bekommt man mit orders/search/ andere Ergebnisse als mit Get Order (Single)? Das wäre aber kompliziert, wenn man erst mit Search Orders suchen muss, um dann für jeden einzelnen Fund nochmal einen Get Order (Single) ausführen müsste?
     
  9. Wilken (Gambio)

    Wilken (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    17.237
    Danke erhalten:
    6.566
    Danke vergeben:
    2.000
    Genau. Orderlisten enthalten verkürzte Ausgaben.
     
  10. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    31.941
    Danke erhalten:
    9.812
    Danke vergeben:
    1.443
    Du könntest auch einen bestimmten Bestellstatus angeben.
    Dann wird alles mit dem Status abgeholt.
     
  11. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    Geht auch. Ich kämpfe gerade noch mit den verschachtelten JSON-Strukturen in den Ergebnissen. Doof ist da auch, dass manche Felder in ein und dem selben Datensatz doppelt und dreifach vergeben sind. Dann wird erst die orders_id geholt und dann eine orders_status_history_id, die dann die orders_id überschreibt weil beides einfach nur in der Antwort [id] heißt...

    Aber wenn das mal läuft, kann man eine Suche nach Bestellstatus auch schnell mit einbauen.
     
  12. Wilken (Gambio)

    Wilken (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    17.237
    Danke erhalten:
    6.566
    Danke vergeben:
    2.000
    Der Trick ist: du musst die Schachtel immer behalten. Du versuchst da glaube ich gerade ne CSV draus zu machen gedanklich (vielleicht sogar wirklich, leises Schaudern), dazu haust du mehrdimensionale Daten platt. Wenn du sowas versuchst musst du den Baum am Key (Namen) lassen. Es gibt dann normal nie "ID" sondern "Orderstatus-ID", also mit Nennung deiner Container/Baumäste darüber, um den Kontext zu wahren.
     
  13. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    Genau, CSV. Die nackte API Response ist aber JSON-decoded schon mit "ID", also auch ohne das Plattmachen des mehrdimensionalen Arrays ist das Problem schon da.

    Beispiel:
    Mit dem Ergebnis dieses Requests
    $request->setRequestUrl($domain . 'api.php/v2/orders/' . $v['id']);
    mache ich nur
    $data = json_decode($json_single, true);
    und gebe es aus mit
    print_r($data);
    und habe dann 15x [id]. In die CSV schafft es nur die letzte, also die zu cusomerNotified.

     
  14. Wilken (Gambio)

    Wilken (Gambio) Administrator
    Mitarbeiter

    Registriert seit:
    7. November 2012
    Beiträge:
    17.237
    Danke erhalten:
    6.566
    Danke vergeben:
    2.000
    Du übersiehst da Arrays in deinen Arrays, nach dem json decode sind deine Daten noch nicht flach. Du hast arrays in deinen arrays. Du spielst aber danach aber wohl Tennis dadrauf, als wären die flach, und das geht dann schief.
     
  15. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    War nur ein Ausschnitt. Ich bügle die vorher mit einer Funktion flach:

    Code:
    function array_flatten ($nonFlat) {
        $flat = array();
        foreach (new RecursiveIteratorIterator(
                new RecursiveArrayIterator($nonFlat)) as $k=>$v) {
            $flat[$k] = $v;
        }
        return $flat;
    }

    Code:
                    $id = htmlentities($_GET['id'], ENT_QUOTES, "UTF-8");
                    echo $id . '<br/>';
    
                    $client = new http\Client;
                    $request = new http\Client\Request;
                    $body = new http\Message\Body;
                   
                    // Suche Bestellungen die älter sind als....
    
                        $body->append('{"search": {"greater": {"orders.date_purchased": "'.$id.'"}}}');
                        $request->setRequestUrl($domain .'api.php/v2/orders/search');
                        $request->setRequestMethod('POST');
                        $request->setBody($body);
               
                    // Bestellsuche-Call machen
                    $request->setHeaders(array(
                      'authorization' => 'Basic ' . $zugangsdaten,
                      'content-type' => 'application/json',
                      'accept' => 'application/json'
                    ));
                    
                    $client->enqueue($request)->send();
                    $response = $client->getResponse();
                    //echo $response->getBody();
                    $json = $response->getBody();
    
                    $arr = json_decode($json, true);
                    $fp = fopen($cfilename, 'w');
                    //print_r($arr);
                        foreach ($arr as $v){
                            echo '<br/><br/>test'.$v['id'] . '<br/><br/>';
                           
                            // Neuer Call: Single Order
                           
                            $client = new http\Client;
                            $request = new http\Client\Request;
                            
                            $request->setRequestUrl($domain . 'api.php/v2/orders/' . $v['id']);
    
                            $request->setRequestMethod('GET');
                            $request->setHeaders(array(
                              'content-type' => 'application/json',
                              'authorization' => 'Basic ' . $zugangsdaten
                            ));
                            
                            $client->enqueue($request)->send();
                            $response = $client->getResponse();
                            $json_single = $response->getBody();       
                            $data = json_decode($json_single, true);
                            echo '<h1>Einzelbestellung</h1>';
                            print_r($data);
                           
                           
                           
                            $header = false;
                                   
                                    if (empty($header))
                                    {
                                        $header = array_keys(array_flatten($data));
                                        fputcsv($fp, $header);
                                        $header = array_flip($header);
                                    }                               
                            fputcsv($fp, array_flatten($data));
                                   
                   
                        }
                    fclose($fp);
                    echo '<br/>Export erfolgreich. <a href="' . $cfilename . '" target="_blank">Download</a>';    
    Dass der Header nur 1x reinkommt, klappt auch noch nicht. Und von den Bestellpositionen kommt immer nur eine. Aber egal, wenn sowas nur für Lieferadressen-Export oder für Buchhaltung verwendet wird, reicht ja MwSt, Gesamtbetrag und die Lieferadresse für die Weiterarbeit.
     
  16. laser-diele

    laser-diele Erfahrener Benutzer

    Registriert seit:
    11. Mai 2017
    Beiträge:
    221
    Danke erhalten:
    5
    Danke vergeben:
    130
    Hallo, wie genau funktioniert das? Ich benötige auch die Bestelldaten als CSV, habe aber im Shop keine Möglichkeit gesehen bzw übersehen, wie ich es machen kann. Habe keinen Cloud-Shop.
     
  17. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.077
    Danke erhalten:
    867
    Danke vergeben:
    743
    (Link nur für registrierte Nutzer sichtbar.)