Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Importfunktion für Sendungsnummern

    bautti

    • Fördermitglied
    • Beiträge: 218
    Importfunktion für Sendungsnummern
    am: 12. November 2020, 22:54:36
    Hallo,
    ich habe mir etwas programmieren lassen womit man Sendungsnummern in den Shop importieren kann. Das möchte ich hiermit der Allgemeinheit zur Verfügung stellen. Vielleicht kann es ja wer gebrauchen.

    Mein Programmiere meinte es ist nicht besonders professionell umgesetzt, gab aber das OK das ich es hier teilen darf. Ich bin der Meinung dass es sehr gut funktioniert und vollkommen ausreicht. Ich übernehme aber keinerlei Gewähr für die Funktionsweise und es ist auch nur in meinem Shop getestet. Bitte also vor dem Einbau die Datenbank sichern. Da es nur eine zusätzliche Datei ist sollte es wahrscheinlich auch Updatesicher sein, wenn ich das richtig verstehe.

    Voraussetzung ist dass bei den Versandlabeln als Sendungsreferenz die Bestellnummer angegeben wurde. Nach dem Import wird für jede Sendungsnummer eine der folgenden Meldungen in jeweils unterschiedlicher Farbe angezeigt:

    • Erfolg: Tracking-ID XXXXXXXXXXXXXXXX wurde zur Bestellung 41591 hinzugefügt.

      Fehler: Bestell-ID für Tracking-ID 06255042959714 (Ingrid Van de Cauter, zaventem) nicht vorhanden.

      Achtung: Tracking-ID xxxxxxxxxxxxxxx wurde zur Bestellung 42109 hinzugefügt.
      (Folgende Trackingnummer(n) waren breits vorhanden: xxxxxxxxxxxxxx)

      Info: Trackingnummer 06255042959700 für Bestellung 41591 bereits vorhanden (Datensatz übersprungen).
    So kann man dann eventuelle Fehler noch manuell im Shop-Admin direkt in der Bestellung ausbessern.

    Ich konnte die Datei nicht anhängen weswegen ich den Code unten poste. Den Code in einer Datei mit dem Namen tracking.php speichern und im Ordner /admin hochladen.

    Außerdem muss in der Datenbank folgendes geändert werden:
    In der Tabelle "admin_access" muss die Spalte "tracking" hinzugefügt werden und für die gewünschten Benutzer auf 1 gesetzt werden.

    Es funktioniert mit DHL und DPD, kann aber sicher mit etwas Programmierkenntnis leicht für andere Paketdienste angepasst werden:

    DHL:
    Im Geschäftskundenportal/Versenden kann man im Archiv nach Datum filtern und von diesen Sendungen dann mit "alle exportieren" [DHL Vorlage (Easylogstandard) Sendungsdatenexport] eine CSV erzeugen. Die Daten dann unter /admin/tracking.php in den Shop importieren

    DPD:
    (Da wir aus Österreich sind kann ich nicht sagen ob es bei den Lösungen von DPD Deutschland auch so funktioniert und die CSV Datei dann passt)
    Im dpd-business Network unter Paketschein Versandliste eine CSV vom gewünschtem Datumsbereich erzeugen und unter /admin/tracking.php in den Shop importieren

    Sollten die erzeugten CSV Dateien anders aufgebaut sein als bei mir müsste halt der Code angepasst werden. Ich kann euch dabei aber leider nicht behilflich sein da ich nicht mal einfachste Grundkenntnisse im Programmieren habe. Wenn sich bei meinen CSV Datein was ändert müsste ich das auch meinem Programmierer machen lassen und dafür zahlen...

    Code: PHP  [Auswählen]
    <?php
            header("Content-Type: text/html; charset=utf-8");
            require ('includes/application_top.php');
            error_reporting(E_ERROR | E_PARSE);
           
            if($_SERVER['REQUEST_METHOD'] == 'POST' && ($_REQUEST['type'] == 'dpd' || $_REQUEST['type'] == 'dhl'))
            {
                    $type = $_REQUEST['type'];
                    $file = file($_FILES[$type]['tmp_name']);
                    $file = array_map('utf8_encode', $file);
                   
                    if($type == 'dpd')
                    {
                            $array_check = array('Kundenummer','Paketscheinnr.','Ref.Nr.','EName1','EName2','EName3','EStrasse','ELand','EPLZ','EStadt','Gewicht','Auftragsdatum','Wert','Betrag');
                            $parcel_id_index = 1;
                            $orders_id_index = 2;
                            $name_index = 3;
                            $city_index = 9;
                            $carrier_id = 2;
                    }
                    if($type == 'dhl')
                    {
                            $array_check = explode(';','SITEMS_ID;SITEMS_IDENTCODE;SITEMS_STORNO;SITEMS_LABELTYP;ABS_CUSTOMERDECL;AbsHausNr;AbsName1;AbsName2;ORT;AbsPlz;AbsStrasse;SITEMS_DATE;SITEMS_ABS_ID;EmpKundenNr;VerfahrenTyp;SITEMS_READY_TO_SEND;CircleNumber;EmpName1;EmpName2;SITEMS_EMPBEM;SITEMS_LEITCODE;SITEMS_ABSBEM;SITEMS_ORDERNUMBER;KSTS_BEZEICHNUNG;SITEMS_GEWICHT;SITEMS_ZLEISTUNG;SOWNER_CLOSEDATE;SITEMS_NACHNAHME;SITEMS_WERT;SITEMS_ENTGELD;EmpLandName;EmpPlz;SITEMS_PRODUKTCODE;EmpOrt;EmpStrasse;SITEMS_PRODUKTNAME;LeistungenText;NNWAEHRUNG;SITEMS_KOLLICOUNTER;SITEMS_ZUSATZBETRAGNACHNAHME;SITEMS_GEWICHT_MC;SITEMS_VORAUSVERF;EmpHausNr;WertWaehrung;SITEMS_STORNO_REASON;TVWERTWAEHRUNG;SITEMS_ZOLLZUSATZ;EmpLandCode;NKREIS_TYP_CN;SITEMS_AWB;SITEMS_TVWERT;SITEMS_E_EMAIL;SITEMS_E_GEBDATUM;SITEMS_E_AUSWEISNR;SITEMS_E_AUSWEISART;SITEMS_E_AUSWEISBEH;SITEMS_E_MINDESTALTER;SITEMS_NACHNAME;SITEMS_VORNAME;SITEMS_MA_STADTTEIL;SITEMS_MA_ORT;SITEMS_MA_STRASSE;SITEMS_VERTRAG_ID;SITEMS_IDP_CONF;SITEMS_TAUSCHBOX;SITEMS_ZLEISTUNG_RETOUR;SITEMS_IDENTCODE_RETOUR;TEILNAHME;SITEMS_CREATOR;SITEMS_E_STAATSANGEHOERIGKEIT;SITEMS_E_ZUSAETZLICHEABFRAGE;SITEMS_E_ANTWORT;SITEMS_VERWENDUNGSZWECK');
                            $parcel_id_index = 1;
                            $orders_id_index = 22;
                            $name_index = 17;
                            $city_index = 33;
                            $carrier_id = 1;
                    }
                   
                    foreach($file as $line_nr => $line)
                    {
                            $line = explode(';',trim($line));
                           
                            if($line_nr == 0)
                            {
                                    // Dateiformat überprüfen
                                    if(array_diff($array_check,$line))
                                    {
                                            $feedback[$type][] = array('error','<b>Fehler:</b> Daten entsprechen nicht dem erwarteten Format!');
                                            break;
                                    }
                            }
                            else
                            {
                                    $parcel_id = $line[$parcel_id_index];
                                    $orders_id = $line[$orders_id_index];
                                    $check = array();
                                   
                                    if(!$orders_id)
                                    {
                                            $feedback[$type][] = array('error','<b>Fehler:</b> Bestell-ID für Tracking-ID <i>'.$parcel_id.'</i> ('.$line[$name_index].', '.$line[$city_index].') nicht vorhanden.');
                                            continue;
                                    }
                                    if(!$orders_id)
                                    {
                                            $feedback[$type][] = array('error','<b>Fehler:</b> Tracking-ID für Bestell-ID <i>'.$orders_id.'</i> nicht vorhanden.');
                                            continue;
                                    }
                                   
                                    // Überprüfen, ob Datensatz schon vorhanden
                                    $stmt = "SELECT parcel_id FROM orders_tracking WHERE carrier_id = '".$carrier_id."' AND orders_id = '".$orders_id."'";
                                    if($result = xtc_db_query($stmt))
                                    {
                                            while($row = $result->fetch_assoc()) $check[] = $row['parcel_id'];
                                            $result->close();
                                    }
                                   
                                    // Datensatz schreiben
                                    if(in_array($parcel_id,$check))
                                    {
                                            $feedback[$type][] = array('info','<b>Info:</b> Trackingnummer <i>'.$parcel_id.'</i> für Bestellung <i>'.$orders_id.'</i> bereits vorhanden (Datensatz übersprungen).</b>');
                                            continue;
                                    }
                                    else
                                    {
                                            $stmt = "INSERT INTO orders_tracking SET orders_id = '".$orders_id."', carrier_id = '".$carrier_id."', parcel_id = '".$parcel_id."', date_added = '".date('Y-m-d H:i:s')."'";
                                            xtc_db_query($stmt);
                                            $sqlerror = mysqli_error($mysqli);
                                            if($sqlerror) $feedback[$type][] = array('error',$sqlerror);
                                            else if($check) $feedback[$type][] = array('warning','<b>Achtung:</b> Tracking-ID <i>'.$parcel_id.'</i> wurde zur Bestellung <i>'.$orders_id.'</i> hinzugefügt.<br />(Folgende Trackingnummer(n) waren breits vorhanden: <i>'.implode($check).'</i>)');
                                            else $feedback[$type][] = array('success','<b>Erfolg:</b> Tracking-ID <i>'.$parcel_id.'</i> wurde zur Bestellung <i>'.$orders_id.'</i> hinzugefügt.');
                                    }
                                    unset($check);
                            }
                    }
            }
    ?>
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <meta charset="utf-8" />
    <style>
            .error{color:#CC0000;}
            .warning{color:#CCCC00;}
            .success{color:#00CC00;}
            .info{color:#00CCCC;}
    </style>
    </head>
    <body style="font-family:Arial;">
    <form method="POST" enctype="multipart/form-data">
            <h2>DPD-Tracking</h2>
            <p>
                    <input type="hidden" name="type" value="dpd" />
                    <input type="file" name="dpd" accept=".csv" />
                    <input type="submit" name="submit" value="Absenden" />
            </p>
            <?php
                    if($feedback['dpd']) echo '<ul>';
                    foreach($feedback['dpd'] as $line) echo '<li class="'.$line[0].'">'.$line[1].'</li>';
                    if($feedback['dpd']) echo '</ul>';
            ?>
    </form>
    <form method="POST" enctype="multipart/form-data">
            <h2>DHL-Tracking</h2>
            <p>
                    <input type="hidden" name="type" value="dhl" />
                    <input type="file" name="dhl" accept=".csv" />
                    <input type="submit" name="submit" value="Absenden" />
            </p>
            <?php
                    if($feedback['dhl']) echo '<ul>';
                    foreach($feedback['dhl'] as $line) echo '<li class="'.$line[0].'">'.$line[1].'</li>';
                    if($feedback['dhl']) echo '</ul>';
            ?>
    </form>

    </body>


    Linkback: https://www.modified-shop.org/forum/index.php?topic=41453.0
    4 Antworten
    254 Aufrufe
    17. April 2024, 09:37:17 von GTB
    1 Antworten
    941 Aufrufe
    01. Februar 2021, 21:24:22 von awids
    2 Antworten
    2295 Aufrufe
    07. November 2010, 20:59:35 von web28
    5 Antworten
    3046 Aufrufe
    01. April 2014, 13:03:19 von VoxlWolf