Kopf-Sammelabrechnung

This commit is contained in:
2025-08-28 13:20:16 +02:00
parent 0100b3ed89
commit c126b4a064
11 changed files with 788 additions and 95 deletions

View File

@@ -21,7 +21,6 @@ Public Class cRelayHub
Public Property declarationType As String
Public Property referenceNumberOverlay As String ' <--- NEU
Public Property username As String ' <--- NEU
End Class
Public Class cRelayHubDv1CostAllocation
@@ -110,57 +109,68 @@ Public Class cRelayHub
Public Class cRelayHub_sendToRelayHub_JobOrderRequest
'Shared API_KEY = "2a6fe6bf-6547-4d56-b14a-8a18f94f9e94"
'Shared API_URL = "dev-relayhub.singlewindow.io/api"
Shared API_URL = "https://dev-relayhub.singlewindow.io/api/v1-0"
Shared API_URL As String = "https://dev-relayhub.singlewindow.io/api/v1-0"
' Low-level Sender: holt Access-Token aus cRelayHubToken und sendet JSON
Private Shared Function SendJobOrder(jsonPayload As String) As Chilkat.HttpResponse
Dim http As New Chilkat.Http
http.SetRequestHeader("Accept", "application/json")
' *** Token aus der separaten Token-Klasse beziehen ***
Dim token As String = cRelayHubToken.GetValidAccessToken()
http.AuthToken = token ' -> setzt Authorization: Bearer <token>
Return http.PostJson2(API_URL & "/job-orders/init", "application/json", jsonPayload)
End Function
' Public API: erstellt Job-Order mit 401-Retry
Public Shared Function query_declarations(request As cRelayHubJobOrderRequest) As cRelayHubApiResult
Dim result As New cRelayHubApiResult()
Try
' This example assumes the Chilkat API to have been previously unlocked.
' See Global Unlock Sample for sample code.
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
Dim success As Boolean
' HTTP-Client initialisieren
Dim http As New Chilkat.Http
' JSON vorbereiten
' Request-Objekt in JSON-String umwandeln
Dim jsonPayload As String = JsonConvert.SerializeObject(request)
' MsgBox(jsonPayload)
' Größe in Bytes
Dim payloadSizeBytes As Integer = System.Text.Encoding.UTF8.GetByteCount(jsonPayload)
' Größe in Kilobytes (1 KB = 1024 Bytes)
Dim payloadSizeKb As Double = payloadSizeBytes / 1024.0
Console.WriteLine("📦 Größe des JSON-Payload:")
Console.WriteLine(payloadSizeBytes & " Bytes (" & Math.Round(payloadSizeKb, 2) & " KB)")
' Anfrage senden
Dim response As Chilkat.HttpResponse = http.PostJson2(API_URL & "/job-orders/init", "application/json", jsonPayload)
MsgBox(jsonPayload)
Console.WriteLine(jsonPayload)
If http.LastMethodSuccess <> True Then
result.Success = False
result.StatusCode = 0
result.Message = "Verbindungsfehler"
result.Details = http.LastErrorText
Return result
' 1. Versuch
Dim response As Chilkat.HttpResponse = SendJobOrder(jsonPayload)
If response Is Nothing Then
Return New cRelayHubApiResult With {
.Success = False, .StatusCode = 0, .Message = "Verbindungsfehler",
.Details = "Keine Antwort erhalten."
}
End If
result.StatusCode = response.StatusCode
' 401 → Token-Cache invalidieren und genau 1x erneut probieren
If response.StatusCode = 401 Then
' WICHTIG:
' Diese Methode sollte in cRelayHubToken als Public verfügbar sein:
' Public Shared Sub ResetTokenCache() : ClearToken() : End Sub
' → Falls noch nicht vorhanden, bitte dort ergänzen.
Try
cRelayHubToken.ResetTokenCache()
Catch
' Falls die Methode (noch) nicht existiert, kann man als Fallback
' hier eine kurze Wartezeit einbauen und anschließend erneut GetValidAccessToken() aufrufen.
' Threading.Thread.Sleep(100)
End Try
' Retry
response = SendJobOrder(jsonPayload)
If response Is Nothing Then
Return New cRelayHubApiResult With {
.Success = False, .StatusCode = 0, .Message = "Verbindungsfehler (nach Refresh)",
.Details = "Keine Antwort erhalten."
}
End If
End If
' Auswertung
result.StatusCode = response.StatusCode
Select Case response.StatusCode
Case 201
Try
Dim jobResponse As cRelayHubJobOrderResponse = JsonConvert.DeserializeObject(Of cRelayHubJobOrderResponse)(response.BodyStr)
Dim jobResponse As cRelayHubJobOrderResponse =
JsonConvert.DeserializeObject(Of cRelayHubJobOrderResponse)(response.BodyStr)
result.Success = True
result.Message = "Job Order erfolgreich erstellt"
result.Data = jobResponse
@@ -175,18 +185,12 @@ Public Class cRelayHub
Case 400 To 499
result.Success = False
result.Message = "Client-Fehler"
result.Message = "StatusCode: " & response.StatusCode
result.Details = "StatusLine: " & response.StatusLine
result.Details = "StatusText: " & response.StatusText
result.Details = "BodyStr: " & response.BodyStr
result.Details = response.BodyStr
Case 500 To 599
result.Success = False
result.Message = "Server-Fehler"
result.Message = "StatusCode: " & response.StatusCode
result.Details = "StatusLine: " & response.StatusLine
result.Details = "StatusText: " & response.StatusText
result.Details = "BodyStr: " & response.BodyStr
result.Details = response.BodyStr
Case Else
result.Success = False
@@ -194,19 +198,15 @@ Public Class cRelayHub
result.Details = response.BodyStr
End Select
Console.WriteLine(result.Message)
Console.WriteLine(result.Details)
Return result
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
Return New cRelayHubApiResult With {.Success = False, .StatusCode = 0, .Message = "Exception", .Details = ex.ToString()}
End Try
Return Nothing
End Function
' Beispielfall
Function CreateSampleJobOrderRequest() As cRelayHubJobOrderRequest
Dim request As New cRelayHubJobOrderRequest With {
.referenceNo = "1001K",
@@ -262,9 +262,8 @@ Public Class cRelayHub
}
}
}
Return request
End Function
End Class
End Class
End Class