------------------------------------------------------------------------------------
-- Aktualisierung einer bestehenden Hybrid-Lösung von eCo 4.3 auf eCo 4.4
-- Version: eCo 4.4
------------------------------------------------------------------------------------
-- TMG Systemhaus GmbH <ecosupport@t-m-g.de>
------------------------------------------------------------------------------------

DECLARE @prefix NVARCHAR(MAX)
SELECT @prefix = SUBSTRING(def, PATINDEX('%FROM%.[[]dbo].[[]KostenartBases]%', def) + 5, PATINDEX('%.[[]dbo].[[]KostenartBases]%', def) - PATINDEX('%FROM%.[[]dbo].[[]KostenartBases]%', def) - 5) FROM (SELECT object_definition(object_id) def from sys.procedures WHERE name = 'eCo4SyncBerechtigungen') t

PRINT N'Prozedur eCo4SyncBerechtigungen zum Übertragen der Berechtigungen wird angepasst...';

DECLARE @sql1 NVARCHAR(MAX) = N'
ALTER PROC eCo4SyncBerechtigungen AS
BEGIN

BEGIN TRANSACTION
TRUNCATE TABLE tblUserKArt

INSERT INTO tblUserKArt (PN, KArtNr, KArtName, KArt)
SELECT
    p.PN,
    k.Nummer KArtNr,
    k.Name KArtName,
    k.Nummer KArt
