------------------------------------------------------------------------------------
-- Aktualisierung einer bestehenden Hybrid-Lösung von eCo 4.4 auf eCo 4.5
-- Version: eCo 4.5
------------------------------------------------------------------------------------
-- 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'Identifizierte eCo 4-Datenbank: ' + @prefix

PRINT N'View für tblPersonaldaten wird angepasst...'

DECLARE @sql1 NVARCHAR(MAX) = N'ALTER VIEW tblPersonaldaten AS
SELECT
    PN,
    Nachname Name,
    Vorname + (CASE WHEN p.DeletedAt IS NOT NULL THEN '' (gelöscht)'' ELSE '''' END) Vorname,
    tb.Teilzeit,
    Position DienstbezeichnungName,
    kst.Nummer Abteilung,
    k.Name KategorieName,
    p.Arbeitgeber,
    CASE WHEN tb.Teilzeit = 0 THEN 1 ELSE 0 END Erziehungsurlaub,
    CASE WHEN p.Geschlecht = 1 THEN ''w'' ELSE ''m'' END Geschlecht,
    Nachname + '', '' + Vorname Mitarbeiter,
    NULL Bild,
    0 TeilzeitP,
    0 Planstelle,
    0 Auswahl1,
    0 Auswahl2,
    NULL Auswahl3,
    CAST(tba.Beginn AS datetime) BefristetBis,
    tb.KategorieId PersonalkategorieId,
    NULL AS ÄnderungsUser,
    DATEADD(ns, -DATEPART(ns, p.ModifiedAt), p.ModifiedAt) AS ÄnderungsDatum,
    p.EMail,
    p.Titel
FROM ' + @prefix + '.[dbo].[People] p
JOIN ' + @prefix + '.[dbo].[TeilzeitblockBases] tb ON tb.PersonId = p.Id
JOIN ' + @prefix + '.[dbo].[Personalkategories] k ON k.Id = tb.KategorieId
LEFT JOIN ' + @prefix + '.[dbo].[TeilzeitblockBases] tba ON tba.PersonId = p.Id AND tba.Discriminator = ''Austritt'' AND tba.BasisType = 2
LEFT JOIN ' + @prefix + '.[dbo].[KostenstelleBases] kst ON kst.Id = tb.AbteilungId
WHERE kst.Discriminator = ''Kostenstelle''
  AND tb.Beginn < CAST(CURRENT_TIMESTAMP AS date)
  AND tb.BasisType = 2
  AND tb.Discriminator = ''Teilzeitblock''
  AND NOT EXISTS (SELECT 1 FROM ' + @prefix + '.[dbo].[TeilzeitblockBases] tb2 WHERE tb2.BasisType = 2 AND tb2.Beginn < CAST(CURRENT_TIMESTAMP AS date) AND tb2.Beginn > tb.Beginn AND tb2.Discriminator = tb.Discriminator AND tb2.PersonId = tb.PersonId)
UNION ALL
SELECT
    PN,
    Nachname,
    Vorname + (CASE WHEN p.DeletedAt IS NOT NULL THEN '' (gelöscht)'' ELSE '''' END),
    0,
    Position,
    NULL,
    NULL,
    p.Arbeitgeber,
    1 Erziehungsurlaub,
    CASE WHEN p.Geschlecht = 1 THEN ''w'' ELSE ''m'' END,
    Nachname + '', '' + Vorname,
    NULL,
    0,
    0,
    0,
    0,
    NULL,
    CAST(''2000-01-01'' AS datetime),
    NULL,
    NULL,
    DATEADD(ns, -DATEPART(ns, p.ModifiedAt), p.ModifiedAt),
    p.EMail,
    p.Titel
FROM ' + @prefix + '.[dbo].[People] p
WHERE NOT EXISTS (SELECT 1 FROM ' + @prefix + '.[dbo].[TeilzeitblockBases] tb WHERE tb.BasisType = 2 AND tb.PersonId = p.Id AND tb.Beginn <= CAST(CURRENT_TIMESTAMP AS date))'
EXEC sp_executesql @sql1

PRINT N'View für tblKostenstellen wird angepasst...'

DECLARE @sql2 NVARCHAR(MAX) = N'ALTER VIEW tblKostenstellen AS
SELECT
    ''0000'' KStNr,
    ''Alle Kostenstellen (lt. Berechtigungsschema)'' KStName,
    NULL PN,
    NULL KStKurz,
    0 AS Bereich,
    1 Aktuell,
    0 Ebene,
    ''S'' Typ,
    ''Tolle Kostenstelle'' Kommentar,
    0 Hide,
    NULL Bemerkung,
    DATEADD(ms, -DATEPART(ms, ''1995-01-01''), ''1995-01-01'') ÄnderungsDatum,
    NULL ÄnderungsUser,
    NULL KStBereich,
    0 Gesperrt,
    0 ZumBuchenGesperrt
UNION ALL
    SELECT
    kst.Nummer AS KStNr,
    kst.Name AS KStName,
    p.PN AS PN,
    kst.Kurzbezeichnung AS KStKurz,
    0 AS Bereich,
    CASE WHEN kst.DeletedAt IS NULL THEN 1 ELSE 0 END AS Aktuell,
    0 AS Ebene,
    CASE WHEN kst.Discriminator = ''Kostenstelle'' THEN ''B'' ELSE ''S'' END AS Typ,
    NULL,
    CASE WHEN kst.DeletedAt IS NOT NULL THEN 1 ELSE 0 END AS Hide,
    kst.Bemerkung,
    DATEADD(ns, -DATEPART(ns, kst.ModifiedAt), kst.ModifiedAt) AS ÄnderungsDatum,
    NULL AS ÄnderungsUser,
    kst2.Nummer AS KStBereich,
    CASE WHEN kst.Discriminator = ''Kostenstelle'' THEN kst.Planungssperre ELSE 0 END AS Gesperrt,
    CASE WHEN kst.Discriminator = ''Kostenstelle'' THEN kst.Buchungssperre ELSE 0 END AS ZumBuchenGesperrt
FROM ' + @prefix + '.[dbo].[KostenstelleBases] kst
LEFT JOIN ' + @prefix + '.[dbo].[People] p ON kst.VerantwortlicherId = p.Id
LEFT JOIN ' + @prefix + '.[dbo].[KostenstelleBases] kst2 ON kst2.Id = kst.ParentId'
EXEC sp_executesql @sql2
GO

PRINT N'Aktualisierung abgeschlossen'