368 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			368 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
DROP PROCEDURE IF EXISTS uspGetNyomtatvanyokOrarendOsszes
 | 
						|
GO
 | 
						|
 | 
						|
CREATE PROCEDURE uspGetNyomtatvanyokOrarendOsszes
 | 
						|
   @intezmenyId int
 | 
						|
  ,@tanevID int
 | 
						|
  ,@pIdoszakKezdete datetime
 | 
						|
  ,@pIdoszakVege datetime
 | 
						|
  ,@pTanarId int = NULL
 | 
						|
  ,@pIsHelyettesitesNelkul bit = 0
 | 
						|
  ,@pOsztalyCsoportId int = NULL
 | 
						|
  ,@pTanuloId int = NULL
 | 
						|
  ,@pTantargyId int = NULL
 | 
						|
  ,@pTeremId int = NULL
 | 
						|
  ,@pCsakOrarendiOrak bit = 0
 | 
						|
  ,@pIsNapirend bit  /* 0 csak orarendi ora, 1 csak napirend, NULL mindkettő */
 | 
						|
  ,@pKapcsolodoCsoportokMegjelenitese bit = NULL
 | 
						|
  ,@pOsztalyBontasokMegjelenitese bit = NULL
 | 
						|
  ,@pFeladatKategoriaId int = NULL
 | 
						|