FROM ' + @prefix + '.[dbo].[KostenartBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON k.AccessControlListId = ap.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = ap.PrincipalId
UNION
SELECT
    p.PN,
    ''00000'' KArtNr,
    ''Alle Kostenarten (lt. Berechtigungsschema)'' KArtName,
    ''00000'' KArt
FROM ' + @prefix + '.[dbo].[KostenartBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON k.AccessControlListId = ap.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = ap.PrincipalId
GROUP BY PN
UNION
SELECT
    p.PN,
    k.Nummer KArtNr,
    k.Name KArtName,
    k.Nummer KArt
FROM ' + @prefix + '.[dbo].[KostenartBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON k.AccessControlListId = ag.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ag.Id = ai.AccessListGroupId
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = ai.PersonId
UNION
SELECT
    p.PN,
    ''00000'' KArtNr,
    ''Alle Kostenarten (lt. Berechtigungsschema)'' KArtName,
    ''00000'' KArt
FROM ' + @prefix + '.[dbo].[KostenartBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON k.AccessControlListId = ag.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ag.Id = ai.AccessListGroupId
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = ai.PersonId
GROUP BY PN
COMMIT

BEGIN TRANSACTION
TRUNCATE TABLE tblBerechtigungKSt

INSERT INTO tblBerechtigungKSt (PN, KStNr, ÄnderungsUser, ÄnderungsDatum)
SELECT
    p.PN,
    k.Nummer KStNr,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
UNION
-- Berechtigung durch Gruppen
SELECT
    p.PN,
    k.Nummer KStNr,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
UNION
-- Alle für direkt berechtigte
SELECT
    p.PN,
    ''0000'' KStNr,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
GROUP BY p.PN
UNION
-- Berechtigung durch Gruppen
SELECT
    p.PN,
    ''0000'' KStNr,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
GROUP BY p.PN
UNION
-- Verantwortliche und Stellvertreter
SELECT
    p.PN,
    k.Nummer KStNr,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = k.VerantwortlicherId OR (k.StellvertreterId IS NOT NULL AND p.Id = k.StellvertreterId)
UNION
SELECT
    p.PN,
    ''0000'' KStNr,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = k.VerantwortlicherId OR (k.StellvertreterId IS NOT NULL AND p.Id = k.StellvertreterId)
GROUP BY p.PN
COMMIT

BEGIN TRANSACTION
TRUNCATE TABLE tblUserKTr

INSERT INTO tblUserKTr (PN, KTrNr, KTrName, KTr, KTrVerantwortlicher)
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
UNION
-- Berechtigung durch Gruppen
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
UNION
-- Verantwortlicher und Stellvertreter
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = k.VerantwortlicherId OR (k.StellvertreterId IS NULL AND p.Id = k.StellvertreterId)
UNION
-- 000000 bei erweitertem Zugriff direkt auf mind. eine Kostenstelle
SELECT
    p.PN,
    ''000000'' KTrNr,
    ''Alle Geschäftsfelder und Kostenträger (lt. Berechtigungsschema)'' KTrName,
    ''000000'' KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
WHERE ap.Permission != 2 AND ap.ExtendedPermissions = 2
GROUP BY p.PN
UNION
-- 000000 bei erweitertem Zugrif über Gruppen auf min. eine Kostenstelle
SELECT
    p.PN,
    ''000000'' KTrNr,
    ''Alle Geschäftsfelder und Kostenträger (lt. Berechtigungsschema)'' KTrName,
    ''000000'' KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenstelleBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = ai.PersonId
WHERE ai.ExtendedPermissions = 2
GROUP BY p.PN
UNION
-- 000000 bei Verantwortlicher und Stellvertreter
SELECT
    p.PN,
    ''000000'' KTrNr,
    ''Alle Geschäftsfelder und Kostenträger (lt. Berechtigungsschema)'' KTrName,
    ''000000'' KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = k.VerantwortlicherId OR (k.StellvertreterId IS NULL AND p.Id = k.StellvertreterId)
UNION
-- Alle Kostenträger der Kostenstellen, für die der Mitarbeiter verantwortlich ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[KostenstelleBases] kst ON k.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[People] p ON kst.VerantwortlicherId = p.Id
GROUP BY p.Id, p.PN, k.Id, k.Nummer, k.Name
UNION
-- Alle Kostenträger der Kostenstellen, für die der Mitarbeiter stellvertretend verantwortlich ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[KostenstelleBases] kst ON k.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[People] p ON kst.StellvertreterId = p.Id
GROUP BY p.Id, p.PN, k.Id, k.Nummer, k.Name
UNION
-- Alle Kostenträger der Kostenstellen, für die der Mitarbeiter direkt mit erweitertem Zugriff berechtigt ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[KostenstelleBases] kst ON k.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = kst.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
WHERE ap.Permission != 2 AND ap.ExtendedPermissions = 2
UNION
-- Alle Kostenträger der Kostenstellen, für die der Mitarbeiter durch Gruppen mit erweitertem Zugriff berechtigt ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenträgerBase] k
JOIN ' + @prefix + '.[dbo].[KostenstelleBases] kst ON k.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = kst.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
WHERE ai.ExtendedPermissions = 2
UNION
-- Alle Kostenträger mit Buchungen auf Kostenstellen, für die der Mitarbeiter verantwortlich ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[People] p ON kst.VerantwortlicherId = p.Id
JOIN ' + @prefix + '.[dbo].[Istbuchungs] b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[KostenträgerBase] k ON k.Id = b.KostenträgerId
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
UNION
-- Alle Kostenträger mit Buchungen auf Kostenstellen, für die der Mitarbeiter stellvertretend verantwortlich ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[People] p ON kst.StellvertreterId = p.Id
JOIN ' + @prefix + '.[dbo].[Istbuchungs] b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[KostenträgerBase] k ON k.Id = b.KostenträgerId
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
UNION
-- Alle Kostenträger mit Buchungen auf Kostenstellen, für die der Mitarbeiter direkt mit erweitertem Zugriff berechtigt ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = kst.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
JOIN ' + @prefix + '.[dbo].[Istbuchungs] b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[KostenträgerBase] k ON k.Id = b.KostenträgerId
WHERE ap.Permission != 2 AND ap.ExtendedPermissions = 2
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
UNION
-- Alle Kostenträger mit Buchungen auf Kostenstellen, für die der Mitarbeiter durch Gruppen mit erweitertem Zugriff berechtigt ist
SELECT
    p.PN,
    k.Nummer KTrNr,
    k.Name KTrName,
    k.Nummer KTr,
    NULL KTrVerantwortlicher
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = kst.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
JOIN ' + @prefix + '.[dbo].[Istbuchungs] b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[KostenträgerBase] k ON k.Id = b.KostenträgerId
WHERE ai.ExtendedPermissions = 2
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
COMMIT

BEGIN TRANSACTION
TRUNCATE TABLE tblUserProjekt

INSERT INTO tblUserProjekt (PN, ProjektNr, ProjektName, Projekt, ProjektVerantwortlicher, ÄnderungsUser, ÄnderungsDatum)
SELECT
    p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[ProjektBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
UNION
-- Berechtigung durch Gruppen
SELECT
    p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[ProjektBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
UNION
-- Verantwortlicher und Stellvertreter
SELECT
p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[ProjektBases] k
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = k.VerantwortlicherId OR (k.StellvertreterId IS NULL AND p.Id = k.StellvertreterId)
UNION
-- 000 bei erweitertem Zugriff direkt auf mind. eine Kostenstelle
SELECT
    p.PN,
    ''000'' ProjektNr,
    ''Alle Projekte (lt. Berechtigungsschema)'' ProjektName,
    ''000'' Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[ProjektBases] k
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
WHERE ap.Permission != 2 AND ap.ExtendedPermissions = 2
GROUP BY p.PN
UNION
-- 000 bei erweitertem Zugrif über Gruppen auf min. eine Kostenstelle
SELECT
    p.PN,
    ''000'' ProjektNr,
    ''Alle Projekte (lt. Berechtigungsschema)'' ProjektName,
    ''000'' Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[ProjektBases] k
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = k.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = ai.PersonId
WHERE ai.ExtendedPermissions = 2
GROUP BY p.PN
UNION
-- 000 bei Verantwortlicher und Stellvertreter
SELECT
    p.PN,
    ''000'' ProjektNr,
    ''Alle Projekte (lt. Berechtigungsschema)'' ProjektName,
    ''000'' Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[ProjektBases] k
JOIN ' + @prefix + '.[dbo].[People] p ON p.Id = k.VerantwortlicherId OR (k.StellvertreterId IS NULL AND p.Id = k.StellvertreterId)
UNION
-- Alle Projekte mit Buchungen auf Kostenstellen, für die der Mitarbeiter verantwortlich ist
SELECT
    p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[People] p ON kst.VerantwortlicherId = p.Id
JOIN (SELECT ProjektId, KostenstelleId FROM ' + @prefix + '.[dbo].[Istbuchungs] GROUP BY ProjektId, KostenstelleId) b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[ProjektBases] k ON k.Id = b.ProjektId
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
UNION
-- Alle Projekte mit Buchungen auf Kostenstellen, für die der Mitarbeiter stellvertretend verantwortlich ist
SELECT
    p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[People] p ON kst.StellvertreterId = p.Id
JOIN (SELECT ProjektId, KostenstelleId FROM ' + @prefix + '.[dbo].[Istbuchungs] GROUP BY ProjektId, KostenstelleId) b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[ProjektBases] k ON k.Id = b.ProjektId
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
UNION
-- Alle Projekte mit Buchungen auf Kostenstellen, für die der Mitarbeiter direkt mit erweitertem Zugriff berechtigt ist
SELECT
    p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[AccessListPersons] ap ON ap.AccessControlListId = kst.AccessControlListId
JOIN ' + @prefix + '.[dbo].[People] p ON ap.PrincipalId = p.Id
JOIN ' + @prefix + '.[dbo].[Istbuchungs] b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[ProjektBases] k ON k.Id = b.ProjektId
WHERE ap.Permission != 2 AND ap.ExtendedPermissions = 2
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
UNION
-- Alle Projekte mit Buchungen auf Kostenstellen, für die der Mitarbeiter durch Gruppen mit erweitertem Zugriff berechtigt ist
SELECT
    p.PN,
    k.Nummer ProjektNr,
    k.Name ProjektName,
    k.Nummer Projekt,
    NULL ProjektVerantwortlicher,
    NULL ÄnderungsUser,
    DATEADD(ms, -DATEPART(ms, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
JOIN ' + @prefix + '.[dbo].[AccessListGroups] ag ON ag.AccessControlListId = kst.AccessControlListId
JOIN ' + @prefix + '.[dbo].[AccessListIntermediates] ai ON ai.AccessListGroupId = ag.Id
JOIN ' + @prefix + '.[dbo].[People] p ON ai.PersonId = p.Id
JOIN ' + @prefix + '.[dbo].[Istbuchungs] b ON b.KostenstelleId = kst.Id
JOIN ' + @prefix + '.[dbo].[KostenträgerBase] k ON k.Id = b.ProjektId
WHERE ai.ExtendedPermissions = 2
GROUP BY p.Id, k.Id, p.PN, k.Nummer, k.Name
COMMIT

END
'
EXEC sp_executesql @sql1

PRINT N'View für tblLeistungstypen wird angepasst...';

DECLARE @sql2 NVARCHAR(MAX) = N'ALTER VIEW tblLeistungstypen AS
SELECT
    Id LeistungstypNr,
    Name LeistungstypName,
    [Order] Sortierung,
    Remark Bemerkung,
    1 Aktuell,
    IsSteuerbar Steuerpflicht,
    ''SystemUpdate'' ÄnderungsUser,
    CONVERT(datetime, CONVERT(date, CURRENT_TIMESTAMP)) ÄnderungsDatum
FROM ' + @prefix + '.[dbo].[Leistungstyps]'
EXEC sp_executesql @sql2
GO

