281 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
DROP PROCEDURE IF EXISTS uspGetKozpontiOrakOrarend
 | 
						|
GO
 | 
						|
CREATE PROCEDURE [uspGetKozpontiOrakOrarend]
 | 
						|
   @pIntezmenyId int
 | 
						|
  ,@pTanevId int
 | 
						|
  ,@pIdoszakKezdete datetime
 | 
						|
  ,@pIdoszakVege datetime  
 | 
						|
AS
 | 
						|
BEGIN 
 | 
						|
  SET NOCOUNT ON;
 | 
						|
  DECLARE
 | 
						|
     @sql nvarchar(max) = N''
 | 
						|
    ,@sqlOrarendiora nvarchar(max) = N''
 | 
						|
 | 
						|
  SET @sql += N'
 | 
						|
  CREATE TABLE #OsztalyCsoportok (
 | 
						|
     Id int
 | 
						|
    ,Nev nvarchar(255)
 | 
						|
    ,Oka nvarchar(50)
 | 
						|
    ,IsVegzos char(1)
 | 
						|
    ,IdoszakKezdete datetime
 | 
						|
    ,IdoszakVege datetime
 | 
						|
    ,INDEX IX1 CLUSTERED(Id, IdoszakKezdete, IdoszakVege)
 | 
						|
  );
 | 
						|
  CREATE TABLE #NaptariNapok (
 | 
						|
     Datum datetime
 | 
						|
    ,HetirendId int
 | 
						|
    ,HetNapjaId int
 | 
						|
    ,OrarendiNap char(1)
 | 
						|
    ,OsztalyCsoportId int
 | 
						|
    ,HetSorszam int
 | 
						|
    ,CsengetesiRendId int
 | 
						|
    ,Nev nvarchar(255)
 | 
						|
    ,Oka nvarchar(50)
 | 
						|
    ,IsVegzos char(1)
 | 
						|
    ,IdoszakKezdete datetime
 | 
						|
    ,IdoszakVege datetime
 | 
						|
    ,IsEgyediNap char(1) COLLATE DATABASE_DEFAULT
 | 
						|
    ,PRIMARY KEY CLUSTERED (OsztalyCsoportId, Datum, HetNapjaId, HetirendId)
 | 
						|
  );
 | 
						|
  CREATE TABLE #OrarendTable (
 | 
						|
     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
 | 
						|
	  ,KozpontilagToroltOraGroupId uniqueidentifier
 | 
						|
    ,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID)
 | 
						|
  );'
 | 
						|
  /* Változók deklarálása */
 | 
						|
  SET @sql += N'
 | 
						|
  DECLARE
 | 
						|
     @KezdoHet int = DATEPART( ISO_WEEK, @pIdoszakKezdete)
 | 
						|
    ,@ZaroHet int = DATEPART( ISO_WEEK, @pIdoszakVege);
 | 
						|
  DECLARE @VegzosUtolsoTanitasiNap datetime;
 | 
						|
  SELECT @VegzosUtolsoTanitasiNap = MIN(C_DATUM)
 | 
						|
  FROM T_TANEVRENDJE_OSSZES
 | 
						|
  WHERE TOROLT = ''F''
 | 
						|
    AND C_TANEVID = @pTanevId
 | 
						|
    AND C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603, 1395) --
 | 
						|
    AND C_OSSZESCSOPORTRAVONATKOZIK = ''T''
 | 
						|
  DECLARE @IsVegzosEvfolyam char(1)
 | 
						|
  '
 | 
						|
  /* A kapcsolódó osztálycsoportok összegyűjtése */
 | 
						|
  
 | 
						|
    SET @sql += N'
 | 
						|
    --Performancia noveles miatt
 | 
						|
 | 
						|
      INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)
 | 
						|
      SELECT ID, C_NEV, '''' AS Oka, C_VEGZOSEVFOLYAM, @pIdoszakKezdete
 | 
						|
        ,IIF(C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND @pIdoszakVege > @VegzosUtolsoTanitasiNap, @VegzosUtolsoTanitasiNap + 1, @pIdoszakVege)
 | 
						|
      FROM T_OSZTALYCSOPORT_OSSZES ocs
 | 
						|
      WHERE ocs.C_TANEVID = @pTanevId
 | 
						|
        AND ocs.TOROLT = ''F''
 | 
						|
   '
 | 
						|
  SET @sql += N'
 | 
						|
    UPDATE ocs SET
 | 
						|
      ocs.IdoszakVege = NewVegeDatum
 | 
						|
    FROM #OsztalyCsoportok ocs
 | 
						|
      INNER JOIN (
 | 
						|
        SELECT MIN(tr.C_DATUM) + 1 AS NewVegeDatum, ocstr.C_OSZTALYCSOPORTID
 | 
						|
        FROM T_TANEVRENDJE_OSSZES tr
 | 
						|
          INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON  ocstr.C_TANEVRENDJEID = tr.ID
 | 
						|
        WHERE tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F''
 | 
						|
          AND tr.TOROLT = ''F''
 | 
						|
          AND tr.C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603)
 | 
						|
          AND tr.C_TANEVID = @pTanevId
 | 
						|
        GROUP BY ocstr.C_OSZTALYCSOPORTID
 | 
						|
      ) x ON x.C_OSZTALYCSOPORTID = ocs.Id
 | 
						|
    WHERE ocs.IsVegzos = ''T''
 | 
						|
  '
 | 
						|
  /* A naptári napok összegyűjtése tanév rendje alapján */
 | 
						|
  SET @sql += N'
 | 
						|
  INSERT INTO #NaptariNapok (
 | 
						|
     Datum
 | 
						|
    ,HetirendId
 | 
						|
    ,HetNapjaId
 | 
						|
    ,OrarendiNap
 | 
						|
    ,OsztalyCsoportId
 | 
						|
    ,HetSorszam
 | 
						|
    ,CsengetesiRendId
 | 
						|
    ,Nev
 | 
						|
    ,Oka
 | 
						|
    ,IsVegzos
 | 
						|
    ,IdoszakKezdete
 | 
						|
    ,IdoszakVege
 | 
						|
    ,IsEgyediNap
 | 
						|
  ) SELECT
 | 
						|
       nn.Datum
 | 
						|
      ,ISNULL(tr.HetirendId, nn.HetirendId) AS HetirendId
 | 
						|
      ,ISNULL(tr.HetNapjaId, nn.HetNapjaId) AS HetNapjaId
 | 
						|
      ,ISNULL(tr.OrarendiNap, nn.OrarendiNap) AS OrarendiNap
 | 
						|
      ,nn.OsztalyCsoportId
 | 
						|
      ,ISNULL(tr.HetSorszam, nn.HetSorszam) AS HetSorszam
 | 
						|
      ,ISNULL(tr.CsengetesiRendId, nn.CsengetesiRendId) AS CsengetesiRendId
 | 
						|
      ,ISNULL(tr.Nev, nn.Nev)
 | 
						|
      ,ISNULL(tr.Oka, nn.Oka)
 | 
						|
      ,ISNULL(tr.IsVegzos, nn.IsVegzos)
 | 
						|
      ,ISNULL(tr.IdoszakKezdete, nn.IdoszakKezdete)
 | 
						|
      ,ISNULL(tr.IdoszakVege, nn.IdoszakVege)
 | 
						|
      ,COALESCE(tr.IsEgyediNap, nn.IsEgyediNap, ''F'')
 | 
						|
    FROM (
 | 
						|
      SELECT
 | 
						|
         nn.C_NAPDATUMA AS Datum
 | 
						|
        ,nn.C_HETIREND AS HetirendId
 | 
						|
        ,nn.C_HETNAPJA AS HetNapjaId
 | 
						|
        ,nn.C_ORARENDINAP AS OrarendiNap
 | 
						|
        ,ocs.ID AS OsztalyCsoportId
 | 
						|
        ,nn.C_HETSORSZAMA AS HetSorszam
 | 
						|
        ,tr.C_CSENGETESIRENDID AS CsengetesiRendId
 | 
						|
        ,ocs.Nev
 | 
						|
        ,ocs.Oka
 | 
						|
        ,ocs.IsVegzos
 | 
						|
        ,ocs.IdoszakKezdete
 | 
						|
        ,ocs.IdoszakVege
 | 
						|
        ,tr.C_EGYEDINAP AS IsEgyediNap
 | 
						|
      FROM T_NAPTARINAP_OSSZES nn
 | 
						|
        INNER JOIN #OsztalyCsoportok ocs ON ocs.IdoszakKezdete <= nn.C_NAPDATUMA AND ocs.IdoszakVege > nn.C_NAPDATUMA
 | 
						|
        LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND nn.C_INTEZMENYID = tr.C_INTEZMENYID AND nn.C_TANEVID = tr.C_TANEVID AND tr.TOROLT = ''F'' AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''T''
 | 
						|
      WHERE nn.TOROLT = ''F''
 | 
						|
        AND nn.C_INTEZMENYID = @pIntezmenyId AND nn.C_TANEVID = @pTanevId
 | 
						|
    ) nn
 | 
						|
    LEFT JOIN (
 | 
						|
      SELECT
 | 
						|
         nn.C_NAPDATUMA AS Datum
 | 
						|
        ,tr.C_HETIREND AS HetirendId
 | 
						|
        ,tr.C_HETNAPJA AS HetNapjaId
 | 
						|
        ,tr.C_ORARENDINAP AS OrarendiNap
 | 
						|
        ,ocstr.C_OSZTALYCSOPORTID AS OsztalyCsoportId
 | 
						|
        ,nn.C_HETSORSZAMA AS HetSorszam
 | 
						|
        ,tr.C_CSENGETESIRENDID AS CsengetesiRendId
 | 
						|
        ,ocs.Nev
 | 
						|
        ,ocs.Oka
 | 
						|
        ,ocs.IsVegzos
 | 
						|
        ,ocs.IdoszakKezdete
 | 
						|
        ,ocs.IdoszakVege
 | 
						|
        ,tr.C_EGYEDINAP AS IsEgyediNap
 | 
						|
      FROM T_NAPTARINAP_OSSZES nn
 | 
						|
        INNER JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND nn.C_INTEZMENYID = tr.C_INTEZMENYID AND nn.C_TANEVID = tr.C_TANEVID AND tr.TOROLT = ''F'' AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F''
 | 
						|
        INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID
 | 
						|
        INNER JOIN #OsztalyCsoportok ocs ON ocs.Id = ocstr.C_OSZTALYCSOPORTID AND ocs.IdoszakKezdete <= nn.C_NAPDATUMA AND ocs.IdoszakVege > nn.C_NAPDATUMA
 | 
						|
      WHERE nn.TOROLT = ''F''
 | 
						|
        AND nn.C_INTEZMENYID = @pIntezmenyId AND nn.C_TANEVID = @pTanevId
 | 
						|
        AND nn.C_NAPDATUMA >= @pIdoszakKezdete AND nn.C_NAPDATUMA < ocs.IdoszakVege
 | 
						|
    ) tr ON nn.Datum = tr.datum AND nn.OsztalyCsoportId = tr.OsztalyCsoportId
 | 
						|
    WHERE ISNULL(tr.OrarendiNap, nn.OrarendiNap) = ''T''
 | 
						|
 --   SELECT * FROM #NaptariNapok
 | 
						|
  '
 | 
						|
 | 
						|
  SET @sql += N'
 | 
						|
    SELECT  DISTINCT
 | 
						|
       oo.ID AS Id
 | 
						|
      ,oo.TOROLT
 | 
						|
      ,oo.ID AS ORARENDIID
 | 
						|
      ,nn.Datum AS Datum
 | 
						|
      ,oo.C_BONTOTT AS Bontott
 | 
						|
      ,oo.C_HETIREND AS Hetirend
 | 
						|
      ,oo.C_HETNAPJA AS HetNapja
 | 
						|
      ,nn.HetSorszam AS HetSorszam
 | 
						|
      ,oo.C_ORAERVENYESSEGKEZDETE AS ErvenyessegKezdete
 | 
						|
      ,oo.C_ORAERVENYESSEGVEGE AS ErvenyessegVege
 | 
						|
      ,nn.Datum + oo.C_ORAKEZDETE AS OraKezdete
 | 
						|
      ,nn.Datum + oo.C_ORAVEGE AS OraVege
 | 
						|
      ,oo.C_ORASZAM AS Oraszam
 | 
						|
      ,tt.C_NEV AS TargyNev
 | 
						|
      ,tt.C_NEV AS TargyNevForMobile
 | 
						|
      ,tt.C_TARGYKATEGORIA AS TargykategoriaID
 | 
						|
      ,''F'' AS Megtartott
 | 
						|
      ,csro.ID AS CsengetesiRendOraID
 | 
						|
      ,csro.C_CSENGETESIRENDID AS CsengetesiRendID
 | 
						|
      ,MAX(oo.C_ORASZAM) OVER() AS MaxNapiOraszam
 | 
						|
      ,nn.Nev AS OsztalyNev
 | 
						|
      ,nn.OsztalyCsoportId AS TanevRendOsztalyCsoportId
 | 
						|
      ,nn.OKA AS MegjelenesOka
 | 
						|
      ,tanar.C_NYOMTATASINEV AS TanarNev
 | 
						|
      ,terem.C_NEV AS TeremNev
 | 
						|
      ,terem.ID AS TeremId
 | 
						|
      ,''OrarendiOra'' AS OraTipus
 | 
						|
      ,''F'' AS Hianyzas
 | 
						|
      ,''F'' AS Keses
 | 
						|
      ,''F'' AS Ures
 | 
						|
      ,hisz.C_HELYETTESTANAROKID AS HelyettesitoTanarID
 | 
						|
      ,helyettes.C_NYOMTATASINEV AS HelyettesitoTanarNev
 | 
						|
      ,hisz.Id AS HelyettesitesId
 | 
						|
      ,tanar.ID AS TanarID
 | 
						|
      ,NULL AS AdminAltalKiirt
 | 
						|
      ,oo.C_ORARENDIORAGROUPID AS GroupId
 | 
						|
      ,NULL AS Tema
 | 
						|
      ,oo.C_TANTARGYID AS TantargyId
 | 
						|
      ,oo.C_OSZTALYCSOPORTID AS OsztCsopId
 | 
						|
      ,oo.C_EGYEDINAP as IsEgyediNap
 | 
						|
      ,ISNULL(terem.C_TOBBORATLEHETTARTANI,''F'') as TeremTobbOratLehetTartani
 | 
						|
      ,oo.C_KOZPONTIORAGROUPID as KozpontiOraGroupId
 | 
						|
	  ,oo.C_KOZPONTILAGTOROLTORAGROUPID as KozpontilagToroltOraGroupId
 | 
						|
    FROM T_ORARENDIORA_OSSZES oo
 | 
						|
      INNER JOIN #OsztalyCsoportok ocs ON ocs.ID = oo.C_OSZTALYCSOPORTID
 | 
						|
      INNER JOIN #NaptariNapok nn ON  nn.HetnapjaId = oo.C_HETNAPJA
 | 
						|
        AND ocs.ID = nn.OsztalyCsoportId
 | 
						|
        AND nn.Datum >= oo.C_ORAERVENYESSEGKEZDETE
 | 
						|
        AND ((nn.Datum < oo.C_ORAERVENYESSEGVEGE) OR (oo.C_ORAERVENYESSEGKEZDETE = oo.C_ORAERVENYESSEGVEGE AND nn.Datum = oo.C_ORAERVENYESSEGKEZDETE))
 | 
						|
        AND (oo.C_HETIREND = 1554 OR nn.HetirendId = oo.C_HETIREND)
 | 
						|
        AND C_TANEVID = @pTanevId
 | 
						|
        AND oo.C_EGYEDINAP = nn.IsEgyediNap
 | 
						|
      INNER JOIN T_TANTARGY_OSSZES tt ON tt.ID = oo.C_TANTARGYID AND tt.TOROLT = ''F''
 | 
						|
      INNER JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = oo.C_TANARID AND tanar.TOROLT = ''F''
 | 
						|
      LEFT  JOIN T_TEREM_OSSZES terem ON terem.id = oo.C_TEREMID AND terem.TOROLT = ''F''
 | 
						|
      LEFT  JOIN T_HELYETTESITESIIDOSZAK_OSSZES hisz ON oo.ID = hisz.C_HELYETTESITETTORARENDID AND hisz.C_HELYETTESITESNAPJA = nn.Datum AND hisz.TOROLT = ''F''
 | 
						|
      LEFT  JOIN T_FELHASZNALO_OSSZES helyettes ON hisz.C_HELYETTESTANAROKID = helyettes.ID AND helyettes.TOROLT = ''F''
 | 
						|
      LEFT JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_CSENGETESIRENDID = ISNULL(nn.CsengetesiRendId, oo.C_CSENGETESIRENDID) AND csro.C_ORASZAM = oo.C_ORASZAM AND csro.TOROLT = ''F''
 | 
						|
    WHERE oo.C_TANEVID = @pTanevId'
 | 
						|
  
 | 
						|
  
 | 
						|
  EXEC sp_executesql @sql, N'
 | 
						|
     @pIntezmenyId int
 | 
						|
    ,@pTanevId int
 | 
						|
    ,@pIdoszakKezdete datetime
 | 
						|
    ,@pIdoszakVege datetime'
 | 
						|
    ,@pIntezmenyId = @pIntezmenyId
 | 
						|
    ,@pTanevId = @pTanevId
 | 
						|
    ,@pIdoszakKezdete = @pIdoszakKezdete
 | 
						|
    ,@pIdoszakVege = @pIdoszakVege
 | 
						|
END
 | 
						|
GO
 | 
						|
 | 
						|
EXEC dev.uspCreateSchemaSPFN 'uspGetKozpontiOrakOrarend' |