182 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
DROP PROCEDURE IF EXISTS dbo.uspGetOsztalycsoportTantargyiMulasztasai
 | 
						|
GO
 | 
						|
 | 
						|
CREATE PROCEDURE dbo.uspGetOsztalycsoportTantargyiMulasztasai 
 | 
						|
   @pOsztalyId int
 | 
						|
  ,@pTantargyId int
 | 
						|
  ,@pTanevid int
 | 
						|
  ,@pIntezmenyId int
 | 
						|
  ,@pCsakMegtartott bit /*0 - nem, 1 - igen */
 | 
						|
AS
 | 
						|
BEGIN
 | 
						|
  SET NOCOUNT ON;
 | 
						|
  
 | 
						|
  DECLARE 
 | 
						|
     @oraPerc int
 | 
						|
    ,@isIskolaiErdekuSzamit bit = dbo.fnGetRendszerbeallitasEnumBool(1683, @pIntezmenyId, @pTanevid)
 | 
						|
    ,@sql nvarchar(max) =N''
 | 
						|
  
 | 
						|
  SET @sql +=N'
 | 
						|
  
 | 
						|
  SET  @oraPerc = (
 | 
						|
    SELECT ISNULL(csp.C_ORAPERC, 45) 
 | 
						|
    FROM T_OSZTALYCSOPORT ocs
 | 
						|
      LEFT JOIN T_CSOPORT cs on cs.ID = ocs.ID AND cs.TOROLT = ''F''
 | 
						|
      LEFT JOIN T_CSOPORTTIPUS csp ON csp.ID = cs.C_TIPUSA AND cs.TOROLT = ''F''
 | 
						|
    WHERE ocs.ID = @pOsztalyId AND ocs.TOROLT = ''F'')
 | 
						|
 | 
						|
  CREATE TABLE #OsztalyTanuloi (
 | 
						|
     TanuloId int 
 | 
						|
    ,Belepes datetime
 | 
						|
    ,Kilepes datetime
 | 
						|
    ,PRIMARY KEY CLUSTERED (TanuloId)
 | 
						|
  )
 | 
						|
 | 
						|
  INSERT INTO #OsztalyTanuloi (TanuloId)
 | 
						|
  SELECT DISTINCT C_TANULOID 
 | 
						|
  FROM T_TANULOCSOPORT_OSSZES 
 | 
						|
  WHERE C_OSZTALYCSOPORTID = @pOsztalyId
 | 
						|
    AND C_TANEVID = @pTanevId
 | 
						|
    AND TOROLT = ''F''
 | 
						|
