Wer sich schon mal bei Shopware damit auseinander setzen musste, wie die Einstellung "Deaktiviere Steuern wenn eine USt-IdNr. angegeben wurde" funktioniert, ist sicher schnell im
Checkout-Controller und in der Methode
isTaxFreeDelivery($userData) gelandet.
Leider ist diese Methode in einem Stil geschrieben, der sie meiner Meinung nach extrem schwer lesbar macht. Die wieder negierten emptys und vielen return sorgen dafür, dass man den dahinter steckten logischen Ausdruck nur schwer erkennt, wobei der an sich ziemlich einfach ist.
Alles ist wie man man erwartet nur das bei fehlender VatID in der Shipping-Address auch die Billing-Address "einspringen" kann, muss man sich mehrmals durch den Kopf gehen lassen.
Ich habe die Methode noch mal in für mich besser lesbarer Form nieder geschrieben:
$shippingCountryTaxFree = !empty($userData['additional']['countryShipping']['taxfree']);
$shippingCountryTaxFreeVatID = !empty($userData['additional']['countryShipping']['taxfree_ustid']);
$billingCountryTaxFreeVatID = !empty($userData['additional']['country']['taxfree_ustid']);
$shippingVatID = !empty($userData['shippingaddress']['ustid'];
$billingVatID = !empty($userData['billingaddress']['ustid'];
return $shippingCountryTaxFree
||
($shippingCountryTaxFreeVatID &&
(
(!$shippingVatID && billingVatID && billingCountryTaxFreeVatID)
||
$shippingVatID
)
);
Die Logik stammt aus der Version 5.3.5