using System; using System.Collections.Generic; using System.Data; using System.Net; using System.Web.Mvc; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.Core; using Kreta.Core.Exceptions; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Enums.ManualEnums.SystemSettings; using Kreta.Framework; using Kreta.Framework.Util; using Kreta.KretaServer.SystemSettings; using Kreta.Resources; using Kreta.Web.Areas.Intezmeny.Logic; using Kreta.Web.Areas.Orarend.Models; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.TabStrip; using Kreta.Web.Models; using Kreta.Web.Security; namespace Kreta.Web.Areas.Orarend.Logic { public class OrarendiOraLogic { public static List GetModOrarendiOraTabs(OrarendiOraModel model, string orarendTipus, bool isFromSzervezet = false) { var list = new List(); list.Add(new TabStripItemModel() { ItemId = "1", ItemName = StringResourcesUtil.GetString(4124) /*Óra adatok*/, Model = model, PartialViewName = "OrarendiOraAdatok_Tab_" + orarendTipus, IsActive = true }); if (!isFromSzervezet) { list.Add(new TabStripItemModel() { ItemId = "2", ItemName = StringResourcesUtil.GetString(4867) /*Speciális adatok*/, Model = model, PartialViewName = "SpecialisAdatok_Bevitel" }); } return list; } public static System.Web.Http.ModelBinding.ModelStateDictionary CheckCustomValidation(System.Web.Http.ModelBinding.ModelStateDictionary ms, OrarendiOraModel model) { if (!model.TTFModel.TanarID.IsEntityId()) { ms.AddModelError("TTFModel_TanarID", ErrorResource.PedagogusMegadasaKotelezo); //Pedagógus megadása kötelező } if (SystemSettingsManager.GetSystemSettingValue(RendszerBeallitasTipusEnum.orarendi_elemek_rogzitesenek_elofeltetele, ClaimData.IntezmenyAzonosito, ClaimData.SelectedTanevID.Value) != (int)SystemSettingsOrarendiElemekRogzitesenekElofelteteleEnum.NincsTTF) { if (!model.TTFModel.FoglalkozasID.IsEntityId()) { ms.AddModelError("TTFModel_FoglalkozasID", ErrorResource.FoglalkozasMegadasaKotelezo); } } else { if (!model.TTFModel.OsztalyID.IsEntityId()) { ms.AddModelError("TTFModel_OsztalyID", StringResourcesUtil.GetString(4569)); //Osztály megadása kötelező } if (!model.TTFModel.TantargyID.IsEntityId()) { ms.AddModelError("TTFModel_TantargyID", StringResourcesUtil.GetString(2564)); //Tantárgy megadása kötelező } } if (!model.TeremID.IsEntityId()) { ms.AddModelError("TeremID", StringResourcesUtil.GetString(2493)); //Terem megadása kötelező } if (!model.OraErvenyessegKezdete.HasValue) { ms.AddModelError("OraErvenyessegKezdete", StringResourcesUtil.GetString(4575)); //Óra érvényességi idejének kezdete kötelező } if (!model.OraErvenyessegVege.HasValue) { ms.AddModelError("OraErvenyessegVege", StringResourcesUtil.GetString(4576)); //Óra érvényességi idejének vége kötelező } if (model.OraErvenyessegVege < model.OraErvenyessegKezdete) { ms.AddModelError("OraErvenyessegVege", StringResourcesUtil.GetString(4580)); //Az óra érvényességének vége későbbre kell hogy essen, mint a kezdete } if (model.OraVege <= model.OraKezdete) { ms.AddModelError("OraVege", StringResourcesUtil.GetString(4581)); //Az óra vége későbbre kell hogy essen, mint a kezdete } if (!model.HetirendID.IsEntityId()) { ms.AddModelError("HetirendID", ErrorResource.HetirendMegadasaKotelezo); //Órarendi nap hetirendje megadása kötelező! } if (model.CsengetesiRendOraID.IsEntityId()) { if (!model.CsengetesiRendID.HasValue || model.CsengetesiRendID < 0) { ms.AddModelError("CsengetesiRendID", OrarendResource.CsengetesiRendMegadasaKotelezo); } if (!model.Oraszam.HasValue || model.Oraszam < 0) { ms.AddModelError("Oraszam", OrarendResource.OraszamMegadasaKotelezo); } } // ha az érvényesség kezdete és vége megegyezik, és az rendkívüli tanítási nap akkor nem kell dátum validáció bool kellDatumValidacio = model.OraErvenyessegKezdete.Value.Date != model.OraErvenyessegVege.Value.Date && model.CsengetesiRendID.HasValue; var isNyariSzakmaiGyakorlat = model.TTFModel?.OsztalyID != null && new CsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).IsNyariSzakmaiGyakorlatos(model.TTFModel.OsztalyID.Value); var tanevrendHelper = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (kellDatumValidacio) { kellDatumValidacio = !tanevrendHelper.IsRendkivuliTanitasiNap(model.OraErvenyessegKezdete.Value); } TanevHelper helper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var tanev = helper.GetTanevInfo(); kellDatumValidacio = tanev.IsKovetkezo || kellDatumValidacio; if ((kellDatumValidacio || isNyariSzakmaiGyakorlat) && model.TTFModel.OsztalyID.HasValue) { DateTime elsoNap = tanev.OraFelvetelKezdete; DateTime utolsoNap = model.IsFromSzervezet ? tanev.UtolsoNap : tanev.UtolsoTanitasiNap; if (isNyariSzakmaiGyakorlat) { var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()); elsoNap = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_kezd_datum).Value; utolsoNap = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_veg_datum).Value; } if (model.OraErvenyessegKezdete < elsoNap) { ms.AddModelError("OraErvenyessegKezdete", isNyariSzakmaiGyakorlat ? ErrorResource.OraErvenyessegNyariGyakorlatKezdet : StringResourcesUtil.GetString(3087)); //Az óra érvényessége nem lehet korábban, mint az első tanítási nap! } if (model.IsTanoranKivuliFoglalkozas ? model.OraErvenyessegVege.Value.Date > utolsoNap.AddDays(1) : model.OraErvenyessegVege > utolsoNap.AddDays(1)) //Az utolsó nap 0 óra 0 percet tartalmaz, de aznap napközben még lehet óra, ezért a következő nap 0:00 időpont a jó. { ms.AddModelError("OraErvenyessegVege", isNyariSzakmaiGyakorlat ? ErrorResource.OraErvenyessegNyariGyakorlatVege : StringResourcesUtil.GetString(3088)); //Az óra érvényessége nem lehet később, mint az utolsó tanítási nap! } } var checkDate = model.ID.HasValue ? model.ModificationDate.Date : model.OraErvenyessegKezdete.Value.ToLocalTime().Date; if (!tanevrendHelper.IsOrarendiNap(checkDate, model.TTFModel.OsztalyID, model.IsFromSzervezet)) { ms.AddModelError("OraKezdete", OrarendResource.NemOrarendiNapHibaUzenet); } return ms; } public static void SetHetNapja(OrarendiOraModel model, DayOfWeek day) { switch (day) { case DayOfWeek.Monday: model.HetNapja = (int)HetNapjaTipusEnum.Hetfo; model.HetNapjaSzoveg = HetNapjaTipusEnum.Hetfo.GetDisplayName(ClaimData.SelectedTanevID.Value); break; case DayOfWeek.Tuesday: model.HetNapja = (int)HetNapjaTipusEnum.Kedd; model.HetNapjaSzoveg = HetNapjaTipusEnum.Kedd.GetDisplayName(ClaimData.SelectedTanevID.Value); break; case DayOfWeek.Wednesday: model.HetNapja = (int)HetNapjaTipusEnum.Szerda; model.HetNapjaSzoveg = HetNapjaTipusEnum.Szerda.GetDisplayName(ClaimData.SelectedTanevID.Value); break; case DayOfWeek.Thursday: model.HetNapja = (int)HetNapjaTipusEnum.Csutortok; model.HetNapjaSzoveg = HetNapjaTipusEnum.Csutortok.GetDisplayName(ClaimData.SelectedTanevID.Value); break; case DayOfWeek.Friday: model.HetNapja = (int)HetNapjaTipusEnum.Pentek; model.HetNapjaSzoveg = HetNapjaTipusEnum.Pentek.GetDisplayName(ClaimData.SelectedTanevID.Value); break; case DayOfWeek.Saturday: model.HetNapja = (int)HetNapjaTipusEnum.Szombat; model.HetNapjaSzoveg = HetNapjaTipusEnum.Szombat.GetDisplayName(ClaimData.SelectedTanevID.Value); break; case DayOfWeek.Sunday: model.HetNapja = (int)HetNapjaTipusEnum.Vasarnap; model.HetNapjaSzoveg = HetNapjaTipusEnum.Vasarnap.GetDisplayName(ClaimData.SelectedTanevID.Value); break; } } public static WarningValidationModel CheckUtkozesValidation(OraValidationCo oraValidationCo, string successFunction, string closeFunction = null, string errMsgOraData = null, bool isPrevalidation = false, bool isForDelete = false) { bool tortentValtozas; try { tortentValtozas = new OrarendiOraHelper(ConnectionTypeExtensions.GetSessionConnectionType()).CheckUtkozesValidation(oraValidationCo, errMsgOraData, isPrevalidation, isForDelete: isForDelete); } catch (BlException ex) { throw new StatusError(HttpStatusCode.BadRequest, ex.Message) { CloseFunction = string.IsNullOrWhiteSpace(closeFunction) ? oraValidationCo.OrarendiOraValidationCo.JSHelperNev + ".modCancel" : closeFunction }; } if (tortentValtozas) { return new WarningValidationModel() { Msg = oraValidationCo.Msg.ToString(), ErrorMsg = oraValidationCo.ErrorMsg.ToString(), SuccessFunction = successFunction, CloseFunction = closeFunction }; } throw new StatusError(HttpStatusCode.NoContent, string.Empty) { CloseFunction = oraValidationCo.OrarendiOraValidationCo.JSHelperNev + ".modCancel" }; } public static List GetAktualHetirendList() { var dictionary = FrameworkEnumExtensions.EnumToList((int)GeneratedAdatszotarTipusEnum.HetiRendTipus, ClaimData.SelectedTanevID.Value, false, visibleOnly: false); var mindenHetVal = ((int)HetiRendTipusEnum.MindegyikHet).ToString(); var list = new List(); var helper = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var HetirendDictionary = helper.GetTanevHetirendTipusok(); if (!HetirendDictionary.ContainsKey(mindenHetVal)) { list.Add(new SelectListItem() { Text = dictionary[mindenHetVal], Value = mindenHetVal }); } foreach (var dictionaryItem in HetirendDictionary) { list.Add(new SelectListItem() { Text = dictionaryItem.Value, Value = dictionaryItem.Key }); } return list; } public static void SetCsengetesiRendAndOraszam(OrarendiOraModel model) { var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var (csengetesiRendId, oraSzam) = helper.GetCsengetesiRendAndOraszam(model.CsengetesiRendOraID); model.CsengetesiRendID = csengetesiRendId; model.Oraszam = oraSzam; } public static DateTime CreateLocalDateTimeBasedOnDateAndTime(DateTime date, DateTime time) { TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time"); var datum = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, 0, DateTimeKind.Utc), tzi); return new DateTime(date.Year, date.Month, date.Day, datum.Hour, datum.Minute, 0, DateTimeKind.Local); } public static (int minOraszam, int maxOraszam) GetMinMaxOraszam(int csengetesirendId) { return new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetMinMaxOraszam(csengetesirendId); } public static OraValidationCo SetOraValidationCoFromOrarendiOraModel(OrarendiOraModel model) { if (model.IsTanoranKivuliFoglalkozas) { var OraKezdeteLocalTime = model.OraKezdete.Value.ToLocalTime(); var OraVegeLocalTime = model.OraVege.Value.ToLocalTime(); model.OraKezdete = new DateTime(1900, 1, 1, OraKezdeteLocalTime.Hour, OraKezdeteLocalTime.Minute, 0, DateTimeKind.Local); model.OraVege = new DateTime(1900, 1, 1, OraVegeLocalTime.Hour, OraVegeLocalTime.Minute, 0, DateTimeKind.Local); model.Oraszam = null; } if (model.CsengetesiRendID.IsEntityId()) { PostProcessOraszam(model); var (minOraszam, maxOraszam) = GetMinMaxOraszam(model.CsengetesiRendID.Value); if (model.Oraszam > maxOraszam || model.Oraszam < minOraszam) { throw new StatusError(HttpStatusCode.BadRequest, string.Format(OrarendResource.OraszamError, minOraszam.ToString(), maxOraszam.ToString())); } } PostProcessHetirend(model); if (model.TTFModel != null && model.TTFModel.OsztalyID.IsEntityId() && model.OraErvenyessegKezdete.Value.Date == model.OraErvenyessegVege.Value.Date) { model.IsEgyediNap = TanevRendjeLogic.IsEgyediNapByDateAndOsztalyCsoportId(model.OraErvenyessegKezdete.Value.Date, model.TTFModel.OsztalyID.Value); } PostProcessHetnapja(model); return model.CreateOraValidationCo(); } public static OraValidationCo SetOraValidationCoFromCopyOrarendiElemModel(OrarendiOraHelper orarendiOraHelper, CopyOrarendiElemModel copyOrarendiElemModel) { var napData = new NaptariNapHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNaptariNapData(copyOrarendiElemModel.dateFrom.Date); if (napData.Tables[0].Rows.Count == 1) { OrarendiOraCO co = orarendiOraHelper.GetOrarendiOraById(copyOrarendiElemModel.copyId); orarendiOraHelper.GetOrarendiOraTulajdonsagok(co, copyOrarendiElemModel.copyId); int? csengetesiRendOraId = default; if (copyOrarendiElemModel.oraszam > -1) { csengetesiRendOraId = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsengetesiRendOraId(co.CsengetesiRendID.Value, copyOrarendiElemModel.oraszam); } OrarendiOraModel model = new OrarendiOraModel { CsengetesiRendID = co.CsengetesiRendID, HetirendID = co.Hetirend, CsengetesiRendOraID = csengetesiRendOraId.HasValue ? csengetesiRendOraId.Value : co.CsengetesiRendOraID, HetNapja = napData.Tables[0].Rows[0].Field("Hetnapja"), OraErvenyessegKezdete = co.OraErvenyessegKezdete, OraErvenyessegVege = co.OraErvenyessegVege, OraKezdete = copyOrarendiElemModel.dateFrom, OraVege = copyOrarendiElemModel.dateTo, Oraszam = copyOrarendiElemModel.oraszam, OsztalyCsoportId = co.OsztalyCsoportId, TanarNev = co.TanarNev, TeremID = co.TeremID, TantargyNev = co.TantargyNev, ModositasiIdoszakTipus = (int)OraModositasiIdoszakTipus.TeljesIdoszak, IsModification = false, ModificationDate = copyOrarendiElemModel.dateFrom, IKTTanora = co.IKTTanora, Bontott = co.Bontott, IsFelnottoktatasiSzerzodes = co.IsFelnottoktatasiSzerzodes, NemzetisegiOra = co.NemzetisegiOra, MindennaposTestneveles = co.MindennaposTestneveles, IPRTanora = co.IPRTanora, Differencialt = co.Differencialt, Kooperativ = co.Kooperativ, Meres = co.Meres, Drama = co.Drama, Tiop = co.Tiop, ParhuzamosOra = co.ParhuzamosOra, NemSzakrendszeruOra = co.NemSzakrendszeruOra, TAMOPOra = co.TAMOPOra, KIPOra = co.KIPOra, VEKOP73317 = co.VEKOP73317, KAPOra = co.KAPOra, Tulora = co.Tulora, Multikulturalis = co.Multikulturalis, EFOP32317 = co.EFOP32317, KomplexOra = co.KomplexOra, GINOP623 = co.GINOP623, EFOP31716EselyteremtesAKoznevelesben = co.EFOP31716EselyteremtesAKoznevelesben, EFOP33717 = co.EFOP33717, TIOP11112120120001 = co.TIOP11112120120001, DFHT = co.DFHT, Rahangolodas = co.Rahangolodas, Testmozgas = co.Testmozgas, Muveszet = co.Muveszet, Eletgyakorlat = co.Eletgyakorlat, Logika = co.Logika, TeOrad = co.TeOrad, Sorszamozando = co.Sorszamozando, DigitalisAlapProgram = co.DigitalisAlapProgram, EFOP23517201700038Miapalya = co.EFOP23517201700038Miapalya, TanevTananyaganakIsmetlese = co.TanevTananyaganakIsmetlese, TanevTananyaganakKiegeszitese = co.TanevTananyaganakKiegeszitese, TanulokDigitalisKeszsegfejlesztese = co.TanulokDigitalisKeszsegfejlesztese, Projektmunka = co.Projektmunka, TanulokKompenzaciosIraskeszsegFejlesztese = co.TanulokKompenzaciosIraskeszsegFejlesztese, TanulokKompenzaciosOlvasasiKepessegFejlesztese = co.TanulokKompenzaciosOlvasasiKepessegFejlesztese, TanulokMatematikaiGondolkodasiKepessegenekKompenzaciosFejlesztese = co.TanulokMatematikaiGondolkodasiKepessegenekKompenzaciosFejlesztese, TanulokNyelviKepessegenekKompenzaciosFejlesztese = co.TanulokNyelviKepessegenekKompenzaciosFejlesztese, TanulokOnmegismeresenekSegitese = co.TanulokOnmegismeresenekSegitese, TanulokOnallosagraNevelese = co.TanulokOnallosagraNevelese, TanulokTanulasszervezesiKompenzaciosTechnikajanakErositese = co.TanulokTanulasszervezesiKompenzaciosTechnikajanakErositese, TanulokOrientaciosTamogatasa = co.TanulokOrientaciosTamogatasa, TanulokSzocialitasanakFejlesztese = co.TanulokSzocialitasanakFejlesztese, TanulokTovabbhaladasatElokeszitoTevekenysegek = co.TanulokTovabbhaladasatElokeszitoTevekenysegek, PedagogusAltalJelzettEgyeniEsetkezeles = co.PedagogusAltalJelzettEgyeniEsetkezeles, ProjektmunkaTamogatasa = co.ProjektmunkaTamogatasa, DigitalisKeszsegfejlesztes = co.DigitalisKeszsegfejlesztes, KozossegiMunkaTamogatasa = co.KozossegiMunkaTamogatasa, TanoraElokeszitesenekTamogatasa = co.TanoraElokeszitesenekTamogatasa, TanoraLebonyolitasanakTamogatasa = co.TanoraLebonyolitasanakTamogatasa, NapkozisTevekenysegKeretebenEgyeniFejlesztes = co.NapkozisTevekenysegKeretebenEgyeniFejlesztes, IsEgybefuggoGyakorlat = co.IsEgybefuggoGyakorlat }; model.TTFModel = new TTFModel { FoglalkozasID = co.FoglalkozasID, OsztalyID = co.OsztalyCsoportId, TantargyID = co.TantargyId, TanarID = co.TanarId }; SetOraKezdetekAndOraVegek(model); OraValidationCo oraValidationCo = SetOraValidationCoFromOrarendiOraModel(model); oraValidationCo.OrarendiOraValidationCo.JSHelperNev = Constants.JSHelperName.OrarendiOra; oraValidationCo.OrarendiOraValidationCo.IsOraCopy = true; return oraValidationCo; } return new OraValidationCo(); } public static void SetOraKezdetekAndOraVegek(OrarendiOraModel model) { model.OraKezdete = CreateLocalDateTimeBasedOnDateAndTime(model.OraKezdete.Value, model.OraKezdete.Value); model.OraVege = CreateLocalDateTimeBasedOnDateAndTime(model.OraVege.Value, model.OraVege.Value); if (model.IsTanoranKivuliFoglalkozas && model.ModositasiIdoszakTipus == (int)OraModositasiIdoszakTipus.EgyOra) { model.OraErvenyessegKezdete = model.OraErvenyessegKezdete.Value.ToLocalTime(); model.OraErvenyessegVege = model.OraErvenyessegVege.Value.ToLocalTime(); } else if (!model.CsengetesiRendID.HasValue) //NOTE: Különben nem a popupban kiválasztott értéket kapná { model.OraErvenyessegKezdete = model.OraErvenyessegKezdete.Value.Date.AddHours(model.OraKezdete.Value.Hour).AddMinutes(model.OraKezdete.Value.Minute); model.OraErvenyessegVege = model.OraErvenyessegVege.Value.Date.AddHours(model.OraVege.Value.Hour).AddMinutes(model.OraVege.Value.Minute); } } public static void PostProcessHetirend(OrarendiOraModel model) { if (model.ModositasiIdoszakTipus == (int)OraModositasiIdoszakTipus.EgyOra) { model.HetirendID = (int)HetiRendTipusEnum.MindegyikHet; } } public static void PostProcessOraszam(OrarendiOraModel model) { if (model.CsengetesiRendID.IsEntityId()) { var orarendiOraHelper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var csengrendOraId = orarendiOraHelper.GetCsengetesiRendOraId(model.CsengetesiRendID.Value, model.Oraszam.Value); if (!csengrendOraId.IsEntityId()) { throw new StatusError(HttpStatusCode.BadRequest, OrarendResource.CsengetesiRendhezNincsCsengetesiOra); } model.CsengetesiRendOraID = csengrendOraId.Value; } } public static void PostProcessHetnapja(OrarendiOraModel model) { if (model.OraErvenyessegKezdete.Value.Date == model.OraErvenyessegVege.Value.Date) { var ds = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevrendekOsztalyCsoportokkal(model.OraErvenyessegKezdete.Value.Date, model.OraErvenyessegVege.Value.Date); foreach (DataRow row in ds.Tables[0].Rows) { if (row.Field("OrarendiNap_BOOL") == true) { var hetNapja = row.Field("HetNapja"); if (hetNapja.HasValue && hetNapja.Value != model.HetNapja) { var osztalyCsoportId = row.Field("OsztalyCsoportId"); if (osztalyCsoportId.HasValue && osztalyCsoportId == model.TTFModel.OsztalyID) { model.HetNapja = hetNapja.Value; break; } if (SDAConvert.ToBooleanFromTF(row.Field("Global"))) { model.HetNapja = hetNapja.Value; break; } } } } } } } }