using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Text.RegularExpressions; 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.Logic; using Kreta.BusinessLogic.Security; using Kreta.Core; using Kreta.Framework; using Kreta.Framework.Entities; using Kreta.Framework.Util; using Kreta.Resources; using Kreta.Web.Areas.Intezmeny.Models; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.Grid; using Kreta.Web.Security; namespace Kreta.Web.Areas.Intezmeny.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public class CsengetesiRendApiController : ApiController { public DataSourceResult GetCsengetesiRendGrid(string data, DataSourceRequest request) { var (gridParameter, modelList) = GetGridData(request); return modelList.ToDataSourceResult(gridParameter); } public HttpResponseMessage GetExport(DataSourceRequest request) { try { var (gridParameter, modelList) = GetGridData(request); modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary); var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(CsengetesiRendGridModel.CsengetesiRendExportAttributeId); var memoryStream = SimpleExportLogic.GetExport(CsengetesiRendResource.CsengetesiRendExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value); return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), CsengetesiRendResource.CsengetesiRendExportFileName); } catch (Exception ex) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex }; } } private (GridParameters gridParameter, List modelList) GetGridData(DataSourceRequest request) { var gridParameter = Converter.GridParameter(request); var coList = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsengetesiRendCoList(); var modelList = new List(); foreach (var co in coList) { var gridModel = new CsengetesiRendGridModel(co); modelList.Add(gridModel); } return (gridParameter, modelList); } public DataSourceResult GetCsengetesiRendOrai(int csrendID, bool onlyReal, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); var ds = helper.GetCsengetesiRendOraiForGrid(csrendID, onlyReal); return ds.ToDataSourceResult(); } public DataSourceResult GetCsengetesiRendTanevrendAdatai(string csrendID, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var helper = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); var ds = helper.GetTanevrendByCsengRend(SDAConvert.ToInt32(csrendID)); return ds.ToDataSourceResult(); } public CsengetesiRendModel GetCsengetesiRendProperties(int csengRendID) { var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); var co = helper.GetCsengetesiRendById(csengRendID); var model = new CsengetesiRendModel(); model.ID = co.ID; model.Nev = co.Nev; model.Aktiv = co.Aktiv; return model; } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage MentesUjModositottCsengRend(SaveCsengetesiRendModel csrendOrak) //CsengetesiRendModel model, { try { CsengetesiRendModel model = new CsengetesiRendModel(); model.ID = csrendOrak.CsengRendID; model.Nev = csrendOrak.CsengRendNev; model.Aktiv = csrendOrak.CsengRendAktiv; if (string.IsNullOrWhiteSpace(model.Nev.Trim())) { ModelState.AddModelError("NevHiba", StringResourcesUtil.GetString(4038)); //A csengetésirend név megadása kötelező. } var cshelper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (!ClaimData.IsActivTanev && new CsengetesiRendHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).CheckCsengRendNevEgyezes(csrendOrak.CsengRendID, csrendOrak.CsengRendNev)) { throw new StatusError(HttpStatusCode.BadRequest, StringResourcesUtil.GetString(3796)); //A megadott név már létezik! } if (model.ID.Value <= 0) { var insertOralista = ConvertModelListToCoList(-1, csrendOrak.Orak, ModelState); var insertHibaLista = helper.ValidateCsengetesiRendOrak(insertOralista.Where(a => a.Aktiv).ToList()); foreach (var item in insertHibaLista) { ModelState.AddModelError("OraHiba", item.Value); } } if (ModelState.IsValid) { var csengetesiRendID = cshelper.SaveOrUpdateCsengetesiRend(ConvertModelToCo(model)); var oralista = ConvertModelListToCoList(csengetesiRendID, csrendOrak.Orak, ModelState); var hibaLista = helper.ValidateCsengetesiRendOrak(oralista.Where(a => a.Aktiv).ToList()); foreach (var item in hibaLista) { ModelState.AddModelError("OraHiba", item.Value); } if (ModelState.IsValid) { helper.SaveCsengetesiRendOraLista(oralista, csrendOrak.IsVisszamenoleges, ClaimData.KovTanevID); return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } catch (FormatException) { throw new StatusError(HttpStatusCode.BadRequest, StringResourcesUtil.GetString(2484)); } catch (SDA.DataProvider.UniqueKeyViolationException) { throw new StatusError(HttpStatusCode.BadRequest, StringResourcesUtil.GetString(3796)); //A megadott név már létezik! } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SetCsengetesiRendAktiv(CsengetesiRendTorlesModel model) { var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.SetCsengetesirend((int)model.ID, true); int kovTanevId = ClaimData.KovTanevID ?? new TanevHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetKovetkezoTanev().Key; if (kovTanevId != default(int) && kovTanevId != ClaimData.SelectedTanevID) { helper.FollowUpCsengetesiRend(kovTanevId, (int)model.ID); } return new HttpResponseMessage(HttpStatusCode.OK); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage CsengRendTorles(CsengetesiRendTorlesModel model) { try { if (model.ID.IsEntityId()) { var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var csengetesiRend = helper.GetCsengetesiRendById(model.ID.Value); if (csengetesiRend.Aktiv) { throw new StatusError(HttpStatusCode.BadRequest, Framework.StringResourcesUtil.GetString(3809)); //Aktív csengetési rend nem törölhető! } helper.DeleteCsengetesiRend(model.ID.Value); } return new HttpResponseMessage(HttpStatusCode.OK); } catch (EntityDeleteFailedException ex) { var uzenet = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, OrarendResource.CsengetesiRend, ex.ConnectionErrorMessage); throw new StatusError(HttpStatusCode.BadRequest, uzenet); } } [HttpGet] public bool CsengetesiRendValidacio(int valasztottCsengRendId, int torlendoCsengRendId) { var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); CsengetesiRendOraCO valasztottCsengRendResult = helper.GetCsengetesiRendKapcsolodoOra(valasztottCsengRendId); CsengetesiRendOraCO torlendoCsengRendResult = helper.GetCsengetesiRendKapcsolodoOra(torlendoCsengRendId); bool isFullValid = false; if (valasztottCsengRendResult.MinOraszam == torlendoCsengRendResult.MinOraszam && valasztottCsengRendResult.MaxOraszam == torlendoCsengRendResult.MaxOraszam) { var valasztottCsengRendOraKezdet = helper.GetCsengetesiRendKapcsolodoOraKezdeteVege(valasztottCsengRendId); var torlendoCsengRendOraVeg = helper.GetCsengetesiRendKapcsolodoOraKezdeteVege(torlendoCsengRendId); if (valasztottCsengRendOraKezdet.Count == torlendoCsengRendOraVeg.Count && !valasztottCsengRendOraKezdet.Except(torlendoCsengRendOraVeg).Any()) { isFullValid = true; } } else { throw new StatusError(HttpStatusCode.BadRequest, CsengetesiRendResource.OraszamNemEgyezik); } return isFullValid; } [HttpGet] public void CsengetesiRendUpdateAndDel(int valasztottCsengRendId, int torlendoCsengRendId) { var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); CsengetesiRendOraCO torlendoCsengRendResult = helper.GetCsengetesiRendKapcsolodoOra(torlendoCsengRendId); if (torlendoCsengRendResult.Aktiv == false) { var csRendHelper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); if (torlendoCsengRendResult.ID.HasValue) { helper.UpdateCsengetesiRend(valasztottCsengRendId, torlendoCsengRendId); csRendHelper.DeleteCsengetesiRend(torlendoCsengRendId); } } else { throw new StatusError(HttpStatusCode.BadRequest, CsengetesiRendResource.AktivCsengRendNemTorolheto); } } [HttpGet] public CsengetesiRendOraCO CsengetesiRendDetails(int csengRendID) { return new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsengetesiRendKapcsolodoOra(csengRendID); } #region Converters private CsengetesiRendCO ConvertModelToCo(CsengetesiRendModel model) { var co = new CsengetesiRendCO(); co.ID = model.ID; co.Nev = model.Nev.Trim(); co.Aktiv = model.Aktiv; return co; } private List ConvertModelListToCoList(int csengetesiRendId, List modelList, ModelStateDictionary modelState) { var colist = new List(); Regex regex = new Regex(Core.Constants.RegularExpressions.TimePicker); foreach (CsengetesiRendOraModel item in modelList) { var co = new CsengetesiRendOraCO(); co.ID = item.ID; co.CsengetesiRendID = csengetesiRendId; co.Oraszam = item.Oraszam; co.Aktiv = item.Aktiv; if (item.Aktiv) { if (string.IsNullOrWhiteSpace(item.Kezd)) { modelState.AddModelError(nameof(item.Kezd), string.Format(CsengetesiRendResource.KezdeteKotelezo, item.Oraszam)); } else { if (!regex.IsMatch(item.Kezd)) { modelState.AddModelError(nameof(item.Kezd), string.Format(CsengetesiRendResource.KezdeteRosszFormatum, item.Oraszam)); } else { var split = item.Kezd.Split(':'); co.Kezd = new DateTime(1900, 01, 01); co.Kezd = co.Kezd.AddHours(SDAConvert.ToInt32(split[0])).AddMinutes(SDAConvert.ToInt32(split[1])); } } if (string.IsNullOrWhiteSpace(item.Veg)) { modelState.AddModelError(nameof(item.Veg), string.Format(CsengetesiRendResource.VegeKotelezo, item.Oraszam)); } else { if (!regex.IsMatch(item.Veg)) { modelState.AddModelError(nameof(item.Veg), string.Format(CsengetesiRendResource.VegeRosszFormatum, item.Oraszam)); } else { var split = item.Veg.Split(':'); co.Veg = new DateTime(1900, 01, 01); co.Veg = co.Veg.AddHours(SDAConvert.ToInt32(split[0])).AddMinutes(SDAConvert.ToInt32(split[1])); } } } colist.Add(co); } return colist; } #endregion } }