Files
SDL/SDL/Classes/cEORIWebService.vb

350 lines
14 KiB
VB.net

' Aufruf des Webservice von FinanzOnline zur prüfung der UID-Nummer
' Aufgrund von verzögerten Bestätigungen wurd diese Funktion deaktiviert!!!
Imports System.IO
Imports System.Net
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
Imports DocumentFormat.OpenXml.Drawing.Charts
Imports VERAG_PROG_ALLGEMEIN.TESTJSON
Public Class cEORIWebService
'Public Shared SESSION_ID As String = ""
'Shared Function Call_Web_Service_MethodUID_Abfrage(ByRef session As String, ByVal txtFirma As String, ByVal txtEORI As String) As String
' Try
' ' Return CallWebService.uidAbfrage(session, tid, benid, My.Resources.UID_Nr, txtUid.Text, uidAbfrageRequestStufe.Item2, "", "", "", "", "", "", "")
' 'Dim s() As Object = CallWebService.uidAbfrage(session, tid, benid, My.Resources.UID_Nr, txtUid.Text, uidAbfrageRequestStufe.Item2, "", "", "", "", "", "", "")
' Dim EORIvalidation As New eu.europa.ec1.validation
' Dim msg As String = ""
' Dim name As String = ""
' Dim adrz1 As String = ""
' Dim adrz2 As String = ""
' Dim adrz3 As String = ""
' Dim adrz4 As String = ""
' Dim adrz5 As String = ""
' Dim adrz6 As String = ""
' Dim returnInt As eu.europa.ec1.eoriValidationResult = EORIvalidation.validateEORI({txtEORI})
' If returnInt.result.Count > 0 Then
' MsgBox(returnInt.result)
' 'Dim firma As String = name & vbNewLine & adrz1
' 'If adrz2 <> "" Then firma = firma & vbNewLine & adrz2
' 'If adrz3 <> "" Then firma = firma & vbNewLine & adrz3
' 'If adrz4 <> "" Then firma = firma & vbNewLine & adrz4
' 'If adrz5 <> "" Then firma = firma & vbNewLine & adrz5
' 'If adrz6 <> "" Then firma = firma & vbNewLine & adrz6
' ' frmUIDCheck.firmaUIDFinanzOnline = firma
' ' frmUIDCheck.firmaUIDProgramm = txtFirma
' ' frmUIDCheck.uidnr = txtUid
' ' frmUIDCheck.Show()
' Else
' MsgBox(returnInt)
' End If
' Return ""
' Catch ex As Exception
' MsgBox(ex.Message & ex.StackTrace)
' End Try
' Return "-1"
'End Function
'Shared Function genUID_Formular(ByVal txtUid As String, Optional AvisoId As Integer = -1, Optional SendungsId As Integer = -1, Optional ByRef UID_ERG As Integer = -1) As String 'SESSION_ID wir nur zurückgegeben
' Try
' Dim msgErgebnis = ""
' Dim tmp_SESSION_ID = ""
' Dim Firma = ""
' UID_ERG = 0 'Call_Web_Service_MethodUID_Abfrage_NEU2020(txtUid, Firma, tmp_SESSION_ID, msgErgebnis)
' If UID_ERG = 0 Or UID_ERG = 1 Then
' Select Case UID_ERG
' Case 0 : msgErgebnis = "UID-Nr. GÜLTIG - OK"
' Case 1 : msgErgebnis = "UID-Nr. UNGÜLTIG"
' End Select
' Dim PdfTmp = "" 'SDL.FormularManagerNEU.UID_PRUEFUNG(msgErgebnis, Firma, tmp_SESSION_ID, uid, txtUid, tid, AvisoId, SendungsId)
' If PdfTmp <> "" Then
' Dim fileName = "UID_Prüfung_" & txtUid & ".pdf"
' Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "UID_PRUEFUNG", VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA, txtUid, Now.ToString("ddMMyy_HHmmss.ffff"), fileName, -1, False) 'Now.ToString("ddMMyy_HHmmss.ffff")
' If Not DS.uploadDataToDATENSERVER(PdfTmp) Then MsgBox("Fehler beim Speichern: Datenserver!") : Return False
' If DS.da_id <= 0 Then MsgBox("Keine DocId!") : Return False
' Dim da_id = DS.da_id
' Dim destPath = DS.GET_TOP1_PATH
' If AvisoId > 0 And SendungsId > 0 Then
' Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(AvisoId, fileName, DS.da_id, "UID", "PDF", SendungsId)
' If Not ANH.SAVE Then MsgBox("Fehler beim Anhang speichern!") : Return False
' Dim anhId = ANH.anh_id
' End If
' Return destPath
' End If
' Else
' MsgBox(msgErgebnis)
' End If
' Catch ex As Exception
' MsgBox(ex.Message & ex.StackTrace)
' End Try
' Return ""
'End Function
Shared _url = "http://ec.europa.eu/taxation_customs/dds2/eos/validation/services/validation"
Shared Function genEORI_Formular(ByVal KdNr As Integer, ByVal txtEORI As String, Optional AvisoId As Integer = -1, Optional SendungsId As Integer = -1, Optional ByRef EORI_ERGInt As Integer = -1) As String 'SESSION_ID wir nur zurückgegeben
Try
Dim msgErgebnis = ""
Dim tmp_SESSION_ID = ""
Dim Firma = ""
Dim EORI_ERG = ValidateEoriNumber(txtEORI)
If EORI_ERG.Result.Count > 0 Then
If EORI_ERG.Result(0).Status = 0 Or EORI_ERG.Result(0).Status = 1 Then
Firma = EORI_ERG.Result(0).Name & " "
Firma &= EORI_ERG.Result(0).Street & " "
Firma &= EORI_ERG.Result(0).Country & " " & EORI_ERG.Result(0).PostalCode & " " & EORI_ERG.Result(0).City
Firma = Firma
EORI_ERGInt = EORI_ERG.Result(0).Status
Select Case EORI_ERG.Result(0).Status
Case 0 : msgErgebnis = "EORI-Nr. GÜLTIG - OK"
Case 1 : msgErgebnis = "EORI-Nr. UNGÜLTIG"
End Select
setEORIEntry(KdNr, SendungsId, AvisoId, EORI_ERG, tmp_SESSION_ID, EORI_ERG.Result(0).Eori, VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA_ID)
Dim PdfTmp = SDL.FormularManagerNEU.EORI_PRUEFUNG(msgErgebnis, Firma, tmp_SESSION_ID, txtEORI, AvisoId, SendungsId, EORI_ERG.RequestDate)
If PdfTmp <> "" Then
Dim fileName = "EORI_Prüfung_" & txtEORI & ".pdf"
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "EORI_PRUEFUNG", VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA, txtEORI, Now.ToString("ddMMyy_HHmmss.ffff"), fileName, -1, False) 'Now.ToString("ddMMyy_HHmmss.ffff")
If Not DS.uploadDataToDATENSERVER(PdfTmp) Then MsgBox("Fehler beim Speichern: Datenserver!") : Return False
If DS.da_id <= 0 Then MsgBox("Keine DocId!") : Return False
Dim da_id = DS.da_id
Dim destPath = DS.GET_TOP1_PATH
If AvisoId > 0 And SendungsId > 0 Then
Dim fi As New FileInfo(PdfTmp)
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(AvisoId, fileName, DS.da_id, "EORI", "PDF", SendungsId, , fi.Length)
If Not ANH.SAVE Then MsgBox("Fehler beim Anhang speichern!") : Return False
Dim anhId = ANH.anh_id
End If
Return destPath
End If
Else
MsgBox(EORI_ERG.Result(0).StatusDescr)
End If
Else
MsgBox("Fehler bei der Prüfung der EORI-Nummer. WebService evtl. nicht verfügbar.")
End If
Return ""
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
End Try
Return ""
End Function
Shared Function genEORI_FormularWithoutSaving(ByVal kdnr As Integer, ByVal txtEORI As String, Optional AvisoId As Integer = -1, Optional SendungsId As Integer = -1, Optional ByRef EORI_ERGInt As Integer = -1) As String 'SESSION_ID wir nur zurückgegeben
Try
Dim msgErgebnis = ""
Dim tmp_SESSION_ID = ""
Dim Firma = ""
Dim EORI_ERG = ValidateEoriNumber(txtEORI)
If EORI_ERG.Result.Count > 0 Then
If EORI_ERG.Result(0).Status = 0 Or EORI_ERG.Result(0).Status = 1 Then
Firma = EORI_ERG.Result(0).Name & " " & vbNewLine
Firma &= EORI_ERG.Result(0).Street & " " & vbNewLine
Firma &= EORI_ERG.Result(0).Country & " " & EORI_ERG.Result(0).PostalCode & " " & EORI_ERG.Result(0).City
'Firma = Firma.Trim
EORI_ERGInt = EORI_ERG.Result(0).Status
Select Case EORI_ERG.Result(0).Status
Case 0 : msgErgebnis = "EORI-Nr. GÜLTIG - OK"
Case 1 : msgErgebnis = "EORI-Nr. UNGÜLTIG"
End Select
setEORIEntry(kdnr, SendungsId, AvisoId, EORI_ERG, tmp_SESSION_ID, txtEORI, VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA_ID)
Dim PdfTmp = SDL.FormularManagerNEU.EORI_PRUEFUNG(msgErgebnis, Firma, tmp_SESSION_ID, txtEORI, AvisoId, SendungsId, EORI_ERG.RequestDate)
Return PdfTmp
End If
Else
MsgBox("Fehler bei der Prüfung der EORI-Nummer. WebService evtl. nicht verfügbar.")
End If
Return ""
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
End Try
Return ""
End Function
Shared Sub setEORIEntry(kdnr As Integer, SendungsID As Integer, avisoID As Integer, EORI_ERG As EoriResponseModel, tmp_SESSION_ID As String, txtEORI As String, FirmaID As Integer)
Dim EORIPruefung = New cEORIPruefung()
Dim kdErw = New VERAG_PROG_ALLGEMEIN.cKundenErweitert(kdnr)
Select Case EORI_ERG.Result(0).Status
Case 0 : EORIPruefung.eori_valid = 1
Case 1 : EORIPruefung.eori_valid = 0
End Select
kdErw.kde_EORIgeprueftAm = Now()
kdErw.SAVE()
EORIPruefung.eori_datum = Now()
EORIPruefung.eori_KdNr = kdnr
EORIPruefung.eori_maid = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID
EORIPruefung.eori_sendungsid = SendungsID
EORIPruefung.eori_firma = (EORI_ERG.Result(0).Name & EORI_ERG.Result(0).Street & EORI_ERG.Result(0).Country & EORI_ERG.Result(0).PostalCode & EORI_ERG.Result(0).City).Trim
EORIPruefung.eori_sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
EORIPruefung.eori_sessionID = tmp_SESSION_ID
EORIPruefung.eori_AvisoID = avisoID
EORIPruefung.eori_FirmaID = FirmaID
EORIPruefung.SAVE()
End Sub
Shared Function ValidateEoriNumber(ByVal number As String) As EoriResponseModel
If number Is Nothing Then
Return Nothing
End If
Dim soapEnvelopeXml As XmlDocument = CreateSoapEnvelope(number)
Dim webRequest As HttpWebRequest = CreateWebRequest(_url)
InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest)
Dim asyncResult As IAsyncResult = webRequest.BeginGetResponse(Nothing, Nothing)
asyncResult.AsyncWaitHandle.WaitOne()
Dim response As String
Using webResponse As WebResponse = webRequest.EndGetResponse(asyncResult)
Using rd As StreamReader = New StreamReader(webResponse.GetResponseStream())
response = rd.ReadToEnd()
End Using
End Using
Dim startPos As Integer = response.IndexOf("<return>")
Dim lastPos As Integer = response.LastIndexOf("</return>") - startPos + 9
Dim responseFormatted As String = response.Substring(startPos, lastPos)
Dim serializer As XmlSerializer = New XmlSerializer(GetType(EoriResponseModel))
Dim result As EoriResponseModel
Using reader As TextReader = New StringReader(responseFormatted)
result = CType(serializer.Deserialize(reader), EoriResponseModel)
End Using
Return result
End Function
Private Shared Function CreateWebRequest(ByVal url As String) As HttpWebRequest
Dim webRequest As HttpWebRequest = CType(webRequest.Create(url), HttpWebRequest)
webRequest.ContentType = "text/xml;charset=""utf-8"""
webRequest.Accept = "text/xml"
webRequest.Method = "POST"
Return webRequest
End Function
Private Shared Function CreateSoapEnvelope(ByVal number As String) As XmlDocument
Dim soapEnvelopeDocument As XmlDocument = New XmlDocument()
Dim xmlBuilder As StringBuilder = New StringBuilder()
xmlBuilder.AppendFormat("<soap:Envelope xmlns:soap={0} >", "'http://schemas.xmlsoap.org/soap/envelope/'")
xmlBuilder.Append("<soap:Body>")
xmlBuilder.AppendFormat("<ev:validateEORI xmlns:ev={0} >", "'http://eori.ws.eos.dds.s/'")
xmlBuilder.AppendFormat("<ev:eori>{0}</ev:eori>", number)
xmlBuilder.Append("</ev:validateEORI>")
xmlBuilder.Append("</soap:Body> ")
xmlBuilder.Append("</soap:Envelope> ")
soapEnvelopeDocument.LoadXml(xmlBuilder.ToString())
Return soapEnvelopeDocument
End Function
Private Shared Sub InsertSoapEnvelopeIntoWebRequest(ByVal soapEnvelopeXml As XmlDocument, ByVal webRequest As HttpWebRequest)
Using stream As Stream = webRequest.GetRequestStream()
soapEnvelopeXml.Save(stream)
End Using
End Sub
End Class
<XmlRoot(ElementName:="return")>
Public Class EoriResponseModel
<XmlElement(ElementName:="requestDate")>
Public Property RequestDate As String
<XmlElement(ElementName:="result")>
Public Property Result As List(Of Result)
End Class
<XmlRoot(ElementName:="result")>
Public Class Result
<XmlElement(ElementName:="eori")>
Public Property Eori As String
<XmlElement(ElementName:="status")>
Public Property Status As String
<XmlElement(ElementName:="statusDescr")>
Public Property StatusDescr As String
<XmlElement(ElementName:="name")>
Public Property Name As String
<XmlElement(ElementName:="street")>
Public Property Street As String
<XmlElement(ElementName:="postalCode")>
Public Property PostalCode As String
<XmlElement(ElementName:="city")>
Public Property City As String
<XmlElement(ElementName:="country")>
Public Property Country As String
End Class