using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Web.Mvc; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; using Kreta.Core; using Kreta.Core.Exceptions; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.Resources; using Kreta.Web.Areas.Adminisztracio.ApiControllers; using Kreta.Web.Areas.Adminisztracio.Models; using Kreta.Web.Areas.Orarend.Models; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.TabStrip; using Kreta.Web.Models.EditorTemplates; using Kreta.Web.Security; namespace Kreta.Web.Areas.Adminisztracio.Controllers { [MvcRoleClaimsAuthorize(true)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue, KretaClaimPackages.IsSzirIntezmeny.ClaimValue)] [MvcRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public class HelyettesitesekKezeleseController : Controller { public ActionResult Index() { var model = new HelyettesitesekKezeleseModel(); var helper = new OrarendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); model.HetirendJson = helper.GetHetirendek(); model.NaptariHetekHetirendJson = helper.GetNaptariHetekHetirendek(); var calendarMinMaxCo = helper.GetCalendarMinMax(); model.CalendarMinTime = calendarMinMaxCo.CalendarMin; model.CalendarMaxTime = calendarMinMaxCo.CalendarMax; model.CsengetesiRendMinTime = new TimeSpan(); model.CsengetesiRendMaxTime = new TimeSpan(0, 25, 0); model.TanarId = 0; //Ne jelenjen meg semmi sem a calendarban model.TabList = GetHelyettesitesekKezeleseTabs(); return View("Index", model); } public List GetHelyettesitesekKezeleseTabs(CalendarModel calendarModel = null) { var list = new List { new TabStripItemModel { ItemId = "0", ItemName = StringResourcesUtil.GetString(4260) /*Tanórai helyettesítések*/, Area = "Adminisztracio", Controller = "HelyettesitesekKezelese", Action = "GetTanoraiHelyettesitesek", RouteParameters = new Dictionary { {"index", "0"} } }, new TabStripItemModel { ItemId = "1", ItemName = StringResourcesUtil.GetString(4261) /*Napirend helyettesítések*/, Area = "Adminisztracio", Controller = "HelyettesitesekKezelese", Action = "GetTanoranKivuliHelyettesitesek", RouteParameters = new Dictionary { {"index", "1"} } } }; return list; } public ActionResult GetTanoraiHelyettesitesek(int index = 0) { var model = new HelyettesitesekKezeleseOrarendModel { Index = index }; return View("TanoraiHelyettesitesek_Tab", model); } public ActionResult GetTanoranKivuliHelyettesitesek(int index = 1) { var model = new HelyettesitesekKezeleseOrarendModel { Index = index }; return View("TanoranKivuliHelyettesitesek_Tab", model); } public ActionResult OpenHelyettesitesPopUp(CalendarModel model) { try { var felhasznalokOnlyAlkalmazottSzerepkorIds = new FelhasznaloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetFelhasznaloIdsOnlyAlkalmazottSzerepkor(); PopUpModel popUpModel; if (model.OraType == CalendarOraTypeEnum.TanitasiOra || model.OraType == CalendarOraTypeEnum.TanoranKivuliNaplozottFoglalkozas) { var nemMegtartottHelyettesitesBevitelModel = new NemMegtartottHelyettesitesBevitelModel { HelyettesitesBevitelCalendarEventId = model.EventId, HelyettesitesBevitelOraKezdeteDate = model.Start, HelyettesitesBevitelOraVegeDate = model.End }; var helper = new TanoraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var tanoraCo = helper.GetTanorakAdatok(model.EventId); if (!tanoraCo.AdminAltalKiirt) { return null; } popUpModel = new PopUpModel(nemMegtartottHelyettesitesBevitelModel, "ElmaradtOra_Info"); popUpModel = popUpModel.AddBtn(popUpModel, "HelyettesitesBevitelCancel", CommonResource.Megse, "HelyettesitesBevitelHelper.ElmaradtOraCancel"); popUpModel = popUpModel.AddBtn(popUpModel, "HelyettesitesBevitelNemMegtartottHelyettesites", CommonResource.Torles, "HelyettesitesBevitelHelper.NemMegtartottOraTorlese"); ModelState.Clear(); return PartialView(Constants.General.PopupView, popUpModel); } //NOTE: Ahhoz, hogy az oldal gyorsan töltődjön be, egyszer szedjük le a szűrési feltételhez kapcsolatos co-kat és azokon végezzük el a szűréseket mind a 10 listához! var orarendiOra = new OrarendiOraHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOrarendiOraById(model.EventId); var oraDatum = model.Start.Date; var startDate = new DateTime(model.Start.Date.Year, model.Start.Date.Month, model.Start.Date.Day, orarendiOra.OraKezdete.Hour, orarendiOra.OraKezdete.Minute, orarendiOra.OraKezdete.Second); var endDate = new DateTime(model.Start.Date.Year, model.Start.Date.Month, model.Start.Date.Day, orarendiOra.OraVege.Hour, orarendiOra.OraVege.Minute, orarendiOra.OraVege.Second); var nemkotottMunkaido = new NemKotottMunkaidoHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetNemKotottMunkaIdoHelyettesiteshez(startDate, endDate); //NOTE: 00. - MINDEN SZŰRÉSRE ÉRVÉNYES // A helyettesítés napján jogviszonnyal rendelkező alkalmazottak // A helyettesítés napján nem tartósan távol levő alkalmazottak // A helyettesítés napján nem betöltetlen álláshelyű alkalmazottak // A tanár nem helyettesítheti a saját óráját var alkalmazottCoList = new AlkalmazottHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetAlkalmazottCoList() .Where(x => (!x.AlkalmazasKezdeteDate.HasValue || x.AlkalmazasKezdeteDate <= oraDatum) && (!x.AlkalmazasMegszuneseDate.HasValue || oraDatum <= x.AlkalmazasMegszuneseDate) && !x.IsTartosanTavolLevo && !x.IsBetoltetlenAllashely && x.Id != orarendiOra.TanarId).OrderBy(x => x.FelhasznaloNyomtatasiNev).ToList(); var tanarCoList = alkalmazottCoList.Where(z => !felhasznalokOnlyAlkalmazottSzerepkorIds.Contains(z.Id)).ToList(); //NOTE: Előszedjük a vizsgálatokhoz, minden erre az időpontra(napirendnél nem vesszük figyelembe az óra sorszámát, mert nincs) felvett órarendi órát és tanítási órat a hozzájuk tartozó helyettesítésekkel a sp_GetOrarend tárolteljárást használva! // Ha órarendi óra, akkor meg kell vizsgálnunk, hogy... // ...nem egyezik-e meg a kiválasztott órával. // ...beleesik-e az érvényességi időbe a kiválasztott óra. // Ha tanítási óra, akkor meg kell vizsgálnunk, hogy... // ...meg lett-e tarva. var orarendiEsTanitasiOraList = new OrarendHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOrarendiEsTanitasiOrakByDays(model.Start, model.End, OrarendTipusEnum.Minden) .Where(x => ((x.OraTipus == nameof(CalendarOraTypeEnum.OrarendiOra) && x.Id != orarendiOra.ID && x.OraErvenyessegKezdete <= oraDatum && (!x.OraErvenyessegVege.HasValue || oraDatum <= x.OraErvenyessegVege)) || (x.OraTipus == nameof(CalendarOraTypeEnum.TanitasiOra) && x.IsMegtartott)) && x.OraKezdete.HasValue && x.OraVege.HasValue && ((x.OraKezdete.Value <= model.Start && x.OraVege.Value > model.Start) || (x.OraKezdete.Value > model.Start && x.OraKezdete.Value < model.End) || (x.OraVege.Value >= model.End && x.OraKezdete.Value < model.End))).ToList(); //NOTE: Előszedjük a vizsgálatokhoz, a tantárgyfelosztásokat! var tantargyfelosztasCoList = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTantargyfelosztasCoList(); //NOTE: Előszedjük a vizsgálatokhoz, az osztályokat és csoportokat! var osztalyCoList = new OsztalyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOsztalyCoList(); var csoportCoList = new CsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsoportCoList(); var osztalyCsoportId = orarendiOra.OsztalyCsoportId.Value; var isOsztaly = osztalyCoList.Any(x => x.Id == osztalyCsoportId); var osztalyIdList = new List(); List csoportIdList; if (isOsztaly) { //NOTE: Ha osztály előszedjük az osztály id-t és a hozzá tartozó bontott csoportok id-ját! osztalyIdList = osztalyCoList.Where(x => x.Id == osztalyCsoportId).Select(x => x.Id).ToList(); csoportIdList = csoportCoList.Where(x => x.OsztalyBontasId == osztalyCsoportId || x.Id == osztalyCsoportId).Select(x => x.Id).ToList(); } else { //NOTE: Ha csoport... var osztalyBontasId = csoportCoList.Single(x => x.Id == osztalyCsoportId).OsztalyBontasId; if (osztalyBontasId.IsEntityId()) { //NOTE: ...és van osztálybontása, akkor előszedjük a hozzá tartozó osztály id-t és az ahhoz tartozó bontott csoportok id-ját! osztalyIdList = osztalyCoList.Where(x => x.Id == osztalyBontasId).Select(x => x.Id).ToList(); csoportIdList = csoportCoList.Where(x => x.OsztalyBontasId.IsEntityId() && osztalyIdList.Contains(x.OsztalyBontasId.Value)).Select(x => x.Id).ToList(); } else { //NOTE: ...és nincs osztálybontása, akkor csak simán előszedjük a csoport id-t! csoportIdList = csoportCoList.Where(x => x.Id == osztalyCsoportId).Select(x => x.Id).ToList(); } } //NOTE: Össze union-ozzuk, az osztályok és csoportok id-ját, a szűrésekhez! var osztalyCsoportIdList = osztalyIdList.Union(csoportIdList).ToList(); var helyettesitesBevitelModel = new HelyettesitesBevitelModel { HelyettesitesBevitelCalendarEventId = model.EventId, HelyettesitesBevitelHelyettesitesId = model.HelyettesitesId, HelyettesitesBevitelCalendarOraType = model.OraType, HelyettesitesBevitelOraKezdeteDate = model.Start, HelyettesitesBevitelOraVegeDate = model.End, HelyettesitesBevitelHelyettesitesGyakorisagTipus = (int)HelyettesitesGyakorisagTipusEnum.Egyedi, HelyettesitesBevitelTartosHelyettesitesVegeDate = DateTime.Today, HelyettesitesBevitelHelyettesitesTipusId = (int)HelyettesitesTipusEnum.szakszeru_helyettesites, HelyettesitesOsztalybanSzakosTanarList = GetHelyettesitesOsztalybanSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), HelyettesitesNemOsztalybanSzakosTanarList = GetHelyettesitesNemOsztalybanSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), HelyettesitesOsztalybanNemSzakosTanarList = GetHelyettesitesOsztalybanNemSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), HelyettesitesNemOsztalybanNemSzakosTanarList = GetHelyettesitesNemOsztalybanNemSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), OsszevonasOsztalybanSzakosTanarList = GetOsszevonasOsztalybanSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), OsszevonasNemOsztalybanSzakosTanarList = GetOsszevonasNemOsztalybanSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), OsszevonasOsztalybanNemSzakosTanarList = GetOsszevonasOsztalybanNemSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), OsszevonasNemOsztalybanNemSzakosTanarList = GetOsszevonasNemOsztalybanNemSzakosTanarList(tanarCoList, orarendiEsTanitasiOraList, tantargyfelosztasCoList, osztalyCsoportIdList, orarendiOra.TantargyId.Value, nemkotottMunkaido), FelugyeletTanarList = GetFelugyeletTanarList(alkalmazottCoList), OsszesTanarList = GetOsszesTanarList(alkalmazottCoList), IsTulora = orarendiOra.Tulora, HelyettesitesTitle = $"{OrarendResource.HelyettesitesFelviteleEsModositasa} - {orarendiOra.TanarAlkalmazottNev ?? orarendiOra.TanarNev} - {orarendiOra.TantargyNev} - {orarendiOra.OsztalyCsoportNev}" }; if (model.HelyettesitesId.IsEntityId()) { var api = new HelyettesitesekKezeleseApiController(); var data = api.GetHelyettesitesBevitelData(model.HelyettesitesId.Value); helyettesitesBevitelModel.HelyettesitesBevitelHelyettesitesId = data.HelyettesitesBevitelHelyettesitesId; helyettesitesBevitelModel.HelyettesitesBevitelGroupId = data.HelyettesitesBevitelGroupId; helyettesitesBevitelModel.HelyettesitesBevitelTanarId = data.HelyettesitesBevitelTanarId; helyettesitesBevitelModel.HelyettesitesBevitelTanarNev = data.HelyettesitesBevitelTanarNev; helyettesitesBevitelModel.HelyettesitesBevitelHelyettesitesTipusId = data.HelyettesitesBevitelHelyettesitesTipusId; helyettesitesBevitelModel.HelyettesitesBevitelHelyettesitesOka = data.HelyettesitesBevitelHelyettesitesOka; } popUpModel = new PopUpModel(helyettesitesBevitelModel, "Helyettesites_Bevitel"); popUpModel = popUpModel.AddBtn(popUpModel, "HelyettesitesBevitelCancel", CommonResource.Megse, "HelyettesitesBevitelHelper.HelyettesitesCancel"); popUpModel = popUpModel.AddBtn(popUpModel, "HelyettesitesBevitelSave", CommonResource.Mentes, "HelyettesitesBevitelHelper.HelyettesitesSave"); popUpModel = model.HelyettesitesId.IsEntityId() ? popUpModel.AddBtn(popUpModel, "HelyettesitesBevitelDelete", CommonResource.Torles, "HelyettesitesBevitelHelper.HelyettesitesDelete") : popUpModel.AddBtn(popUpModel, "HelyettesitesBevitelNemMegtartottHelyettesites", OrarendResource.ElmaradtOra, "HelyettesitesBevitelHelper.SaveNemMegtartottHelyettesites"); popUpModel = popUpModel.AddBtn(popUpModel, "OpenOracserePopUp", CommonResource.Oracsere, "HelyettesitesBevitelHelper.OpenOracserePopUp"); ModelState.Clear(); return PartialView(Constants.General.PopupView, popUpModel); } catch (BlException ex) { throw new StatusError(HttpStatusCode.BadRequest, ex.Message); } } //NOTE: 01. - HELYETTESÍTÉS - Osztályban tanító, szakos helyettesítő // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában van lyukas órája, azaz nincs órarendi órája, tanítási órája és helyettesítése a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) van rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával van rögzített tantárgyfelosztás eleme private List GetHelyettesitesOsztalybanSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => orarendiEsTanitasiOraList.All(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value != tanar.Id : orarendiEsTanitasiOra.TanarId != tanar.Id) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && osztalyCsoportIdList.Any(x => x == tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && tantargyfelosztas.TantargyId == tantargyId) && !nemkotottMunkaido.Select(x => x.TanarId).Contains(tanar.Id)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 02. - HELYETTESÍTÉS - Osztályban nem tanító, szakos // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában van lyukas órája, azaz nincs órarendi órája, tanítási órája és helyettesítése a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) nincs rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával van rögzített tantárgyfelosztás eleme private List GetHelyettesitesNemOsztalybanSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => orarendiEsTanitasiOraList.All(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value != tanar.Id : orarendiEsTanitasiOra.TanarId != tanar.Id) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => osztalyCsoportIdList.All(x => x != tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && tantargyfelosztas.TantargyId == tantargyId) && !nemkotottMunkaido.Select(x => x.TanarId).Contains(tanar.Id)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 03. - HELYETTESÍTÉS - Osztályban tanító, nem szakos // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában van lyukas órája, azaz nincs órarendi órája, tanítási órája és helyettesítése a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) van rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával nincs rögzített tantárgyfelosztás eleme private List GetHelyettesitesOsztalybanNemSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => orarendiEsTanitasiOraList.All(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value != tanar.Id : orarendiEsTanitasiOra.TanarId != tanar.Id) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && osztalyCsoportIdList.Any(x => x == tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => tantargyfelosztas.TantargyId != tantargyId) && !nemkotottMunkaido.Select(x => x.TanarId).Contains(tanar.Id)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 04. - HELYETTESÍTÉS - Osztályban nem tanító, nem szakos // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában van lyukas órája, azaz nincs órarendi órája, tanítási órája és helyettesítése a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) nincs rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával nincs rögzített tantárgyfelosztás eleme private List GetHelyettesitesNemOsztalybanNemSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => orarendiEsTanitasiOraList.All(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value != tanar.Id : orarendiEsTanitasiOra.TanarId != tanar.Id) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => osztalyCsoportIdList.All(x => x != tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => tantargyfelosztas.TantargyId != tantargyId) && !nemkotottMunkaido.Select(x => x.TanarId).Contains(tanar.Id) && tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 05. - ÖSSZEVONÁS - Osztályban tanító, szakos helyettesítő // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában nincs lyukas órája, azaz vagy órarendi órája vagy tanítási órája vagy helyettesítése van a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) van rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával van rögzített tantárgyfelosztás eleme private List GetOsszevonasOsztalybanSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => (orarendiEsTanitasiOraList.Any(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value == tanar.Id : orarendiEsTanitasiOra.TanarId == tanar.Id) || nemkotottMunkaido.Any(x => x.TanarId == tanar.Id && !x.Megtartott)) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && osztalyCsoportIdList.Any(x => x == tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && tantargyfelosztas.TantargyId == tantargyId)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 06. - ÖSSZEVONÁS - Osztályban nem tanító, szakos // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában nincs lyukas órája, azaz vagy órarendi órája vagy tanítási órája vagy helyettesítése van a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) nincs rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával van rögzített tantárgyfelosztás eleme private List GetOsszevonasNemOsztalybanSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => (orarendiEsTanitasiOraList.Any(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value == tanar.Id : orarendiEsTanitasiOra.TanarId == tanar.Id) || nemkotottMunkaido.Any(x => x.TanarId == tanar.Id && !x.Megtartott)) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => osztalyCsoportIdList.All(x => x != tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && tantargyfelosztas.TantargyId == tantargyId)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 07. - ÖSSZEVONÁS - Osztályban tanító, nem szakos // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában nincs lyukas órája, azaz vagy órarendi órája vagy tanítási órája vagy helyettesítése van a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) van rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával nincs rögzített tantárgyfelosztás eleme private List GetOsszevonasOsztalybanNemSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => (orarendiEsTanitasiOraList.Any(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value == tanar.Id : orarendiEsTanitasiOra.TanarId == tanar.Id) || nemkotottMunkaido.Any(x => x.TanarId == tanar.Id && !x.Megtartott)) && tantargyfelosztasCoList.Any(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id && osztalyCsoportIdList.Any(x => x == tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => tantargyfelosztas.TantargyId != tantargyId)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 08. - ÖSSZEVONÁS - Osztályban nem tanító, nem szakos // Van beállítva pedagógus fokozata (nem ’Na’) // Adott órában nincs lyukas órája, azaz vagy órarendi órája vagy tanítási órája vagy helyettesítése van a tanárnak // A helyettesítendő óra osztályához (vagy csoportjához) nincs rögzített tantárgyfelosztás eleme (az osztályoknál az osztálybontott csoportokat is vegyük figyelembe) // A helyettesítendő óra tantárgyával nincs rögzített tantárgyfelosztás eleme private List GetOsszevonasNemOsztalybanNemSzakosTanarList(List tanarCoList, List orarendiEsTanitasiOraList, List tantargyfelosztasCoList, List osztalyCsoportIdList, int tantargyId, List nemkotottMunkaido) { var tanarCo = tanarCoList.Where(tanar => (orarendiEsTanitasiOraList.Any(orarendiEsTanitasiOra => orarendiEsTanitasiOra.HelyettesitoTanarId.IsEntityId() ? orarendiEsTanitasiOra.HelyettesitoTanarId.Value == tanar.Id : orarendiEsTanitasiOra.TanarId == tanar.Id) || nemkotottMunkaido.Any(x => x.TanarId == tanar.Id && !x.Megtartott)) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => osztalyCsoportIdList.All(x => x != tantargyfelosztas.OsztalyCsoportId)) && tantargyfelosztasCoList.Where(tantargyfelosztas => tantargyfelosztas.TanarId == tanar.Id).All(tantargyfelosztas => tantargyfelosztas.TantargyId != tantargyId)); if (!ClaimData.IsNszfhIntezmeny) { tanarCo = tanarCo.Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na); } var tanarDictionay = CreateAlkalmazottDictionary(tanarCo); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 09. - FELÜGYELET - Egyéb alkalmazott (nem pedagógus) // Nincs beállítva pedagógus fokozata (ahol ’Na’ a beállított érték) // NINCS SZŰRÉS LYUKAS ÓRÁKRA // NINCS SZŰRÉS OSZTÁLYCSOPORTHOZ TARTOZÓ TTF SZŰRÉSRE // NINCS SZŰRÉS TANTÁRGYHOZ TARTOZÓ TTF SZŰRÉSRE private List GetFelugyeletTanarList(List tanarCoList) { var tanarDictionay = CreateAlkalmazottDictionary(tanarCoList .Where(tanar => !tanar.BesorolasiFokozatTipusId.IsEntityId() || tanar.BesorolasiFokozatTipusId.Value == (int)BesorolasiFokozatTipusEnum.na)); var result = tanarDictionay.ToSelectListItemList(); return result; } //NOTE: 10. - ÖSSZES PEDAGÓGUS // Van beállítva pedagógus fokozata (nem ’Na’) // NINCS SZŰRÉS LYUKAS ÓRÁKRA // NINCS SZŰRÉS OSZTÁLYCSOPORTHOZ TARTOZÓ TTF SZŰRÉSRE // NINCS SZŰRÉS TANTÁRGYHOZ TARTOZÓ TTF SZŰRÉSRE private List GetOsszesTanarList(List tanarCoList) { var tanarDictionay = CreateAlkalmazottDictionary(tanarCoList .Where(tanar => tanar.BesorolasiFokozatTipusId.IsEntityId() && tanar.BesorolasiFokozatTipusId.Value != (int)BesorolasiFokozatTipusEnum.na)); var result = tanarDictionay.ToSelectListItemList(); return result; } private IDictionary CreateAlkalmazottDictionary(IEnumerable tanarCoList) { return tanarCoList.ToDictionary(x => x.Id.ToString(), x => $"{x.FelhasznaloNyomtatasiNev}{(string.IsNullOrWhiteSpace(x.FelhasznaloOktatasiAzonosito) ? Core.Constants.General.HianyzoOktatasiAzonositoJeloles : $" ({x.FelhasznaloOktatasiAzonosito})")}"); } public ActionResult OpenOracserePopUp(int helyettesitesreKivalasztottTanarId) { var oracsereModel = new OracsereModel(); var helper = new FelhasznaloHelper(ConnectionTypeExtensions.GetSessionConnectionType()); oracsereModel.HelyettesitesreKivalasztottTanarNeve = helper.GetNyomtatasiNev(helyettesitesreKivalasztottTanarId); var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var tanev = tanevHelper.GetTanevInfo(); oracsereModel.TanevElsoNapja = tanev.KezdoNap; oracsereModel.TanevUtolsoNapja = tanev.UtolsoNap; var popUpModel = new PopUpModel(oracsereModel, "Oracsere_PopUp"); popUpModel.AddCancelBtn(popUpModel, "HelyettesitesBevitelHelper.OracsereCancel"); popUpModel.AddBtn(popUpModel, "OracsereSaveButton", CommonResource.Mentes, "HelyettesitesBevitelHelper.SaveOracsere"); return PartialView(Constants.General.PopupView, popUpModel); } } }