From 38cc9f51948cee25143aee8ac8fe52ebb76ccbfc Mon Sep 17 00:00:00 2001 From: Andreas Palm Date: Fri, 10 Jul 2026 00:45:47 +0200 Subject: [PATCH] Enhance VAT ID handling for Shopware 6 orders and improve `lieferadressen` database insertion logic. --- www/pages/shopimport.php | 39 ++++++++++++++++++++++------ www/pages/shopimporter_shopware6.php | 26 ++++++++++++++----- 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/www/pages/shopimport.php b/www/pages/shopimport.php index e21ad97a6..12c746fea 100644 --- a/www/pages/shopimport.php +++ b/www/pages/shopimport.php @@ -826,18 +826,41 @@ public function KundeAnlegenUpdate($shopimportid, $shopextid, $warenkorb, bool $ } } // abweichende lieferadresse gleich angelegen? + $lieferUstidEsc = $this->app->DB->real_escape_string((string)($warenkorb['lieferadresse_ustid'] ?? '')); if (strlen($warenkorb['lieferadresse_ansprechpartner']) > 3) { - $this->app->DB->Insert("INSERT INTO lieferadressen (typ,name,abteilung,unterabteilung,land,strasse,ort,plz,adresszusatz,adresse) VALUES - ('','{$warenkorb['lieferadresse_ansprechpartner']}', - '{$warenkorb['lieferadresse_abteilung']}','{$warenkorb['lieferadresse_unterabteilung']}','{$warenkorb['lieferadresse_land']}', - '{$warenkorb['lieferadresse_strasse']}','{$warenkorb['lieferadresse_ort']}','{$warenkorb['lieferadresse_plz']}','{$warenkorb['lieferadresse_adresszusatz']}','$adresse')"); + $matchName = $this->app->DB->real_escape_string($warenkorb['lieferadresse_ansprechpartner']); + $matchStrasse = $this->app->DB->real_escape_string($warenkorb['lieferadresse_strasse']); + $matchPlz = $this->app->DB->real_escape_string($warenkorb['lieferadresse_plz']); + $matchOrt = $this->app->DB->real_escape_string($warenkorb['lieferadresse_ort']); + $existingId = $this->app->DB->Select("SELECT id FROM lieferadressen + WHERE adresse='$adresse' AND name='$matchName' AND strasse='$matchStrasse' + AND plz='$matchPlz' AND ort='$matchOrt' LIMIT 1"); + if (!empty($existingId)) { + $this->app->DB->Update("UPDATE lieferadressen SET ustid='$lieferUstidEsc' WHERE id='$existingId' LIMIT 1"); + } else { + $this->app->DB->Insert("INSERT INTO lieferadressen (typ,name,abteilung,unterabteilung,land,strasse,ort,plz,adresszusatz,adresse,ustid) VALUES + ('','{$warenkorb['lieferadresse_ansprechpartner']}', + '{$warenkorb['lieferadresse_abteilung']}','{$warenkorb['lieferadresse_unterabteilung']}','{$warenkorb['lieferadresse_land']}', + '{$warenkorb['lieferadresse_strasse']}','{$warenkorb['lieferadresse_ort']}','{$warenkorb['lieferadresse_plz']}','{$warenkorb['lieferadresse_adresszusatz']}','$adresse','$lieferUstidEsc')"); + } } if (strlen($warenkorb['lieferadresse_name']) > 3 && $warenkorb['lieferadresse_ansprechpartner'] == '') { - $this->app->DB->Insert("INSERT INTO lieferadressen (typ,name,abteilung,unterabteilung,land,strasse,ort,plz,adresszusatz,adresse) VALUES - ('','{$warenkorb['lieferadresse_name']}', - '{$warenkorb['lieferadresse_abteilung']}','{$warenkorb['lieferadresse_unterabteilung']}','{$warenkorb['lieferadresse_land']}', - '{$warenkorb['lieferadresse_strasse']}','{$warenkorb['lieferadresse_ort']}','{$warenkorb['lieferadresse_plz']}','{$warenkorb['lieferadresse_adresszusatz']}','$adresse')"); + $matchName = $this->app->DB->real_escape_string($warenkorb['lieferadresse_name']); + $matchStrasse = $this->app->DB->real_escape_string($warenkorb['lieferadresse_strasse']); + $matchPlz = $this->app->DB->real_escape_string($warenkorb['lieferadresse_plz']); + $matchOrt = $this->app->DB->real_escape_string($warenkorb['lieferadresse_ort']); + $existingId = $this->app->DB->Select("SELECT id FROM lieferadressen + WHERE adresse='$adresse' AND name='$matchName' AND strasse='$matchStrasse' + AND plz='$matchPlz' AND ort='$matchOrt' LIMIT 1"); + if (!empty($existingId)) { + $this->app->DB->Update("UPDATE lieferadressen SET ustid='$lieferUstidEsc' WHERE id='$existingId' LIMIT 1"); + } else { + $this->app->DB->Insert("INSERT INTO lieferadressen (typ,name,abteilung,unterabteilung,land,strasse,ort,plz,adresszusatz,adresse,ustid) VALUES + ('','{$warenkorb['lieferadresse_name']}', + '{$warenkorb['lieferadresse_abteilung']}','{$warenkorb['lieferadresse_unterabteilung']}','{$warenkorb['lieferadresse_land']}', + '{$warenkorb['lieferadresse_strasse']}','{$warenkorb['lieferadresse_ort']}','{$warenkorb['lieferadresse_plz']}','{$warenkorb['lieferadresse_adresszusatz']}','$adresse','$lieferUstidEsc')"); + } } } diff --git a/www/pages/shopimporter_shopware6.php b/www/pages/shopimporter_shopware6.php index 9c7d66f99..6fc3a2a74 100644 --- a/www/pages/shopimporter_shopware6.php +++ b/www/pages/shopimporter_shopware6.php @@ -3422,6 +3422,20 @@ public function ImportGetAuftrag() $order['customer'] = $customer; $cart['email'] = $customer['data']['0']['attributes']['email']; + $customerVatId = ''; + $customerAttrs = $customer['data'][0]['attributes'] ?? []; + if (!empty($customerAttrs['vatIds']) && is_array($customerAttrs['vatIds'])) { + foreach ($customerAttrs['vatIds'] as $vatIdCandidate) { + if (is_string($vatIdCandidate) && trim($vatIdCandidate) !== '') { + $customerVatId = trim($vatIdCandidate); + break; + } + } + } + if ($customerVatId === '' && !empty($customerAttrs['vatId'])) { + $customerVatId = trim((string)$customerAttrs['vatId']); + } + $addresses = $this->shopwareRequest( 'GET', 'order/' . $order['id'] . '/addresses?associations[salutation][]&associations[country][]', @@ -3432,9 +3446,9 @@ public function ImportGetAuftrag() $billingSalutationId = ''; foreach ($addresses['data'] as $address) { if ($address['id'] === $order['attributes']['billingAddressId']) { - if (!empty($address['attributes']['vatId'])) { - $cart['ustid'] = $address['attributes']['vatId']; - } + $cart['ustid'] = !empty($address['attributes']['vatId']) + ? $address['attributes']['vatId'] + : $customerVatId; $cart['name'] = $address['attributes']['firstName'] . ' ' . $address['attributes']['lastName']; if (!empty($address['attributes']['company'])) { $cart['ansprechpartner'] = $cart['name']; @@ -3454,9 +3468,9 @@ public function ImportGetAuftrag() } if ($address['id'] !== $order['attributes']['billingAddressId']) { $cart['abweichendelieferadresse'] = 1; - if (!empty($address['attributes']['vatId'])) { - $cart['lieferadresse_ustid'] = $address['attributes']['vatId']; - } + $cart['lieferadresse_ustid'] = !empty($address['attributes']['vatId']) + ? $address['attributes']['vatId'] + : $customerVatId; $cart['lieferadresse_name'] = $address['attributes']['firstName'] . ' ' . $address['attributes']['lastName']; if (!empty($address['attributes']['company'])) { $cart['lieferadresse_ansprechpartner'] = $cart['lieferadresse_name'];