using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.Core; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class HetesDal : DataAccessBase, IHetesDal { public HetesDal(DalHandler handler) : base(handler) { } public DataSet GetHetSorszamokTanulokkal(int tanevId, int osztalyCsoportId, int? hetSorszam = null) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), }; string commandText = @" SELECT ROW_NUMBER() OVER (ORDER BY nh.C_HETSORSZAMA, IIF(f.C_NEVSORREND = 'T', f.C_UTONEV + ' ' + f.C_VEZETEKNEV, f.C_VEZETEKNEV + ' ' + f.C_UTONEV)) AS ID ,nh.C_HETSORSZAMA AS HetSorszam ,tcs.C_TANULOID As TanuloId ,f.C_NYOMTATASINEV AS Nev ,IIF(f.C_NEVSORREND = 'T', f.C_UTONEV + ' ' + f.C_VEZETEKNEV, f.C_VEZETEKNEV + ' ' + f.C_UTONEV) AS NevElotagNelkul FROM T_NAPTARIHET_OSSZES nh INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = nh.C_TANEVID AND tanev.TOROLT = 'F' AND nh.C_HETKEZDONAPJA >= tanev.C_KEZDONAP AND nh.C_HETUTOLSONAPJA <= tanev.C_UTOLSONAP INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANEVID = nh.C_TANEVID AND tcs.C_BELEPESDATUM <= nh.C_HETKEZDONAPJA AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= nh.C_HETUTOLSONAPJA) AND tcs.TOROLT = 'F' INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.C_TANEVID = nh.C_TANEVID AND f.TOROLT = 'F' INNER JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.ID = nh.C_HETIREND AND hetirend.TOROLT = 'F' AND hetirend.C_TANEVID = nh.C_TANEVID WHERE nh.TOROLT = 'F' AND nh.C_TANEVID = :pTanevId AND tcs.C_OSZTALYCSOPORTID = :pOsztalyCsoportId "; if (hetSorszam.HasValue) { commandParameterList.Add(new CommandParameter("pHetSorszam", hetSorszam.Value)); commandText += " AND nh.C_HETSORSZAMA = :pHetSorszam"; } return GetData(commandText, commandParameterList); } public DataSet GetHetesek(int tanevId, int osztalyCsoportId) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), }; string commandText = @" SELECT nh.ID ,nh.C_HETSORSZAMA AS HetSorszam ,nh.C_HETKEZDONAPJA AS HetKezdoNap ,nh.C_HETUTOLSONAPJA AS HetUtolsoNap ,ISNULL(hetirend.C_NAME, N'Szünet') AS Hetirend ,STUFF(( SELECT ',' + CAST(h.C_TANULOID AS nvarchar (max)) FROM T_HETES_OSSZES h WHERE h.TOROLT = 'F' AND h.C_TANEVID = nh.C_TANEVID AND h.C_HETSORSZAMA = nh.C_HETSORSZAMA AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId FOR XML PATH ('')), 1, 1, '' ) AS Tanulok ,:pOsztalyCsoportId AS OsztalyCsoportId FROM T_NAPTARIHET_OSSZES nh INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = nh.C_TANEVID AND tanev.TOROLT = 'F' AND nh.C_HETKEZDONAPJA >= tanev.C_KEZDONAP AND nh.C_HETUTOLSONAPJA <= tanev.C_UTOLSONAP LEFT JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.ID = nh.C_HETIREND AND hetirend.TOROLT = 'F' AND hetirend.C_TANEVID = nh.C_TANEVID WHERE nh.TOROLT = 'F' AND nh.C_TANEVID = :pTanevId ORDER BY nh.C_HETSORSZAMA "; return GetData(commandText, commandParameterList); } public void DeleteFutureHetesInOsztalyCsoport(int tanevId, int osztalyCsoportId) { var ids = GetHetesIDsInFuture(tanevId, osztalyCsoportId); foreach (var id in ids) { Delete(id); } } public (List toroltHetesek, List beallitottHetesek) SaveOrDeleteHetesek(int tanevId, int osztalyCsoportId, int hetSorszam, List selectedTanuloIds) { var ids = GetHetesIDsForDelete(tanevId, osztalyCsoportId, hetSorszam, selectedTanuloIds); List torolthetesek = ids.Values.ToList(); List beallitottHetesek = new List(); foreach (var id in ids.Keys) { Delete(id); } if (selectedTanuloIds != null) { foreach (var tanuloId in selectedTanuloIds) { int? hetesId = null; bool torolt = false; int hetesnekBeallitottTanuloId = default; var ds = GetHetesIDForTanuloWithTorolt(tanevId, osztalyCsoportId, hetSorszam, tanuloId); foreach (DataRow row in ds.Tables[0].Rows) { if (row["ID"] != null && row["ID"] != DBNull.Value) { hetesId = Convert.ToInt32(row["ID"]); } if (row["TOROLT"] != null && row["TOROLT"] != DBNull.Value) { torolt = row["TOROLT"].ToString() == "T"; } if (row["C_TANULOID"] != null && row["C_TANULOID"] != DBNull.Value) { hetesnekBeallitottTanuloId = Convert.ToInt32(row["C_TANULOID"]); } break; } if (!hetesId.HasValue || hetesId.Value < 1) { Insert(tanevId, osztalyCsoportId, hetSorszam, tanuloId); beallitottHetesek.Add(tanuloId); } else { if (torolt) { UnDelete(hetesId.Value); beallitottHetesek.Add(hetesnekBeallitottTanuloId); } } } } return (torolthetesek, beallitottHetesek); } public string GetHetesekForDatum(int tanevId, int osztalyCsoportId, DateTime datum) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pDatum", datum), }; string commandText = @" SELECT STUFF(( SELECT ', ' + IIF(ocs.ID IS NULL AND tcs.ID IS NULL, '(' + f.C_NYOMTATASINEV + ')', f.C_NYOMTATASINEV) FROM T_HETES_OSSZES h INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = h.C_TANULOID AND f.TOROLT = 'F' AND f.C_TANEVID = h.C_TANEVID -- ha osztály van kiválasztva LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = h.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND ocs.ID = @pOsztalyCsoportId -- osztálybontott csoport van kiválasztva LEFT JOIN T_CSOPORT_OSSZES cs ON cs.C_OSZTALYBONTASID = h.C_OSZTALYCSOPORTID AND cs.TOROLT = 'F' AND cs.ID = @pOsztalyCsoportId LEFT JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = cs.ID AND tcs.TOROLT = 'F' AND tcs.C_TANULOID = f.ID AND tcs.C_OSZTALYCSOPORTID = cs.ID AND (tcs.C_BELEPESDATUM <= @pDatum AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatum)) WHERE h.TOROLT = 'F' AND h.C_TANEVID = nh.C_TANEVID AND h.C_HETSORSZAMA = nh.C_HETSORSZAMA AND (ocs.ID IS NOT NULL OR cs.ID IS NOT NULL) ORDER BY IIF(f.C_NEVSORREND = 'T', f.C_UTONEV + ' ' + f.C_VEZETEKNEV, f.C_VEZETEKNEV + ' ' + f.C_UTONEV) FOR XML PATH ('')), 1, 1, '' ) AS Hetesek FROM T_NAPTARIHET_OSSZES nh WHERE nh.TOROLT = 'F' AND nh.C_TANEVID = @pTanevId AND nh.C_HETKEZDONAPJA <= @pDatum AND nh.C_HETUTOLSONAPJA >= @pDatum "; var ds = GetData(commandText, commandParameterList); foreach (DataRow row in ds.Tables[0].Rows) { if (row["Hetesek"] != null && row["Hetesek"] != DBNull.Value) { return row["Hetesek"].ToString(); } } return null; } public void DeleteHetesekInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum) { var ids = GetHetesIDsInIdoszak(tanevId, osztalyCsoportId, tanuloId, belepesDatum, kilepesDatum); foreach (var id in ids) { Delete(id); } } public void DeleteHetesekNotInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum) { var ids = GetHetesIDsNotInIdoszak(tanevId, osztalyCsoportId, tanuloId, belepesDatum, kilepesDatum); foreach (var id in ids) { Delete(id); } } private void Insert(int tanevId, int osztalyCsoportId, int hetSorszam, int tanuloId) { var entity = Hetes.GiveAnInstance(); entity.TanevId = tanevId; entity.OsztalyCsoportId = osztalyCsoportId; entity.HetSorszama = hetSorszam; entity.TanuloId = tanuloId; entity.Insert(); DalHelper.Commit(); } private void Delete(int id) { var entity = Hetes.GiveAnInstance(); entity.LoadByID(id); entity.Delete(); DalHelper.Commit(); } private void UnDelete(int id) { var entity = Hetes.GiveAnInstance(); entity.LoadByID(id); entity.Torolt = false; entity.Update(); DalHelper.Commit(); } private List GetHetesIDsInFuture(int tanevId, int osztalyCsoportId) { List ret = new List(); var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), }; string commandText = @" SELECT h.ID FROM T_HETES_OSSZES h INNER JOIN T_NAPTARIHET_OSSZES nh ON nh.C_HETSORSZAMA = h.C_HETSORSZAMA AND nh.TOROLT = 'F' AND nh.C_TANEVID = h.C_TANEVID AND nh.C_HETKEZDONAPJA > GETDATE() WHERE h.TOROLT = 'F' AND h.C_TANEVID = :pTanevId AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId "; var ds = GetData(commandText, commandParameterList); foreach (DataRow row in ds.Tables[0].Rows) { if (row["ID"] != null && row["ID"] != DBNull.Value) { ret.Add(Convert.ToInt32(row["ID"])); } } return ret; } private Dictionary GetHetesIDsForDelete(int tanevId, int osztalyCsoportId, int hetSorszam, List selectedTanuloIds) { Dictionary ret = new Dictionary(); var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pHetSorszam", hetSorszam), }; string commandText = @" SELECT h.ID ,h.C_TANULOID FROM T_HETES_OSSZES h WHERE h.TOROLT = 'F' AND h.C_TANEVID = :pTanevId AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND h.C_HETSORSZAMA = :pHetSorszam "; if (selectedTanuloIds != null && selectedTanuloIds.Count > 0) { commandText += $" AND h.C_TANULOID NOT IN ({string.Join(",", selectedTanuloIds)})"; } var ds = GetData(commandText, commandParameterList); foreach (DataRow row in ds.Tables[0].Rows) { if (row["ID"] != null && row["ID"] != DBNull.Value) { ret.Add(Convert.ToInt32(row["ID"]), Convert.ToInt32(row["C_TANULOID"])); } } return ret; } private DataSet GetHetesIDForTanuloWithTorolt(int tanevId, int osztalyCsoportId, int hetSorszam, int tanuloId) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pHetSorszam", hetSorszam), new CommandParameter("pTanuloId", tanuloId), }; string commandText = @" SELECT h.ID ,h.TOROLT ,h.C_TANULOID FROM T_HETES_OSSZES h WHERE h.C_TANEVID = :pTanevId AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND h.C_HETSORSZAMA = :pHetSorszam AND h.C_TANULOID = :pTanuloId "; return GetData(commandText, commandParameterList); } private List GetHetesIDsInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum) { List ret = new List(); var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pTanuloId", tanuloId), }; if (belepesDatum.HasValue) { commandParameterList.Add(new CommandParameter("pBelepesDatum", belepesDatum.Value)); } else { commandParameterList.Add(new CommandParameter("pBelepesDatum", DBNull.Value)); } if (kilepesDatum.HasValue) { commandParameterList.Add(new CommandParameter("pKilepesDatum", kilepesDatum.Value)); } else { commandParameterList.Add(new CommandParameter("pKilepesDatum", DBNull.Value)); } string commandText = @" SELECT h.ID FROM T_HETES_OSSZES h INNER JOIN T_NAPTARIHET_OSSZES nh ON nh.C_HETSORSZAMA = h.C_HETSORSZAMA AND nh.TOROLT = 'F' AND nh.C_TANEVID = h.C_TANEVID AND ((nh.C_HETKEZDONAPJA <= :pBelepesDatum AND nh.C_HETUTOLSONAPJA >= :pBelepesDatum) OR nh.C_HETKEZDONAPJA >= :pBelepesDatum) AND (:pKilepesDatum IS NULL OR nh.C_HETKEZDONAPJA <= :pKilepesDatum) WHERE h.TOROLT = 'F' AND h.C_TANEVID = :pTanevId AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND h.C_TANULOID = :pTanuloId "; var ds = GetData(commandText, commandParameterList); foreach (DataRow row in ds.Tables[0].Rows) { if (row["ID"] != null && row["ID"] != DBNull.Value) { ret.Add(Convert.ToInt32(row["ID"])); } } return ret; } private List GetHetesIDsNotInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum) { List ret = new List(); var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pTanuloId", tanuloId), }; if (belepesDatum.HasValue) { commandParameterList.Add(new CommandParameter("pBelepesDatum", belepesDatum.Value)); } else { commandParameterList.Add(new CommandParameter("pBelepesDatum", DBNull.Value)); } if (kilepesDatum.HasValue) { commandParameterList.Add(new CommandParameter("pKilepesDatum", kilepesDatum.Value)); } else { commandParameterList.Add(new CommandParameter("pKilepesDatum", DBNull.Value)); } string commandText = @" SELECT h.ID FROM T_HETES_OSSZES h INNER JOIN T_NAPTARIHET_OSSZES nh ON nh.C_HETSORSZAMA = h.C_HETSORSZAMA AND nh.TOROLT = 'F' AND nh.C_TANEVID = h.C_TANEVID AND (nh.C_HETKEZDONAPJA < :pBelepesDatum OR (:pKilepesDatum IS NOT NULL AND nh.C_HETUTOLSONAPJA > :pKilepesDatum)) WHERE h.TOROLT = 'F' AND h.C_TANEVID = :pTanevId AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND h.C_TANULOID = :pTanuloId "; var ds = GetData(commandText, commandParameterList); foreach (DataRow row in ds.Tables[0].Rows) { if (row["ID"] != null && row["ID"] != DBNull.Value) { ret.Add(Convert.ToInt32(row["ID"])); } } return ret; } public DataSet GetHetesNevekHetsorszammal(int tanevId, List osztalyCsoportIdList) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId) }; string commandText = $@" SELECT hetes.C_HETSORSZAMA AS Hetsorszama ,felhasznalo.C_NYOMTATASINEV AS TanuloNev ,hetes.C_OSZTALYCSOPORTID AS osztalyCsoportId ,ocs.C_NEV AS OsztalyNev ,ocs.C_FELADATKATEGORIAID FeladatKategoriaId ,felhely.C_OKTATASINEVELESIFELADATTIPUS AS OktNevFeladatId FROM T_HETES_OSSZES hetes INNER JOIN T_FELHASZNALO_OSSZES felhasznalo ON felhasznalo.ID = hetes.C_TANULOID INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = hetes.C_OSZTALYCSOPORTID INNER JOIN T_FELADATELLATASIHELY_OSSZES felhely ON felhely.ID = ocs.C_FELADATELLATASIHELYID WHERE hetes.TOROLT = 'F' AND hetes.C_TANEVID = :pTanevId AND hetes.C_OSZTALYCSOPORTID IN ({string.Join(",", osztalyCsoportIdList)})"; return GetData(commandText, commandParameterList); } public DataSet GetHetesAdatokFeljegyzeshez(int tanevId, int osztalyCsoportId, List selectedTanuloIds, bool IsTorolt) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pIsTorolt", IsTorolt.ToSDABoolean()) }; string commandText = $@" SELECT felhasznalo.ID AS ID ,felhasznalo.C_NYOMTATASINEV AS Nev ,C_HETKEZDONAPJA AS KezdoNap ,C_HETUTOLSONAPJA AS UtolsoNap ,ocs.C_NEV AS OsztalyCsoportNev FROM T_FELHASZNALO_OSSZES felhasznalo INNER JOIN T_HETES_OSSZES hetes ON hetes.C_TANULOID = felhasznalo.ID INNER JOIN T_NAPTARIHET naptarihet ON naptarihet.C_HETSORSZAMA = hetes.C_HETSORSZAMA INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = hetes.C_OSZTALYCSOPORTID WHERE felhasznalo.TOROLT = 'F' AND felhasznalo.C_TANEVID = :pTanevId AND hetes.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND hetes.C_TANULOID IN ({string.Join(",", selectedTanuloIds)}) AND hetes.TOROLT = :pIsTorolt"; return GetData(commandText, commandParameterList); } } }