Welches Modul für DPD Versand?

Thema wurde von Anonymous, 11. April 2022 erstellt.

  1. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Merke: Beiträge die mehr als 12-18 Monate keinen Beitrag mehr hatten passen oft nicht mehr zu akltuellen Versionen und gegebenheiten :)

    Welche Anforderungen hast du den an DPD?
    Shipcloud könntest z.B. nutzen. Erspart viel Zeit, wenn mehr als ne Handvoll Bestellungen am Tag hast, da massenbearbeitung möglich ist statt jede einzeln. und eigenen Vertrag könntest auch hinterlegen.
     
  2. Anonymous

    Anonymous Erfahrener Benutzer

    Wir benötigen das DPD Modul selber täglich und pflegen daher auch die Updates. Wer also Interesse hat kann sich gerne bei mir melden.
     
  3. Anonymous

    Anonymous Erfahrener Benutzer

    Hallo, da nach dem neuesten GambioUpdate noch immer das Modul "MyDPD/Iloxx" erscheint, würden wir gerne nachfragen, ob es hier Neuigkeiten zur Schnittstelle gibt...
     
  4. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Wenn du es selfhostet mal installiert hast verschwindet es nicht einfach.
     
  5. Hey,

    mal als Tipp:
    Man kann sich, relativ einfach, selbst eine "Schnittstelle" zu DPD basteln,
    hatte ich bei uns auch gemacht.
    In der Shopdatenbank hat man alle notwendigen Daten,
    diese muss man nur in eine CSV Datei packen und dann damit Labels drucken.
    Wir versenden nicht mehr mit DPD - ich stell daher mal ein Script rein,
    was ich seiner Zeit für DPD Classic geschrieben hatte.
    Für andere Formate, abgesehen von Classic, kopiert man sich
    das Script und passt es auf das andere Format / andere DPD Produkt an.

    ACHTUNG:
    Es dient nur als Idee-Anregung / Vorlage für Dein eigenes Projekt.
    Benutzung auf eigene Gefahr - ich übernehme keine Haftung.
    Ich biete keine Unterstützung bei der Individualisierung!!!


    PHP:
    <?php

    date_default_timezone_set
    ('Europe/Berlin');
    $zeitpunkt = date('d-m-Y---H-i-s');

    $offenid = $_GET['offenid'];
    $benutzer = $_GET['benutzer'];

    function 
    writeCsvLine($file, $data, $delimiter = ';', $enclosure = '') {
        
    $line = implode($delimiter, array_map(function($value) use ($enclosure) {
            return 
    $enclosure . str_replace($enclosure, $enclosure . $enclosure, $value) . $enclosure;
        }, 
    $data));
        
    fwrite($file, $line . "\n");
    }

    $servername = 'localhost';
    $username = 'username';
    $password = 'password';
    $database = 'username';

    // Verbindung herstellen
    $connection = new mysqli($servername, $username, $password, $database);

    // Verbindung überprüfen
    if ($connection->connect_error) {
        die(
    'Verbindung fehlgeschlagen: ' . $connection->connect_error);
    }

       
    $query = "SELECT orders_id as bestellnummer,
                        delivery_gender,
                        delivery_company,
                        delivery_firstname,
                        delivery_lastname,
                        delivery_country,
                        delivery_postcode,
                        delivery_city,
                        delivery_street_address,
                        delivery_additional_info,
                        customers_id
                   FROM orders
                  WHERE orders_status = '
    $offenid'
                        "
    ;
    $result = $connection->query($query);

    if (
    $result === false) {
        die(
    'Abfrage fehlgeschlagen: ' . $connection->error);
    }

    // Array für CSV-Daten initialisieren
    $csvData = array();

    // Spaltenüberschriften hinzufügen
    $csvData[] = array('Anrede', 'Firma', 'Vorname', 'Nachname', 'Land', 'PLZ', 'Ort', 'Straße', 'Hausnummer', 'Sendungsreferenz 1', 'Telefon', 'E-Mail', 'Adresszusatz', 'Bundesstaat', 'Wareninhalt', 'Gewicht', 'default', 'Sendungsreferenz 2', 'Versandprodukt', 'Zusatzleistungen', 'Anzahl Pakete Sendung', 'Zollwert', 'Währung', 'Frankatur', 'Pakettyp', 'Rechnungsnummer', 'Rechnungsdatum', 'SPRN', 'EORI-Nummer (Absender)', 'UID (Empfänger)', 'Bemerkung', 'WTNR', 'Anzahl Artikel', 'Länge', 'Breite', 'Höhe', 'Abstellort (Versender-ASG)', 'Zustellinformation', 'Artikel', 'Herkunftsland', 'Nettogewicht', 'Bruttogewicht', 'Warenwert', 'Stück', 'Rechnungspositionsnummer', 'Warenwert (Höherversicherung)', 'Warenart (Höherversicherung)', 'Abteilung', 'Gebäude', 'Stockwerk', 'Vollständiger Name gemäß Ausweis', 'Telefon (ID-Check)', 'Ausweisnummer', 'Zielnetzwerk', 'MRN-Nummer');                                                                                                                                         

    while (
    $row = $result->fetch_assoc()) {
        
    // Variablen für Datenbankwerte erstellen und bearbeiten
        
    $bestellnummer = $row['bestellnummer'];
        
    $geschlecht = $row['delivery_gender'];
        
    $firma = mb_substr($row['delivery_company'], 0, 35, 'UTF-8');
        if(!empty(
    $firma)) {
            
    $anrede = 'Firma';
        }
        elseif(empty(
    $firma) && $geschlecht == 'm') {
            
    $anrede = '';
        }
        elseif(empty(
    $firma) && $geschlecht == 'f') {
            
    $anrede = '';
        }
        elseif(empty(
    $firma) && empty($geschlecht)) {
            
    $anrede = '';
        }
        
    $vorname = $row['delivery_firstname'];
        
    $nachname = $row['delivery_lastname'];
        
    $lieferland = $row['delivery_country'];
        if(
    $lieferland == 'Germany') {
            
    $land = 'DEU';
        }
        
    $plz = $row['delivery_postcode'];
        
    $ort = $row['delivery_city'];
        
    $gesamtadresse = $row['delivery_street_address'];
     
        
    $words = explode(' ', $gesamtadresse);
        
    $hausnummer = array_pop($words);
        
    $vorstrasse = implode(' ', $words);
        
    $strasse = preg_replace('/\"/', "", $vorstrasse);
        
    $strasse = preg_replace('/\"/', "", $strasse);
     
     
        
    $adressreferenz = $bestellnummer;
        
    $telefon = ''; // Leer lassen
        
    $email = 'deinesupportmailadresse@mustermann.de';
        
    $adresszusatz = $row['delivery_additional_info'];
        
    $bundesstaat = '';
        
    $default = ''; // Leer lassen
        
    $adresstyp = '1';
        
    $sendungsreferenz1 = $bestellnummer;
        
    $sendungsreferenz2 = 'PAKET'; // Leer lassen
        
    $kundennummer = $row['customers_id'];
        
    $integerString = strval($kundennummer);
        
    $anzahlNullen = 9 - strlen($integerString);
        
    $nullenString = str_repeat('0', $anzahlNullen);
        
    $uid = 'DE' . $nullenString . $integerString;
     
        
    $wareninhalt = 'Goods';
        
    $gewicht = '1';
        
    $versandprodukt = '1'; // 1 = DPD Classic
        
    $zusatzleistungen = '2';
        
    $anzahlPaketeSendung = '1';
        
    $zollwert = '';
        
    $waehrung = 'EUR';
        
    $frankatur = '';
        
    $pakettyp = '0';
        
    $rechnungsnummer = '';
        
    $rechnungsdatum = '';
        
    $sprn = '';
        
    $eoriNummerAbsender = '';
        
    $uidEmpfaenger = '';
        
    $bemerkung = '';
        
    $wtnr = '';
        
    $anzahlArtikel = '';
        
    $laenge = '';
        
    $breite = '';
        
    $hoehe = '';
        
    $abstellortVersenderASG = '';
        
    $zustellinformation = '0';
        
    $artikel = '';
        
    $herkunftsland = '';
        
    $nettogewicht = '';
        
    $bruttogewicht = '';
        
    $warenwert = '';
        
    $stueck = '';
        
    $rechnungspositionsnummer = '';
        
    $warenwertHoeherVersicherung = '';
        
    $warenartHoeherVersicherung = '';
        
    $abteilung = '';
        
    $gebaeude = '';
        
    $stockwerk = '';
        
    $vollstaendigerNameAusweis = '';
        
    $telefonIDCheck = '';
        
    $ausweisnummer = '';
        
    $zielnetzwerk = '';
        
    $mrnNummer = '';

        
    // Datenzeile für CSV erstellen
        
    $csvRow = array(
        
    $anrede,
        
    $firma,
        
    $vorname,
        
    $nachname,
        
    $land,
        
    $plz,
        
    $ort,
        
    $strasse,
        
    $hausnummer,
        
    $sendungsreferenz1,
        
    $telefon,
        
    $email,
        
    $adresszusatz,
        
    $bundesstaat,
        
    $wareninhalt,
        
    $gewicht,
        
    $default,
        
    $sendungsreferenz2,
        
    $versandprodukt,
        
    $zusatzleistungen,
        
    $anzahlPaketeSendung,
        
    $zollwert,
        
    $waehrung,
        
    $frankatur,
        
    $pakettyp,
        
    $rechnungsnummer,
        
    $rechnungsdatum,
        
    $sprn,
        
    $eoriNummerAbsender,
        
    $uidEmpfaenger,
        
    $bemerkung,
        
    $wtnr,
        
    $anzahlArtikel,
        
    $laenge,
        
    $breite,
        
    $hoehe,
        
    $abstellortVersenderASG,
        
    $zustellinformation,
        
    $artikel,
        
    $herkunftsland,
        
    $nettogewicht,
        
    $bruttogewicht,
        
    $warenwert,
        
    $stueck,
        
    $rechnungspositionsnummer,
        
    $warenwertHoeherVersicherung,
        
    $warenartHoeherVersicherung,
        
    $abteilung,
        
    $gebaeude,
        
    $stockwerk,
        
    $vollstaendigerNameAusweis,
        
    $telefonIDCheck,
        
    $ausweisnummer,
        
    $zielnetzwerk,
        
    $mrnNummer
        
    );



        
    // Datenzeile zum CSV-Datenarray hinzufügen
        
    $csvData[] = $csvRow;
    }

    $connection->close();

    // CSV-Datei erstellen und Daten schreiben
    $filename = ''.$benutzer.'---CLASSIC---'.$zeitpunkt.'.csv';
    $file = fopen($filename, 'w');

    // UTF-8 BOM einfügen
    fwrite($file, "\xEF\xBB\xBF");

    foreach (
    $csvData as $csvRow) {
        
    $csvRow = array_map(function($value) {
            return 
    mb_convert_encoding($value, 'UTF-8', 'UTF-8');
        }, 
    $csvRow);
        
    writeCsvLine($file, $csvRow, ';', '');
    }

    fclose($file);

    $file_path = __DIR__ . '/' . $filename; // Dateipfad relativ zum aktuellen Verzeichnis

    // Checken ob Datei existiert
    if (file_exists($file_path)) {
        
    header('Content-Description: File Transfer');
        
    header('Content-Type: application/csv');
        
    header('Content-Disposition: attachment; filename="' . $filename . '"');
        
    header('Expires: 0');
        
    header('Cache-Control: must-revalidate');
        
    header('Pragma: public');
        
    header('Content-Length: ' . filesize($file_path));

        
    readfile($file_path);
        exit;
    } else {
        die(
    'Error: The file does not exist.');
    }

    ?>
    Wenn man sich selbst solche Scripte schreibt, ist man unabhängig von irgendwelchen shipcloud und ähnlichen Anbietern.

    Das Script muss auf jeden Fall auf den neuesten Stand gebracht werden,
    prepared Statements verwenden, get Variablen durch Post Variablen ersetzen usw. ...

    Viel Spaß damit

    Gruß
    Peter
     
    Zuletzt bearbeitet: 5. Januar 2025
  6. Anonymous

    Anonymous Erfahrener Benutzer

    Vorteile des DPD Print Export Modul:
    • Updatesicher
    • Grafische Benutzer-Oberfläche
    • Export nur für einen bestimmten Bestellstatus möglich
    • Status exportierter Bestellungen kann automatisch geändert werden
    • E-Mail und Telefonnummer werden nur exportiert wenn der Kunde im Bestellprozess eingewilligt hat
    Bei Interesse bitte PN. Individuelle Erweiterungen / Änderungswünsche sind natürlich auch möglich.
     
  7. lutz7

    lutz7 Erfahrener Benutzer

    @humpfle, berichte doch mal etwas mehr über das Modul. Ich könnte mir vorstellen, dass der eine oder andere Interesse daran hat.
    Ich würde mich dafür interessieren.

    Gruß Lutz
     
  8. Anonymous

    Anonymous Erfahrener Benutzer

    Ich habe diesbezüglich ein neues Thema erstellt. Bitte alle Fragen zum Modul ab sofort hier :)

    (Link nur für registrierte Nutzer sichtbar.)
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Ich mache es mit Shipcloud. Scheint für mich das günstigste zu sein. Wähle manchmal auch UPS bei volumigen Paketen bis 100 cm und "zerbrechlichen" Artikeln. DPD geht extrem rabiat mit Kartons um.

    Allerdings muss ich fast jede Rechnung bei Shipcloud reklamieren, weil ungerechtfertigte Zuschläge von DPD erhoben werden (manchmal kommen die Nachbelastungen auch erst nach Monaten!)
    DPD wähle ich nur, weil ich den direkten Kontakt für die Abholung mit dem Fahrer habe.