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 Kendo.Mvc.UI; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; using Kreta.Resources; using Kreta.Web.Areas.Tanulo.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.Tanulo.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Evfolyamfelelos.ClaimValue)] public class HetesekApiController : ApiController { public DataSourceResult GetHetesekGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var model = JsonConvert.DeserializeObject(data); if (!model.OsztalyCsoport.HasValue) { return new DataSourceResult(); } var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); if (!authorization.IsValidOsztaly(model.OsztalyCsoport.Value)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } var helper = new HetesekHelper(ConnectionTypeExtensions.GetSessionConnectionType()) { GridParameters = Converter.GridParameter(request) }; var ds = helper.GetHetesek(model.OsztalyCsoport.Value); return ds.ToDataSourceResult(); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage ValidateHetesek(List list) { ValidateHetesekModel(list); return Request.CreateResponse(HttpStatusCode.OK, list, Configuration.Formatters.JsonFormatter); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteFutureHetesInOsztalyCsoport(int id) { new HetesekHelper(ConnectionTypeExtensions.GetSessionConnectionType()).DeleteFutureHetesInOsztalyCsoport(id); return Request.CreateResponse(HttpStatusCode.OK); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveHetesek(List list) { var helper = new HetesekHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var osztalyCsoportId = list.FirstOrDefault().OsztalyCsoportId; var hetesekCoList = list.ConvertAll(x => x.ToCo()); helper.SaveOrDeleteHetesekFeljegyzessel(hetesekCoList, osztalyCsoportId, ClaimData.FelhasznaloId); return Request.CreateResponse(HttpStatusCode.OK); } private void ValidateHetesekModel(List list) { var helper = new HetesekHelper(ConnectionTypeExtensions.GetSessionConnectionType()); foreach (var model in list) { var errorMessage = new StringBuilder(); if (!string.IsNullOrWhiteSpace(model.Tanulok)) { var tanuloIds = model.Tanulok.Split(',').Select(x => int.Parse(x)).ToList(); if (tanuloIds.Count > Constants.General.HetesekMaximalisSzama) { errorMessage.AppendFormat(ErrorResource.MaximumXHetesLehetAzYsorszamuHetnel, Constants.General.HetesekMaximalisSzama.ToString(), model.HetSorszam.ToString()); } else { var tanulok = helper.GetHetSorszamokTanulokkal(model.OsztalyCsoportId, model.HetSorszam).Tables[0].AsEnumerable() .Select(x => x.Field("TanuloId")).ToList(); foreach (var tanuloId in tanuloIds) { if (!tanulok.Contains(tanuloId)) { errorMessage.AppendFormat(ErrorResource.ATanuloNemTagjaAzOsztalynakASorszamuHeten, model.HetSorszam.ToString()); break; } } } } if (errorMessage.Length > 0) { throw new StatusError(HttpStatusCode.BadRequest, errorMessage.ToString()); } } } } }