Platforms to show: All Mac Windows Linux Cross-Platform
/Main/VAT ID Check/VAT ID Check
Required plugins for this example:
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Main/VAT ID Check/VAT ID Check
This example is the version from Wed, 8th Oct 2019.
Project "VAT ID Check.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Löschen"
Const kFileQuit = "Beenden"
Const kFileQuitShortcut = ""
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&Ablage"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Bearbeiten"
MenuItem EditUndo = "&Rückgängig"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "&Ausschneiden"
MenuItem EditCopy = "&Kopieren"
MenuItem EditPaste = "&Einfügen"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "&Alles auswählen"
End MenuBar
Class VATWindow Inherits Window
Control VAT1 Inherits TextField
ControlInstance VAT1 Inherits TextField
End Control
Control Label1 Inherits Label
ControlInstance Label1 Inherits Label
End Control
Control VAT2 Inherits TextField
ControlInstance VAT2 Inherits TextField
End Control
Control Label2 Inherits Label
ControlInstance Label2 Inherits Label
End Control
Control Company Inherits TextField
ControlInstance Company Inherits TextField
End Control
Control Label3 Inherits Label
ControlInstance Label3 Inherits Label
End Control
Control City Inherits TextField
ControlInstance City Inherits TextField
End Control
Control Label4 Inherits Label
ControlInstance Label4 Inherits Label
End Control
Control Zip Inherits TextField
ControlInstance Zip Inherits TextField
End Control
Control Label5 Inherits Label
ControlInstance Label5 Inherits Label
End Control
Control Street Inherits TextField
ControlInstance Street Inherits TextField
End Control
Control Label6 Inherits Label
ControlInstance Label6 Inherits Label
End Control
Control QueryButton Inherits PushButton
ControlInstance QueryButton Inherits PushButton
EventHandler Sub Action()
List.DeleteAllRows
dim v1 as string = ConvertEncoding(vat1.Text, encodings.UTF8)
dim v2 as string = ConvertEncoding(vat2.Text, encodings.UTF8)
dim co as string = ConvertEncoding(Company.Text, encodings.UTF8)
dim ci as string = ConvertEncoding(city.Text, encodings.UTF8)
dim zi as string = ConvertEncoding(Zip.Text, encodings.UTF8)
dim st as string = ConvertEncoding(Street.Text, encodings.UTF8)
v1 = EncodeURLComponent(v1)
v2 = EncodeURLComponent(v2)
co = EncodeURLComponent(co)
ci = EncodeURLComponent(ci)
zi = EncodeURLComponent(zi)
st = EncodeURLComponent(st)
Dim sock As New HTTPSecureSocket
sock.ConnectionType = sock.TLSv12
// synchronously queries web service
dim url as string = "https://evatr.bff-online.de/evatrRPC?UstId_1="+v1+"&UstId_2="+v2+"&Firmenname="+co+"&Ort="+ci+"&PLZ="+zi+"&Strasse="+st+"&Druck="
dim data as string = sock.get(url, 90)
#if DebugBuild then
// write to text file for debugging
try
Dim f As FolderItem = SpecialFolder.Desktop.child("vat.txt")
Dim t As TextOutputStream = TextOutputStream.Create(f)
t.Write data
catch io as IOException
Break
end try
#endif
// now parse XML
dim doc as new XmlDocument(Data)
dim params as XmlNode = doc.FirstChild
dim param as XmlNode = params.FirstChild
while param <> nil
dim pvalue as XmlNode = param.FirstChild
if pvalue<>Nil then
dim parray as XmlNode = pvalue.FirstChild
if parray<>Nil then
dim pdata as XmlNode = parray.FirstChild
if pdata<>nil then
// XML is mostly a key/value list.
dim pvalue1 as XmlNode = pdata.Child(0)
dim pvalue2 as XmlNode = pdata.Child(1)
if pvalue1 = nil then Return
if pvalue2 = nil then Return
dim string1 as xmlnode = pvalue1.FirstChild
dim string2 as xmlnode = pvalue2.FirstChild
dim text1 as xmlnode = string1.FirstChild
dim text2 as xmlnode = string2.FirstChild
dim s1, s2 as string
if text1<>Nil then s1 = text1.Value
if text2<>Nil then s2 = text2.Value
Select case s1
case "Erg_Name", "Erg_Ort", "Erg_PLZ", "Erg_Str"
select case s2
case "A"
s2 = "OK"
case "B"
s2 = "Falsch!" // wrong
case "C"
s2 = "nicht abgefragt" // not queried
case "D"
s2 = "nicht verfügbar" // not available
end Select
end Select
List.AddRow s1, s2
if s1 = "ErrorCode" then
result.text = ErrorDescription(val(s2))
end if
end if
end if
end if
param = param.NextSibling
wend
Exception x as XmlException
// ignore xml parse errors
End EventHandler
End Control
Control List Inherits Listbox
ControlInstance List Inherits Listbox
End Control
Control Result Inherits Label
ControlInstance Result Inherits Label
End Control
Function FileClose() As Boolean
close
Return True
End Function
Function ErrorDescription(n as integer) As string
select case n
case 200
return "Die angefragte USt-IdNr. ist gültig."
case 201
return "Die angefragte USt-IdNr. ist ungültig."
case 202
return "Die angefragte USt-IdNr. ist ungültig. Sie ist nicht in der Unternehmerdatei des betreffenden EU-Mitgliedstaates registriert. Hinweis: Ihr Geschäftspartner kann seine gültige USt-IdNr. bei der für ihn zuständigen Finanzbehörde in Erfahrung bringen. Möglicherweise muss er einen Antrag stellen, damit seine USt-IdNr. in die Datenbank aufgenommen wird."
case 203
return "Die angefragte USt-IdNr. ist ungültig. Sie ist erst ab dem ... gültig (siehe Feld 'Gueltig_ab')."
case 204
return "Die angefragte USt-IdNr. ist ungültig. Sie war im Zeitraum von ... bis ... gültig (siehe Feld 'Gueltig_ab' und 'Gueltig_bis')."
case 205
return "Ihre Anfrage kann derzeit durch den angefragten EU-Mitgliedstaat oder aus anderen Gründen nicht beantwortet werden. Bitte versuchen Sie es später noch einmal. Bei wiederholten Problemen wenden Sie sich bitte an das Bundeszentralamt für Steuern - Dienstsitz Saarlouis."
case 206
return "Ihre deutsche USt-IdNr. ist ungültig. Eine Bestätigungsanfrage ist daher nicht möglich. Den Grund hierfür können Sie beim Bundeszentralamt für Steuern - Dienstsitz Saarlouis - erfragen."
case 207
return "Ihnen wurde die deutsche USt-IdNr. ausschliesslich zu Zwecken der Besteuerung des innergemeinschaftlichen Erwerbs erteilt. Sie sind somit nicht berechtigt, Bestätigungsanfragen zu stellen."
case 208
return "Für die von Ihnen angefragte USt-IdNr. läuft gerade eine Anfrage von einem anderen Nutzer. Eine Bearbeitung ist daher nicht möglich. Bitte versuchen Sie es später noch einmal."
case 209
return "Die angefragte USt-IdNr. ist ungültig. Sie entspricht nicht dem Aufbau der für diesen EU-Mitgliedstaat gilt. ( Aufbau der USt-IdNr. aller EU-Länder)"
case 210
return "Die angefragte USt-IdNr. ist ungültig. Sie entspricht nicht den Prüfziffernregeln die für diesen EU-Mitgliedstaat gelten."
case 211
return "Die angefragte USt-IdNr. ist ungültig. Sie enthält unzulässige Zeichen."
case 212
return "Die angefragte USt-IdNr. ist ungültig. Sie enthält ein unzulässiges Länderkennzeichen."
case 213
return "Die Abfrage einer deutschen USt-IdNr. ist nicht möglich."
case 214
return "Ihre deutsche USt-IdNr. ist fehlerhaft. Sie beginnt mit 'DE' gefolgt von 9 Ziffern."
case 215
return "Ihre Anfrage enthält nicht alle notwendigen Angaben für eine einfache Bestätigungsanfrage (Ihre deutsche USt-IdNr. und die ausl. USt-IdNr.). Ihre Anfrage kann deshalb nicht bearbeitet werden."
case 216
return "Ihre Anfrage enthält nicht alle notwendigen Angaben für eine qualifizierte Bestätigungsanfrage (Ihre deutsche USt-IdNr., die ausl. USt-IdNr., Firmenname einschl. Rechtsform und Ort). Es wurde eine einfache Bestätigungsanfrage durchgeführt mit folgenden Ergebnis: Die angefragte USt-IdNr. ist gültig."
case 217
return "Bei der Verarbeitung der Daten aus dem angefragten EU-Mitgliedstaat ist ein Fehler aufgetreten. Ihre Anfrage kann deshalb nicht bearbeitet werden."
case 218
return "Eine qualifizierte Bestätigung ist zur Zeit nicht möglich. Es wurde eine einfache Bestätigungsanfrage mit folgendem Ergebnis durchgeführt: Die angefragte USt-IdNr. ist gültig."
case 219
return "Bei der Durchführung der qualifizierten Bestätigungsanfrage ist ein Fehler aufgetreten. Es wurde eine einfache Bestätigungsanfrage mit folgendem Ergebnis durchgeführt: Die angefragte USt-IdNr. ist gültig."
case 220
return "Bei der Anforderung der amtlichen Bestätigungsmitteilung ist ein Fehler aufgetreten. Sie werden kein Schreiben erhalten."
case 999
return "Eine Bearbeitung Ihrer Anfrage ist zurzeit nicht möglich. Bitte versuchen Sie es später noch einmal."
end Select
End Function
Function FindFile(name as string) As FolderItem
// Look for file in parent folders from executable on
dim parent as FolderItem = app.ExecutableFile.Parent
while parent<>Nil
dim file as FolderItem = parent.Child(name)
if file<>Nil and file.Exists then
Return file
end if
parent = parent.Parent
wend
End Function
Note "Note"
This uses a webservice from German Finance Department
So you can query IDs from other EU countries from Germany
End Class
End Project
See also:
The items on this page are in the following plugins: MBS Main Plugin.