using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Extensions; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.BusinessLogic.Interfaces; using Kreta.BusinessLogic.Logic.Naplozas; using Kreta.BusinessLogic.Logic.Naplozas.Elokeszites; using Kreta.BusinessLogic.Logic.Naplozas.Validacio; using Kreta.BusinessLogic.Security; using Kreta.Core.Exceptions; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Resources; using Kreta.Web.Areas.Feljegyzes.Models; using Kreta.Web.Areas.Orarend.Models; using Kreta.Web.Areas.TanuloErtekeles.Controllers; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.TabStrip; using Kreta.Web.Models.EditorTemplates; using Kreta.Web.Security; using Kreta.Web.Utils; namespace Kreta.Web.Areas.Orarend.Controllers { [MvcRoleClaimsAuthorize(true)] [MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)] [MvcRolePackageAuthorize(KretaClaimPackages.Naplo.ClaimValue)] public class TanariOrarendController : BaseTanariOrarendController { private IKretaAuthorization Authorization { get; } private readonly IFileServiceHelper fileServiceHelper; public TanariOrarendController(IKretaAuthorization authorization, IFileServiceHelper fileServiceHelper) : base(authorization, fileServiceHelper) { Authorization = authorization; this.fileServiceHelper = fileServiceHelper ?? throw new ArgumentNullException(nameof(fileServiceHelper)); } public ActionResult Index() { var dualisOktato = Authorization.IsValidDualisOktato(); var model = new TanariOrarendModel(); model.SzervezetTipusId = dualisOktato ? (int)SzervezetTipusEnum.Dualis : (int?)null; var orarendHelper = new OrarendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var naplozarasLogic = new NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType()); var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()); model.IsNemKellNemKotott = dualisOktato || systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.kotott_munkaido_nevelesseloktatassal_le_nem_kotott_resz_kezelesenek_tiltasa); var fogadooraMegjelenik = !dualisOktato && systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Fogadoorak_megjelenitese) && !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.IsDualisKepzohelyiOktato.ClaimValue); model.HetirendJson = orarendHelper.GetHetirendek(); model.NaptariHetekHetirendJson = orarendHelper.GetNaptariHetekHetirendek(dualisOktato); model.LezartOsztalyokEsOsztalybontottCsoportokIdList = naplozarasLogic.GetLezartOsztalyokEsBontottCsoportjaik(); model.FelhasznalodTanarId = ClaimData.FelhasznaloId; model.TanevUtolsoTanitasiNap = dualisOktato ? tanevHelper.GetTanevInfo().UtolsoNap.AddDays(1) : tanevHelper.GetTanevInfo().UtolsoTanitasiNap.AddDays(1); model.RendkivuliTanitasiNapok = !dualisOktato ? tanevHelper.GetTanevRendkivuliNapok() : new List(); model.IsShowRogzitottOrak = !dualisOktato && systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.kotott_munkaido_megjelenitese); #region Calendar megjelenítés var co = orarendHelper.GetCalendarMinMax(); model.CalendarMinTime = dualisOktato ? new TimeSpan(0, 0, 0) : co.CalendarMin.Subtract(new TimeSpan(0, 15, 0)); // "15 perccel legyen előbb" model.CalendarMaxTime = dualisOktato ? new TimeSpan(23, 59, 59) : co.CalendarMax.Add(new TimeSpan(0, 15, 0)); // "15 perccel legyen később" //var csengetesiRendOrakHelper = new CsengetesiRendOrakHelper(); //DataSet ds = csengetesiRendOrakHelper.GetCsengetesiOrakKezdVeg(); model.CsengetesiRendMinTime = new TimeSpan(); model.CsengetesiRendMaxTime = new TimeSpan(0, 25, 0); #endregion Calendar megjelenítés model.ShowKerdoivPopup = new KerdoivHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetShowKerdoivPopup(ClaimData.IsAlkalmazottPedagogus); model.TabList = GetTanariOrarendTabs(fogadooraMegjelenik, dualisOktato); ViewBag.nemKotottMunkaidoStart = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Nem_kotott_munkaido_megjelenesenek_kezdoidopontja).RoundDownToNearestTargetMinute(15).ToString(); ViewBag.nemKotottMunkaidoEnd = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Nem_kotott_munkaido_megjelenesenek_zaroidopontja); ViewBag.napirendStart = dualisOktato ? model.CalendarMinTime.ToString() : systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Az_elektronikus_naplo_megjelenesenek_kezdoidopontja).RoundDownToNearestTargetMinute(15).ToString(); ViewBag.napirendEnd = dualisOktato ? model.CalendarMaxTime.ToString() : systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Az_elektronikus_naplo_megjelenesenek_zaroidopontja); ViewBag.fogadooraStart = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Fogado_Ora_Kezdoidopontja).RoundDownToNearestTargetMinute(15).ToString(); ViewBag.fogadooraEnd = systemSettingsHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Fogado_Ora_Zaroidopontja); return View("Index", model); } public ActionResult TanorakOrarendEvent(TanoraIdBeallitasModel model) { return base.TanorakOrarendEvent(model); } public ActionResult OpenNewFoglalkozasokOraPopUp(TanoraIdBeallitasModel model) { return OpenNewFoglalkozasokOraPopUp(model, false); } public ActionResult GetWizardElovalaszto(DateTime? datum = null) { return GetWizardElovalaszto(datum, false); } public ActionResult GetWizardHelyettesitesElovalaszto(DateTime? datum = null, int hiba = -1) { return GetWizardHelyettesitesElovalaszto(datum, hiba, false); } public ActionResult GetWizardOrarendioraValaszto(string startDate, string endDate, string hanyadikora, string helyettesitoId, bool isNapirend = false, bool isEgyediHelyettesites = false) { return GetWizardOrarendioraValaszto(startDate, endDate, hanyadikora, helyettesitoId, isNapirend, isEgyediHelyettesites, false); } public ActionResult GetWizardHelyettesites() { return GetWizardHelyettesites(false); } public ActionResult GetWizardOraosszevonasHelyettesites() { return GetWizardOraosszevonasHelyettesites(false); } public ActionResult GetWizardFoglalkozas(int foglalkozasFilterId, bool isNapirend = false, DateTime? datum = null, int? hanyadikOra = null) { return GetWizardFoglalkozas(foglalkozasFilterId, isNapirend, datum, hanyadikOra, false); } public ActionResult GetWizardEgyedi(int foglalkozasFilterId, DateTime datum, bool isNapirend = false, int? hanyadikOra = null) { return GetWizardEgyedi(foglalkozasFilterId, datum, isNapirend, hanyadikOra, false); } public ActionResult OpenNewNemKotottMunkaidoPopUp(CalendarModel model) { var nkmm = new NemKotottMunkaidoModel() { Datum = model.Start.ToLocalTime().Date, Kezdet = model.Start.ToLocalTime(), Veg = model.End.ToLocalTime(), TanarId = ClaimData.FelhasznaloId, isMegtartott = true, HetirendId = 1554 /*Minden héten*/ }; var pm = new PopUpModel(nkmm, "NemKotottMunkaido_Bevitel"); pm = pm.AddBtn(pm, "newNemKotottMunkaidoCancel", AdminisztracioResource.Megsem, "NemKotottMunkaido.newNemKotottMunkaidoCancel"); if (new NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType()).IsNaplozhatZarastolFuggetlenul(nkmm.Kezdet.Value, null)) { pm = pm.AddBtn(pm, "newNemKotottMunkaidoSave", 3804 /*Naplózás*/, "NemKotottMunkaido.newNemKotottMunkaidoSave"); } return PartialView(Constants.General.PopupView, pm); } public ActionResult OpenModNemKotottMunkaidoPopUp(CalendarModel model) { if (!Authorization.IsValidNemKotottMunkaido(model.EventId)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.NincsJogaAzOldalMegtekintesehez); } var nkmm = GetModNemKotottMunkaidoModel(model); var pm = new PopUpModel(nkmm, "NemKotottMunkaido_Bevitel"); pm = pm.AddBtn(pm, "modNemKotottMunkaidoCancel", AdminisztracioResource.Megsem, "NemKotottMunkaido.modNemKotottMunkaidoCancel"); var isNaplozhatZarastolFuggetlenul = new NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType()).IsNaplozhatZarastolFuggetlenul(nkmm.Datum.Value, null); if (!nkmm.isReadonly) { if (nkmm.isTanarAltalTorolt) { if (isNaplozhatZarastolFuggetlenul) { if (nkmm.isMegtartott) { pm = pm.AddBtn(pm, "modNemKotottMunkaidoMegtartottDelete", 5221 /*Naplózás törlése*/, "NemKotottMunkaido.modNemKotottMunkaidoDelete"); } else { pm = pm.AddBtn(pm, "modNemKotottMunkaidoTanarAltalToroltOraDelete", 5221 /*Naplózás törlése*/, "NemKotottMunkaido.modNemKotottMunkaidoTanarAltalDelete"); } } } else { if (isNaplozhatZarastolFuggetlenul) { if (nkmm.isMegtartott) { pm = pm.AddBtn(pm, "modNemKotottMunkaidoMegtartottDelete", 5221 /*Naplózás törlése*/, "NemKotottMunkaido.modNemKotottMunkaidoDelete"); pm = pm.AddBtn(pm, "modNemKotottMunkaidoSave", 3765 /*Naplózás változtatásainak mentése*/, "NemKotottMunkaido.modNemKotottMunkaidoSaveDay"); } else { nkmm.NaplozottMegjegyzes = nkmm.Megjegyzes; pm = pm.AddBtn(pm, "modNemKotottMunkaidoSave", 3804 /*Naplózás*/, "NemKotottMunkaido.modNemKotottMunkaidoSaveDay"); if (nkmm.isAdminRogzitette) { pm = pm.AddBtn(pm, "modNemKotottMunkaidoTanarAltalDelete", 117 /*Törlés*/, "NemKotottMunkaido.modNemKotottMunkaidoTanarAltalDelete"); } else { pm = pm.AddBtn(pm, "modNemKotottMunkaidoDelete", 117 /*Törlés*/, "NemKotottMunkaido.globalNemKotottMunkaidoDelete"); } } } } } return PartialView(Constants.General.PopupView, pm); } private ActionResult TanoraMuveletek(NaplozasElokeszitesModel model, TanoraMuveletek muveletPram) { return base.TanoraMuveletek(model, muveletPram, (int?)null); } public DateTime GetTanevUtolsoNapja() => new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevInfo().UtolsoTanitasiNap; public ActionResult OpenNewFogadooraPopUp(CalendarModel model) { var fm = SetNewFogadooraDefaultData(model); var pm = new PopUpModel(fm, "Fogadoora_Bevitel"); pm = pm.AddBtn(pm, "newFogadooraCancel", AdminisztracioResource.Megsem, "FogadooraHelper.newFogadooraCancel"); pm = pm.AddBtn(pm, "newFogadooraSave", CommonResource.Mentes, "FogadooraHelper.fogadooraSave"); return PartialView(Constants.General.PopupView, pm); } private FogadooraModel SetNewFogadooraDefaultData(CalendarModel cm) { var tanevCo = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevInfo(); var isNemKellNemKotott = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetSystemSettingValue(RendszerBeallitasTipusEnum.kotott_munkaido_nevelesseloktatassal_le_nem_kotott_resz_kezelesenek_tiltasa); return new FogadooraModel { FogadoOraKezdete = cm.Start.ToLocalTime(), FogadoOraVege = cm.End.ToLocalTime(), FogadoOraDatuma = cm.Start.ToLocalTime().Date, EgysegnyiIdopontok = 15, IsNemKotottMunkaido = !isNemKellNemKotott, JelentkezesekKezelese = true, IsFaliujsagonMegjelenjen = true, FaliujsagErvenyessegKezdete = DateTime.Today, FaliujsagErvenyessegVege = cm.Start.ToLocalTime().AddDays(1), RendszeresFogadooraElsoDatuma = cm.Start.ToLocalTime().Date, RendszeresFogadooraUtolsoDatuma = tanevCo.UtolsoTanitasiNap.Date, IsCalendar = true, IsRendszeressegModosithato = true, IsIdosavraOsztas = true, FogadooraEgyebGyakorisagDefaultDate = cm.Start.ToLocalTime(), TanevUtolsoNapja = GetTanevUtolsoNapja(), IsNemKellNemKotott = isNemKellNemKotott, }; } public ActionResult OpenModFogadooraPopUpByCalendarModel(CalendarModel model) => OpenModFogadooraPopUpDetails(model.EventId, true); public ActionResult OpenModFogadooraPopUpByFogadooraId(int id) => OpenModFogadooraPopUpDetails(id); public ActionResult OpenModFogadooraPopUpDetails(int fogadooraId, bool isCalendar = false) { var fm = new FogadooraModel(); var helper = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var fogadooraCo = helper.GetFogadooraById(fogadooraId); fm.Id = fogadooraCo.Id; fm.FogadoOraDatuma = fogadooraCo.FogadoOraKezdete.Date; fm.FogadoOraKezdete = fogadooraCo.FogadoOraKezdete; fm.FogadoOraVege = fogadooraCo.FogadoOraVege; fm.Rendszeresseg = fogadooraCo.Rendszeresseg; fm.TeremId = fogadooraCo.TeremId; fm.JelentkezesekKezelese = (int)FogadooraTipusEnum.Jelentkezheto == fogadooraCo.FogadooraTipusEnumId || (int)FogadooraTipusEnum.JelentkezhetoDarabolt == fogadooraCo.FogadooraTipusEnumId; fm.IsIdosavraOsztas = fogadooraCo.IsIdosavraOsztas; fm.EgysegnyiIdopontok = fogadooraCo.EgysegnyiIdopontok; fm.SelectedOsztalyCsoportIdList = fogadooraCo.SelectedOsztalyCsoportIdList; fm.RendszeresFogadooraElsoDatuma = fogadooraCo.FogadoOraKezdete; fm.RendszeresFogadooraUtolsoDatuma = fogadooraCo.FogadoOraVege; fm.IsEgyAlkalomModosul = false; fm.IsCalendar = isCalendar; fm.IsFaliujsagonMegjelenjen = fogadooraCo.IsFaliujsagonMegjelenjen; fm.IsRendszeressegModosithato = false; fm.FaliujsagErvenyessegKezdete = fogadooraCo.FaliujsagErvenyessegKezdete; fm.FaliujsagErvenyessegVege = fogadooraCo.FaliujsagErvenyessegVege; fm.JelentkezesHatarideje = fogadooraCo.JelentkezesHatarideje; var isModosithatoFogadoora = fm.FogadoOraKezdete > DateTime.Now; fm.TanevUtolsoNapja = GetTanevUtolsoNapja(); var jelentkezettGvDs = helper.GetJelentkezettGondviseloCntByFogadooraId(fogadooraId); if (jelentkezettGvDs.Tables[0].Rows.Count > 0) { fm.VanGvJelentkezes = true; } if (!isModosithatoFogadoora) { fm.TeremNev = new TeremHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTeremNev(fogadooraCo.TeremId); } var rendszeressegDictionary = EnumExtensions.EnumToDictionary(ClaimData.SelectedTanevID.Value); fm.RendszeressegText = rendszeressegDictionary.First(x => x.Key == fogadooraCo.Rendszeresseg.ToString()).Value; var pm = new PopUpModel(fm, isModosithatoFogadoora ? "Fogadoora_Bevitel" : "~/Areas/Orarend/Views/TanariOrarend/Fogadoora_Details.cshtml"); var tanevrendHelper = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var isDateHasTanevrend = tanevrendHelper.HasTanevRendjeEsemeny(fm.FogadoOraKezdete.Date, null); if (!isDateHasTanevrend) { //itt vizsgálni egy alkalom-e, ha igen, akkor ezek nem kellenek if (fm.Rendszeresseg == (int)FogadooraRendszeressegEnum.EgyAlkalom) { if (isModosithatoFogadoora) { pm = pm.AddBtn(pm, "newFogadooraCancel", AdminisztracioResource.Megsem, "FogadooraHelper.modFogadooraCancel"); pm = pm.AddBtn(pm, "newFogadooraSave", CommonResource.Mentes, "FogadooraHelper.ModEgyFogadoora"); pm = pm.AddBtn(pm, "modFogadooraDeleteDay", FogadooraResource.EgyFogadooraTorlese, "FogadooraHelper.DeleteEgyFogadooraa", "pull-left"); } } else { if (isModosithatoFogadoora) { pm = pm.AddBtn(pm, "newFogadooraCancel", AdminisztracioResource.Megsem, "FogadooraHelper.modFogadooraCancel"); pm = pm.AddBtn(pm, "modFogadooraDeleteDay", FogadooraResource.EgyFogadooraTorlese, "FogadooraHelper.DeleteEgyFogadooraa", "pull-left"); pm = pm.AddBtn(pm, "modFogadooraDeleteFrom", OrarendResource.DeleteFrom, "FogadooraHelper.DeleteEttolANaptol", "pull-left"); pm = pm.AddBtn(pm, "modFogadooraDeleteTo", OrarendResource.DeleteTo, "FogadooraHelper.DeleteEddigANapig", "pull-left"); pm = pm.AddBtn(pm, "modFogadooraDelete", FogadooraResource.FogadooraTorleseTeljesTanevbol, "FogadooraHelper.DeleteTeljes", "pull-left"); pm = pm.AddBtn(pm, "modFogadooraSaveDay", FogadooraResource.EgyFogadooraModositas, "FogadooraHelper.ModEgyFogadoora", true, "pull-left"); pm = pm.AddBtn(pm, "modFogadooraSaveFrom", OrarendResource.ModSaveFrom, "FogadooraHelper.ModEttolANaptol", "pull-left", true); pm = pm.AddBtn(pm, "modFogadooraSaveTo", OrarendResource.ModSaveTo, "FogadooraHelper.ModEddigANapig", "pull-left", true); pm = pm.AddBtn(pm, "modFogadooraSave", OrarendResource.ModAllSave, "FogadooraHelper.ModTeljes", "pull-left", true); } } } return PartialView(Constants.General.PopupView, pm); } [HttpPost] public ActionResult UploadCsatolmany(HttpPostedFileBase csatolmany, int hfId) { try { byte[] content; using (var inputStream = csatolmany.InputStream) { var memoryStream = inputStream as MemoryStream; if (memoryStream == null) { memoryStream = new MemoryStream(); inputStream.CopyTo(memoryStream); } content = memoryStream.ToArray(); } var helper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType(), fileServiceHelper); var csatolmanyId = helper.UploadCsatolmany(csatolmany.FileName, content, csatolmany.ContentType, hfId, ClaimData.IntezmenyGuid.Value); return Json(csatolmanyId); } catch (Exception ex) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.FajlFeltolteseSikertelen) { UnHandledException = ex }; } } private NemKotottMunkaidoModel GetModNemKotottMunkaidoModel(CalendarModel model) { var helper = new NemKotottMunkaidoHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var co = helper.GetNemKotottMunkaidoById(model.EventId); return Logic.NemKotottMunkaidoLogic.ConvertModelFromCo(co); } } }