250 lines
12 KiB
Transact-SQL

USE [DD_ECM]
GO
/****** Object: UserDefinedFunction [dbo].[FNPM_CUST_GET_DOC_IDS] Script Date: 22.04.2024 15:35:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 22.04.2024 MK Profil 20 - SWB - ER 95.3 - Daueranweisungen eingebaut
-- 22.03.2024 MK Profil 18 - Variable überarbeitet, Feste Userzuweisungen für die Profile 3.0, 3.1, 5.0, 5.1, 5.2, 5.3, 5.4, 94, 99 durch eine Abfrage ersetzt
-- 29.12.2022 MS Profil 18 - Abbuchung durch KReditor DA integriert
-- 29.12.2022 MS Nadine Metz bei Profil AR_PROFILE1 hinterlegt
-- 27.01.2022 MK Ergänzung um das neue Profil 99
-- 17.01.2022 Unterscheidung in Schritt 2 auf GMBH/GF und Abwasser-Bäder/Betriebsleiter
-- 10.11.2021 Prüfung für Schritt 6 eingebaut
-- 31.10.2021 Mandantenlogik eingebaut
-- 03.10.2021 ER Profile 4.1 hinzugefügt
-- 20.09.2021 Initial
CREATE FUNCTION [dbo].[FNPM_CUST_GET_DOC_IDS] (@USER_ID INTEGER)
RETURNS
@Table TABLE
(SCOPE VARCHAR(50),DOC_GUID BIGINT,DOC_ID BIGINT,PROFIL_ID INT, SequentialOrder INT IDENTITY(1, 1))
AS
BEGIN
DECLARE
@P_ID INTEGER,
@P_NAME VARCHAR(50),
@P_ER_2_0_ID INTEGER = 2, -- Einsicht für GMBH/GF oder Abwasser-Bäder/Betriebsleiter
@P_ER_3_0_ID INTEGER = 3, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_3_1_ID INTEGER = 11, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_4_0_ID INTEGER = 4, -- Einsicht für ausgesuchten Prüfer
@P_ER_4_1_ID INTEGER = 10, -- Einsicht für ausgesuchten Prüfer
@P_ER_5_0_ID INTEGER = 5, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_5_1_ID INTEGER = 6, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_5_2_ID INTEGER = 9, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_5_3_ID INTEGER = 14, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_5_4_ID INTEGER = 18, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_6_0_ID INTEGER = 16, -- Einsicht für ausgesuchte finale Freigeber
@P_ER_94_ID INTEGER = 7, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_95_3_ID INTEGER = 20, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_ER_99_ID INTEGER = 17, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@P_AR_1_0_ID INTEGER = 15, -- Einsicht für FiBu Mitarbeiter abhängig vom Mandant
@PM_ADMIN_GROUP TINYINT = 2, -- = Admingruppen ID aus dem UserManager
@GF TINYINT = 16, -- = Führungsgruppe der GmbH
@Betriebsleiter TINYINT = 45, -- = Führungsgruppe der Abwasser + Bäder
@SBAbwasserbetriebFiBu TINYINT = 19, -- = Fibu Gruppe der Abwasserbetriebe
@SBBäderbetriebFiBu TINYINT = 21, -- = Fibu Gruppe der Bäderbetrieb
@SWBNetzFiBu TINYINT = 35, -- = Fibu Gruppe der GmbH
@SWBVertriebFiBu TINYINT = 41, -- = Fibu Gruppe des Vertriebs
@windreamAttributFinalApprover INTEGER = 10044; -- = Terminzahlung Finale Freigeber
------------------------------------------------------------------------------------------------------------
-- Standard -> Zuordnung erfolgt via PM Benutzer/Gruppenzuordnung
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT
'ACTIVE PROFILES',T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T INNER JOIN TBPM_PROFILE T1 on T.PROFIL_ID = T1.GUID
INNER JOIN windream60.dbo.BaseAttributes TWM_BA ON T.DOC_ID = TWM_BA.dwDocID
INNER JOIN [dbo].[FNPM_GET_ACTIVE_PROFILES_USER] (@USER_ID) T2 ON T.PROFIL_ID = T2.PROFILE_ID --INNER JOIN [dbo].[FNPM_GET_ACTIVE_PROFILES_USER] (2)
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1 AND T1.ACTIVE = 1
AND T2.PROFILE_ID <> @P_ER_2_0_ID
AND T2.PROFILE_ID <> @P_ER_3_0_ID
AND T2.PROFILE_ID <> @P_ER_3_1_ID
AND T2.PROFILE_ID <> @P_ER_4_0_ID
AND T2.PROFILE_ID <> @P_ER_4_1_ID
AND T2.PROFILE_ID <> @P_ER_5_0_ID
AND T2.PROFILE_ID <> @P_ER_5_1_ID
AND T2.PROFILE_ID <> @P_ER_5_2_ID
AND T2.PROFILE_ID <> @P_ER_5_3_ID
AND T2.PROFILE_ID <> @P_ER_5_4_ID
AND T2.PROFILE_ID <> @P_ER_6_0_ID
AND T2.PROFILE_ID <> @P_ER_95_3_ID
AND T2.PROFILE_ID <> @P_ER_94_ID
AND T2.PROFILE_ID <> @P_ER_99_ID
AND T2.PROFILE_ID <> @P_AR_1_0_ID;
----------------------------------------------------------------------------------------------------------------
-- AR Profile 1 für die GmbH
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'AR_PROFILE1', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID = @P_AR_1_0_ID)
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
AND(((TWMBA.sztext31 = 'SWB-Netz' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SWBNetzFiBu))
OR (TWMBA.sztext31 = 'SWB-Vertrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SWBVertriebFiBu)
OR @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @PM_ADMIN_GROUP)) -- <-- Admins dürfen immer mandatenübergreifend sehen
OR @USER_ID = 12
))
-- ER Profile 2 für Abwasser + Bäder
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'AR_PROFILE1', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID = @P_AR_1_0_ID)
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
AND(((TWMBA.sztext31 = 'SB-Abwasserbetrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SBAbwasserbetriebFiBu))
OR (TWMBA.sztext31 = 'SB-Bäderbetrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SBBäderbetriebFiBu)))
OR @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @PM_ADMIN_GROUP)) -- <-- Admins dürfen immer mandatenübergreifend sehen
----------------------------------------------------------------------------------------------------------------
-- ER Profile 2 für die GmbH
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'ER_PROFILE2', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID = @P_ER_2_0_ID)
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
AND ((TWMBA.sztext31 = 'SWB-Netz' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @GF))
OR (TWMBA.sztext31 = 'SWB-Vertrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @GF)))
-- ER Profile 2 für Abwasser + Bäder
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'ER_PROFILE2', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID = @P_ER_2_0_ID)
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
AND ((TWMBA.sztext31 = 'SB-Abwasserbetrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @Betriebsleiter))
OR (TWMBA.sztext31 = 'SB-Bäderbetrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @Betriebsleiter)))
------------------------------------------------------------------------------------------------------------
-- ER Profile 3, 3.1, 94, 95.3 und 99 sollen nur von der entsprechenden FiBu Mitarbeiter einsehbarsein, anhängig vom ausgewählten Mandant
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'ER_PROFILE3', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID in (@P_ER_3_0_ID,@P_ER_3_1_ID,@P_ER_5_0_ID,@P_ER_5_1_ID,@P_ER_5_2_ID,@P_ER_5_3_ID,@P_ER_5_4_ID,@P_ER_95_3_ID,@P_ER_94_ID,@P_ER_99_ID))
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
AND ((TWMBA.sztext31 = 'SB-Abwasserbetrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SBAbwasserbetriebFiBu))
OR (TWMBA.sztext31 = 'SB-Bäderbetrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SBBäderbetriebFiBu))
OR (TWMBA.sztext31 = 'SWB-Netz' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SWBNetzFiBu))
OR (TWMBA.sztext31 = 'SWB-Vertrieb' and @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @SWBVertriebFiBu))
OR @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @PM_ADMIN_GROUP)) -- <-- Admins dürfen immer mandatenübergreifend sehen
-- Für die GmbH bin ich (Fr. Mohr) und in Vertretung ist Frau Kurz zuständig
-- Für Abwasser und Bäderbetrieb ist Frau Hohmann und in Vertretung auch Frau Kurz zuständig
-- Frau Mohr = 31
-- Frau Kurz = 42
-- Frau Hohmann = 49
----------------------------------------------------------------------------------------------------------------
-- ER Profile 4 und 4.1 sollen nur von der FiBu und des jeweils eingetragenen Prüfer gesichtet werden können
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'ER_PROFILE4', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBDD_USER T2 ON UPPER(TWMBA.sztext22) = UPPER(T2.USERNAME)
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID = @P_ER_4_0_ID or T.PROFIL_ID = @P_ER_4_1_ID)
AND T2.GUID = @USER_ID
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
----------------------------------------------------------------------------------------------------------------
-- ER Profile 6 soll nur von den eingetragenen finalen Freigebern gesehen werden (Vieraugen Prinzip)
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'ER_PROFILE6', T.GUID, T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES as T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
(T.PROFIL_ID = @P_ER_6_0_ID)
AND T.EDIT = 0 AND T.IN_WORK = 0 AND T.ACTIVE = 1
AND TP.ACTIVE = 1
AND (@USER_ID in (SELECT [GUID] FROM [TBDD_USER] WHERE [USERNAME] IN (SELECT [Vector].[szValue]
FROM [windream60].[dbo].[Vector] as [Vector] (NOLOCK)
INNER JOIN [windream60].[dbo].[BaseAttributes] as [BaseAttributes] (NOLOCK) ON [Vector].[dwDocID] = [BaseAttributes].[dwDocID]
WHERE [Vector].[szValue] is not null
and [Vector].[dwAttrID] = @windreamAttributFinalApprover
and [BaseAttributes].[szText33] = 'in Arbeit'))
OR @USER_ID in (SELECT [USER_ID] FROM [TBDD_GROUPS_USER] WHERE [GROUP_ID] = @PM_ADMIN_GROUP)) -- <-- Admins dürfen immer sehen
----------------------------------------------------------------------------------------------------------------
--Wenn User Mitgleid von PM_ADMIN ist...
IF EXISTS(SELECT GUID FROM TBDD_GROUPS_USER WHERE GROUP_ID = @PM_ADMIN_GROUP AND USER_ID = @USER_ID)
--Wenn es Belege zu Profil 4 gibt ist...
IF EXISTS(SELECT
T.DOC_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBDD_USER T2 ON UPPER(TWMBA.sztext22) <> UPPER(T2.USERNAME)
INNER JOIN TBPM_PROFILE TP ON T.PROFIL_ID = TP.GUID
WHERE
T2.GUID = @USER_ID
AND TP.ACTIVE = 1
AND T.PROFIL_ID = @P_ER_4_0_ID
OR T.PROFIL_ID = @P_ER_4_1_ID )
INSERT INTO @Table (SCOPE,DOC_GUID,DOC_ID,PROFIL_ID)
SELECT 'ER_PROFILE4_ADMIN',T.GUID,T.DOC_ID,T.PROFIL_ID
FROM
TBPM_PROFILE_FILES T
INNER JOIN windream60.dbo.BaseAttributes TWMBA ON T.DOC_ID = TWMBA.dwDocID
INNER JOIN TBDD_USER T2 ON UPPER(TWMBA.sztext22) <> UPPER(T2.USERNAME)
WHERE
T2.GUID = @USER_ID
AND (T.PROFIL_ID = @P_ER_4_0_ID
OR T.PROFIL_ID = @P_ER_4_1_ID )
RETURN
END
--SELECT * FROM [dbo].[FNPM_CUST_GET_DOC_IDS] (2)