'
 | 
						|
 | 
						|
  SET @sql += N' 
 | 
						|
  INSERT INTO #Result (     
 | 
						|
     TanuloId
 | 
						|
    ,TantargyId
 | 
						|
    ,Mulasztas
 | 
						|
    ,MegtartottOra
 | 
						|
    ,HatralevoOra
 | 
						|
  ) SELECT 
 | 
						|
     ot.TanuloId
 | 
						|
    ,tn.C_TANTARGYID AS TantargyId
 | 
						|
    ,SUM(IIF(C_TIPUS = 1500, 1, 0)) + (SUM(IIF(C_TIPUS = 1499, C_KESESPERCBEN, 0)) / @oraPerc) AS Mulasztas
 | 
						|
    ,COUNT(DISTINCT tn.ID) AS MegtartottOra
 | 
						|
    ,IIF(@pCsakMegtartott = 1, NULL, 0) AS HatralevoOra
 | 
						|
  FROM T_TANULOCSOPORT_OSSZES tcs
 | 
						|
    INNER JOIN #OsztalyTanuloi ot ON tcs.C_TANULOID = ot.TanuloId
 | 
						|
    INNER JOIN T_TANITASIORA_OSSZES tn ON tn.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID 
 | 
						|
      AND tn.C_BEJEGYZESIDEJE >= tcs.C_BELEPESDATUM 
 | 
						|
      AND tn.C_BEJEGYZESIDEJE < ISNULL(tcs.C_KILEPESDATUM, ''21000101'')
 | 
						|
      AND tn.C_MEGTARTOTT = ''T'' AND tn.TOROLT = ''F'' 
 | 
						|
    LEFT JOIN T_TANULOMULASZTAS_OSSZES tm ON tm.C_TANITASIORAKID = tn.ID 
 | 
						|
      AND tm.C_ORATANULOIID = ot.TanuloId 
 | 
						|
      AND tm.C_TIPUS BETWEEN 1499 AND 1500
 | 
						|
      AND tm.TOROLT = ''F''
 | 
						|
      ' + IIF(@isIskolaiErdekuSzamit = 0, 'AND ISNULL(tm.C_IGAZOLASTIPUSA,-1) <> 1533', '') + '
 | 
						|
  WHERE tcs.TOROLT = ''F''
 | 
						|
    ' + IIF(@pTantargyId IS NULL, '', 'AND tn.C_TANTARGYID = @pTantargyId') + '
 | 
						|
  GROUP BY ot.TanuloId, tn.C_TANTARGYID
 | 
						|
  '
 | 
						|
  
 | 
						|
  SET @sql +=N'
 | 
						|
  IF @pCsakMegtartott = 0 BEGIN
 | 
						|
    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 NULL
 | 
						|
	  ,KozpontilagToroltOraGroupId uniqueidentifier NULL
 | 
						|
      ,INDEX IX_TanevRendOsztalyCsoportId CLUSTERED (TanevRendOsztalyCsoportId)
 | 
						|
    )
 | 
						|
    
 | 
						|
    DECLARE @idoszakKezdete datetime = GETDATE()
 | 
						|
    DECLARE @idoszakVege datetime
 | 
						|
    
 | 
						|
    SELECT @idoszakVege = C_NAPDATUMA 
 | 
						|
    FROM T_NAPTARINAP
 | 
						|
    WHERE C_NAPTIPUSA = 1395 
 | 
						|
      AND C_TANEVID = @pTanevId
 | 
						|
 | 
						|
    IF @idoszakVege IS NULL SET @idoszakVege = (
 | 
						|
      SELECT C_UTOLSOTANITASINAP 
 | 
						|
      FROM T_TANEV
 | 
						|
      WHERE ID = @pTanevid
 | 
						|
      AND TOROLT = ''F'')
 | 
						|
    
 | 
						|
    INSERT INTO #OrarendTable (
 | 
						|
      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 = @pIntezmenyId
 | 
						|
      ,@pTanevId = @pTanevId
 | 
						|
      ,@pIdoszakKezdete = @idoszakKezdete
 | 
						|
      ,@pIdoszakVege = @idoszakVege
 | 
						|
      ,@pTanarId = NULL
 | 
						|
      ,@pIsHelyettesitesNelkul  = 0
 | 
						|
      ,@pOsztalyCsoportId  =  @pOsztalyId
 | 
						|
      ,@pTanuloId = NULL
 | 
						|
      ,@pTantargyId  = @pTantargyId
 | 
						|
      ,@pTeremId = NULL
 | 
						|
      ,@pCsakOrarendiOrak  = 0
 | 
						|
      ,@pIsNapirend = 0      
 | 
						|
  
 | 
						|
    UPDATE r
 | 
						|
    SET
 | 
						|
      r.HatralevoOra = ISNULL(o.HatralevoOra, 0)
 | 
						|
    FROM #Result r
 | 
						|
    LEFT JOIN (
 | 
						|
      SELECT
 | 
						|
        ot.TanuloId, COUNT(1) AS HatralevoOra
 | 
						|
      FROM T_TANULOCSOPORT tcs 
 | 
						|
        INNER JOIN #OrarendTable oo ON tcs.C_OSZTALYCSOPORTID = oo.TanevRendOsztalyCsoportId
 | 
						|
        INNER JOIN #OsztalyTanuloi ot ON tcs.C_TANULOID = ot.TanuloId AND oo.Datum >= tcs.C_BELEPESDATUM AND oo.Datum < ISNULL(tcs.C_KILEPESDATUM, ''21000101'') 
 | 
						|
      GROUP BY ot.TanuloId
 | 
						|
    ) o ON o.TanuloId = r.TanuloId
 | 
						|
  END'
 | 
						|
 | 
						|
  EXEC sys.sp_executesql @sql, N'
 | 
						|
     @pTantargyId int
 | 
						|
    ,@oraPerc int
 | 
						|
    ,@pCsakMegtartott bit
 | 
						|
    ,@pTanevId int
 | 
						|
    ,@pIntezmenyId int
 | 
						|
    ,@isIskolaiErdekuSzamit int
 | 
						|
    ,@pOsztalyId int'
 | 
						|
    ,@pTantargyId = @pTantargyId
 | 
						|
    ,@oraPerc = @oraPerc
 | 
						|
    ,@pCsakMegtartott = @pCsakMegtartott
 | 
						|
    ,@pTanevid = @pTanevid
 | 
						|
    ,@pIntezmenyId = @pIntezmenyId
 | 
						|
    ,@isIskolaiErdekuSzamit = @isIskolaiErdekuSzamit
 | 
						|
    ,@pOsztalyId = @pOsztalyId
 | 
						|
END
 | 
						|
GO |