AS BEGIN
 | 
						|
  SET NOCOUNT ON;
 | 
						|
 | 
						|
  DECLARE
 | 
						|
    @intezmenyNev nvarchar(510)
 | 
						|
    ,@hetirend int
 | 
						|
 | 
						|
  CREATE TABLE #OrarendiOrak (
 | 
						|
     Id int
 | 
						|
    ,ORARENDIID int
 | 
						|
    ,Datum datetime
 | 
						|
    ,Bontott char (1)
 | 
						|
    ,Hetirend int
 | 
						|
    ,HetNapja int
 | 
						|
    ,HetSorszam int
 | 
						|
    ,ErvenyessegKezdete datetime
 | 
						|
    ,ErvenyessegVege datetime
 | 
						|
    ,OraKezdete datetime
 | 
						|
    ,OraVege datetime
 | 
						|
    ,Oraszam int
 | 
						|
    ,TargyNev nvarchar (300)
 | 
						|
    ,TargyNevForMobile nvarchar (300)
 | 
						|
    ,TargykategoriaID int
 | 
						|
    ,Megtartott char (1)
 | 
						|
    ,CsengetesiRendOraID int
 | 
						|
    ,CsengetesiRendID int
 | 
						|
    ,MaxNapiOraszam int
 | 
						|
    ,OsztalyNev nvarchar (255)
 | 
						|
    ,TanevRendOsztalyCsoportId int
 | 
						|
    ,MegjelenesOka nvarchar (300)
 | 
						|
    ,TanarNev nvarchar (255)
 | 
						|
    ,TeremNev nvarchar (255)
 | 
						|
    ,TeremId int
 | 
						|
    ,OraTipus nvarchar (200)
 | 
						|
    ,Hianyzas char (1)
 | 
						|
    ,Keses char (1)
 | 
						|
    ,Ures char (1)
 | 
						|
    ,HelyettesitoTanarID int
 | 
						|
    ,HelyettesitoTanarNev nvarchar (255)
 | 
						|
    ,HelyettesitesId int
 | 
						|
    ,TanarID int
 | 
						|
    ,AdminAltalKiirt char (1)
 | 
						|
    ,GroupId int
 | 
						|
    ,Tema nvarchar (max)
 | 
						|
    ,TantargyId int
 | 
						|
    ,OsztCsopId int
 | 
						|
    ,IsEgyediNap char(1)
 | 
						|
    ,TeremTobbOratLehetTartani char(1)
 | 
						|
    ,KozpontiOraGroupId uniqueidentifier NULL
 | 
						|
	,KozpontilagToroltOraGroupId uniqueidentifier NULL
 | 
						|
    ,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID)
 | 
						|
  )
 | 
						|
 | 
						|
  CREATE TABLE #Oraszamok (
 | 
						|
     Oraszam int
 | 
						|
    ,PRIMARY KEY(Oraszam)
 | 
						|
  )
 | 
						|
 | 
						|
  SELECT TOP 1
 | 
						|
    @intezmenyNev = i.C_NEV
 | 
						|
  FROM T_INTEZMENYADATOK_OSSZES i
 | 
						|
  WHERE i.C_INTEZMENYID = @intezmenyId
 | 
						|
    AND i.C_TANEVID = @tanevID
 | 
						|
    AND i.TOROLT = 'F'
 | 
						|
 | 
						|
  INSERT INTO #OrarendiOrak (
 | 
						|
     Id
 | 
						|
    ,ORARENDIID
 | 
						|
    ,Datum
 | 
						|
    ,Bontott
 | 
						|
    ,Hetirend
 | 
						|
    ,HetNapja
 | 
						|
    ,HetSorszam
 | 
						|
    ,ErvenyessegKezdete
 | 
						|
    ,ErvenyessegVege
 | 
						|
    ,OraKezdete
 | 
						|
    ,OraVege
 | 
						|
    ,Oraszam
 | 
						|
    ,TargyNev
 | 
						|
    ,TargyNevForMobile
 | 
						|
    ,TargykategoriaID
 | 
						|
    ,Megtartott
 | 
						|
    ,CsengetesiRendOraID
 | 
						|
    ,CsengetesiRendID
 | 
						|
    ,MaxNapiOraszam
 | 
						|
    ,OsztalyNev
 | 
						|
    ,TanevRendOsztalyCsoportId
 | 
						|
    ,MegjelenesOka
 | 
						|
    ,TanarNev
 | 
						|
    ,TeremNev
 | 
						|
    ,TeremId
 | 
						|
    ,OraTipus
 | 
						|
    ,Hianyzas
 | 
						|
    ,Keses
 | 
						|
    ,Ures
 | 
						|
    ,HelyettesitoTanarID
 | 
						|
    ,HelyettesitoTanarNev
 | 
						|
    ,HelyettesitesId
 | 
						|
    ,TanarID
 | 
						|
    ,AdminAltalKiirt
 | 
						|
    ,GroupId
 | 
						|
    ,Tema
 | 
						|
    ,TantargyId
 | 
						|
    ,OsztCsopId
 | 
						|
    ,IsEgyediNap
 | 
						|
    ,TeremTobbOratLehetTartani
 | 
						|
    ,KozpontiOraGroupId
 | 
						|
    ,KozpontilagToroltOraGroupId
 | 
						|
  )
 | 
						|
  EXEC sp_GetOrarend
 | 
						|
     @pIntezmenyId = @intezmenyId
 | 
						|
    ,@pTanevId = @tanevID
 | 
						|
    ,@pIdoszakKezdete = @pIdoszakKezdete
 | 
						|
    ,@pIdoszakVege = @pIdoszakVege
 | 
						|
    ,@pTanarId = @pTanarId
 | 
						|
    ,@pIsHelyettesitesNelkul = @pIsHelyettesitesNelkul
 | 
						|
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
 | 
						|
    ,@pTanuloId = @pTanuloId
 | 
						|
    ,@pTantargyId = @pTantargyId
 | 
						|
    ,@pTeremId = @pTeremId
 | 
						|
    ,@pCsakOrarendiOrak = @pCsakOrarendiOrak
 | 
						|
    ,@pIsNapirend = @pIsNapirend
 | 
						|
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
 | 
						|
 | 
						|
  -- a lekért órarendben a minden héten órákat átállítjuk a hétsorszámnak megfelelő hetirendre
 | 
						|
  UPDATE orak
 | 
						|
  SET orak.Hetirend = ISNULL(hr.Hetirend, orak.Hetirend)
 | 
						|
  FROM #OrarendiOrak orak
 | 
						|
    LEFT JOIN (
 | 
						|
      SELECT DISTINCT
 | 
						|
         o.Hetirend
 | 
						|
        ,o.HetSorszam
 | 
						|
      FROM #OrarendiOrak o
 | 
						|
      WHERE Hetirend <> 1554
 | 
						|
    ) hr ON hr.HetSorszam = orak.HetSorszam
 | 
						|
  WHERE orak.Hetirend = 1554
 | 
						|
 | 
						|
  -- kapcsolódó csoportok óráinak törlése
 | 
						|
  IF @pKapcsolodoCsoportokMegjelenitese IS NOT NULL AND @pKapcsolodoCsoportokMegjelenitese = 0
 | 
						|
    DELETE orak
 | 
						|
    FROM #OrarendiOrak orak
 | 
						|
      INNER JOIN T_CSOPORT_OSSZES cs ON cs.TOROLT = 'F'
 | 
						|
        AND cs.ID = orak.OsztCsopId 
 | 
						|
        AND cs.C_OSZTALYBONTASID IS NULL
 | 
						|
      INNER JOIN T_CSOPORTTIPUS_OSSZES cst ON cst.C_ALTANEVID = cs.C_ALTANEVID AND cst.TOROLT = 'F'
 | 
						|
        AND cst.ID = cs.C_TIPUSA
 | 
						|
        AND cst.C_ISTANORAICELU = 'F'
 | 
						|
    WHERE OsztCsopId != @pOsztalyCsoportId
 | 
						|
 | 
						|
  -- osztálybontott csoportok óráinak törlése
 | 
						|
  IF @pOsztalyBontasokMegjelenitese IS NOT NULL AND @pOsztalyBontasokMegjelenitese = 0
 | 
						|
    DELETE orak
 | 
						|
    FROM #OrarendiOrak orak
 | 
						|
      INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = orak.OsztCsopId
 | 
						|
        AND cs.C_OSZTALYBONTASID IS NOT NULL
 | 
						|
    WHERE orak.OsztCsopId != @pOsztalyCsoportId
 | 
						|
 | 
						|
  -- egyedi napok esetén ne a megtartott napon, hanem az alap hét napján jelenjen meg
 | 
						|
  UPDATE orak SET orak.HetNapja=nn.C_ALAPHETNAPJA
 | 
						|
  FROM #OrarendiOrak orak
 | 
						|
    INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA = orak.Datum AND nn.C_TANEVID = @tanevID AND nn.TOROLT = 'F'
 | 
						|
  WHERE orak.IsEgyediNap = 'T'
 | 
						|
 | 
						|
  INSERT INTO #Oraszamok (Oraszam)
 | 
						|
  SELECT DISTINCT
 | 
						|
    ora.C_ORASZAM AS Oraszam
 | 
						|
  FROM T_ORARENDIORA_OSSZES ora
 | 
						|
  WHERE ora.C_INTEZMENYID = @intezmenyId
 | 
						|
    AND ora.C_TANEVID = @tanevID
 | 
						|
    AND ora.C_ORASZAM IS NOT NULL
 | 
						|
 | 
						|
  SET @hetirend = (SELECT TOP 1 Hetirend FROM #OrarendiOrak)
 | 
						|
 | 
						|
  SELECT DISTINCT
 | 
						|
     COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id
 | 
						|
    ,STUFF(
 | 
						|
      (
 | 
						|
        SELECT DISTINCT
 | 
						|
          ', ' + IIF(@pTanarId IS NOT NULL, bo.TanarNev, IIF(@pTeremId IS NOT NULL, bo.TeremNev, IIF(@pOsztalyCsoportId IS NOT NULL, bo.OsztalyNev,'')))
 | 
						|
        FROM #OrarendiOrak bo
 | 
						|
        WHERE bo.Hetirend = o.Hetirend
 | 
						|
        FOR XML PATH(''), TYPE
 | 
						|
      ).value
 | 
						|
      ('.', 'NVARCHAR(MAX)') ,1 , 2, ''
 | 
						|
    ) AS Nev
 | 
						|
    ,@intezmenyNev AS IntezmenyNev
 | 
						|
    ,STUFF(
 | 
						|
      (
 | 
						|
        SELECT DISTINCT
 | 
						|
          ', ' + dic.C_NAME
 | 
						|
        FROM #OrarendiOrak qw
 | 
						|
          LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.C_TANEVID = @tanevID
 | 
						|
            AND dic.TOROLT = 'F'
 | 
						|
            AND dic.ID = qw.Hetirend
 | 
						|
        WHERE o.Hetirend = qw.Hetirend
 | 
						|
        FOR XML PATH(''), TYPE
 | 
						|
      ).value
 | 
						|
      ('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, ''
 | 
						|
    ) AS Hetirend
 | 
						|
  FROM #OrarendiOrak o
 | 
						|
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON o.Hetirend = dic.ID
 | 
						|
      AND dic.C_TANEVID = @tanevID
 | 
						|
      AND dic.TOROLT = 'F'
 | 
						|
 | 
						|
  SELECT
 | 
						|
     COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id
 | 
						|
    ,IIF(@pIsNapirend = 0, CAST(t.Oraszam AS nvarchar(3)), ISNULL(t.OraKezdete + ' - ' + t.OraVege, '')) AS Ora
 | 
						|
    ,t.Hetirend AS HetirendId
 | 
						|
    ,[1408] AS Hetfo
 | 
						|
    ,[1409] AS Kedd
 | 
						|
    ,[1410] AS Szerda
 | 
						|
    ,[1411] AS Csutortok
 | 
						|
    ,[1412] AS Pentek
 | 
						|
    ,[1413] AS Szombat
 | 
						|
    ,[1414] AS Vasarnap
 | 
						|
    ,t.HetirendNev AS HetirendNev
 | 
						|
  FROM (
 | 
						|
    SELECT
 | 
						|
      *
 | 
						|
    FROM (
 | 
						|
      SELECT
 | 
						|
        STUFF(
 | 
						|
          (
 | 
						|
            SELECT
 | 
						|
              CONVERT(nvarchar(max),
 | 
						|
                '--------------------' + nchar(13) + nchar(10)
 | 
						|
                + bo.TargyNev + nchar(13) + nchar(10) + bo.OsztalyNev +
 | 
						|
                IIF(@pTeremId IS NOT NULL OR @pOsztalyCsoportId IS NOT NULL, nchar(13) + nchar(10) + bo.TanarNev, '') + nchar(13) + nchar(10) + bo.TeremNev + nchar(13) + nchar(10))
 | 
						|
            FROM #OrarendiOrak bo
 | 
						|
            WHERE 
 | 
						|
                (@pIsNapirend = 0 AND bo.Oraszam = osz.Oraszam and o.HetNapja = bo.HetNapja)
 | 
						|
                OR
 | 
						|
                (ISNULL(@pIsNapirend, 1) <> 0 AND bo.OraKezdete = o.OraKezdete AND bo.OraVege = o.OraVege and o.HetNapja = bo.HetNapja)
 | 
						|
            FOR XML PATH(''), TYPE
 | 
						|
          ).value
 | 
						|
          ('.', 'NVARCHAR(MAX)'), 1, 22, ''
 | 
						|
        ) AS TargyNev
 | 
						|
       ,o.HetNapja
 | 
						|
       ,osz.Oraszam
 | 
						|
       ,IIF(ISNULL(@pIsNapirend, 1) <> 0, CONVERT(char(5), o.OraKezdete, 108), NULL) AS OraKezdete
 | 
						|
       ,IIF(ISNULL(@pIsNapirend, 1) <> 0, CONVERT(char(5), o.OraVege, 108), NULL) AS OraVege
 | 
						|
       ,dic.C_NAME AS HetirendNev
 | 
						|
       ,@hetirend AS Hetirend
 | 
						|
      FROM #OrarendiOrak AS o
 | 
						|
        FULL JOIN #Oraszamok AS osz ON osz.Oraszam = o.Oraszam AND ISNULL(@pIsNapirend, 1) = 0
 | 
						|
        LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS dic ON dic.C_TANEVID = @tanevID
 | 
						|
          AND dic.TOROLT = 'F'
 | 
						|
          AND dic.ID = @hetirend
 | 
						|
    ) ot PIVOT(MAX(ot.TargyNev) FOR ot.HetNapja IN(
 | 
						|
       [1408]
 | 
						|
      ,[1409]
 | 
						|
      ,[1410]
 | 
						|
      ,[1411]
 | 
						|
      ,[1412]
 | 
						|
      ,[1413]
 | 
						|
      ,[1414])
 | 
						|
    ) AS pv
 | 
						|
  ) AS t
 | 
						|
  WHERE @pIsNapirend = 0 OR (t.OraKezdete IS NOT NULL AND t.OraVege IS NOT NULL)
 | 
						|
  ORDER BY
 | 
						|
     HetirendNev
 | 
						|
    ,CASE WHEN @pIsNapirend = 0 THEN t.Oraszam ELSE CAST(t.OraKezdete AS datetime) END
 | 
						|
 | 
						|
  -- Iktatási adatok
 | 
						|
  IF @pOsztalyCsoportId IS NOT NULL
 | 
						|
    BEGIN
 | 
						|
      --  Osztály adatok
 | 
						|
      SELECT
 | 
						|
         @pOsztalyCsoportId AS OsztalyId
 | 
						|
        ,ocs.C_EVFOLYAMTIPUSA AS Evfolyam
 | 
						|
        ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
 | 
						|
        ,ocs.C_KEPZESIFORMA AS KepzesiForma
 | 
						|
        ,o.C_OSZTALYFONOKID AS OsztalyFonokId
 | 
						|
        ,o.C_TANTERVID AS TantervId
 | 
						|
        ,o.C_SZAKMACSOPORT AS SzakmaCsoport
 | 
						|
        ,o.C_AGAZAT AS Agazat
 | 
						|
        ,o.C_SZAKKEPESITES AS Szakkepesites
 | 
						|
        ,o.C_RESZSZAKKEPESITES AS Reszszakkepesites
 | 
						|
        ,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves
 | 
						|
        ,ocs.C_VEGZOSEVFOLYAM AS CSJVegzosEvfolyamu
 | 
						|
        ,ocs.C_ISTECHNIKAI AS OJTechnikaiOsztaly
 | 
						|
        ,o.C_NEMZETISEGI AS OJNemzetisegi
 | 
						|
        ,o.C_KETTANNYELVU AS OJKettannyelvu
 | 
						|
        ,o.C_NYELVIELOKESZITO AS OJNyelviElokeszito
 | 
						|
        ,ocs.C_ISGYOGYPEDAGOGIAILOGOPEDIAI AS OJIsGyogypedagogiaiLogopediai
 | 
						|
        ,o.C_SPORT AS OJSportOsztaly
 | 
						|
        ,o.C_AJPROGRAM AS OJAranyJanosProgram
 | 
						|
      FROM T_OSZTALYCSOPORT_OSSZES ocs
 | 
						|
        INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID AND o.TOROLT = 'F'
 | 
						|
          AND o.C_ALTANEVID = ocs.C_TANEVID
 | 
						|
          AND o.C_ALINTEZMENYID = ocs.C_INTEZMENYID
 | 
						|
      WHERE ocs.ID = @pOsztalyCsoportId
 | 
						|
        AND ocs.TOROLT = 'F'
 | 
						|
        AND ocs.C_TANEVID = @tanevID
 | 
						|
        AND ocs.C_INTEZMENYID = @intezmenyId
 | 
						|
 | 
						|
      --  Osztály csoportok
 | 
						|
      SELECT DISTINCT
 | 
						|
        ot.OsztCsopId AS CsoportId
 | 
						|
      FROM #OrarendiOrak ot
 | 
						|
        INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = ot.OsztCsopId
 | 
						|
          AND cs.TOROLT = 'F'
 | 
						|
 | 
						|
      --  Alkalmazottak
 | 
						|
      SELECT DISTINCT
 | 
						|
         ot.TanarID AS TanarId
 | 
						|
        ,f.C_OKTATASIAZONOSITO AS TanarOktAzon
 | 
						|
      FROM #OrarendiOrak ot
 | 
						|
        LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = ot.TanarID
 | 
						|
          AND f.TOROLT = 'F'
 | 
						|
 | 
						|
      --  Tanulók
 | 
						|
      SELECT DISTINCT
 | 
						|
         f.ID AS TanuloId
 | 
						|
        ,f.C_NYOMTATASINEV AS TanuloNeve
 | 
						|
        ,f.C_OKTATASIAZONOSITO AS TanuloOktAzon
 | 
						|
      FROM #OrarendiOrak ot
 | 
						|
        INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = ot.OsztCsopId
 | 
						|
          AND tcs.C_TANEVID = @tanevID
 | 
						|
          AND tcs.TOROLT = 'F'
 | 
						|
        INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID
 | 
						|
          AND f.TOROLT = 'F'
 | 
						|
 | 
						|
    END
 | 
						|
  ELSE
 | 
						|
    IF @pTanarId IS NOT NULL
 | 
						|
      --  Alkalmazottak
 | 
						|
      SELECT DISTINCT
 | 
						|
         orak.TanarID AS TanarId
 | 
						|
        ,f.C_OKTATASIAZONOSITO AS TanarOktAzon
 | 
						|
        ,mua.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
 | 
						|
      FROM #OrarendiOrak orak
 | 
						|
        LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = orak.TanarID
 | 
						|
          AND f.TOROLT = 'F'
 | 
						|
        INNER JOIN T_MUNKAUGYIADATOK_OSSZES mua ON mua.C_ALKALMAZOTTID = orak.TanarID
 | 
						|
          AND mua.TOROLT = 'F'
 | 
						|
 | 
						|
    ELSE
 | 
						|
      IF @pTeremId IS NOT NULL
 | 
						|
        SELECT
 | 
						|
           t.ID AS TeremId
 | 
						|
          ,t.C_MUKODESIHELYID AS FeladatEllatasiHelyId
 | 
						|
        FROM T_TEREM_OSSZES t
 | 
						|
        WHERE t.ID = @pTeremId
 | 
						|
          AND t.TOROLT = 'F'
 | 
						|
 | 
						|
END
 | 
						|
GO
 |