﻿DROP PROCEDURE IF EXISTS uspFollowUpSzervezet
GO

CREATE PROCEDURE uspFollowUpSzervezet
   @intezmenyId int
  ,@aktTanevId int
  ,@kovetkezoTanevId int
  ,@szervezetId int
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @kovSzervezetId int
         ,@parentSzerverzetId int
         ,@sql nvarchar(max)
         ,@insertColList nvarchar(max)
         ,@selectColList nvarchar(max)
         ,@updateColList nvarchar(max);

  IF NOT EXISTS (SELECT * FROM T_TANEV_OSSZES WHERE ID = @kovetkezoTanevId and C_KOVETKEZO = 'T' AND C_AKTIVALVA IS NULL AND C_ISKIVALASZTHATO = 'T')
     OR
     EXISTS (SELECT * FROM T_TANEV_OSSZES WHERE ID = @kovetkezoTanevId and C_AKTIV = 'T' AND TOROLT = 'F')
    RETURN;

  IF (SELECT TOROLT FROM T_SZERVEZET_OSSZES WHERE ID = @szervezetId) = 'T'
    RETURN;

  -- ha név és azonosító alapján nem létezik a következő tanévben, de van következő tanévi rekordja
  IF @kovSzervezetId IS NULL
    SELECT @kovSzervezetId = kov.ID
    FROM T_SZERVEZET_OSSZES kov
    WHERE kov.TOROLT = 'F'
    AND kov.C_INTEZMENYID = @intezmenyId
    AND kov.C_TANEVID = @kovetkezoTanevId
    AND kov.ELOZOTANEVIREKORDID = @szervezetId;

  -- ha a következő tanévben már létezik azonos névvel és azonosítóval
  IF @kovSzervezetId IS NULL
    SELECT @kovSzervezetId = kov.ID
    FROM T_SZERVEZET_OSSZES kov
    WHERE kov.TOROLT = 'F'
    AND kov.C_INTEZMENYID = @intezmenyId
    AND kov.C_TANEVID = @kovetkezoTanevId
    AND EXISTS(
      SELECT *
      FROM T_SZERVEZET_OSSZES akt
      WHERE akt.TOROLT = 'F'
      AND akt.C_AZONOSITO = kov.C_AZONOSITO
      AND akt.C_NEV = kov.C_NEV
      AND akt.C_INTEZMENYID = @intezmenyId
      AND akt.C_TANEVID = @aktTanevId
      AND akt.ID = @szervezetId
    );

  IF @parentSzerverzetId IS NULL
    SELECT @parentSzerverzetId = C_PARENTSZERVEZETID
    FROM T_SZERVEZET_OSSZES
    WHERE TOROLT = 'F'
    AND C_INTEZMENYID = @intezmenyId
    AND C_TANEVID = @aktTanevId
    AND ID = @szervezetId;

  SELECT @insertColList = ISNULL(@insertColList + ', ', '') + insertColname FROM fnGetFollowUpColumnMapping ('C_PARENTSZERVEZETID', 'T_SZERVEZET') ORDER BY insertColName;
  SELECT @selectColList = ISNULL(@selectColList + ', ', '') + selectColname FROM fnGetFollowUpColumnMapping ('C_PARENTSZERVEZETID', 'T_SZERVEZET') ORDER BY insertColName;
  SELECT @updateColList = ISNULL(@updateColList + ', ', '') + insertColname + ' = ' + updateColName FROM fnGetFollowUpColumnMapping ('C_PARENTSZERVEZETID', 'T_SZERVEZET') WHERE updateColName > '' ORDER BY insertColName;

  IF @parentSzerverzetId IS NOT NULL
    EXEC uspFollowUpSzervezet @intezmenyId, @aktTanevId, @kovetkezoTanevId, @parentSzerverzetId;

  IF @kovszervezetId IS NULL
    SET @sql = '
      INSERT INTO T_SZERVEZET_OSSZES(' + @insertColList + ', C_PARENTSZERVEZETID)
      SELECT ' + @selectColList + ', te.ID AS C_PARENTSZERVEZETID
      FROM T_SZERVEZET_OSSZES s
      LEFT JOIN T_SZERVEZET_OSSZES te ON te.ELOZOTANEVIREKORDID = s.C_PARENTSZERVEZETID AND te.TOROLT = ''F''
      WHERE s.ID = @szervezetId
      AND s.TOROLT = ''F''
      AND NOT EXISTS(SELECT * FROM T_SZERVEZET_OSSZES sz WHERE sz.ELOZOTANEVIREKORDID = s.ID AND sz.TOROLT = ''F'')'
  ELSE
    SET @sql = '
      UPDATE t
      SET
        ' + @updateColList + ', C_PARENTSZERVEZETID = ps.ID
      FROM T_SZERVEZET_OSSZES t
      INNER JOIN T_SZERVEZET_OSSZES s ON s.ID = t.ELOZOTANEVIREKORDID AND s.TOROLT = ''F''
      LEFT JOIN T_SZERVEZET_OSSZES ps ON ps.ELOZOTANEVIREKORDID = s.C_PARENTSZERVEZETID AND ps.TOROLT = ''F''
      WHERE t.ID = @kovszervezetId
      AND s.ID = @szervezetId
      AND t.TOROLT = ''F'''

  --print @sql
  EXEC sp_executesql 
     @sql, N'
     @intezmenyId int
    ,@aktTanevId int
    ,@kovetkezoTanevId int
    ,@szervezetId int
    ,@kovszervezetId int'
    ,@intezmenyId = @intezmenyId 
    ,@aktTanevId = @aktTanevId 
    ,@kovetkezoTanevId = @kovetkezoTanevId 
    ,@szervezetId = @szervezetId 
    ,@kovszervezetId = @kovszervezetId 

END
GO
