Imports System.IO
Imports SDL.at.gv.bmf.finanzonlineLogin


' Aufruf des Webservice von FinanzOnline zur prüfung der UID-Nummer
' Aufgrund von verzögerten Bestätigungen wurd diese Funktion deaktiviert!!!

Public Class cFinanzOnlineWebService
    ' Private tid As String = My.Resources.tid
    ' Private benid As String = My.Resources.benid
    '  Private pin As String = My.Resources.pin

    ' 'VERAG:
    'Shared tid As String = "1000103u3032"
    'Shared benid As String = "webserv99"
    'Shared pin As String = "webserv99"
    'Shared uid As String = "ATU53187000"

    ' 'VERAG CS:
    'Shared tid As String = "19379933"
    'Shared benid As String = "WEBserv99"
    'Shared pin As String = "WEBserv99"
    'Shared uid As String = "XXXX"


    ''FRONT-Office:
    'Shared tid As String = "67493371k039"
    'Shared benid As String = "WEBserv99"
    'Shared pin As String = "WEBserv99"
    'Shared uid As String = "ATU74813856"


    'IMEX:
    Shared tid As String = "19435107n654"
    Shared benid As String = "WEBserv99"
    Shared pin As String = "WEBserv99"
    Shared uid As String = "ATU68490714"


    Public Shared SESSION_ID As String = ""

    Shared Sub initValues()

        Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            Case "IMEX"
                tid = "19435107n654"
                benid = "WEBserv99"
                pin = "WEBserv99"
                uid = "ATU68490714"
            Case "FRONTOFFICE"
                tid = "67493371k039"
                benid = "WEBserv99"
                pin = "WEBserv99"
                uid = "ATU74813856"
            Case "UNISPED"
                tid = "18778752z632"
                benid = "Webmaster1"
                pin = "Webmaster1"
                uid = "ATU67001200"
            Case Else  'VERAG:
                tid = "13390891m005"
                benid = "WEBserv99"
                pin = "WEBserv99"
                uid = "ATU53187000"
                'tid = "1000103u3032"
                'benid = "webserv99"
                'pin = "webserv99"
                'uid = "ATU53187000"
        End Select
    End Sub


    Shared Function Call_Web_Service_MethodUID_Login() As Integer
        Dim CallWebService As New SDL.at.gv.bmf.finanzonlineLogin.sessionService
        Try
            Dim rc = ""
            Dim msg = ""
            SESSION_ID = CallWebService.login(tid, benid, pin, uid, rc, msg)

            Return rc
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
        Return -99
    End Function

    Shared Function Call_Web_Service_MethodUID_Abfrage(ByRef session As String, ByVal txtFirma As String, ByVal txtUid As String) As String
        Dim CallWebService As New SDL.at.gv.bmf.finanzonline.uidAbfrageService
        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 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 Integer = CallWebService.uidAbfrage(session, tid, benid, My.Resources.UID_Nr, txtUid, at.gv.bmf.finanzonline.uidAbfrageServiceRequestStufe.Item2, msg, name, adrz1, adrz2, adrz3, adrz4, adrz5, adrz6)

            If returnInt = 0 Then
                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 returnInt
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
        Return "-1"
    End Function
    Shared Function Call_Web_Service_MethodUID_Logout(ByRef sessionid As String) As String
        Dim CallWebService As New SDL.at.gv.bmf.finanzonlineLogin.sessionService
        Try
            Dim msg = ""
            Dim sGetValue As String = CallWebService.logout(tid, benid, sessionid, msg)
            Return sGetValue
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return ""
    End Function



    Shared Function Call_Web_Service_MethodUID_Login_NEU2020() As Integer
        Dim CallWebService As New VERAG_PROG_ALLGEMEIN.at.gv.bmf.finanzonline.session.sessionService
        Try
            Dim rc As Integer = -1
            Dim msg = ""
            SESSION_ID = CallWebService.login(tid, benid, pin, uid, rc, msg)

            Return rc
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
        Return -99
    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 = 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 fi As New FileInfo(PdfTmp)
                        Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(AvisoId, fileName, DS.da_id, "UID", "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(msgErgebnis)
            End If

        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try

        Return ""

    End Function


    Shared Function genUID_FormularWithoutSaving(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 = 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)
                Return PdfTmp
            Else
                MsgBox(msgErgebnis)
            End If

        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try

        Return ""

    End Function



    Shared Function Call_Web_Service_MethodUID_Abfrage_NEU2020(ByVal txtUid As String, Optional ByRef Firma As String = "", Optional ByRef tmp_SESSION_ID As String = "", Optional ByRef msgErgebnis As String = "", Optional SaveErgInAdressenKdNr As Integer = -1) As String 'SESSION_ID wir nur zurückgegeben
        initValues()

        If Call_Web_Service_MethodUID_Login_NEU2020() <> 0 Then
            MsgBox("FEHLER FO LOGIN")
            Return -1
        End If
        tmp_SESSION_ID = SESSION_ID
        Dim CallWebService As New VERAG_PROG_ALLGEMEIN.at.gv.bmf.finanzonline.uidAbfrageService
        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 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 Integer = CallWebService.uidAbfrage(tid, benid, SESSION_ID, uid, txtUid, VERAG_PROG_ALLGEMEIN.at.gv.bmf.finanzonline.uidAbfrageServiceRequestStufe.Item2, msg, name, adrz1, adrz2, adrz3, adrz4, adrz5, adrz6)

            If returnInt = 0 Or returnInt = 1 Then

                Dim UID_TMP As New VERAG_PROG_ALLGEMEIN.cUIDPruefung

                UID_TMP.uid_Datum = Now
                UID_TMP.uid_Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
                'If If(UID_TMP.uid_Sachbearbeiter, "") = "" Then UID_TMP.uid_Sachbearbeiter = "AUTO"
                UID_TMP.uid_MaId = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID
                UID_TMP.uid_valid = (returnInt = 0)
                If SaveErgInAdressenKdNr > 0 Then UID_TMP.uid_KundenNr = SaveErgInAdressenKdNr


                UID_TMP.uid_UstIdKz = GetUIDLand(txtUid)
                UID_TMP.uid_UstIdNr = GetUidNr(txtUid)

                UID_TMP.Firma = name
                UID_TMP.uid_abfrageUid = uid
                UID_TMP.uid_sessionId = tmp_SESSION_ID

                UID_TMP.uid_adr1 = adrz1
                UID_TMP.uid_adr2 = adrz2
                UID_TMP.uid_adr3 = adrz3
                UID_TMP.uid_adr4 = adrz4
                UID_TMP.uid_adr5 = adrz5
                UID_TMP.uid_adr6 = adrz6

                UID_TMP.uid_stufe = 2

                UID_TMP.SAVE()
                If UID_TMP.uid_valid Then
                    If SaveErgInAdressenKdNr > 0 Then
                        Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(SaveErgInAdressenKdNr)
                        AD.UstIdGeprüft = Now.ToShortDateString
                        AD.SAVE()
                    End If
                End If
            End If



            If returnInt = 0 Then
                Firma = 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(GetCodeText(returnInt))
            End If
            msgErgebnis = msg
            Call_Web_Service_MethodUID_Logout_NEU2020()
            Return returnInt
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name, VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL)
            Call_Web_Service_MethodUID_Logout_NEU2020()
        End Try
        Return "-1"
    End Function

    Shared Function GetUIDLand(uid As String)
        If uid.Length > 2 Then
            Return uid.Substring(0, 2)
        End If
        'Dim uidLand = ""
        'For Each s In uid
        '    If IsNumeric(s) Then Return uidLand
        '    uidLand &= s
        'Next
        'Return uidLand
    End Function


    Shared Function GetUidNr(uid As String)
        If uid.Length > 2 Then
            Return uid.Substring(2, uid.Length-2)
        End If
        'Dim uidLand = ""
        'For Each s In uid
        '    If IsNumeric(s) Then uidLand &= s
        'Next
        'Return uidLand

    End Function
    Shared Function GetCodeText(rc As Integer)
        Select Case rc
            Case 0 : Return "Die UID des Erwerbers ist gültig."
            Case -1 : Return "Die Session ID ist ungültig oder abgelaufen."
            Case -2 : Return "Der Aufruf des Webservices ist derzeit wegen Wartungsarbeiten nicht möglich."
            Case -3 : Return "Es ist ein technischer Fehler aufgetreten."
            Case -4 : Return "Dieser Teilnehmer ist für diese Funktion nicht berechtigt."
            Case 1 : Return "Die UID des Erwerbers ist nicht gültig."
            Case 4 : Return "Die UID-Nummer des Erwerbers ist falsch."
            Case 5 : Return "Die UID-Nummer des Antragstellers ist ungültig."
            Case 10 : Return "Der angegebene Mitgliedstaat verbietet diese Abfrage."
            Case 101 : Return "UID beginnt nicht mit ATU."
            Case 103 : Return "Die angefragte UID-Nummer kann im FinanzOnline nur in Stufe 1 bestätigt werden,
                    da diese UID-Nummer zu einer Unternehmensgruppe (Umsatzsteuergruppe) gehört.
                    Aus technischen Gründen werden aus Tschechien keine Firmendaten angezeigt. Für
                    eine gültige Stufe 2 Abfrage ist es daher erforderlich, dass Sie unter
                    http://adisreg.mfcr.cz die Daten der CZ-Umsatzsteuergruppe aufrufen und
                    kontrollieren, ob das angefragte Unternehmen auch tatsächlich zu dieser Gruppe
                    gehört.Bitte bewahren Sie den Ausdruck dieser Anfrage in Ihren Unterlagen als
                    Beleg gemäß § 132 BAO auf. Für jede Anfrage Stufe 2 ist sowohl das
                    Bestätigungsverfahren in Stufe 1 im FinanzOnline als auch das Gruppenregister im
                    anderen Mitgliedsstaat laut o.a. Link zu konsultieren. Im Falle von Fragen wenden
                    Sie sich bitte an Ihr zuständiges Finanzamt."
            Case 104 : Return "Die angefragte UID-Nummer kann im FinanzOnline nur in Stufe 1 bestätigt werden,
                    da diese UID-Nummer zu einer Unternehmensgruppe (Umsatzsteuergruppe) gehört.
                    Aus technischen Gründen werden aus der Slowakei keine Firmendaten angezeigt.
                    Für eine gültige Stufe 2 Abfrage ist es daher erforderlich, dass Sie unter
                    http://www.drsr.sk die Daten der SK-Umsatzsteuergruppe aufrufen und kontrollieren,
                    ob das angefragte Unternehmen auch tatsächlich zu dieser Gruppe gehört. Bitte
                    bewahren Sie den Ausdruck dieser Anfrage in Ihren Unterlagen als Beleg gemäß §Bundesministerium für Finanzen Seite 3 von 3
                    Stand: 27.10.2016 BAO auf. Für jede Anfrage Stufe 2 ist sowohl das Bestätigungsverfahren In Stufe
                    1 im FinanzOnline als auch das Gruppenregister im anderen Mitgliedsstaat laut o.a.
                    Link zu konsultieren. Im Falle von Fragen wenden Sie sich bitte an Ihr zuständiges
                    Finanzamt."
            Case 105 : Return "Die UID-Nummer ist über FinanzOnline einzeln abzufragen."
            Case 1511 : Return "Der angegebene Mitgliedstaat ist derzeit nicht erreichbar"
            Case Else : Return "Unbekannter Fehler:  " & rc
        End Select
    End Function
    Shared Function Call_Web_Service_MethodUID_Logout_NEU2020() As String
        Dim CallWebService As New VERAG_PROG_ALLGEMEIN.at.gv.bmf.finanzonline.session.sessionService
        Try
            Dim msg = ""
            Dim sGetValue As String = CallWebService.logout(tid, benid, SESSION_ID, msg)
            Return sGetValue
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return ""
    End Function
End Class
