using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Kreta.Core; using Kreta.Core.FeatureToggle; using Kreta.Core.Logic; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.DataAccessObjects.Mulasztas; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Framework; using Kreta.Framework.Util; using SDA.DataProvider; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class MulasztasDAL : DataAccessBase, IMulasztasDal { public MulasztasDAL(DalHandler handler) : base(handler) { } public MulasztasDAL(DalHandler handler, GridParameters parameters) : base(handler, parameters) { } /// INFO @DevKornel: Mobil használja // TODO Tojcsi: Refaktorálni az egészet sp-be + fnGetTanoraiCeluCsoportTipusok temp táblába. (KRETA2-1318) public DataSet GetHallgatoMulasztasaiDataSet(MulasztasKeresesePCO pco) { StringBuilder sqlQuery = new StringBuilder( @" SELECT DISTINCT tanuloMulasztas.ID ID, tanuloMulasztas.CREATED RogzitesDatum, tanuloMulasztas.C_IGAZOLT Igazolt, tanuloMulasztas.C_TIPUS MulasztasTipus, tanuloMulasztas.C_KESESPERCBEN Perc, tanuloMulasztas.C_IGAZOLASTIPUSA IgazolasTipus, tanuloMulasztas.C_MEGJEGYZES Megjegyzes, tanitasiOra.ID TanitasiOraId, tanitasiOra.C_DATUM MulasztasDatum, tanitasiOra.C_ORASZAM Oraszam, tanitasiOra.C_TEMA Tema, IIF(tanitasiOra.C_CSENGETESIRENDID IS NULL, 'T', 'F') AS IsTanorankivuliFoglalkozas, tanitasiOra.C_HELYETTESITESTIPUSA HelyettesitesTipusa, tanitasiOra.C_ORAKEZDETE TanitasiOraKezdete, tanitasiOra.C_ORAVEGE TanitasiOraVege, tanitasiOra.C_OSZTALYCSOPORTID OsztalyCsoportId, tanar.ID TanarId, tanar.C_NYOMTATASINEV TanarNeve, helyettesitoTanar.ID HelyettesitoTanarId, helyettesitoTanar.C_NYOMTATASINEV HelyettesitoTanarNeve, tantargy.ID TantargyId, tantargy.C_NEV Targy, tantargy.C_TARGYKATEGORIA TantargyKategoria, IIF(Osztaly.ID IS NOT NULL OR Csoport.ID IS NOT NULL, 'T', 'F') TanoraiCeluMulasztas FROM T_TANULOMULASZTAS tanuloMulasztas INNER JOIN T_TANITASIORA tanitasiOra on tanuloMulasztas.C_TANITASIORAKID = tanitasiOra.ID INNER JOIN T_TANTARGY tantargy on tantargy.ID = tanitasiOra.C_TANTARGYID INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_OSZTALYCSOPORTID = tanitasiOra.C_OSZTALYCSOPORTID AND tanuloMulasztas.C_ORATANULOIID = tcs.C_TANULOID AND tcs.TOROLT = 'F' INNER JOIN T_OSZTALYCSOPORT ocs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND (ocs.C_FELADATKATEGORIAID = :pFeladatKategoriaId OR :pFeladatKategoriaId IS NULL) INNER JOIN T_FELHASZNALO tanar ON tanar.ID = tanitasiOra.C_TANARID LEFT JOIN T_FELHASZNALO helyettesitoTanar ON helyettesitoTanar.ID = tanitasiOra.C_HELYETTESITOTANARID LEFT JOIN (SELECT osztaly.ID FROM T_OSZTALY osztaly WHERE osztaly.TOROLT = 'F' ) Osztaly ON Osztaly.ID = ocs.ID LEFT JOIN (SELECT Csoport.ID ,Csoport.C_OSZTALYBONTASID ,Csoport.C_TIPUSA FROM T_CSOPORT Csoport INNER JOIN T_CSOPORTTIPUS cst ON cst.ID = Csoport.C_TIPUSA AND cst.C_ALTANEVID = Csoport.C_ALTANEVID AND cst.TOROLT = 'F' WHERE Csoport.TOROLT = 'F' AND cst.C_ISTANORAICELU = 'T' ) Csoport ON Csoport.ID = ocs.ID WHERE tanuloMulasztas.TOROLT = 'F' AND tanuloMulasztas.C_TANEVID = :pAktualisTanevId AND tcs.C_BELEPESDATUM <= tanitasiOra.C_DATUM AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tanitasiOra.C_DATUM) AND tanuloMulasztas.C_TIPUS NOT IN (:pHTipusJelenlet, :pHTipusUres) AND tanuloMulasztas.C_ORATANULOIID = :pTanuloID"); var parameterList = new List { new CommandParameter("pHTipusJelenlet", (int) MulasztasTipusEnum.jelenlet), new CommandParameter("pHTipusUres", (int) MulasztasTipusEnum.ures), new CommandParameter("pTanuloID", pco.TanuloId), new CommandParameter("pAktualisTanevId", pco.TanevId) }; if (pco.Id.HasValue) { sqlQuery.Append(" AND tanuloMulasztas.ID = :pId"); parameterList.Add(new CommandParameter("pId", pco.Id)); } if (pco.Tol.HasValue) { sqlQuery.Append(" AND tanitasiOra.C_DATUM >= cast(:pTol as date)"); parameterList.Add(new CommandParameter("pTol", pco.Tol.Value)); } if (pco.Ig.HasValue) { sqlQuery.Append(" AND tanitasiOra.C_DATUM <= cast(:pIg as date)"); parameterList.Add(new CommandParameter("pIg", pco.Ig.Value)); } if (!string.IsNullOrWhiteSpace(pco.TanoraiCeluMulasztas)) { sqlQuery.Append(" AND IIF(Osztaly.ID IS NOT NULL OR Csoport.ID IS NOT NULL, 'T', 'F') = IIF(:pTanoraiCeluMulasztas = '1', 'T', 'F')"); parameterList.Add(new CommandParameter("pTanoraiCeluMulasztas", pco.TanoraiCeluMulasztas)); } if (pco.FeladatKategoriaId.IsEntityId()) { parameterList.Add(new CommandParameter("pFeladatKategoriaId", pco.FeladatKategoriaId.Value)); } else { parameterList.Add(new CommandParameter("pFeladatKategoriaId", DBNull.Value)); } if (pco.Oraszam.HasValue) { sqlQuery.Append(" AND tanitasiOra.C_ORASZAM = :pOraszam"); parameterList.Add(new CommandParameter("pOraszam", pco.Oraszam.Value)); } if (pco.TantargyId.HasValue) { sqlQuery.Append(" AND tantargy.ID = :pTantargyId"); parameterList.Add(new CommandParameter("pTantargyId", pco.TantargyId.Value)); } if (!string.IsNullOrWhiteSpace(pco.Tema)) { sqlQuery.Append(" AND tanitasiOra.C_TEMA LIKE '%' + :pTema + '%'"); parameterList.Add(new CommandParameter("pTema", pco.Tema)); } if (pco.MulTip.HasValue) { sqlQuery.Append(" AND tanuloMulasztas.C_TIPUS = :pMulasztasTipus"); parameterList.Add(new CommandParameter("pMulasztasTipus", pco.MulTip.Value)); } if (pco.Igazolt.HasValue) { sqlQuery.Append(" AND tanuloMulasztas.C_IGAZOLT = IIF(:pIgazolt = '1', 'T', 'F')"); parameterList.Add(new CommandParameter("pIgazolt", pco.Igazolt.Value)); } if (pco.IgazolasTipus.HasValue) { sqlQuery.Append(" AND tanuloMulasztas.C_IGAZOLASTIPUSA = :pIgazolasTipus"); parameterList.Add(new CommandParameter("pIgazolasTipus", pco.IgazolasTipus.Value)); } if (pco.RogzitesKezdete.HasValue) { sqlQuery.Append(" AND tanuloMulasztas.CREATED >= cast(:pRogzitesKezdete as date)"); parameterList.Add(new CommandParameter("pRogzitesKezdete", pco.RogzitesKezdete.Value)); } if (pco.RogzitesVege.HasValue) { sqlQuery.Append(" AND tanuloMulasztas.CREATED <= cast(:pRogzitesVege as date)"); parameterList.Add(new CommandParameter("pRogzitesVege", pco.RogzitesVege.Value)); } var dataSet = GetData(sqlQuery.ToString(), parameterList, "MulasztasTipus,IgazolasTipus,TantargyKategoria", booleanColumns: "Igazolt,TanoraiCeluMulasztas"); return dataSet; } public DataSet GetMulasztasDataSet(MulasztasKeresesePCO pco, bool igazoltEsIgazolatlan = false, bool fromSearchPanel = false, int? csoportVezetoId = null) { using (var sdaCommand = new SDACommand()) { sdaCommand.Connection = UserContext.Instance.SDAConnection; sdaCommand.Transaction = UserContext.Instance.SDATransaction; sdaCommand.CommandType = CommandType.StoredProcedure; sdaCommand.CommandText = "uspGetMulasztasData"; sdaCommand.Parameters.Add("pTanevId", pco.TanevId); if (csoportVezetoId.IsEntityId()) { sdaCommand.Parameters.Add("pCsoportVezetoId", SDADBType.Int).Value = csoportVezetoId.Value; } sdaCommand.Parameters.Add("pIsNemJelenlevoTanulokMegjelenitese", pco.IsNemJelenlevoTanulokMegjelenitese); if (pco.Tol.HasValue) { sdaCommand.Parameters.Add("pTol", SDADBType.DateTime).Value = pco.Tol.Value; } if (pco.Ig.HasValue) { sdaCommand.Parameters.Add("pIg", SDADBType.DateTime).Value = pco.Ig.Value; } if (pco.TanuloId.IsEntityId()) { sdaCommand.Parameters.Add("pTanuloId", SDADBType.Int).Value = pco.TanuloId.Value; } if (!string.IsNullOrWhiteSpace(pco.TanuloNev)) { sdaCommand.Parameters.Add("pTanuloNev", SDADBType.String).Value = pco.TanuloNev; } if (pco.OsztCsop.IsEntityId()) { sdaCommand.Parameters.Add("pOsztcsop", SDADBType.Int).Value = pco.OsztCsop.Value; } sdaCommand.Parameters.Add("pIsKellKapcsolodoCsoportok", pco.IsKellKapcsolodoCsoportok); if (pco.CsopTip.IsEntityId()) { sdaCommand.Parameters.Add("pCsoptip", SDADBType.Int).Value = pco.CsopTip.Value; } if (pco.Fogl.IsEntityId()) { sdaCommand.Parameters.Add("pFogl", SDADBType.Int).Value = pco.Fogl.Value; } if (pco.Targy.IsEntityId()) { sdaCommand.Parameters.Add("pTargy", SDADBType.Int).Value = pco.Targy.Value; } if (pco.OraId.IsEntityId()) { sdaCommand.Parameters.Add("pOraId", SDADBType.Int).Value = pco.OraId.Value; } if (pco.MulTip.IsEntityId()) { sdaCommand.Parameters.Add("pMulTip", SDADBType.Int).Value = pco.MulTip.Value; } if (pco.KesIdo.IsNotNullAndPositive()) { sdaCommand.Parameters.Add("pKesIdo", SDADBType.Int).Value = pco.KesIdo.Value; } if (!igazoltEsIgazolatlan) { if (fromSearchPanel && pco.IgazoltsagAllapota.HasValue) { sdaCommand.Parameters.Add("pIgazoltsagAllapota", SDADBType.Int).Value = pco.IgazoltsagAllapota.Value; } } if (pco.IgazolasTipus.IsEntityId()) { sdaCommand.Parameters.Add("pIgazolasTipus", SDADBType.Int).Value = pco.IgazolasTipus.Value; } sdaCommand.Parameters.Add("pIsNemBesoroltTanulokMulasztasainakMegjelenitese", pco.IsNemBesoroltTanulokMulasztasainakMegjelenitese); if (pco.FeladatKategoriaId.IsEntityId()) { sdaCommand.Parameters.Add("pFeladatKategoriaId", SDADBType.Int).Value = pco.FeladatKategoriaId.Value; } if (pco.FeladatEllatasiHelyId.IsEntityId()) { sdaCommand.Parameters.Add("pFeladatEllatasiHelyId", SDADBType.Int).Value = pco.FeladatEllatasiHelyId.Value; } if (pco.IsOnlineOra.HasValue) { sdaCommand.Parameters.Add("pIsOnlineOra", pco.IsOnlineOra.ToBool()); } if (pco.TanitasiOraId.IsEntityId()) { sdaCommand.Parameters.Add("pTanitasiOraId", SDADBType.Int).Value = pco.TanitasiOraId.Value; } if (pco.SzervezetTipusId.IsEntityId()) { sdaCommand.Parameters.Add("pSzervezetTipusId", SDADBType.Int).Value = pco.SzervezetTipusId; } if (pco.SzervezetIdList?.Any() ?? false) { var pSzervezetIdListString = string.Join(",", pco.SzervezetIdList.Select(x => x.ToString())); sdaCommand.Parameters.Add("pSzervezetIdListString", SDADBType.String).Value = pSzervezetIdListString; } if (!string.IsNullOrWhiteSpace(pco.SzervezetNev)) { sdaCommand.Parameters.Add("pSzervezetNev", SDADBType.String).Value = pco.SzervezetNev.ToLowerInvariant(); } if (!string.IsNullOrWhiteSpace(pco.SzervezetAzonosito)) { sdaCommand.Parameters.Add("pSzervezetAzonosito", SDADBType.String).Value = pco.SzervezetAzonosito.ToLowerInvariant(); } var result = new DataSet(); using (var sdaDataAdapter = new SDADataAdapter()) { sdaDataAdapter.SelectCommand = sdaCommand; sdaDataAdapter.Fill(result); } SetDNAME(result.Tables[0], "MulTip,IgazolasTipus"); SetBoolFields(result.Tables[0], "Igazolt,IsOnlineOra"); return result; } } public void BulkSaveMulastas(string json, int modifyId, DateTime modifyDate, int intezmenyId, int tanevId) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspUpdateTanuloMulasztasListNaplozas"; command.Parameters.Add("pTanevid", tanevId); command.Parameters.Add("pModifier", modifyId); command.Parameters.Add("pIntezmenyid", intezmenyId); command.Parameters.Add("pModifydate", modifyDate); command.Parameters.Add("pJson", json); command.ExecuteScalar(); } } public DataSet GetMulasztasokDatumNezetDetailGrid(DateTime mulasztasDatuma, int osztalyCsoportId, bool isCsoportVezeto) { List parameters = new List { new CommandParameter("pMulasztasTipusJelenlet", (int) MulasztasTipusEnum.jelenlet), new CommandParameter("pMulasztasTipusUres", (int) MulasztasTipusEnum.ures), new CommandParameter("pDatum", mulasztasDatuma.Date), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId) }; var csoportSzures = isCsoportVezeto ? " AND tn.C_OSZTALYCSOPORTID = :pOsztalyCsoportId" : string.Empty; string commandText = $@" SELECT mu.ID AS ID ,mu.C_ORATANULOIID AS TanuloId ,fh.C_NYOMTATASINEV AS TanuloNev ,fh.C_ANYJANEVE AS AnyjaNeve ,fh.C_SZULETESIDATUM AS SzuletesiIdo ,tn.C_ORASZAM AS Oraszam ,tn.C_DATUM AS Datum ,tn.C_ORAKEZDETE AS Tol ,tn.C_ORAVEGE AS Ig ,tn.C_OSZTALYCSOPORTID AS OsztCsop ,ocs.C_NEV AS OsztCsopNev ,tn.C_FOGLALKOZASID AS Fogl ,tn.C_TANTARGYID AS Targy ,tgy.C_NEV AS TargyNev ,mu.C_TIPUS AS MulTip ,mu.C_KESESPERCBEN AS KesesPerc ,mu.C_IGAZOLT AS Igazolt ,mu.C_IGAZOLASTIPUSA AS IgazolasTipus ,mu.C_MEGJEGYZES AS Megjegyzes ,tn.ID AS TanitasiOra ,tn.C_TEMA AS Tema FROM T_TANULOMULASZTAS mu INNER JOIN T_TANITASIORA tn ON tn.ID = mu.C_TANITASIORAKID INNER JOIN T_FELHASZNALO fh ON fh.ID = mu.C_ORATANULOIID INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tn.C_OSZTALYCSOPORTID INNER JOIN T_TANTARGY tgy ON tgy.ID = tn.C_TANTARGYID INNER JOIN T_TANULOCSOPORT tcs ON mu.C_ORATANULOIID = tcs.C_TANULOID INNER JOIN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(:pOsztalyCsoportId)) f on f.ID = tn.C_OSZTALYCSOPORTID WHERE mu.TOROLT = 'F' AND mu.C_IGAZOLT IS NULL AND mu.C_TIPUS != :pMulasztasTipusJelenlet AND mu.C_TIPUS != :pMulasztasTipusUres AND tn.C_DATUM = :pDatum AND tcs.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND tcs.C_BELEPESDATUM <= :pDatum AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > :pDatum) {csoportSzures}"; return GetData(commandText, parameters, "MulTip,IgazolasTipus", "Igazolt"); } public DataSet GetTanuloMulasztasai(int tanuloId) { string CommandText = @"SELECT T_TANTARGY.ID ID, T_TANTARGY.C_NEV Tantargy, --Rendszer paraméter fogja majd állítani, hogy melyik kell, de még nem készült el maga a paraméter. T_TANULOTARGYMULASZTASSTATISZT.C_EDDIGIORASZAZALEK Szazalek, --T_TANULOTARGYMULASZTASSTATISZT.C_OSSZESORASZAZALEK Szazalek, TABLEOSSZES.OSSZES Osszes, T_TANULOTARGYMULASZTASSTATISZT.C_MULASZTASDB Mulasztas FROM T_TANULOTARGYMULASZTASSTATISZT INNER JOIN T_TANULO on T_TANULO.ID = T_TANULOTARGYMULASZTASSTATISZT.C_TANULOMULASZTASSTATISZTIKAII INNER JOIN T_FOGLALKOZAS on T_FOGLALKOZAS.id = T_TANULOTARGYMULASZTASSTATISZT.C_TARGYMULASZTASSTATISZTIKAIID INNER JOIN T_TANTARGY on T_TANTARGY.ID = T_FOGLALKOZAS.C_TANTARGYID INNER JOIN ( select T_TANITASIORA.C_TANTARGYID TargyID, count(1) Osszes from T_TANITASIORA group by T_TANITASIORA.C_TANTARGYID ) as TABLEOSSZES on TABLEOSSZES.TargyID = T_TANTARGY.ID WHERE T_TANULO.ID = :pTanuloID"; var param = new List { new CommandParameter("pTanuloID", tanuloId) }; DataSet ds = GetData(CommandText, param); return ds; } public DataSet GetOsztalyCsoportTanuloiMulasztasEsFelmentes(int osztcsopId, int tanoraId, int targyId, int tanarId, DateTime date, int csakMegtartott, DateTime tanevElsoTanitasiNapja, DateTime tanevUtolsoTanitasiNapja, int tanevId, int intezmenyId, MulasztasTipusEnum alapertelmezettMulasztasTipus) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "sp_GetNaplozasMulasztasList"; command.Parameters.Add("pDate", date); command.Parameters.Add("pOraId", tanoraId); command.Parameters.Add("pTargyId", targyId); command.Parameters.Add("pOsztalyCsoportId", osztcsopId); command.Parameters.Add("pCsakMegtartott", csakMegtartott); command.Parameters.Add("pTanevElsoTanitasiNapja", tanevElsoTanitasiNapja); command.Parameters.Add("pTanevUtolsoTanitasiNapja", tanevUtolsoTanitasiNapja); command.Parameters.Add("pTanevid", tanevId); command.Parameters.Add("pIntezmenyId", intezmenyId); command.Parameters.Add("pTanarId", tanarId); command.Parameters.Add("pAlapertelmezettMulasztasTipus", (int)alapertelmezettMulasztasTipus); var dts = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(dts); } SetDNAME(dts.Tables[0], "MulasztasTipus,AmiFotargyId,AmiTagozatId,AmiTantargyKotelezosegId,EvfolyamId"); SetBoolFields(dts.Tables[0], "ErtkelesMentesseg,OraMentesseg,SzovegesenErtekelheto,IsMagantanulo,HaziFeladatHiany,FelszerelesHiany,Felmentes,TanoraiDicseret,Igazolt"); DataTable dt = SortingAndPaging(dts.Tables[0], GridParameters); return dt.AsDataSet(); } } public DataSet GetTanuloIgazolatlanMulasztasIdoszakban(int tanuloId, DateTime kezdete, DateTime vege) { List parameters = new List { new CommandParameter("pTanuloID", tanuloId), new CommandParameter("pKezdete", kezdete), new CommandParameter("pVege", vege) }; string commandText = @"select T_TANULOMULASZTAS.ID, T_TANITASIORA.C_DATUM from T_TANULOMULASZTAS INNER JOIN T_TANITASIORA ON T_TANULOMULASZTAS.C_TANITASIORAKID = T_TANITASIORA.ID where T_TANULOMULASZTAS.TOROLT = 'F' AND T_TANITASIORA.TOROLT = 'F' AND ( (T_TANULOMULASZTAS.C_IGAZOLT = 'F') OR (T_TANULOMULASZTAS.C_IGAZOLT IS NULL AND T_TANULOMULASZTAS.C_KESESPERCBEN > 0 and T_TANULOMULASZTAS.C_TIPUS != 1500) OR (T_TANULOMULASZTAS.C_IGAZOLT IS NULL AND T_TANULOMULASZTAS.C_TIPUS = 1500) ) AND T_TANITASIORA.C_DATUM BETWEEN :pKezdete AND :pVege AND T_TANULOMULASZTAS.C_ORATANULOIID =:pTanuloID"; DataSet ds = GetData(commandText, parameters); return ds; } public DataSet GetTanuloIgazoltMulasztasIdoszakban(int tanuloId, DateTime kezdete, DateTime vege, int tipus) { List parameters = new List { new CommandParameter("pTanuloID", tanuloId), new CommandParameter("pKezdete", kezdete), new CommandParameter("pVege", vege), new CommandParameter("pTipus", tipus) }; string commandText = @"select T_TANULOMULASZTAS.ID, T_TANITASIORA.C_DATUM from T_TANULOMULASZTAS INNER JOIN T_TANITASIORA ON T_TANULOMULASZTAS.C_TANITASIORAKID = T_TANITASIORA.ID where T_TANULOMULASZTAS.TOROLT='F' AND T_TANITASIORA.TOROLT='F' AND T_TANULOMULASZTAS.C_IGAZOLT ='T' AND T_TANITASIORA.C_DATUM BETWEEN :pKezdete AND :pVege AND T_TANULOMULASZTAS.C_ORATANULOIID =:pTanuloID AND T_TANULOMULASZTAS.C_IGAZOLASTIPUSA = :pTipus"; DataSet ds = GetData(commandText, parameters); return ds; } /// INFO @DevKornel: Mobil használja public Dictionary GetIsMulasztashozTartozoOsztalyAlapkepzesesByMulasztasIdDictionary(List mulasztasIdFilters) { var response = new Dictionary(); List parameters = new List { new CommandParameter("pFeladatKategoriaId", (int)OktNevelesiKategoriaEnum.NevelesOktatas), }; string commandText = $@"SELECT Mulasztas.ID Id, IIF(OsztalyCsoport.C_FELADATKATEGORIAID = :pFeladatKategoriaId, 1, 0) IsMulasztashozTartozoOsztalyAlapkepzeses FROM T_TANULOMULASZTAS Mulasztas INNER JOIN T_TANITASIORA Tanora ON Tanora.ID = Mulasztas.C_TANITASIORAKID INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = Tanora.C_OSZTALYCSOPORTID WHERE Mulasztas.ID IN ({string.Join(",", mulasztasIdFilters)})"; DataSet ds = GetData(commandText, parameters); foreach (DataRow item in ds.Tables[0].Rows) { response.Add(item.Field("Id"), item.Field("IsMulasztashozTartozoOsztalyAlapkepzeses") == 1); } return response; } /// INFO @DevKornel: Mobil használja public DataSet GetParhuzamosOraNaplozottMulasztasTanuloId(DateTime kezdete, DateTime vege, int tanoraId) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspTanuloMulasztasParhuzamosOra"; command.Parameters.Add("pIdoszakKezdete", kezdete); command.Parameters.Add("pIdoszakVege", vege); command.Parameters.Add("pTanoraId", tanoraId); var ds = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(ds); } DataTable dt = SortingAndPaging(ds.Tables[0], GridParameters); return dt.AsDataSet(); } } public ITanuloMulasztas Get() { return TanuloMulasztas.GiveAnInstance(); } public ITanuloMulasztas Get(int id) { var entity = TanuloMulasztas.GiveAnInstance(); entity.LoadByID(id); return entity; } public void Insert(ITanuloMulasztas entity) { TanuloMulasztas tanuloMulasztas = (TanuloMulasztas)entity; tanuloMulasztas.IsErtesitesElkuldve = !FeatureContext.Instance.IsEnabled(Constants.FeatureName.SendMulasztasNotification); tanuloMulasztas.Insert(); IIgazolasDal dal = DalHelper.IgazolasDal(); DataSet ds = dal.GetMulasztasLehetsegesIgazolasai(tanuloMulasztas.ID); if (ds.Tables[0].Rows.Count > 0) { tanuloMulasztas.Igazolt = true; tanuloMulasztas.IgazolasTipusa = int.Parse(ds.Tables[0].Rows[0]["Tipus"].ToString()); tanuloMulasztas.Update(); } DalHelper.Commit(); } public void FullUpdate(ITanuloMulasztas entity) { var tanuloMulasztas = (TanuloMulasztas)entity; tanuloMulasztas.FullUpdate(); DalHelper.Commit(); } public void Delete(ITanuloMulasztas entity) { var tanuloMulasztas = (TanuloMulasztas)entity; tanuloMulasztas.Delete(); DalHelper.Commit(); } public void Delete(int id) { var tanuloMulasztas = this.Get(id); this.Delete(tanuloMulasztas); } #region Dátum nézet // Lekérdezzük az IGAZOLANDÓ mulasztásokat public DataSet GetDatumNezetDataByOsztalyCsoportId(int osztalyCsoportId, int intezmenyId, int aktualisTanevId, bool isCsoportVezeto) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspGetMulasztasokDatumNezetDataByOsztalyCsoportId"; command.Parameters.Add("pMulasztasTipusJelenlet", (int)MulasztasTipusEnum.jelenlet); command.Parameters.Add("pMulasztasTipusUres", (int)MulasztasTipusEnum.ures); command.Parameters.Add("pAktualisTanevId", aktualisTanevId); command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId); command.Parameters.Add("pIntezmenyId", intezmenyId); command.Parameters.Add("pIsCsoportVezeto", isCsoportVezeto ? 1 : 0); command.Parameters.Add("pHetnapjaTipusTypeId", (int)GeneratedAdatszotarTipusEnum.HetNapjaTipus); var ds = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(ds); } DataTable dt = SortingAndPaging(ds.Tables[0], GridParameters); return dt.AsDataSet(); } } #endregion Dátum nézet //Mulasztások, késések lekérdezése public DataSet GetTanulokMulasztasaiKesesei(int intezmenyId, int tanevId, int? osztalyCsoportId = null, int? tanuloId = null, bool isCsoportVezeto = false, int? szervezetTipusId = null) { var ds = new DataSet(); using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspGetTanulokMulasztasaiKesesei"; command.Parameters.Add("pIntezmenyId", SDADBType.Int).Value = intezmenyId; command.Parameters.Add("pTanevId", SDADBType.Int).Value = tanevId; command.Parameters.Add("pOsztalyCsoportId", SDADBType.Int).Value = osztalyCsoportId; command.Parameters.Add("pTanuloId", SDADBType.Int).Value = tanuloId; command.Parameters.Add("pIsCsoportVez", SDADBType.Int).Value = isCsoportVezeto ? 1 : 0; if(szervezetTipusId.HasValue) { command.Parameters.Add("pSzervezetTipusId", SDADBType.Int).Value = szervezetTipusId; } else { command.Parameters.Add("pSzervezetTipusId", SDADBType.Int).Value = DBNull.Value; } using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(ds); } } DataTable dt = SortingAndPaging(ds.Tables[0], GridParameters); return dt.AsDataSet(); } #region Tanuló popup public DataSet GetTanuloMulasztasaiGrid(MulasztasKeresesePCO pco, bool igazolandok, int? csoportVezetoId, int osztalyCsoportId) { var parameters = new List() { new CommandParameter("pTanuloId", pco.TanuloId.Value), new CommandParameter("pTanevId", pco.TanevId.Value), new CommandParameter("pMulasztasTipusUres", (int)MulasztasTipusEnum.ures) }; StringBuilder whereClause = new StringBuilder(); whereClause.Append(igazolandok ? " AND tm.C_IGAZOLT IS NULL" : " AND tm.C_IGAZOLT IS NOT NULL"); if (csoportVezetoId.IsEntityId()) { parameters.Add(new CommandParameter("pCsoportVezetoId", csoportVezetoId.Value)); whereClause.Append(" AND csop.C_CSOPORTVEZETOID = :pCsoportVezetoId"); } if (pco.IsTanoraiCelu.HasValue && !pco.IsTanoraiCelu.Value) { whereClause.Append(" AND (csop.C_TIPUSA NOT IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(:pTanevId)) OR csop.C_TIPUSA IS NULL)"); } else if (pco.IsTanoraiCelu.HasValue && pco.IsTanoraiCelu.Value) { whereClause.Append(" AND (csop.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(:pTanevId)) OR csop.C_TIPUSA IS NULL)"); } var command = new StringBuilder($@" SELECT DISTINCT tm.C_ORATANULOIID AS TanuloId ,tOra.C_DATUM AS MulasztasDatuma ,{osztalyCsoportId} AS OsztalyCsoportId FROM T_TANULOMULASZTAS_OSSZES tm INNER JOIN T_TANITASIORA_OSSZES tOra ON tOra.ID = tm.C_TANITASIORAKID INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = tm.C_ORATANULOIID AND tcs.C_OSZTALYCSOPORTID = tOra.C_OSZTALYCSOPORTID LEFT JOIN T_CSOPORT_OSSZES csop ON csop.ID = tcs.C_OSZTALYCSOPORTID INNER JOIN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok({osztalyCsoportId})) f on f.ID = tOra.C_OSZTALYCSOPORTID INNER JOIN T_TANULOCSOPORT_OSSZES tcso ON tcso.C_TANULOID = tm.C_ORATANULOIID AND tcso.TOROLT = 'F' AND tOra.C_DATUM >= tcso.C_BELEPESDATUM AND tOra.C_DATUM < ISNULL(tcso.C_KILEPESDATUM, GETDATE()) AND tcso.C_OSZTALYCSOPORTID = {osztalyCsoportId} WHERE tm.TOROLT = 'F' AND tm.C_TANEVID = :pTanevId AND tm.C_ORATANULOIID = :pTanuloId AND tm.C_TIPUS != :pMulasztasTipusUres AND tcs.C_BELEPESDATUM <= tOra.C_DATUM AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tOra.C_DATUM) "); command.Append(whereClause.ToString()); return GetData(command.ToString(), parameters); } public DataSet GetTanuloMulasztasaiDetailGrid(MulasztasKeresesePCO pco, bool igazolando, int? csoportVezetoId) { List parameters = new List { new CommandParameter("pTanuloId", pco.TanuloId), new CommandParameter("pTanevId", pco.TanevId.Value), new CommandParameter("pMulasztasTipusUres", (int) MulasztasTipusEnum.ures) }; StringBuilder whereClause = new StringBuilder(); whereClause.Append(igazolando ? " AND tm.C_IGAZOLT IS NULL" : " AND tm.C_IGAZOLT IS NOT NULL"); if (pco.Tol.HasValue) { parameters.Add(new CommandParameter("pTol", pco.Tol.Value)); whereClause.Append(" AND tOra.C_DATUM >= :pTol "); } if (pco.Ig.HasValue) { parameters.Add(new CommandParameter("pIg", pco.Ig.Value)); whereClause.Append(" AND tOra.C_DATUM <= :pIg "); } var csoportSzures = string.Empty; if (csoportVezetoId.IsEntityId()) { parameters.Add(new CommandParameter("pCsoportVezetoId", csoportVezetoId)); csoportSzures = $" INNER JOIN T_CSOPORT_OSSZES csop on csop.ID = tOra.C_OSZTALYCSOPORTID AND csop.C_CSOPORTVEZETOID = :pCsoportVezetoId AND csop.TOROLT = 'F' "; if (pco.IsTanoraiCelu.HasValue && !pco.IsTanoraiCelu.Value) { whereClause.Append(" AND (csop.C_TIPUSA NOT IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(:pTanevId)) OR csop.C_TIPUSA IS NULL)"); } else if (pco.IsTanoraiCelu.HasValue && pco.IsTanoraiCelu.Value) { whereClause.Append(" AND (csop.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(:pTanevId)) OR csop.C_TIPUSA IS NULL)"); } } var command = new StringBuilder($@" SELECT DISTINCT tm.ID ,tm.C_ORATANULOIID AS TanuloId ,tm.C_IGAZOLASTIPUSA AS IgazolasTipus ,tm.C_KESESPERCBEN AS KesesPerc ,tm.C_TIPUS AS MulTip ,ocs.C_NEV AS OsztCsopNev ,CASE tm.C_IGAZOLT WHEN 'T' THEN 0 WHEN 'F' THEN 1 ELSE NULL END AS Igazolt ,COALESCE(ig.C_MEGJEGYZES, tm.C_MEGJEGYZES, '') AS Megjegyzes ,tOra.C_ORASZAM AS Oraszam ,t.C_NEV AS TargyNev ,tm.C_TANITASIORAKID AS TanitasiOraId FROM T_TANULOMULASZTAS_OSSZES tm INNER JOIN T_TANITASIORA_OSSZES tOra ON tOra.ID = tm.C_TANITASIORAKID AND tOra.TOROLT = 'F' LEFT JOIN T_TANTARGY_OSSZES t ON t.ID = tOra.C_TANTARGYID AND t.TOROLT = 'F' LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tORa.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = tm.C_ORATANULOIID AND tcs.C_OSZTALYCSOPORTID = tOra.C_OSZTALYCSOPORTID AND tcs.TOROLT = 'F' {csoportSzures} INNER JOIN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok({pco.OsztCsop})) f on f.ID = tOra.C_OSZTALYCSOPORTID LEFT JOIN T_IGAZOLAS_OSSZES ig on ig.C_TANULOID = tm.C_ORATANULOIID AND ig.TOROLT = 'F' AND tora.C_DATUM BETWEEN ig.C_KEZDETE AND ig.C_VEGE AND tm.C_IGAZOLT = 'T' WHERE tm.TOROLT = 'F' AND tm.C_TANEVID = :pTanevId AND tm.C_ORATANULOIID = @pTanuloId AND tm.C_TIPUS != :pMulasztasTipusUres AND tcs.C_BELEPESDATUM <= tOra.C_DATUM AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tOra.C_DATUM) "); command.Append(whereClause.ToString()); return GetData(command.ToString(), parameters, "IgazolasTipus,MulTip"); } #endregion public DataSet GetMulasztasokNaploNezetData(int tanevId, int intezmenyId, int osztalyCsoportId, DateTime datum, bool isCsoportVezeto, int? szervezetTipusId = null) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "sp_GetMulasztasokNaploNezetData"; command.Parameters.Add("pTanevId", tanevId); command.Parameters.Add("pIntezmenyId", intezmenyId); command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId); command.Parameters.Add("pDatum", datum); command.Parameters.Add("pCsoportTipusTanoraiCeluId", (int)CsoportTipusEnum.iskolai_csoport_tanorai_celu_); command.Parameters.Add("pIsCsoportVez", isCsoportVezeto ? 1 : 0); command.Parameters.Add("pSzervezetTipusId", szervezetTipusId); var dts = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(dts); } SetDNAME(dts.Tables[0], "MulasztasTipus,IgazolasTipus"); SetBoolFields(dts.Tables[0], "IsIgazolt"); return dts; } } public DataSet GetTanuloMulasztasaiData(int tanevId, int tanuloId, int mulasztastipusa, bool igazolt) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspGetTanuloMulasztasa"; command.Parameters.Add("pTanevId", tanevId); command.Parameters.Add("pTanuloId", tanuloId); command.Parameters.Add("pMulasztasTipus", mulasztastipusa); command.Parameters.Add("pIgazolt", igazolt ? "T" : "F"); var dts = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(dts); } return dts; } } public DataSet GetTanuloLegutobbiMulasztasai(int tanuloId) { //Utolsó hat dátumhoz tartozó hiányzás string CommandText = @" SELECT x.C_DATUM, x.C_TIPUS, x.C_NEV, x.C_ORASZAM, x.OraKezdeteVege, x.ID FROM ( SELECT DENSE_RANK() OVER (ORDER BY C_DATUM DESC) dr, tt.C_DATUM, tm.C_TIPUS, tgy.C_NEV, tt.C_ORASZAM, FORMAT(tt.C_ORAKEZDETE, 'HH:mm') + ' - ' + FORMAT(tt.C_ORAVEGE, 'HH:mm') AS OraKezdeteVege, tm.ID FROM T_TANULOMULASZTAS tm INNER JOIN T_TANITASIORA tt ON tt.ID = tm.C_TANITASIORAKID INNER JOIN T_TANTARGY tgy ON tgy.ID = tt.C_TANTARGYID INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_OSZTALYCSOPORTID = tt.C_OSZTALYCSOPORTID AND tm.C_ORATANULOIID = tcs.C_TANULOID AND tcs.TOROLT = 'F' WHERE tm.TOROLT = 'F' AND tcs.C_BELEPESDATUM <= tt.C_DATUM AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tt.C_DATUM) AND tm.C_TIPUS NOT IN (:pJelenlet, :pUres) AND tm.C_ORATANULOIID = :pTanuloID ) x WHERE x.dr<=6 ORDER BY x.C_DATUM DESC"; var param = new List { new CommandParameter("pTanuloID", tanuloId), new CommandParameter("pJelenlet", (int) MulasztasTipusEnum.jelenlet), new CommandParameter("pUres", (int) MulasztasTipusEnum.ures) }; var ds = GetData(CommandText, param); return ds; } /// INFO @DevKornel: Mobil használja public List GetAllSchemaMulasztasNotification() { var result = new List(); var ds = new DataSet(); using (var sdaCommand = new SDACommand()) { sdaCommand.Connection = UserContext.Instance.SDAConnection; sdaCommand.Transaction = UserContext.Instance.SDATransaction; sdaCommand.CommandType = CommandType.StoredProcedure; sdaCommand.CommandText = "uspGetAllSchemaMulasztasNotification"; using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = sdaCommand; adapter.Fill(ds); } } foreach (var item in ds.Tables[0].ToDaoList()) { result.Add(item); } return result; } /// INFO @DevKornel: Mobil használja public void SetMulasztasAsKikuldott(IEnumerable idList) { if (!idList.Any()) { return; } using (SDACommand command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspSetTanuloMulasztasAsKikuldott"; command.Parameters.Add("item_list", SqlLogic.ParseListToParameter(idList.ToList())); command.ExecuteNonQuery(); DalHelper.Commit(); } } public bool VaneMarIgazolt(int tipusId, int tanuloId, int oraId) { List parameters = new List(); /// TODO(@DevKornél): mehetnének list-be object initializerrel parameters.Add(new CommandParameter("pTipusId", tipusId)); parameters.Add(new CommandParameter("pTanuloId", tanuloId)); parameters.Add(new CommandParameter("pOraId", oraId)); var commandText = @" SELECT ID FROM T_TANULOMULASZTAS WHERE C_TIPUS = :pTipusId AND C_ORATANULOIID = :pTanuloId AND C_TANITASIORAKID = :pOraId AND C_IGAZOLT = 'T' AND TOROLT = 'F' "; var ds = GetData(commandText, parameters); return ds.Tables[0].Rows.Count > 0; } public DataSet GetTanuloNemUresTantargyiMulasztasaiIdoszakban(int tanuloId, List tantargyIdList, DateTime kezdete, DateTime vege) { List parameters = new List { new CommandParameter("pTanuloId", tanuloId), new CommandParameter("pKezdete", kezdete), new CommandParameter("pVege", vege), new CommandParameter("pUresMulasztasTipusId", (int)MulasztasTipusEnum.ures) }; string commandText = $@" SELECT tanuloMulasztas.C_IGAZOLASTIPUSA AS Igazolastipusa ,tanuloMulasztas.C_TIPUS AS Mulasztastipusa ,ISNULL(tanuloMulasztas.C_KESESPERCBEN , 0) AS KesesPercben ,tanuloMulasztas.C_IGAZOLT AS Igazolt ,tantargy.ID AS TantargyId ,tantargy.C_NEV AS TantargyNev FROM T_TANULOMULASZTAS tanuloMulasztas INNER JOIN T_TANITASIORA tanitasiOra ON tanitasiOra.ID = tanuloMulasztas.C_TANITASIORAKID INNER JOIN T_TANTARGY tantargy ON tantargy.ID = tanitasiOra.C_TANTARGYID WHERE tanuloMulasztas.C_ORATANULOIID = :pTanuloId AND tantargy.ID IN ({SqlLogic.ParseListToParameter(tantargyIdList)}) AND tanitasiOra.C_DATUM > :pKezdete AND tanitasiOra.C_DATUM < :pVege AND tanuloMulasztas.C_TIPUS <> :pUresMulasztasTipusId"; DataSet ds = GetData(commandText, parameters); return ds; } public void SetMulasztasTipusUres(int tanuloId, int tantargyId, DateTime kezdete, DateTime vege, int felhasznaloId) { string commandText = @" UPDATE tanuloMulasztas SET C_TIPUS = :pUresMulasztasTipusId ,LASTCHANGED = GETDATE() ,MODIFIER = :pFelhasznaloId ,SERIAL += 1 FROM T_TANULOMULASZTAS tanuloMulasztas INNER JOIN T_TANITASIORA tanitasiOra ON tanitasiOra.ID = tanuloMulasztas.C_TANITASIORAKID WHERE tanuloMulasztas.C_ORATANULOIID = :pTanuloId AND tanitasiOra.C_TANTARGYID = :pTantargyId AND tanitasiOra.C_DATUM > :pKezdete AND tanitasiOra.C_DATUM < :pVege AND tanuloMulasztas.C_TIPUS <> :pUresMulasztasTipusId"; using (var command = UserContext.Instance.SDAConnection.CreateCommand(commandText)) { command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pTanuloId", tanuloId); command.Parameters.Add("pTantargyId", tantargyId); command.Parameters.Add("pKezdete", kezdete); command.Parameters.Add("pVege", vege); command.Parameters.Add("pUresMulasztasTipusId", (int)MulasztasTipusEnum.ures); command.Parameters.Add("pFelhasznaloId", felhasznaloId); command.ExecuteNonQuery(); DalHelper.Commit(); } } public DataSet GetTanuloJelenletDataSet(int tanevId, int tanoraId) { var commandText = $@" SELECT f.ID AS TanuloId ,f.C_NYOMTATASINEV AS TanuloNev ,tm.C_MEGJEGYZES AS Megjegyzes ,tm.C_TIPUS AS Tipus ,tm.C_KESESPERCBEN AS Keses FROM T_FELHASZNALO f INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_TANULOID = f.ID AND tcs.TOROLT = 'F' INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' INNER JOIN T_TANITASIORA t ON t.C_OSZTALYCSOPORTID = ocs.ID AND t.TOROLT = 'F' LEFT JOIN T_TANULOMULASZTAS tm ON tm.C_TANITASIORAKID = t.ID AND tm.C_ORATANULOIID = tcs.C_TANULOID AND tm.TOROLT = 'F' WHERE t.ID = {tanoraId} AND f.TOROLT = 'F' AND f.C_TANEVID = {tanevId} "; return GetData(commandText); } } }