Hi!
Ich habe für Kanada und USA die Bundesstaatsabkürzung hinzugefügt. Zugegeben etwas unschön, dass ich hier einfach den Ländercode abfrage, anstatt auf ein generelles System mit Adressformaten zuzugreifen, aber... nun ja, es funktioniert
Australien ist bei mir so gelöst, dass kein Bundesstaat abgefragt wird. Da schreiben es die Kunden mit zur Stadt, falls sie es brauchen.
DHLBusinessShipment.php am Anfang von buildCustomersData():
//BOF JTR add state for USA and Canada if (isset($this->order->delivery['state']) && ($this->order->delivery['country_iso_2']=='US' || $this->order->delivery['country_iso_2']=='CA')){ $this->order->delivery['city'] = $this->order->delivery['city'].', '.$this->order->delivery['state']; } //EOF JTR add state for USA and Canada Jetzt kommen US-Adressen bei mir völlig korrekt raus. Kanadische Adressen werden nach deutschem Vorbild formattiert. Da ich nichts gesehen habe wo wir ein Format übergeben würden, denke ich, dass das ein Fehler auf DHL-Seite ist - deswegen fixe ich da mal nichts (Können wir DHL Bugs mitteilen??). Meiner Erfahrung nach kommen die Pakete aber trotzdem an, also ist es nicht so kritisch, denke ich.
Für das Hausnummernproblem hatte ich mir erst ein kompliziertes System ausgedacht, bin aber letztendlich auf eine extrem simple Lösung ausgewichen: ich trenne die Adresszeile nur dann in Straße und Hausnummer, wenn es eine deutsche Adresse ist. Da muss das sein weil sonst die Leitcodierung fehlschlägt. Bei den Auslandsadressen prüft DHL das wohl gar nicht. Das musste ich letztens auf die Harte Tour feststellen, als eine Sendung nach Österreich beim Kunden nicht ankam, weil keine Hausnummer angegeben war. Ich hätte erwartet, dass DHL da meckert, aber leider ging die einfach durch.
Wenn ich also die Straße einfach so lasse und KEINE Hausnummer übergebe, kommt bei allen Auslandsadressen das Gewünschte raus. Es hat auch keinerlei Auswirkung auf die Leitcodierung (gibt es die wirklich fürs Ausland..?) - der erzeugte Leitcode verändert sich bei meiner Lösung nicht und im GKP-Portal zeigt er auch nix an von wegen nicht leitcodierbar.
Ich habe den Code:
$street_address = $this->parse_street_address($this->order->delivery['street_address']);
Ersetzt mit:
//BOF JTR Bei Ausland Adresszeile 1:1 übernehmen, ohne Hausnummer
//$street_address = $this->parse_street_address($this->order->delivery['street_address']);
if($this->order->delivery['country_iso_2']=='DE'){
$street_address = $this->parse_street_address($this->order->delivery['street_address']);
}else{
$street_address['street_name'] = $this->order->delivery['street_address'];
$street_address['street_number'] = '';
}
//EOF JTR Bei Ausland Adresszeile 1:1 übernehmen, ohne Hausnummer
Zugegeben eine unkonventionelle Lösung, aber sie scheint in allen Fällen zu funktionieren und der Kunde kann nicht sagen, man hätte die Adresse verändert.
Ich habe Adressen nach UK, USA, Kanada, Australien, Österreich, Spanien, Frankreich, Israel, Finnland, Thailand, Chile, Dänemark und Japan getestet.
Gruß,
JTR