﻿DROP PROCEDURE IF EXISTS uspFollowUpTantargyNyelv
GO

CREATE PROCEDURE uspFollowUpTantargyNyelv
   @intezmenyId int
  ,@aktTanevId int
  ,@kovetkezoTanevId int
  ,@tantargyNyelvId int  
AS BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (SELECT 1 from T_TANEV where ID = @kovetkezoTanevId and C_KOVETKEZO = 'T' and C_AKTIVALVA is null and C_ISKIVALASZTHATO = 'T')
    BEGIN
      RETURN;
    END

  DECLARE
     @kovTantargyNyelvId int = (SELECT TOP 1 ID FROM T_TANTARGYNYELV_OSSZES WHERE ELOZOTANEVIREKORDID = @tantargyNyelvId)
    ,@kovNyelvId int = (
       SELECT 
         dib.ID 
       FROM T_DICTIONARYITEMBASE_OSSZES dib
         INNER JOIN T_TANTARGYNYELV_OSSZES tgyny ON tgyny.C_NYELVID = dib.ELOZOTANEVIREKORDID AND tgyny.ID = @tantargyNyelvId
       WHERE dib.C_TANEVID = @kovetkezoTanevId AND dib.TOROLT='F')
    ,@insertColList nvarchar(max)
    ,@selectColList nvarchar(max)
    ,@updateColList nvarchar(max)
    ,@sql nvarchar(max)

  IF EXISTS(SELECT 1 FROM T_TANTARGYNYELV_OSSZES WHERE C_TANEVID=@kovetkezoTanevId AND TOROLT='F' AND C_NYELVID=@kovNyelvId AND ISNULL(ELOZOTANEVIREKORDID,0)<>@tantargyNyelvId) BEGIN
    UPDATE T_TANTARGYNYELV_OSSZES SET ELOZOTANEVIREKORDID = NULL WHERE ELOZOTANEVIREKORDID = @tantargyNyelvId
    UPDATE T_TANTARGYNYELV_OSSZES SET ELOZOTANEVIREKORDID = @tantargyNyelvId WHERE C_NYELVID = @kovNyelvId AND TOROLT='F' AND C_TANEVID = @kovetkezoTanevId
  END

  CREATE TABLE #columnMapping (
     insertColName nvarchar(max) COLLATE DATABASE_DEFAULT
    ,selectColName nvarchar(max)
    ,updateColName nvarchar(max)
  )
  INSERT INTO #columnMapping (
     insertColName 
    ,selectColName 
    ,updateColName 
  ) SELECT
     insertColName 
    ,selectColName 
    ,updateColName 
  FROM fnGetFollowUpColumnMapping (NULL,'T_TANTARGYNYELV')

  IF @kovTantargyNyelvId IS NULL
  BEGIN
    SELECT @insertColList = ISNULL(@insertColList+','+insertColname,insertColname) FROM #columnMapping 
    SELECT @selectColList = ISNULL(@selectColList+','+selectColName,selectColName) FROM #columnMapping 
    SET @sql = N'
      INSERT INTO T_TANTARGYNYELV_OSSZES (
         '+@insertColList+'
      ) SELECT 
         '+@selectColList+'
      FROM T_TANTARGYNYELV_OSSZES s
        INNER JOIN T_DICTIONARYITEMBASE_OSSZES dib ON dib.ELOZOTANEVIREKORDID = s.C_NYELVID AND dib.TOROLT=''F'' AND dib.C_TANEVID = @kovetkezoTanevId
        INNER JOIN T_TANTARGY_OSSZES tgy ON tgy.ELOZOTANEVIREKORDID = s.C_TANTARGYID AND tgy.TOROLT=''F'' AND tgy.C_TANEVID = @kovetkezoTanevId
      WHERE s.ID = @tantargyNyelvId'
  END
  ELSE BEGIN
    SELECT 
      @updateColList = ISNULL(@updateColList+','+insertColName+' = '+updateColname,insertColName+' = '+updateColname)
    FROM #columnMapping
    WHERE updateColname IS NOT NULL
    SET @sql = N'
      UPDATE t SET
        '+@updateColList+'
      FROM T_TANTARGYNYELV_OSSZES t
        INNER JOIN T_TANTARGYNYELV_OSSZES s ON s.ID = @tantargyNyelvId AND s.ID=t.ELOZOTANEVIREKORDID'
  END
    PRINT @sql
    EXEC sp_executesql 
       @sql,N'
       @intezmenyId int
      ,@aktTanevId int
      ,@kovetkezoTanevId int
      ,@tantargyNyelvId int'
      ,@intezmenyId = @intezmenyId 
      ,@aktTanevId = @aktTanevId 
      ,@kovetkezoTanevId = @kovetkezoTanevId 
      ,@tantargyNyelvId = @tantargyNyelvId 

END
GO
