DROP PROCEDURE IF EXISTS uspFeljegyzesekKereses
GO

CREATE PROCEDURE uspFeljegyzesekKereses
   @pTanevId int = NULL
  ,@pIntezmenyId int = NULL
  ,@pOsztalyId int = NULL
  ,@OktNevKatTipus int = NULL
  ,@pFeladatEllatasiHelyId int = NULL
  ,@pTanuloId int = NULL
  ,@pOsztalyCsoportId int = NULL
  ,@pFeljegyzoId int = NULL
  ,@pTipus int = NULL
  ,@pDatumTol datetime = NULL
  ,@pDatumIg datetime = NULL
  ,@pIsElektronikusUzenet bit
  ,@pElektronikusUzenetTipusEnum int
  ,@pIsKellKapcsolodoCsoportok bit
  ,@pRogzitesDatumTol datetime = NULL
  ,@pRogzitesDatumIg datetime = NULL
  ,@pFeljegyzesSzovege nvarchar(max) = NULL
  ,@pSzervezetTipusId int = NULL
  ,@pSzervezetIdListString nvarchar(255) = NULL
  ,@pSzervezetNev nvarchar(255) = NULL
  ,@pSzervezetAzonosito nvarchar(255) = NULL
AS
BEGIN

  SET NOCOUNT ON;

  DECLARE
     @sql nvarchar(max)
    ,@whereSql nvarchar(max)

  SET @sql = N'
    SELECT
       tanuloesemeny.ID AS ID
      ,tanuloesemeny.C_ESEMENYDATUMA AS Datum
      ,tanuloesemeny.C_MEGJEGYZES AS Megjegyzes
      ,tanuloesemeny.C_TARTALOM AS Tartalom
      ,tanuloesemeny.C_TIPUS AS Tipus
      ,tanuloesemeny.C_FELJEGYZOID AS FeljegyzoId
      ,tanuloesemeny.C_TANTARGYID AS TantargyId
      ,tanuloesemeny.C_ROGZITESDATUMA AS RogzitesDatuma
      ,TANULO.ID AS TanuloId
      ,TANULO.C_NYOMTATASINEV AS TanuloNev
      ,TANULO.C_SZULETESIDATUM AS SzuletesiDatum
      ,TANULO.C_OKTATASIAZONOSITO AS OktatasiAzonosito
      ,IIF(TANULO.C_NEVSORREND = ''T'', TANULO.C_UTONEV + '' '' + TANULO.C_VEZETEKNEV, TANULO.C_VEZETEKNEV + '' '' + TANULO.C_UTONEV) AS TanuloNevElotagNelkul
      ,FELJEGYZO.C_NYOMTATASINEV AS FeljegyzoNev
      ,IIF(FELJEGYZO.C_NEVSORREND = ''T'', FELJEGYZO.C_UTONEV + '' '' + FELJEGYZO.C_VEZETEKNEV, FELJEGYZO.C_VEZETEKNEV + '' '' + FELJEGYZO.C_UTONEV) AS FeljegyzoNevElotagNelkul
      ,ISNULL(ocs.ID, beirasOcs.ID) AS OsztalyCsoportId
      ,ISNULL(ocs.C_NEV, ISNULL(beirasOcs.C_NEV, ISNULL(rogzitesOcs.C_NEV, ''-''))) AS OsztalyCsoportNev
      ,STUFF((
        SELECT '', '' + CAST(ocsop.C_NEV AS nvarchar(max))
        FROM T_TANULOCSOPORT_OSSZES tcs
        INNER JOIN T_OSZTALY_OSSZES o on o.ID = tcs.C_OSZTALYCSOPORTID
          AND o.TOROLT = ''F''
        INNER JOIN T_OSZTALYCSOPORT_OSSZES ocsop on ocsop.ID = o.ID
          AND ocsop.TOROLT = ''F''
          AND (@pFeladatEllatasiHelyId IS NULL OR ocsop.C_FELADATELLATASIHELYID = @pFeladatEllatasiHelyId)
          AND (@OktNevKatTipus IS NULL OR ocsop.C_FELADATKATEGORIAID = @OktNevKatTipus)
        WHERE tcs.TOROLT = ''F''
          AND tcs.C_TANULOID = T_TANULO_TANULOESEMENY.C_TANULOID
          AND tcs.C_BELEPESDATUM <= tanuloesemeny.C_ESEMENYDATUMA AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tanuloesemeny.C_ESEMENYDATUMA)
       FOR XML PATH ('''')), 1, 1, '''') AS OsztalyNev
      ,tanuloesemeny.C_TARGY AS Cim
      FROM T_TANULOESEMENY_OSSZES AS tanuloesemeny
        INNER JOIN T_TANULO_TANULOESEMENY ON tanuloesemeny.ID = T_TANULO_TANULOESEMENY.C_TANULOESEMENYID
        LEFT JOIN (
          SELECT
             tanitasiora.ID AS TanitasioraId
            ,ocs.ID
            ,ocs.C_NEV
            ,ocs.C_FELADATELLATASIHELYID
            ,ocs.C_FELADATKATEGORIAID
            ,ocs.C_TANEVID
            ,ocs.C_INTEZMENYID
          FROM T_TANITASIORA_OSSZES tanitasiora
          INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tanitasiora.C_OSZTALYCSOPORTID
            AND ocs.TOROLT = ''F''
            AND (@OktNevKatTipus IS NULL OR C_FELADATKATEGORIAID = @OktNevKatTipus)
            AND (@pFeladatEllatasiHelyId IS NULL OR ocs.C_FELADATELLATASIHELYID= @pFeladatEllatasiHelyId)
        ) ocs on ocs.TanitasioraId = tanuloesemeny.C_TANITASIORAID
        LEFT JOIN T_OSZTALYCSOPORT_OSSZES rogzitesOcs ON tanuloesemeny.C_ROGZITESKORIOSZTALYID = rogzitesOcs.ID
        LEFT JOIN T_OSZTALYCSOPORT_OSSZES beirasOcs ON tanuloesemeny.C_BEIRASOSZTALYCSOPORTID = beirasOcs.ID
        INNER JOIN T_FELHASZNALO_OSSZES TANULO ON TANULO.ID = T_TANULO_TANULOESEMENY.C_TANULOID
          AND TANULO.TOROLT = ''F''
        INNER JOIN T_FELHASZNALO_OSSZES FELJEGYZO ON FELJEGYZO.ID = tanuloesemeny.C_FELJEGYZOID
          AND FELJEGYZO.TOROLT = ''F'''

  SET @whereSql = N'
    WHERE tanuloesemeny.TOROLT = ''F''
      AND (@pFeladatEllatasiHelyId IS NULL OR COALESCE(ocs.C_FELADATELLATASIHELYID, rogzitesOcs.C_FELADATELLATASIHELYID, beirasOcs.C_FELADATELLATASIHELYID) = @pFeladatEllatasiHelyId)
      AND (@OktNevKatTipus IS NULL OR ocs.C_FELADATKATEGORIAID = @OktNevKatTipus OR rogzitesOcs.C_FELADATKATEGORIAID = @OktNevKatTipus)
      AND tanuloesemeny.C_INTEZMENYID = @pIntezmenyId
      AND tanuloesemeny.C_TANEVID = @pTanevId'

  IF (@pOsztalyId IS NOT NULL) SET @whereSql += N'
      AND EXISTS(
        SELECT 1
        FROM T_TANULOCSOPORT_OSSZES tcs
        WHERE tcs.C_TANULOID = T_TANULO_TANULOESEMENY.C_TANULOID
          AND C_BELEPESDATUM <= tanuloesemeny.C_ESEMENYDATUMA
          AND (C_KILEPESDATUM > tanuloesemeny.C_ESEMENYDATUMA OR C_KILEPESDATUM IS NULL)
          AND C_OSZTALYCSOPORTID = @pOsztalyId)'

  IF (@pTanuloId IS NOT NULL) SET @whereSql += N'
      AND T_TANULO_TANULOESEMENY.C_TANULOID = @pTanuloId'

  IF (@pOsztalyCsoportId IS NOT NULL)
      SET @whereSql +=
      IIF(@pIsKellKapcsolodoCsoportok = 1, N'
      AND ISNULL(ocs.ID, beirasOcs.ID) IN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@pOsztalyCsoportId))', N'
      AND (ocs.ID = @pOsztalyCsoportId OR beirasOcs.ID = @pOsztalyCsoportId)')

  IF (@pFeljegyzoId IS NOT NULL) SET @whereSql += N'
      AND tanuloesemeny.C_FELJEGYZOID = @pFeljegyzoId'

  IF (@pTipus IS NOT NULL) SET @whereSql += N'
      AND tanuloesemeny.C_TIPUS = @pTipus'

  IF (@pDatumTol IS NOT NULL) SET @whereSql += N'
      AND tanuloesemeny.C_ESEMENYDATUMA >= @pDatumTol'

  IF (@pDatumIg IS NOT NULL) SET @whereSql += N'
      AND tanuloesemeny.C_ESEMENYDATUMA < @pDatumIg'

  IF (@pRogzitesDatumTol IS NOT NULL)	SET @whereSql += N'
      AND tanuloesemeny.C_ROGZITESDATUMA >= @pRogzitesDatumTol'

	IF (@pRogzitesDatumIg IS NOT NULL) SET @whereSql += N'
      AND tanuloesemeny.C_ROGZITESDATUMA < @pRogzitesDatumIg'

  IF (@pIsElektronikusUzenet = 1) SET @whereSql += N'
      AND tanuloesemeny.C_TIPUS = @pElektronikusUzenetTipusEnum'
  ELSE SET @whereSql += N'
      AND tanuloesemeny.C_TIPUS <> @pElektronikusUzenetTipusEnum'

	IF (@pFeljegyzesSzovege IS NOT NULL) SET @whereSql += N'
      AND tanuloesemeny.C_TARTALOM LIKE ''%'' + @pFeljegyzesSzovege + ''%'''

  IF @pSzervezetTipusId IS NOT NULL BEGIN
    SET @sql += N'
      LEFT JOIN T_CSOPORT_OSSZES cs on cs.C_ALTANEVID = ocs.C_TANEVID AND cs.C_ALINTEZMENYID = ocs.C_INTEZMENYID AND cs.TOROLT = ''F'' AND cs.ID = ocs.ID
      INNER JOIN T_SZERVEZET_OSSZES sz ON sz.C_TANEVID = tanuloesemeny.C_TANEVID AND sz.C_INTEZMENYID = tanuloesemeny.C_INTEZMENYID AND sz.TOROLT = ''F'' AND sz.ID = cs.C_SZERVEZETID AND sz.C_TIPUS = @pSzervezetTipusId'
    IF (@pSzervezetIdListString IS NOT NULL AND LEN(@pSzervezetIdListString) > 0) BEGIN
      SET @whereSql += N'
        AND sz.ID IN (' + @pSzervezetIdListString + ')'
    END
    IF @pSzervezetNev IS NOT NULL BEGIN
      SET @whereSql += N'
        AND sz.C_NEV LIKE ''%'' + @pSzervezetNev + ''%'''
    END
    IF @pSzervezetAzonosito IS NOT NULL BEGIN
      SET @whereSql += N'
        AND sz.C_AZONOSITO LIKE ''%'' + @pSzervezetAzonosito + ''%'''
    END
  END

  SET @sql += @whereSql

  EXEC sys.Sp_executesql @sql, N'
     @pTanevId int = NULL
    ,@pIntezmenyId int = NULL
    ,@pOsztalyId int
    ,@OktNevKatTipus int
    ,@pFeladatEllatasiHelyId int
    ,@pTanuloId int
    ,@pOsztalyCsoportId int
    ,@pFeljegyzoId int
    ,@pTipus int
    ,@pDatumTol datetime
    ,@pDatumIg datetime
    ,@pIsElektronikusUzenet bit
    ,@pElektronikusUzenetTipusEnum int
    ,@pRogzitesDatumTol datetime
    ,@pRogzitesDatumIg datetime
    ,@pFeljegyzesSzovege nvarchar(max)
    ,@pSzervezetTipusId int = NULL
    ,@pSzervezetNev nvarchar(255) = NULL
    ,@pSzervezetAzonosito nvarchar(255) = NULL'
    ,@pTanevId
    ,@pIntezmenyId
    ,@pOsztalyId
    ,@OktNevKatTipus
    ,@pFeladatEllatasiHelyId
    ,@pTanuloId
    ,@pOsztalyCsoportId
    ,@pFeljegyzoId
    ,@pTipus
    ,@pDatumTol
    ,@pDatumIg
    ,@pIsElektronikusUzenet
    ,@pElektronikusUzenetTipusEnum
    ,@pRogzitesDatumTol
    ,@pRogzitesDatumIg
    ,@pFeljegyzesSzovege
    ,@pSzervezetTipusId = @pSzervezetTipusId
    ,@pSzervezetNev = @pSzervezetNev
    ,@pSzervezetAzonosito = @pSzervezetAzonosito

END

GO

