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 System.Web.Http.Results; using Kendo.Mvc.UI; using Kreta.BusinessLogic.Classes.ComboBox; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; using Kreta.Core; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.Framework.Entities; using Kreta.Resources; using Kreta.Web.Areas.Hianyzas.Helpers; using Kreta.Web.Areas.Hianyzas.Models; using Kreta.Web.Areas.Hianyzas.Models.Mulasztasok; 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 BaseMulasztasokApiController : ApiController { public JsonResult> GetTanoraList(string cascadeFilter) { DateTime? datumInput; DateTime temp; if (DateTime.TryParse(cascadeFilter, out temp)) { datumInput = temp; } else { throw new Exception(); } IDictionary tanorak; var result = new List(); var helper = new TanoraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); tanorak = helper.GetMegtartottOraByDatumAndOsztalyFonok(datumInput.Value, ClaimData.FelhasznaloId); foreach (var item in tanorak) { var sli = new ComboBoxListItem { Text = item.Value, Value = item.Key }; result.Add(sli); } return Json(result); } public JsonResult> GetIgazoltList() { var result = new List { new ComboBoxListItem { Value = ((int) IgazoltSearchEnum.Igazolt).ToString(), Text = StringResourcesUtil.GetString(2568) }, new ComboBoxListItem { Value = ((int) IgazoltSearchEnum.Igazolatlan).ToString(), Text = StringResourcesUtil.GetString(2800) }, new ComboBoxListItem { Value = ((int) IgazoltSearchEnum.NemEllenorzott).ToString(), Text = StringResourcesUtil.GetString(4571) } }; //Igazolt //Igazolatlan //Nem ellenőrzött return Json(result); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteMulasztas([FromBody] int id) { CheckMulasztas(id); try { var helper = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); helper.DeleteMulasztasById(id); return new HttpResponseMessage(HttpStatusCode.OK); } catch (EntityDeleteFailedException) { throw new StatusError(HttpStatusCode.BadRequest, string.Format(StringResourcesUtil.GetString(5490), StringResourcesUtil.GetString(500) /*, e.ConnectionErrorMessage*/) /*A(z) mulasztás nem törölhető, mert egy vagy több kapcsolódása van (kapcsolatok: {1})!*/); } } [NonAction] public HttpResponseMessage SaveMulasztasList(List list, int? szervezetTipusId = null) { var helper = new MulasztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()); foreach (var item in list) { if (item.ID != 0 && (item.Visszavonhato.Value || item.Igazolt != null)) { if (!string.IsNullOrWhiteSpace(item.Megjegyzes) && item.Megjegyzes.Length > 255) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AMegjegyzesMax255KarakterLehet); } if(!szervezetTipusId.HasValue) { CheckMulasztas(item.ID.Value); } MulasztasokCo co = MulasztasokHelper.ConvertNaploNezetMulasztasokSaveModelToCo(item); var mulasztasNotificaton = helper.SaveOrUpdateMulasztas(co); } } return new HttpResponseMessage(HttpStatusCode.OK); } [NonAction] public HttpResponseMessage SaveNaploNezetMulasztasList(MulasztasokNaploNezetSaveModel model, int? szervezetTipusId = null) { var helper = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); foreach (var mulasztas in model.Mulasztasok) { if (!string.IsNullOrWhiteSpace(mulasztas.Megjegyzes) && mulasztas.Megjegyzes.Length > 255) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AMegjegyzesMax255KarakterLehet); } if (!mulasztas.ID.HasValue) { var mulasztasDbId = helper.GetMulasztasId(mulasztas.TanuloId, mulasztas.TanitasiOraId); if (mulasztasDbId.IsEntityId()) { mulasztas.ID = mulasztasDbId; } } if (mulasztas.ID.HasValue) { CheckMulasztas(mulasztas.ID.Value); } CheckTanulo(mulasztas.TanuloId); } CheckUtkozes(helper, model, szervezetTipusId); var sikertelenMulasztasMentesek = new List(); foreach (var mulasztas in model.Mulasztasok) { var co = MulasztasokHelper.ConvertNaploNezetMulasztasokSaveModelToCo(mulasztas); try { _ = helper.SaveOrUpdateNaplonezetMulasztas(co); } catch (Exception ex) { sikertelenMulasztasMentesek.Add(ex.Message); } } if (sikertelenMulasztasMentesek.Count > 0) { throw new StatusError(HttpStatusCode.BadRequest, string.Join("
", sikertelenMulasztasMentesek.Distinct())); } return new HttpResponseMessage(HttpStatusCode.OK); } private void CheckUtkozes(MulasztasHelper mulasztasHelper, MulasztasokNaploNezetSaveModel model, int? szervezetTipusId = null) { if (!model.Mulasztasok.Any(m => m.MulasztasTipus == (int)Enums.MulasztasTipusEnum.hianyzas)) { return; } var naploNezetGridDs = mulasztasHelper.GetMulasztasokNaploNezetGrid(model.OsztalyCsoportId, model.NaploNezetDatum, IsCsoportVezeto(), szervezetTipusId); var oraColumnPrefixes = Enumerable.Range(Core.Constants.Mulasztas.OraSorszamMinValue, Core.Constants.Mulasztas.OraSorszamMaxValue - Core.Constants.Mulasztas.OraSorszamMinValue + 1) .Select(i => "Ora" + (i < 0 ? "Minusz" + Math.Abs(i) : i.ToString())); var foglalkozasColumnPrefixes = Enumerable.Range(1, Core.Constants.Mulasztas.FoglalkozasCount) .Select(i => "Foglalkozas" + i.ToString()); var columnPrefixes = oraColumnPrefixes.Concat(foglalkozasColumnPrefixes); var tanitasiOraIdHashSet = new HashSet(); foreach (DataRow dataRow in naploNezetGridDs.Tables[0].AsEnumerable()) { foreach (var columnPrefix in columnPrefixes) { var tanitasiOraId = dataRow.Field(columnPrefix + "TanitasiOraId"); if (tanitasiOraId.HasValue) { tanitasiOraIdHashSet.Add(tanitasiOraId.Value); } } } var tanitasiOraKezdeteVegeList = mulasztasHelper.ListTanitasiOraKezdeteVege(tanitasiOraIdHashSet); var errorMessages = new List(); var mulasztasokGroupByTanulo = model.Mulasztasok.Where(m => m.MulasztasTipus == (int)Enums.MulasztasTipusEnum.hianyzas).GroupBy(x => x.TanuloId); foreach (var mulasztasokGroup in mulasztasokGroupByTanulo) { var tanuloRow = naploNezetGridDs.Tables[0].AsEnumerable().First(r => r.Field("TanuloId") == mulasztasokGroup.Key); var tanitasiOraIdListByTanuloHianyzas = mulasztasokGroup.Select(m => m.TanitasiOraId).ToList(); foreach (var columnPrefix in columnPrefixes) { var mulasztasTipus = tanuloRow.Field(columnPrefix + "MulasztasTipus"); if (!string.IsNullOrWhiteSpace(mulasztasTipus) && int.Parse(mulasztasTipus) == (int)Enums.MulasztasTipusEnum.hianyzas) { var tanitasiOraId = tanuloRow.Field(columnPrefix + "TanitasiOraId"); tanitasiOraIdListByTanuloHianyzas.Add(tanitasiOraId); } } var tanitasiOraKezdeteVegeListByTanuloHianyzas = tanitasiOraKezdeteVegeList.Where(t => tanitasiOraIdListByTanuloHianyzas.Contains(t.Id)); var utkozoGroups = GetUtkozoGroups(tanitasiOraKezdeteVegeListByTanuloHianyzas); foreach (var utkozoGroup in utkozoGroups.Where(g => g.Count > 1)) { var errorMessage = string.Format(MulasztasResource.HianyzasUtkozesError, string.Join(MulasztasResource.EsAz, utkozoGroup.Select(g => g.Oraszam.HasValue ? string.Format(MulasztasResource._0Ora, g.Oraszam) : string.Format(MulasztasResource._0korKezdodoOra, g.OraKezdete.ToString(Core.Constants.ToStringPattern.HungarianTime))))); errorMessages.Add(errorMessage); } } if (errorMessages.Any()) { throw new StatusError(HttpStatusCode.BadRequest, string.Join(Constants.General.DoubleBr, errorMessages)); } } private IEnumerable> GetUtkozoGroups(IEnumerable tanitasiOraList) { var result = new List>(); foreach (var tanitasiOra in tanitasiOraList) { var group = result.FirstOrDefault(r => r.Any(x => x.OraKezdete < tanitasiOra.OraVege && tanitasiOra.OraKezdete < x.OraVege)); if (group != null) { group.Add(tanitasiOra); } else { result.Add(new List { tanitasiOra }); } } return result; } public JsonResult VaneMarIgazolt(int tipusId, int tanuloId, int oraId) { var helper = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); return Json(helper.VaneMarIgazolt(tipusId, tanuloId, oraId)); } public void CheckOsztalyCsoport(int osztalyCsoportId) { var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); if (!authorization.IsValidOsztalyCsoport(osztalyCsoportId)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } } public void CheckCsoport(int csoportId) { var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); if (!authorization.IsValidCsoport(csoportId)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } } public void CheckTanulo(int tanuloId, bool lehetTTF = false) { var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); if (!authorization.IsValidTanulo(tanuloId, lehetTTF)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } } private void CheckMulasztas(int mulasztasId) { var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization)); if (!authorization.IsValidMulasztas(mulasztasId)) { throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz); } } public bool IsCsoportVezeto() { return ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.CsoportVezeto.ClaimValue) && !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.Osztalyfonok.ClaimValue) && !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.SzuperOsztalyfonok.ClaimValue) && !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.Evfolyamfelelos.ClaimValue); } } }