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)



