Provisionsabrechnung

This commit is contained in:
2025-10-02 09:10:07 +02:00
parent b1e1b3f26a
commit 827c68ad49
24 changed files with 2270 additions and 140 deletions

View File

@@ -114,4 +114,88 @@
End Try
Return 99
End Function
Public Shared Function GetBenutzerBerechtigungsBezeichnungen(prog_Id As Integer) As List(Of String)
Dim result As New List(Of String)
Console.WriteLine("=== Starte GetBenutzerBerechtigungsBezeichnungen für prog_Id=" & prog_Id & " ===")
' Basisprüfungen
If String.IsNullOrWhiteSpace(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME) Then
Console.WriteLine("Abbruch: kein Benutzername gesetzt.")
Return result
End If
Dim benutzerBer As cBerechtigungenBenutzerGruppenZuordnung_List = VERAG_PROG_ALLGEMEIN.cAllgemein.BENUTZER_BERECHTIGUNGS_GRUPPEN
If benutzerBer Is Nothing OrElse benutzerBer.LIST Is Nothing Then
Console.WriteLine("Abbruch: Benutzer hat keine Berechtigungsgruppen.")
Return result
End If
If BER_LIST Is Nothing OrElse BER_LIST.LIST Is Nothing Then
Console.WriteLine("Abbruch: BER_LIST nicht geladen.")
Return result
End If
' Benutzergruppen für das Programm vorbereiten
Dim userGruppen = benutzerBer.LIST.Where(Function(b) b.berbgz_progId = prog_Id).ToList()
Console.WriteLine("Benutzergruppen für prog_Id gefunden: " & userGruppen.Count)
Dim seen As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
' Alle Berechtigungsobjekte durchlaufen
For Each obj In BER_LIST.LIST
If obj Is Nothing OrElse obj.bero_progId <> prog_Id Then Continue For
Dim bez As String = If(obj.bero_bezeichnung, "")
If bez = "" OrElse seen.Contains(bez) Then Continue For
Console.WriteLine("Prüfe Berechtigung: " & bez)
Dim effektiveStufe As Integer = 99
' Gruppen/Firma/Niederlassung/Abteilung prüfen
For Each ll In obj.BER_OBJ_ZUORD
If ll.beroz_art = "G" AndAlso userGruppen.Any(Function(g) g.berbgz_bergrId = ll.beroz_bergrId) Then
Console.WriteLine($" -> Gruppe {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
ElseIf ll.beroz_art = "F" AndAlso ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA Then
Console.WriteLine($" -> Firma {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
ElseIf ll.beroz_art = "N" AndAlso ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG Then
Console.WriteLine($" -> Niederlassung {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
ElseIf ll.beroz_art = "A" AndAlso ll.Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.ABTEILUNG Then
Console.WriteLine($" -> Abteilung {ll.Bezeichnung} passt, Stufe={ll.beroz_berechtigungsstufe}")
If ll.beroz_berechtigungsstufe < effektiveStufe Then effektiveStufe = ll.beroz_berechtigungsstufe
End If
Next
If effektiveStufe <> 99 Then
Console.WriteLine($" -> Hinzugefügt: {bez} (effektive Stufe={effektiveStufe})")
result.Add(bez)
seen.Add(bez)
Else
Console.WriteLine($" -> Keine Berechtigung für {bez}")
End If
Next
result.Sort(StringComparer.OrdinalIgnoreCase)
Console.WriteLine("=== Fertig: " & result.Count & " Berechtigungen gefunden ===")
Return result
End Function
Public Shared Function GetBenutzerBerechtigungsBezeichnungen_FormatWhereIn_SDL() As String
Dim BER As List(Of String) = GetBenutzerBerechtigungsBezeichnungen(7) '7=Prog_id von SDL 'VERAG_PROG_ALLGEMEIN.cAllgemein.PROGID) sdl
Return FormatWhereIn(BER)
End Function
Private Shared Function FormatWhereIn(berechtigungen As List(Of String)) As String
If berechtigungen Is Nothing OrElse berechtigungen.Count = 0 Then
Return "()"
End If
' Strings für SQL korrekt in Hochkommas packen, einfache Quotes escapen
Dim escaped = berechtigungen.Select(Function(b) "'" & b.Replace("'", "''") & "'")
Return "(" & String.Join(",", escaped) & ")"
End Function
End Class