using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Web.Http; using System.Web.Http.ModelBinding; using System.Web.Http.Results; using Kendo.Mvc.UI; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.BusinessLogic.Security; using Kreta.Enums.ManualEnums; using Kreta.Resources; using Kreta.Web.Areas.Orarend.Models; using Kreta.Web.Areas.Tanar.Logic; using Kreta.Web.Areas.Tanar.Models; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.Grid; using Kreta.Web.Security; using Newtonsoft.Json; namespace Kreta.Web.Areas.Tanar.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)] [ApiRolePackageDenyAuthorize(KretaClaimPackages.IsDualisKepzohelyiOktato.ClaimValue)] public class FogadooraApiController : ApiController { public DataSourceResult GetFogadooraGridForAdmin(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { return GetFogadooraGrid(data, request); } public DataSourceResult GetFogadooraGridForTanar(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { return GetFogadooraGrid(data, request, ClaimData.FelhasznaloId); } public DataSourceResult GetFogadooraGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request, int? tanarId = null) { var model = JsonConvert.DeserializeObject(data); var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); return helper.GetFogadoora(model.ConvertModelToCo(tanarId)).ToDataSourceResult(); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteFogadooraById([FromBody] int fogadooraId) => DeleteFogadoora(fogadooraId, (int)OraModositasiIdoszakTipus.EgyOra); [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteFogadooraByFogadooraModel(FogadooraModel model) { return DeleteFogadoora(model.Id.Value, model.ModositasiIdoszakTipus); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteFogadoora(int fogadooraId, int modositasiIdoszakTipus) { try { new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()).DeleteFogadoora(fogadooraId, modositasiIdoszakTipus); return new HttpResponseMessage(HttpStatusCode.OK); } catch (Exception e) { throw new StatusError(HttpStatusCode.BadRequest, e.Message); } } public FogadooraModel ConvertFogadooraModelFromFogadooraId(int fogadooraId) { var helper = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var co = helper.GetFogadooraById(fogadooraId); var model = new FogadooraModel { FogadoOraDatuma = co.FogadoOraDatuma, SelectedOsztalyCsoportIdList = co.SelectedOsztalyCsoportIdList }; return model; } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveFogadoora(FogadooraModel model) { try { model = FogadooraLogic.SetFogadooraDate(model); if (new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetSystemSettingValue(Enums.RendszerBeallitasTipusEnum.kotott_munkaido_nevelesseloktatassal_le_nem_kotott_resz_kezelesenek_tiltasa)) { model.IsNemKotottMunkaido = false; } var fogadooraHelper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var fogadooraCo = FogadooraLogic.ConvertModelToCo(model); fogadooraCo.TanarId = ClaimData.FelhasznaloId; ModelState.AddRange(fogadooraHelper.SaveFogadoora(fogadooraCo)); if (ModelState.IsValid) { return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } catch (Exception e) { throw new StatusError(HttpStatusCode.BadRequest, e.Message); } } public DataSourceResult GetOsztalyCsoportGrid([ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); DataSet ds = helper.GetFogadooraOsztalyCsoportok(ClaimData.IsSzuperOsztalyfonok || ClaimData.IsAdministrator); return ds.ToDataSourceResult(); } public DataSourceResult GetFogadooraJelentkezettGondviselokGrid(int id, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); DataSet ds = helper.GetFogadooraJelentkezettGondviselokDataSet(id); return ds.ToDataSourceResult(); } [HttpGet] public IHttpActionResult IsFogadooraJelentkezettGondviselokForUpdate(int id, bool isJelentkezesekKezelese, bool IsIdosavraOsztas, int egysegnyiIdopontok, int modositasiIdoszakTipus, DateTime kezdete, DateTime vege, string modifiedOcsList) { try { var isIdopontUjraGeneralasKell = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).IsIdopontUjraGeneralasKell(id, isJelentkezesekKezelese, IsIdosavraOsztas, egysegnyiIdopontok, kezdete, vege); var isFogadooraJelentkezettGondviselok = IsFogadooraJelentkezettGondviselok(id, modositasiIdoszakTipus, JsonConvert.DeserializeObject>(modifiedOcsList)); return Ok(new { isIdopontUjraGeneralasKell, isFogadooraJelentkezettGondviselok }); } catch (Exception ex) { throw new StatusError(HttpStatusCode.InternalServerError, ErrorResource.NemSikerultAMuvelet) { UnHandledException = ex }; } } [HttpGet] public bool IsFogadooraJelentkezettGondviselok(int id, int modositasiIdoszakTipus, Dictionary modifiedOcsList) { var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); TanevCO tanevCO; var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()); tanevCO = tanevHelper.GetTanevInfo(); var fogadooraCo = helper.GetFogadooraById(id); var kezdete = new DateTime(); var vege = new DateTime(); switch (modositasiIdoszakTipus) { case (int)OraModositasiIdoszakTipus.EgyOra: kezdete = fogadooraCo.FogadoOraKezdete; vege = fogadooraCo.FogadoOraKezdete; break; case (int)OraModositasiIdoszakTipus.AdottNaptol: kezdete = fogadooraCo.FogadoOraDatuma; vege = tanevCO.UtolsoTanitasiNap; break; case (int)OraModositasiIdoszakTipus.AdottNapig: kezdete = DateTime.Now; vege = fogadooraCo.FogadoOraDatuma; break; case (int)OraModositasiIdoszakTipus.TeljesIdoszak: kezdete = DateTime.Now; vege = tanevCO.UtolsoTanitasiNap; break; } if (modifiedOcsList == null || modifiedOcsList.Count == 0) { return helper.GetFogadooraJelentkezettGondviselokByGroupId(fogadooraCo.GroupId, kezdete, vege).Tables[0].Rows.Count > 0; } var ds = helper.GetFogadooraJelentkezettGondviselokDataSet(id); var dv = ds.Tables[0].DefaultView; var filteredList = modifiedOcsList.Where(x => x.Value == false); if (filteredList.Any()) { dv.RowFilter = "OsztalyCsoportId IN (" + string.Join(",", filteredList.Select(y => y.Key)) + ")"; } return dv.ToTable().Rows.Count > 0; } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public IHttpActionResult ValidateFogadoora(FogadooraModel model) { model = FogadooraLogic.SetFogadooraDate(model); TanevCO tanevCO; var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()); tanevCO = tanevHelper.GetTanevInfo(); var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var co = new FogadooraCo { Rendszeresseg = model.Rendszeresseg, FogadoOraKezdete = model.FogadoOraKezdete, RendszeresFogadooraElsoDatuma = model.RendszeresFogadooraElsoDatuma, RendszeresFogadooraUtolsoDatuma = model.RendszeresFogadooraUtolsoDatuma, FogadoOraDatuma = model.FogadoOraDatuma, FogadooraDatumList = model.FogadooraDatumList }; var datumList = helper.GetFogadooraDatumList(co); var datumListWithKezdetVege = new List<(DateTime kezdet, DateTime veg)>(); foreach (var datum in datumList) { var idopont = (datum.AddHours(model.FogadoOraKezdete.Hour).AddMinutes(model.FogadoOraKezdete.Minute) , datum.AddHours(model.FogadoOraVege.Hour).AddMinutes(model.FogadoOraVege.Minute)); datumListWithKezdetVege.Add(idopont); } var teremOrarendDs = helper.GeTeremOrarendDs(DateTime.Now, tanevCO.UtolsoTanitasiNap, model.TeremId.Value); var pedagogusOrarendDs = helper.GetPedagogusOrarendDs(DateTime.Now, tanevCO.UtolsoTanitasiNap); var pedagogusFogadooraDs = helper.GetPedagogusFogadooraDs(DateTime.Now, tanevCO.UtolsoTanitasiNap); var teremFogadooraDs = helper.GetTeremFogadooraDs(DateTime.Now, tanevCO.UtolsoTanitasiNap, model.TeremId.Value); var teremUtkozesList = FogadooraLogic.TeremUtkozesList(teremOrarendDs, datumListWithKezdetVege); var pedagogusUtkozes = FogadooraLogic.PedagogusUtkozesList(pedagogusOrarendDs, datumListWithKezdetVege); var fogadooraUtkozes = FogadooraLogic.FogadooraUtkozesList(pedagogusFogadooraDs, datumListWithKezdetVege, model.Id); var fogadooraTeremUtkozes = FogadooraLogic.FogadooraTeremUtkozesList(teremFogadooraDs, datumListWithKezdetVege, model.Id); var figyelmezetetesText = new StringBuilder(); figyelmezetetesText.Append(FogadooraResource.FogadooraFelveteleSoranUtkozesLepettFel); var tiltasText = new StringBuilder(); tiltasText.Append(FogadooraResource.FogadooraFelveteleSoranUtkozesLepettFel); var isFigyelmeztetes = false; var isTiltas = false; switch (FogadooraLogic.TeremUtkozesSystemSetting) { case 1: /*Ütközés nem lehetséges*/ if (teremUtkozesList.Count > 0) { tiltasText.Append(FogadooraResource.Teremutkozes); isTiltas = true; } break; case 2: /*Figyelmeztetés*/ //case 3: /*Ütközés lehetséges*/ if (teremUtkozesList.Count > 0) { figyelmezetetesText.Append(FogadooraResource.Teremutkozes); isFigyelmeztetes = true; } break; } switch (FogadooraLogic.NapirendUtkozes) { case 1: if (pedagogusUtkozes.Count > 0) { tiltasText.Append(FogadooraResource.OrarendUtkozes); isTiltas = true; } break; case 2: //case 3: if (pedagogusUtkozes.Count > 0) { figyelmezetetesText.Append(FogadooraResource.OrarendUtkozes); isFigyelmeztetes = true; } break; } if (fogadooraUtkozes.Count > 0) { tiltasText.AppendFormat(FogadooraResource.FogadooraUtkozes, string.Join(",", fogadooraUtkozes.Select(row => row.Field("FogadooraKezdete").ToString("yyyy.MM.dd. HH:mm")))); isTiltas = true; } if (fogadooraTeremUtkozes.Count > 0) { figyelmezetetesText.AppendFormat(FogadooraResource.FogadooraTeremUtkozes, string.Join(",", fogadooraTeremUtkozes.Select(row => row.Field("FogadooraKezdete").ToString("yyyy.MM.dd. HH:mm")))); isFigyelmeztetes = true; } if (isTiltas) { throw new StatusError(HttpStatusCode.BadRequest, tiltasText.ToString()); } if (isFigyelmeztetes) { return Json(new { Valid = false, Text = figyelmezetetesText.Append(FogadooraResource.AkarjafolytatniKerdes).ToString() }); } return Json(new { Valid = true, Text = string.Empty }); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public JsonResult> GetExportColumnsForTanar() { List Items = new List { new ExportColumn() { Field = "OsztalyCsoport", Title = FogadooraResource.OsztalyCsoport }, new ExportColumn() { Field = "Terem", Title = FogadooraResource.Terem }, new ExportColumn() { Field = "FogadooraKezdete", Title = FogadooraResource.FogadooraKezdete }, new ExportColumn() { Field = "FogadooraVege", Title = FogadooraResource.FogadooraVege }, new ExportColumn() { Field = "Rendszeresseg", Title = FogadooraResource.Rendszeresseg }, new ExportColumn() { Field = "JelentkezesekKezelese", Title = FogadooraResource.JelentkezesekKezelese } }; return Json(Items); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public JsonResult> GetExportColumnsForAdmin() { List Items = new List { new ExportColumn() { Field = "OsztalyCsoport", Title = FogadooraResource.OsztalyCsoport }, new ExportColumn() { Field = "Terem", Title = FogadooraResource.Terem }, new ExportColumn() { Field = "FogadooraKezdete", Title = FogadooraResource.FogadooraKezdete }, new ExportColumn() { Field = "FogadooraVege", Title = FogadooraResource.FogadooraVege }, new ExportColumn() { Field = "Pedagogus", Title = FogadooraResource.Pedagogus }, new ExportColumn() { Field = "Rendszeresseg", Title = FogadooraResource.Rendszeresseg }, new ExportColumn() { Field = "JelentkezesekKezelese", Title = FogadooraResource.JelentkezesekKezelese } }; return Json(Items); } public DataSourceResult GetFogadooraGridForTanarExport(string searchFilter, string sortColumn, string sortDir) { var model = JsonConvert.DeserializeObject(searchFilter); var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var fogadoOrak = helper.GetFogadoora(model.ConvertModelToCo(ClaimData.FelhasznaloId)); if (sortColumn != "-" && sortDir != "-") { DataSet result = new DataSet(); fogadoOrak.Tables[0].DefaultView.Sort = (sortColumn).ToUpper() + " " + (sortDir).ToUpper(); result.Tables.Add(fogadoOrak.Tables[0].DefaultView.ToTable()); return result.ToDataSourceResult(); } return fogadoOrak.ToDataSourceResult(); } public DataSourceResult GetFogadooraGridForAdminExport(string searchFilter, string sortColumn, string sortDir) { var model = JsonConvert.DeserializeObject(searchFilter); var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var fogadoOrak = helper.GetFogadoora(model.ConvertModelToCo(null)); if (sortColumn != "-" && sortDir != "-") { DataSet result = new DataSet(); fogadoOrak.Tables[0].DefaultView.Sort = (sortColumn).ToUpper() + " " + (sortDir).ToUpper(); result.Tables.Add(fogadoOrak.Tables[0].DefaultView.ToTable()); return result.ToDataSourceResult(); } return fogadoOrak.ToDataSourceResult(); } } }