using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Web.Http.ModelBinding; using Kendo.Mvc.UI; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; using Kreta.Framework.Entities; using Kreta.Resources; using Kreta.Web.Areas.Hianyzas.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.Hianyzas.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)] public class IgazolasokApiController : BaseIgazolasokApiController { public DataSourceResult GetIgazolasGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { return base.GetIgazolasGrid(data, request); } public DataSourceResult GetDetailIgazolasok(int tanuloId, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { return base.GetDetailIgazolasok(tanuloId, request); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage ValidateIgazolasOnSave(List igazolasList) { string errorMsg = ValidateBeforeSaveIgazolasList(igazolasList); if (string.IsNullOrWhiteSpace(errorMsg)) { return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errorMsg); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveIgazolas(List igazolasList) { ValidateIgazolasList(igazolasList, ModelState); if (ModelState.IsValid) { var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); var osztalyCsoportTanuloDict = new Dictionary>(); foreach (var igazolas in igazolasList) { if (!osztalyCsoportTanuloDict.TryGetValue(igazolas.OsztalyCsoportId, out var tanuloIdSet)) { tanuloIdSet = new HashSet(); osztalyCsoportTanuloDict.Add(igazolas.OsztalyCsoportId, tanuloIdSet); } tanuloIdSet.Add(igazolas.TanuloId); } foreach (var osztalyCsoportTanulo in osztalyCsoportTanuloDict) { if (!authorization.IsValidTanulo(osztalyCsoportTanulo.Value.ToList(), osztalyCsoportTanulo.Key)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } } foreach (IgazolasMentesModel igazolas in igazolasList) { var igazolasCO = new IgazolasCO() { TanuloId = igazolas.TanuloId, OsztCsop = igazolas.OsztalyCsoportId, ErvKezdete = igazolas.IgazolasElsoNap, ErvVege = igazolas.IgazolasUtolsoNap, RogzitoId = ClaimData.FelhasznaloId, RogzDatum = DateTime.Now, IgazolasTipus = igazolas.IgazolasTipus, Megjegyzes = igazolas.IgazolasSzovegesTartalma, SzervezetId = igazolas.SzervezetId }; new IgazolasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).SaveOrUpdateIgazolas(igazolasCO); } return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } private string ValidateBeforeSaveIgazolasList(List igazolasList) { string errorMsg = string.Empty; if (igazolasList.Count > 0) { int osztalyCsoportId = igazolasList[0].OsztalyCsoportId; DataTable igazolasDT = new DataTable(); igazolasDT.Columns.Add("TanuloId", typeof(int)); igazolasDT.Columns.Add("ElsoNap", typeof(string)); igazolasDT.Columns.Add("UtolsoNap", typeof(string)); igazolasDT.Columns.Add("IntezmenyId", typeof(int)); igazolasDT.Columns.Add("TanevId", typeof(int)); igazolasDT.Columns.Add("OsztalyCsoportId", typeof(int)); igazolasDT.Columns.Add("SzervezetId", typeof(int)); foreach (IgazolasMentesModel igazolas in igazolasList) { var row = igazolasDT.NewRow(); { row["TanuloId"] = igazolas.TanuloId; row["ElsoNap"] = igazolas.IgazolasElsoNap.ToConvertableDateString().Replace("-", ""); row["UtolsoNap"] = igazolas.IgazolasUtolsoNap.ToConvertableDateString().Replace("-", ""); row["IntezmenyId"] = ClaimData.IntezmenyId; row["TanevId"] = ClaimData.AktivTanevID ?? ClaimData.SelectedTanevID ?? 0; row["OsztalyCsoportId"] = igazolas.OsztalyCsoportId; row["SzervezetId"] = igazolas.SzervezetId??0; igazolasDT.Rows.Add(row); } } List igazolasok = new IgazolasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetOsztalyCsoportIgazolasokForValidate(igazolasDT).Tables[0].AsEnumerable(). Select(x => new IgazolasCO() { TanuloId = x.Field("TanuloId"), ErvKezdete = x.Field("ElsoNap"), ErvVege = x.Field("UtolsoNap"), SzervezetId = x.Field("SzervezetId")??0 }).ToList(); foreach (IgazolasMentesModel igazolas in igazolasList) { List invalidIgazolasok = igazolasok.Where(x => x.TanuloId == igazolas.TanuloId).ToList(); if (invalidIgazolasok.Count > 0) { DateTime minDate = igazolas.IgazolasElsoNap >= invalidIgazolasok.Min(x => x.ErvKezdete) ? igazolas.IgazolasElsoNap : invalidIgazolasok.Min(x => x.ErvKezdete); DateTime maxDate = igazolas.IgazolasUtolsoNap <= invalidIgazolasok.Max(x => x.ErvVege) ? igazolas.IgazolasUtolsoNap : invalidIgazolasok.Max(x => x.ErvVege); errorMsg += "" + string.Format(IgazolasResource.IgazolasDatumUtkozes, igazolas.TanuloNev, minDate.ToShortDateString(), maxDate.ToShortDateString()); } } } return errorMsg; } private void ValidateIgazolasList(List igazolasList, ModelStateDictionary modelState) { if (igazolasList.Count > 0) { int osztalyCsoportId = igazolasList[0].OsztalyCsoportId; IEnumerable osztalyTanuloi = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetOsztalyCsoportMindenkoriTanuloi(osztalyCsoportId).Tables[0].AsEnumerable(); foreach (IgazolasMentesModel igazolas in igazolasList) { bool isValidIgazolas = osztalyTanuloi.Any(x => x.Field("ID") == igazolas.TanuloId && x.Field("BelepesDatum").Date <= igazolas.IgazolasElsoNap.Date && (!x.Field("KilepesDatum").HasValue || x.Field("KilepesDatum").Date >= igazolas.IgazolasUtolsoNap.Date)); if (!isValidIgazolas) { modelState.AddModelError($"igazolas_{igazolas.TanuloId}", string.Format(IgazolasResource.ErvenytelenIgazolasDatum, igazolas.TanuloNev)); } } } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteIgazolas([FromBody] int id) { var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); if (!authorization.IsValidIgazolas(id)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } new IgazolasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).DeleteIgazolasById(id); return new HttpResponseMessage(HttpStatusCode.OK); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Tanar.ClaimValue)] public HttpResponseMessage DeleteIgazolasAdmin([FromBody] int id) { try { new IgazolasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).DeleteIgazolasById(id); return new HttpResponseMessage(HttpStatusCode.OK); } catch (EntityDeleteFailedException ex) { var uzenet = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, IgazolasResource.Igazolas, ex.ConnectionErrorMessage); throw new StatusError(HttpStatusCode.BadRequest, uzenet); } } } }