Opened 7 years ago
Last modified 6 years ago
#1581 new Aufgabe
VAT-Validation-Klasse hard-codierte Country-Liste
| Reported by: | noRiddle | Owned by: | somebody |
|---|---|---|---|
| Priority: | normal | Milestone: | modified-shop-2.1.0.0 |
| Component: | Shop | Version: | 2.0.4.2 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
In der /includes/classes/vat_validation.php ist im folgenden switch-Block die EU-Countries-Liste hard-codiert aufgeführt:
switch ($country_iso_code) {
case 'AT':
case 'BE':
...
$t_result = $this->checkVatID_EU($vatNumber, $country_iso_code);
break;
default:
$t_result = 8; //unknown country
break;
}
Ich bin der Meinung, daß man das ändern sollte, damit bliebe man flexiber (z.B. würde bei Brexit ein DB-Update ausreichen).
Z.B. so:
Im construct()
$this->eu_countries = array();
$eu_countries_qu = xtc_db_query("SELECT c.countries_iso_code_2
FROM countries c
JOIN zones_to_geo_zones ztgz
ON ztgz.zone_country_id = c.countries_id
WHERE ztgz.geo_zone_id = 5
ORDER BY c.countries_iso_code_2");
while($eu_countries_arr = xtc_db_fetch_array($eu_countries_qu)) {
$this->eu_countries[] = $eu_countries_arr['countries_iso_code_2'];
}
und im switch dann
swith(true) {
in_array($country_iso_code, $this->eu_countries):
$t_result = $this->checkVatID_EU($vatNumber, $country_iso_code);
break;
default:
$t_result = 8; //unknown country
break;
}
oder schlicht mit if else .
Oder ist die Gefahr zu groß, daß einer etwas bei den Steuerzonen und deren Länderzuordnung ändert, sodaß die geo_zone_id nicht mehr 5 ist ?
Gruß,
noRiddle
Attachments (0)
Change History (5)
comment:1 by , 7 years ago
| Component: | Admin → Shop |
|---|---|
| Reporter: | changed from to |
| Version: | → 2.0.4.2 |
comment:3 by , 7 years ago
In der Tat fehlt HR in der Funktion validate_vatid_offline().
Diese genannte Funktion erklärt allerdings auch in gewisser Weise warum die EU-Countries-Liste hard-codiert ist.
Die Funktion validate_vatid_offline() prüft die VATID auf Plausibilität und das ist bei den diversen Ländern u.U. nicht gleich, was eine Hard-Codierung in diesem Fall ja unvermeidbar macht.
Aufgrund dieser Erkenntnis ändere ich meine Meinung dahingehend, daß man um's Hard-Codieren zwar nicht herum kommt, daß man die Liste der Countries jedoch
- trotzdem zentraler im construct() bestimmen sollte und
- in der Funktion validate_vatid_offline() irgendwie abfangen sollte wenn ein $country im Array der zentral im construct() definierten Country-Liste vergessen wurde (wie genau habe ich mom. auch keine Idee).
Ich werde demnächst wahrscheinlich eine alternative VATID-Prüfung bauen die ein anderes Portal (Bundeszentralamt für Steuern) als Validierung benutzt und auch u.A. die Rechtsform der Firma mit überprüft.
Zu Monaco und Weiteren mache ich einen eigenen Thread auf. Da gibt es einige Fragen zu.
Gruß,
noRiddle
comment:4 by , 7 years ago
Der angekündigte Thread findet sich hier: Zuordnung von Ländern/Inseln/Kolonien zu Steuerzone
Auch in Ticket #1576 habe ich, aufgrund des Zusammenhanges und der besseren Übersicht, den Thread verlinkt.
Gruß,
noRiddle
comment:5 by , 6 years ago
| Milestone: | → modified-shop-2.1.0.0 |
|---|

Kann es sein, dass Kroatien in der Datei fehlt? Oben in der Liste der EU Länder ist es enthalten, aber weiter unten, wo für jedes EU Land nochmal einzeln Code steht, da ist Kroatien nicht mehr dabei. Vielleicht Zusammenhang zum bereits geschlossenen Ticket #1537?
Und was ist mit Monaco, die wie EU behandelt werden? Sollten die da vielleicht auch mit rein?