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 ,@sql nvarchar(max) =N'' SET @sql +=N' SET @isIskolaiErdekuSzamit = dbo.fnGetRendszerbeallitasEnumBool(1683, @pIntezmenyId, @pTanevid) 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'' CREATE TABLE #SubResult ( TanuloId int ,TantargyId int ,Mulasztas int ,MegtartottOra int ,HatralevoOra int ,PRIMARY KEY CLUSTERED (TanuloId, TantargyId) )' SET @sql += N' INSERT INTO #SubResult ( 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 ,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) 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 #SubResult 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 SELECT TanuloId ,TantargyId ,Mulasztas ,MegtartottOra ,HatralevoOra FROM #SubResult' 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