using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.Core.ConnectionType; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework.Util; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class AdminKozpontiOrakHelper : LogicBase { public AdminKozpontiOrakHelper(IConnectionType connectionType) : base(connectionType) { } public int CsengetesirendId => Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRend(); return dal.GetAktivCsengetesiRendId(TanevId, IntezmenyId); }); public OrarendCO GetAdminKozpontiOrak(DateTime start, DateTime end) { OrarendCO orarendCO = new OrarendCO(); var csengetesirendOrak = GetCsengetesirendOrak(); var startEndDifference = (end - start).Days; Dal.CustomConnection.Run(ConnectionType, (h) => { var orarendiOraDal = h.OrarendiOra(); var dsOrarend = orarendiOraDal.GetOrarendForKozpontiOrak(IntezmenyId, TanevId, start, end); var tanevrendHelper = new TanevrendHelper(new DalHandlerConnectionType(ConnectionType, h)); // Tanév rendje: OrarendHelper orarendHelper = new OrarendHelper(new DalHandlerConnectionType(ConnectionType, h)); orarendCO.Events.AddRange(orarendHelper.HandleAndAddTanevRendje(h, start, end, new List())); for (int i = 0; i < startEndDifference; i++) { DateTime currentDate = new DateTime(start.Year, start.Month, start.Day).AddDays(i); if (tanevrendHelper.IsTanitasiNap(currentDate, null)) { var events = new List(csengetesirendOrak.Count); foreach (var csrO in csengetesirendOrak) { List csengeteseiRendhezTartozoOrarendiOrak = new List(); foreach (DataRow row in dsOrarend.Tables[0].Rows) { var oraKezdete = Convert.ToDateTime(row["OraKezdete"]); if (Convert.ToDateTime(oraKezdete.ToShortDateString()) == currentDate && SDAConvert.ToInt32(row["Oraszam"], -1) == csrO.Oraszam) { csengeteseiRendhezTartozoOrarendiOrak.Add(new OrarendCO.ExtendedEvent { KozpontiOraGroupId = SDAConvert.StringToNullableGuid(row["KozpontiOraGroupId"]), KozpontilagToroltOraGroupId = SDAConvert.StringToNullableGuid(row["KozpontilagToroltOraGroupId"]), Torolt = string.Equals(row["TOROLT"], "T") }); } } int kozpontiOrakSzama = csengeteseiRendhezTartozoOrarendiOrak.Where(x => x.KozpontiOraGroupId != null && !x.Torolt).GroupBy(x => x.KozpontiOraGroupId).Distinct().Count(); int kozpontiOrakOrainakSzama = csengeteseiRendhezTartozoOrarendiOrak.Count(x => x.KozpontiOraGroupId != null && !x.Torolt); int toroltKozpontiOrakSzama = csengeteseiRendhezTartozoOrarendiOrak.Count(x => x.KozpontilagToroltOraGroupId != null); int orarendiOraSzama = csengeteseiRendhezTartozoOrarendiOrak.Count(x => x.KozpontiOraGroupId == null && x.KozpontilagToroltOraGroupId == null && !x.Torolt); bool isUresOra = IsUresOra(orarendiOraSzama, kozpontiOrakSzama, kozpontiOrakOrainakSzama, toroltKozpontiOrakSzama); EventColorEnum color = orarendiOraSzama > 0 && kozpontiOrakSzama == 0 && kozpontiOrakOrainakSzama == 0 && toroltKozpontiOrakSzama == 0 ? EventColorEnum.Kek : orarendiOraSzama > 0 && kozpontiOrakSzama > 0 ? EventColorEnum.Narancs : toroltKozpontiOrakSzama > 0 && kozpontiOrakSzama == 0 ? EventColorEnum.Piros : orarendiOraSzama == 0 && kozpontiOrakSzama > 0 ? EventColorEnum.Zold : EventColorEnum.Feher; var orarendiEvent = new OrarendCO.ExtendedEvent { id = csrO.ID.Value, start = new DateTime(start.Year, start.Month, start.Day, csrO.Kezd.Hour, csrO.Kezd.Minute, 0).AddDays(i), end = new DateTime(start.Year, start.Month, start.Day, csrO.Veg.Hour, csrO.Veg.Minute, 0).AddDays(i), allDay = false, color = color.GetStringValue(), colorEnum = color, oraType = isUresOra ? CalendarOraTypeEnum.UresOra : CalendarOraTypeEnum.OrarendiOra, textColor = isUresOra ? EventColorEnum.Szurke.GetStringValue() : "#000000", borderColor = EventColorEnum.Szurke.GetStringValue(), borderStyle = "dashed", hanyadikora = csrO.Oraszam, text = isUresOra ? csrO.Oraszam.ToString() : string.Empty, title = isUresOra ? string.Empty : GetTextForKozpontiOra(orarendiOraSzama, kozpontiOrakSzama, kozpontiOrakOrainakSzama, toroltKozpontiOrakSzama, csrO.Oraszam), oraszam = $"{csrO.Oraszam}. {CommonResource.Ora.ToLower()}" }; events.Add(orarendiEvent); } orarendCO.Events.AddRange(events); } } }); return orarendCO; } public IList GetToroltOrarendiOrakVisszaallitashoz(DateTime start, DateTime end, int hanyadikOra, Guid? kozpontilagToroltOraGroupId = null) { OrarendCO orarendCO = new OrarendCO(); var dsOrarend = Dal.CustomConnection.Run(ConnectionType, (h) => { var orarendiOraDal = h.OrarendiOra(); return orarendiOraDal.GetOrarendForKozpontiOrak(IntezmenyId, TanevId, start, end); }); IList list = AdminKozpontiOrakOrarendiOraCo.MapGridModelFromOrarendiOraTanitasiOraCoList(dsOrarend.Tables[0]) .Where(i => i.OraSorszam == hanyadikOra && i.KozpontilagToroltOraGroupId.HasValue) .ToList(); return list; } public void OrarendiOrakVisszaallitasa(List orarendiOrakIdList) { Dal.CustomConnection.Run(ConnectionType, h => { var orarendiOraDal = h.OrarendiOra(); orarendiOraDal.KozpontilagToroltOraVisszaallitasa(orarendiOrakIdList, FelhasznaloId); DataSet orarendiOrak = null; foreach (var orarendiOraId in orarendiOrakIdList) { IOrarendiOra orarendiOra = orarendiOraDal.Get(orarendiOraId); if (orarendiOrak == null) { orarendiOrak = orarendiOraDal.GetOrarend(IntezmenyId, TanevId, orarendiOra.OraErvenyessegKezdete, orarendiOra.OraErvenyessegVege.Value.AddDays(1), null, null, null, true, OrarendTipusEnum.Minden, null, null, false, null, null, null, null); } foreach (DataRow row in orarendiOrak.Tables[0].Rows) { var tantargyId = SDAConvert.ToNullableInt32(row["TantargyId"]); var osztalyCsoportId = SDAConvert.ToNullableInt32(row["OsztCsopId"]); var hetirendId = SDAConvert.ToInt32(row["Hetirend"]); var oraSorszam = SDAConvert.ToNullableInt32(row["OraSzam"]); var tanarId = SDAConvert.ToInt32(row["TanarID"]); var Id = SDAConvert.ToInt32(row["ID"]); if (tantargyId.HasValue && tantargyId.Value == orarendiOra.TantargyId && osztalyCsoportId.HasValue && osztalyCsoportId.Value == orarendiOra.OsztalyCsoportId && hetirendId == orarendiOra.Hetirend && tanarId == orarendiOra.TanarId && oraSorszam == orarendiOra.Oraszam && Id != orarendiOraId) { orarendiOraDal.Delete(Id); } } orarendiOraDal.UpdateOrarend(IntezmenyId, TanevId, orarendiOra.OraErvenyessegKezdete, orarendiOra.OraErvenyessegVege, orarendiOraId, null); } }); } public List OrarendiOrakVisszaallitasaValidacio(List orarendiOrakIdList) { var utkozoOrak = new List(); Dal.CustomConnection.Run(ConnectionType, h => { var orarendiOraDal = h.OrarendiOra(); DataSet orarendiOrak = null; foreach (var orarendiOraId in orarendiOrakIdList) { IOrarendiOra orarendiOra = orarendiOraDal.Get(orarendiOraId); if (orarendiOrak == null) { orarendiOrak = orarendiOraDal.GetOrarend(IntezmenyId, TanevId, orarendiOra.OraErvenyessegKezdete, orarendiOra.OraErvenyessegVege.Value.AddDays(1), null, null, null, true, OrarendTipusEnum.Minden, null, null, false, null, null, null, null); } foreach (DataRow row in orarendiOrak.Tables[0].Rows) { var tantargyId = SDAConvert.ToNullableInt32(row["TantargyId"]); var osztalyCsoportId = SDAConvert.ToNullableInt32(row["OsztCsopId"]); var hetirendId = SDAConvert.ToInt32(row["Hetirend"]); var oraSorszam = SDAConvert.ToNullableInt32(row["OraSzam"]); var oraErvenyessegKezdete = SDAConvert.ToDateTime(row["ErvenyessegKezdete"]); var oraErvenyessegVege = SDAConvert.ToDateTime(row["ErvenyessegVege"]); var tanarId = SDAConvert.ToInt32(row["TanarID"]); var hetNapjaTipusId = SDAConvert.ToInt32(row["HetNapja"]); if (tantargyId.HasValue && tantargyId.Value == orarendiOra.TantargyId && osztalyCsoportId.HasValue && osztalyCsoportId.Value == orarendiOra.OsztalyCsoportId && hetirendId == orarendiOra.Hetirend && tanarId == orarendiOra.TanarId && oraSorszam == orarendiOra.Oraszam) { utkozoOrak.Add($"{oraErvenyessegKezdete.ToShortDateString()} {oraErvenyessegVege.ToShortDateString()} ({hetNapjaTipusId.GetDisplayName(TanevId)} {oraSorszam}. óra)"); } } } }); return utkozoOrak; } private List GetCsengetesirendOrak() { var csengetesirendId = CsengetesirendId; return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(); var ds = dal.GetCsengetesirendOrakNaptarhoz(TanevId, csengetesirendId); var result = new List(ds.Tables[0].Rows.Count); foreach (DataRow dataRow in ds.Tables[0].Rows) { result.Add(new CsengetesiRendOraCO { ID = SDAConvert.ToInt32(dataRow["ID"]), Kezd = SDAConvert.ToDateTime(dataRow["C_KEZDETE"]).Value, Veg = SDAConvert.ToDateTime(dataRow["C_VEGE"]).Value, Oraszam = SDAConvert.ToInt32(dataRow["C_ORASZAM"]) }); } return result; }); } private string GetTextForKozpontiOra(int csengeteseiRendhezTartozoOrarendiOrakSzama, int kozpontiOrakSzama, int kozpontiOrakOrainakSzama, int toroltKozpontiOrakSzama, int oraSzam) { return $@"Központi órák száma: {kozpontiOrakSzama} ({kozpontiOrakOrainakSzama}) Órarendi órák száma: {csengeteseiRendhezTartozoOrarendiOrakSzama} Törölt órák száma: {toroltKozpontiOrakSzama}"; } private bool IsUresOra(int csengeteseiRendhezTartozoOrarendiOrakSzama, int kozpontiOrakSzama, int kozpontiOrakOrainakSzama, int toroltKozpontiOrakSzama) { if (csengeteseiRendhezTartozoOrarendiOrakSzama == 0 && kozpontiOrakSzama == 0 && kozpontiOrakOrainakSzama == 0 && toroltKozpontiOrakSzama == 0) { return true; } return false; } } }