﻿DROP PROCEDURE IF EXISTS dbo.uspCheck4TFelhOktAzonValidation
GO

CREATE PROCEDURE dbo.uspCheck4TFelhOktAzonValidation
   @pCheckValidationType      int
  ,@pSzuletesiNevSorrend char(1) = null
  ,@pSzuletesiElotag nvarchar(255) = null
  ,@pSzuletesiVezeteknev nvarchar(255) = null
  ,@pSzuletesiUtonev nvarchar(255) = null
  ,@pAnyjaNevSorrend char(1) = null
  ,@pAnyjaNevElotag nvarchar(255) = null
  ,@pAnyjaVezeteknev nvarchar(255) = null
  ,@pAnyjaUtonev nvarchar(255) = null
  ,@pSzuletesiHely nvarchar(255) = null
  ,@pSzuletesiDatum datetime = null
  ,@pTanevIds nvarchar(MAX) = null
  ,@pFelvetelStatuszaFelveve    int = null
  ,@pFelvetelStatuszaNemFelveve  int = null
  ,@pOktatasiAzonosito nvarchar(255) = null
  ,@pBejelentkezesiNev nvarchar(255) = null
AS
BEGIN
  SET NOCOUNT ON;
  DECLARE @sql nvarchar(max) = N'',  @partialSql  nvarchar(max) = N''
  IF (@pCheckValidationType = 1 OR @pCheckValidationType = 2) /* 1 - Tanuló *//* 2 - Alkalmazott */
  BEGIN
    SET @sql = N'
      SELECT 
         fb.C_BEJELENTKEZESINEV
        ,fb.C_GONDVISELOID
        '
        + IIF (@pCheckValidationType = 1, N'
          ,IIF(t.ID IS NULL, 2, 1) ', N'
          ,IIF(a.ID IS NULL, 1, 2) ')
        + ' As ValidationType
        ,f.*
      FROM T_FELHASZNALO_OSSZES f
      LEFT JOIN T_FELHASZNALOBELEPES_OSSZES fb on fb.C_FELHASZNALOID = f.ID AND fb.TOROLT = ''F'''+
      IIF(@pCheckValidationType = 1 , N'
      LEFT JOIN T_TANULO_OSSZES t ON t.ID = f.ID AND t.TOROLT = ''F''','') + 
      IIF(@pCheckValidationType = 2 , N'
      LEFT JOIN T_ALKALMAZOTT_OSSZES a ON a.ID = f.ID AND a.TOROLT = ''F''','') + 
      N'
      WHERE f.TOROLT = ''F'' AND (fb.C_GONDVISELOID IS NULL OR EXISTS(SELECT ID FROM T_GONDVISELO_OSSZES WHERE ID = fb.C_GONDVISELOID AND TOROLT = ''F'')) '
    IF(@pTanevIds IS NOT NULL) 
      BEGIN 
        SET @sql += ' AND f.C_TANEVID IN ('+ @pTanevIds + ')' 
      END
    IF(@pBejelentkezesiNev IS NOT NULL) 
      BEGIN 
        SET @partialSql += IIF(LEN(@partialSql) > 0,' OR ','')+' fb.C_BEJELENTKEZESINEV = @pBejelentkezesiNev ' 
      END
    IF(@pOktatasiAzonosito IS NOT NULL) 
      BEGIN 
        SET @partialSql += IIF(LEN(@partialSql) > 0,' OR ','')+' f.C_OKTATASIAZONOSITO = @pOktatasiAzonosito ' 
      END
    IF(@pSzuletesiVezeteknev IS NOT NULL 
      AND @pSzuletesiUtonev IS NOT NULL
      AND @pAnyjaVezeteknev IS NOT NULL
      AND @pAnyjaUtonev IS NOT NULL 
      AND @pSzuletesiHely IS NOT NULL 
      AND @pSzuletesiDatum IS NOT NULL)
      BEGIN
        SET @partialSql += IIF(LEN(@partialSql)  > 0, ' OR ','')+'(
            ((ISNULL(@pSzuletesiNevSorrend,''F'') = ISNULL(f.C_SZULETESINEVSORREND,''F'') AND @pSzuletesiVezeteknev = f.C_SZULETESIVEZETEKNEV AND @pSzuletesiUtonev = f.C_SZULETESIUTONEV)
              OR (@pSzuletesiVezeteknev = f.C_SZULETESIUTONEV AND @pSzuletesiUtonev = f.C_SZULETESIVEZETEKNEV)) 
            AND ISNULL(@pSzuletesiElotag,''F'') = ISNULL(f.C_SZULETESINEVELOTAG,''F'') 
            AND ((ISNULL(@pAnyjaNevSorrend,''F'') = ISNULL(f.C_ANYJANEVESORREND,''F'') AND @pAnyjaVezeteknev = f.C_ANYJAVEZETEKNEVE AND @pAnyjaUtonev = f.C_ANYJAUTONEVE)
              OR (@pAnyjaVezeteknev = f.C_ANYJAUTONEVE AND @pAnyjaUtonev = f.C_ANYJAVEZETEKNEVE))
            AND ISNULL(@pAnyjaNevElotag,''F'') = ISNULL(f.C_ANYJANEVEELOTAG,''F'')
            AND @pSzuletesiDatum = f.C_SZULETESIDATUM AND @pSzuletesiHely = f.C_SZULETESIHELY) '
      END
    SET @sql += IIF(@partialSql IS NOT NULL AND @partialSql NOT LIKE '', ' AND ( '+ @partialSql +' )','')

    EXEC sp_executesql 
    @sql,N'
      @pSzuletesiNevSorrend char(1) = null
    ,@pSzuletesiElotag nvarchar(255) = null
    ,@pSzuletesiVezeteknev nvarchar(255) = null
    ,@pSzuletesiUtonev nvarchar(255) = null
    ,@pAnyjaNevSorrend char(1) = null
    ,@pAnyjaNevElotag nvarchar(255) = null
    ,@pAnyjaVezeteknev nvarchar(255) = null
    ,@pAnyjaUtonev nvarchar(255) = null
    ,@pSzuletesiHely nvarchar(255) = null
    ,@pSzuletesiDatum datetime = null
    ,@pOktatasiAzonosito nvarchar(255) = null
    ,@pBejelentkezesiNev nvarchar(255) = null'
    ,@pSzuletesiNevSorrend = @pSzuletesiNevSorrend
    ,@pSzuletesiElotag = @pSzuletesiElotag
    ,@pSzuletesiVezeteknev = @pSzuletesiVezeteknev
    ,@pSzuletesiUtonev = @pSzuletesiUtonev
    ,@pAnyjaNevSorrend = @pAnyjaNevSorrend
    ,@pAnyjaNevElotag = @pAnyjaNevElotag
    ,@pAnyjaVezeteknev = @pAnyjaVezeteknev
    ,@pAnyjaUtonev = @pAnyjaUtonev
    ,@pSzuletesiHely = @pSzuletesiHely
    ,@pSzuletesiDatum = @pSzuletesiDatum
    ,@pOktatasiAzonosito = @pOktatasiAzonosito
    ,@pBejelentkezesiNev = @pBejelentkezesiNev
  END
  ELSE IF (@pCheckValidationType = 3) /* Nebuló */
  BEGIN 
    SELECT 
       ID
      ,3 As ValidationType
    FROM T_NEBULO n
    WHERE ((ISNULL(@pSzuletesiNevSorrend,'F') = 'F' AND @pSzuletesiVezeteknev = n.C_SZULETESICSALADINEVE AND @pSzuletesiUtonev = n.C_SZULETESIUTONEVE)
        OR (@pSzuletesiVezeteknev = n.C_SZULETESIUTONEVE AND @pSzuletesiUtonev = n.C_SZULETESICSALADINEVE)) 
      AND ISNULL(@pSzuletesiElotag,'F') = ISNULL(n.C_ELOTAG,'F') 
      AND ((ISNULL(@pAnyjaNevSorrend,'F') = 'F' AND @pAnyjaVezeteknev = n.C_EDESANYJASZULETESICSALADINEV AND @pAnyjaUtonev = n.C_EDESANYJASZULETESIUTONEVE)
        OR (@pAnyjaVezeteknev = n.C_EDESANYJASZULETESIUTONEVE AND @pAnyjaUtonev = n.C_EDESANYJASZULETESICSALADINEV))
      AND @pSzuletesiDatum = n.C_SZULETESIIDO AND @pSzuletesiHely = n.C_SZULETESIHELY
      AND (n.C_FELVETELSTATUSZA = @pFelvetelStatuszaFelveve
        OR n.C_FELVETELSTATUSZA = @pFelvetelStatuszaNemFelveve)
      AND n.TOROLT = 'F'
  END

END
GO
