Opened 2 years ago

Last modified 2 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

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 Changed 2 years ago by Tomcraft

  • Component changed from Admin to Shop
  • Reporter changed from anonymous to noRiddle
  • Version set to 2.0.4.2

comment:2 Changed 2 years ago by FräuleinGarn

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?

Last edited 2 years ago by Tomcraft (previous) (diff)

comment:3 Changed 2 years ago by anonymous

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

  1. trotzdem zentraler im construct() bestimmen sollte und
  2. 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 Changed 2 years ago by anonymous

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

Last edited 2 years ago by Tomcraft (previous) (diff)

comment:5 Changed 2 years ago by GTB

  • Milestone set to modified-shop-2.1.0.0

Add Comment

Modify Ticket

Action
as new
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.