using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.Core; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.Framework.Util; using SDA.DataProvider; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class OraSorszamozasHalmazDAL : DataAccessBase, IOraSorszamozasHalmazDAL { public OraSorszamozasHalmazDAL(DalHandler handler) : base(handler) { } public OraSorszamozasHalmazDAL(DalHandler handler, GridParameters parameters) : base(handler, parameters) { } public bool NevExists(int tanevId, string nev, int id) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pTanevId", tanevId); command.Parameters.Add("pNev", nev); command.Parameters.Add("pId", id); command.CommandText = @" IF EXISTS ( SELECT 1 FROM T_ORASORSZAMOZASHALMAZ_OSSZES h WHERE h.TOROLT = 'F' AND h.C_TANEVID = :pTanevId AND h.C_NEV = :pNev AND h.ID <> :pId ) SELECT 1 ELSE SELECT 0 "; return Convert.ToBoolean(command.ExecuteScalar()); } } public bool OsszerendelesExists(int tanevId, int osztalyCsoportId, int tantargyId, int halmazId, List deletedOsszerendeslIds) { var deletedOsszerendelesIdsList = deletedOsszerendeslIds.Count > 0 ? string.Join(",", deletedOsszerendeslIds) : "-1"; using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pTanevId", tanevId); command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId); command.Parameters.Add("pTantargyId", tantargyId); command.Parameters.Add("pHalmazId", halmazId); command.CommandText = $@" IF EXISTS ( SELECT 1 FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r WHERE r.TOROLT = 'F' AND r.C_TANEVID = :pTanevId AND r.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND r.C_TANTARGYID = :pTantargyId AND r.C_ORASORSZAMOZASHALMAZID <> :pHalmazId AND r.ID NOT IN ({deletedOsszerendelesIdsList}) ) SELECT 1 ELSE SELECT 0 "; return Convert.ToBoolean(command.ExecuteScalar()); } } public IOraSorszamozasHalmaz Get(int id) { var entity = OraSorszamozasHalmaz.GiveAnInstance(); entity.LoadByID(id); return entity; } public DataSet GetAllPaged(int tanevId, OraSorszamozasHalmazSearchPCO pco) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), }; string commandText = @" SELECT h.ID AS ID ,h.C_NEV AS HalmazNeve FROM T_ORASORSZAMOZASHALMAZ_OSSZES h "; if (pco.SearchOsztalyCsoportId.HasValue || pco.SearchTantargyId.HasValue) { commandText += @" INNER JOIN T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r ON h.ID = r.C_ORASORSZAMOZASHALMAZID AND r.TOROLT = 'F'"; if (pco.SearchOsztalyCsoportId.HasValue) { commandText += @" AND r.C_OSZTALYCSOPORTID = :pOsztalyCsoportId"; commandParameterList.Add(new CommandParameter("pOsztalyCsoportId", pco.SearchOsztalyCsoportId.Value)); } if (pco.SearchTantargyId.HasValue) { commandText += @" AND r.C_TANTARGYID = :pTantargyId"; commandParameterList.Add(new CommandParameter("pTantargyId", pco.SearchTantargyId.Value)); } } commandText += @" WHERE h.TOROLT = 'F' AND h.C_TANEVID = :pTanevId "; if (!string.IsNullOrWhiteSpace(pco.SearchHalmazNeve)) { commandText += @" AND h.C_NEV LIKE '%' + :pHalmazNeve + '%'"; commandParameterList.Add(new CommandParameter("pHalmazNeve", pco.SearchHalmazNeve)); } return GetData(commandText, commandParameterList); } public DataSet GetOsszerendelesek(int halmazId, bool forDetail = false) { var commandParameterList = new List { new CommandParameter("pHalmazId", halmazId), }; string commandText = $@" SELECT r.ID AS ID ,r.C_OSZTALYCSOPORTID AS {(forDetail ? "Detail" : "")}OsztalyCsoportId ,o.C_NEV AS {(forDetail ? "Detail" : "")}OsztalyCsoport ,r.C_TANTARGYID AS {(forDetail ? "Detail" : "")}TantargyId ,t.C_NEV AS {(forDetail ? "Detail" : "")}Tantargy FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r INNER JOIN T_OSZTALYCSOPORT_OSSZES o ON r.C_OSZTALYCSOPORTID = o.ID AND o.TOROLT = 'F' INNER JOIN T_TANTARGY_OSSZES t ON r.C_TANTARGYID = t.ID AND t.TOROLT = 'F' WHERE r.TOROLT = 'F' AND r.C_ORASORSZAMOZASHALMAZID = :pHalmazId "; return GetData(commandText, commandParameterList); } public void Delete(int id, int intezmenyId, int tanevId) { var entity = OraSorszamozasHalmaz.GiveAnInstance(); entity.LoadByID(id); entity.OraSorszamozasHalmazOsszerendelesList.DeleteAll(); entity.Delete(); DalHelper.TanitasiOra().UpdateTanitasiOraEvesSorszamTeljesTanev(intezmenyId, tanevId); DalHelper.Commit(); } public void DeleteOsszerendeles(int osszerendelesId, int intezmenyId, int tanevId, bool updateTanoraEvesSorszam = true) { var ids = GetHalmazokForOsszerendeles(osszerendelesId); foreach (var id in ids) { ResetSorszamozasKezodErtek(id); } DalHelper.OraSorszamozasHalmazOsszerendeles().Delete(osszerendelesId); if (updateTanoraEvesSorszam) { DalHelper.TanitasiOra().UpdateTanitasiOraEvesSorszamTeljesTanev(intezmenyId, tanevId); } DalHelper.Commit(); } public int Save(int tanevId, int id, string nev, bool kozosOraSorszamozasElteroTanarnal, int tipus, int? kezdoertek) { var entity = OraSorszamozasHalmaz.GiveAnInstance(); if (id.IsEntityId()) { entity.LoadByID(id); } entity.Nev = nev; entity.KozosOraSorszamozasElteroTanarnal = kozosOraSorszamozasElteroTanarnal; entity.Tipus = tipus; entity.Kezdoertek = kezdoertek; entity.TanevId = tanevId; if (id.IsEntityId()) { entity.FullUpdate(); } else { entity.Insert(); } DalHelper.Commit(); return entity.ID; } public int SaveOsszerendeles(int tanevId, int osztalyCsoportId, int tantargyId, int halmazId) { var ds = GetOsszerendelesIDWithTorolt(tanevId, osztalyCsoportId, tantargyId); int? osszerendelesId = null; bool torolt = false; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { var row = ds.Tables[0].Rows[0]; if (row["ID"] != null && row["ID"] != DBNull.Value) { osszerendelesId = Convert.ToInt32(row["ID"]); } if (row["TOROLT"] != null && row["TOROLT"] != DBNull.Value) { torolt = row["TOROLT"].ToString() == "T"; } } if (!osszerendelesId.IsEntityId()) { osszerendelesId = InsertOsszerendeles(tanevId, osztalyCsoportId, tantargyId, halmazId); } else { if (torolt) { UnDeleteOsszerendeles(osszerendelesId.Value, halmazId); } } return osszerendelesId.Value; } public void DeleteOsszerendelesek(int halmazId, IEnumerable idsInGrid, int intezmenyId, int tanevId) { var idsInDB = GetOsszerendelesekID(halmazId); var torlendoIds = idsInDB.Except(idsInGrid).Distinct(); foreach (var id in torlendoIds) { DeleteOsszerendeles(id, tanevId, intezmenyId, updateTanoraEvesSorszam: false); } } public void SetHalmazOsszerendeles(int halmazId, int osszerendelesId) { var entity = OraSorszamozasHalmaz.GiveAnInstance(); entity.LoadByID(halmazId); entity.OraSorszamozasHalmazOsszerendelesId = osszerendelesId; entity.FullUpdate(); DalHelper.Commit(); } public List GetEvesOraszamForTantargyAndOsztaly(int tanevId, int itezmenyId, int osztalyCsoportId, int tantargyId) { List ret = new List(); using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspGetEvesOraszamForTantargyAndOsztaly"; command.Parameters.Add("pTanevId", tanevId); command.Parameters.Add("pIntezmenyId", itezmenyId); command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId); command.Parameters.Add("pTantargyId", tantargyId); command.Parameters.Add("pBeallitasTanarSzamit", (int)RendszerBeallitasTipusEnum.TanitasiOra_sorszamozas_mod); command.Parameters.Add("pBeallitasOsztalybontasEgybe", (int)RendszerBeallitasTipusEnum.tanitasiOra_sorszamozas_csoportbontas); var ds = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = command; adapter.Fill(ds); } foreach (DataRow row in ds.Tables[0].Rows) { if (row["EvesOraszam"] != null && row["EvesOraszam"] != DBNull.Value) { ret.Add(Convert.ToInt32(row["EvesOraszam"])); } } } return ret; } private int InsertOsszerendeles(int tanevId, int osztalyCsoportId, int tantargyId, int halmazId) { var entity = OraSorszamozasHalmazOsszerendeles.GiveAnInstance(); entity.OsztalyCsoportId = osztalyCsoportId; entity.TantargyId = tantargyId; entity.OraSorszamozasHalmazId = halmazId; entity.TanevId = tanevId; entity.Insert(); DalHelper.Commit(); return entity.ID; } private void UnDeleteOsszerendeles(int id, int halmazId) { var entity = OraSorszamozasHalmazOsszerendeles.GiveAnInstance(); entity.LoadByID(id); entity.Torolt = false; entity.OraSorszamozasHalmazId = halmazId; entity.FullUpdate(); DalHelper.Commit(); } private List GetHalmazokForOsszerendeles(int osszerendelesId) { List ret = new List(); var commandParameterList = new List { new CommandParameter("pOsszerendelesId", osszerendelesId), }; string commandText = @" SELECT h.ID AS ID FROM T_ORASORSZAMOZASHALMAZ_OSSZES h WHERE h.C_ORASORSZAMOZASHALMAZOSSZEREN = :pOsszerendelesId "; 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 void ResetSorszamozasKezodErtek(int id) { var entity = OraSorszamozasHalmaz.GiveAnInstance(); entity.LoadByID(id); entity.OraSorszamozasHalmazOsszerendelesId = -1; entity.Tipus = (int)SorszamozasKezdoErtekenekBeallitasa.SorszamozasKezdoErtekeKezzelMegadva; entity.FullUpdate(); DalHelper.Commit(); } private DataSet GetOsszerendelesIDWithTorolt(int tanevId, int osztalyCsoportId, int tantargyId) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId), new CommandParameter("pTantargyId", tantargyId), }; string commandText = @" SELECT r.ID ,r.TOROLT FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r WHERE r.C_TANEVID = :pTanevId AND r.C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND r.C_TANTARGYID = :pTantargyId "; return GetData(commandText, commandParameterList); } private List GetOsszerendelesekID(int halmazId) { List ret = new List(); var commandParameterList = new List { new CommandParameter("pHalmazId", halmazId), }; string commandText = $@" SELECT r.ID AS ID FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r INNER JOIN T_OSZTALYCSOPORT_OSSZES o ON r.C_OSZTALYCSOPORTID = o.ID AND o.TOROLT = 'F' INNER JOIN T_TANTARGY_OSSZES t ON r.C_TANTARGYID = t.ID AND t.TOROLT = 'F' WHERE r.TOROLT = 'F' AND r.C_ORASORSZAMOZASHALMAZID = :pHalmazId "; 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; } } }