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.Results; using Kendo.Mvc.UI; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Classes.ComboBox; using Kreta.BusinessLogic.Exceptions; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Logic; using Kreta.BusinessLogic.Security; using Kreta.Core; using Kreta.Enums; using Kreta.Framework.Entities; using Kreta.Framework.Util; using Kreta.Resources; using Kreta.Web.Areas.Adminisztracio.Models; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Error; using Kreta.Web.Helpers.Grid; using Kreta.Web.Security; using Newtonsoft.Json; using SDA.DataProvider; namespace Kreta.Web.Areas.Adminisztracio.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)] public class AdatszotarApiController : ApiController { /// /// Adatszótár grid visszaadás /// /// /// /// public DataSourceResult GetAdatszotarGrid(string data, DataSourceRequest request) { var model = JsonConvert.DeserializeObject(data); if (!model.AdatszotarTipusTypeId.IsEntityId()) { return new DataSourceResult(); } var (gridParameter, modelList) = GetGridData(request, model.AdatszotarTipusTypeId); return modelList.ToDataSourceResult(gridParameter); } public HttpResponseMessage GetExport(string data, DataSourceRequest request) { var model = JsonConvert.DeserializeObject(data); if (!model.AdatszotarTipusTypeId.IsEntityId()) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AdatszotarTipusaNincsMegadva); } try { var (gridParameter, modelList) = GetGridData(request, model.AdatszotarTipusTypeId); modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary); var exportAttribute = model.AdatszotarTipusTypeId == (int)GeneratedAdatszotarTipusEnum.NapTipus ? AdatszotarGridModel.AdatszotarNapTipusExportAttributeId : AdatszotarGridModel.AdatszotarExportAttributeId; var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(exportAttribute); var memoryStream = SimpleExportLogic.GetExport(AdminisztracioResource.AdatszotarExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value); return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), AdminisztracioResource.AdatszotarExportFileName); } catch (Exception ex) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex }; } } private (GridParameters gridParameter, List modelList) GetGridData(DataSourceRequest request, int? adatszotarTipusTypeId) { var gridParameter = Converter.GridParameter(request); var coList = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetAdatszotarCoList((GeneratedAdatszotarTipusEnum)adatszotarTipusTypeId); var modelList = new List(); foreach (var co in coList) { var gridModel = new AdatszotarGridModel(co); modelList.Add(gridModel); } return (gridParameter, modelList); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveAdatszotarData(AdatszotarGridModel model) { try { var helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus) { if (model.ZaradekSzovegList.Any(x => !string.IsNullOrWhiteSpace(x.Szoveg) && x.Szoveg.Length > 255)) { throw new StatusError(HttpStatusCode.BadRequest, string.Format(CommonResource.ZaradekSzoveg0Max255Karakter, ((AnyanyelvEnum)model.ZaradekSzovegList.First(x => x.Szoveg.Length > 255).NyelvId).GetDisplayName(ClaimData.SelectedTanevID.Value))); } } if (Core.Constants.NemBovithetoAdatszotarTipusLista.Contains(model.AdatszotarTipusId) || model.IsProtected) { if (!model.AdatszotarID.HasValue || model.AdatszotarID.Value == 0) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ErrorResource.KivalasztottAdatszotarNemBovitheto); } else { var co = helper.GetAdatszotarElem(model.AdatszotarID.Value); co.Lathato = model.IsLathato; if (model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.NapTipus) { co.IsSorszamozando = model.IsSorszamozando; co.IsTanorai = model.IsTanorai; co.IsTanorankivuli = model.IsTanorankivuli; co.IsLeNemKotottMunkaido = model.IsLeNemKotottMunkaido; } if (model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod) { co.Color = model.Color != null ? model.Color.Replace("#", "") : ""; co.IsBold = model.IsBold; co.Suly = model.Suly; } if (model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus) { co.ZaradekSzovegCoList = model.ZaradekSzovegList.Where(x => x.NyelvId != (int)AnyanyelvEnum.magyar).ToList().ConvertAll(x => new AdatszotarZaradekNyelvCo { NyelvId = x.NyelvId, Name = x.Szoveg }); } helper.Update(co, ClaimData.KovTanevID); return new HttpResponseMessage(HttpStatusCode.OK); } } if (ModelState.IsValid && (model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod || model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.NapTipus || model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus || !model.IsProtected)) { if (model.AdatszotarID.HasValue && model.AdatszotarID > 0) { AdatszotarCO co = model.ToCo(); helper.Update(co, ClaimData.KovTanevID); } else { AdatszotarCO co = model.ToCo(); helper.Insert(co); } return new HttpResponseMessage(HttpStatusCode.OK); } else if (model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.ErtekelesMod || model.AdatszotarTipusId == (int)GeneratedAdatszotarTipusEnum.NapTipus || !model.IsProtected) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ErrorResource.VedettAdatszotarnakAMegnevezesetNemLehetModositani); } else { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } } catch (UniqueKeyViolationException) { throw new StatusError(HttpStatusCode.BadRequest, CommonResource.AMegadottNevMarLetezik); } catch (CannotBeInsertedException ex) { throw new StatusError(HttpStatusCode.BadRequest, ex.Message); } } /// /// Adatszótár láthatóságának beállítása és mentése /// /// /// [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SetLathatosag([FromBody] string elemId) { AdatszotarHelper helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var co = helper.GetAdatszotarElem(Convert.ToInt32(elemId)); co.Lathato = !co.Lathato; helper.Update(co, ClaimData.KovTanevID); return new HttpResponseMessage(HttpStatusCode.OK); } /// /// Adatszótár aktiválás mentés /// /// /// [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveAdatszotarActivate([FromBody] ItemListModel parameters) { if (parameters.Items.Count == 0) { throw new StatusError(HttpStatusCode.BadRequest, CommonResource.ValasszonKiLegalabbEgyElemet); } bool success = GroupModifyItemActivity(parameters, true); if (!success) { throw new StatusError(HttpStatusCode.BadRequest, AdminisztracioResource.AktivalasNemLehetsegesAzElemVedett); } return new HttpResponseMessage(HttpStatusCode.OK); } /// /// Adatszótár deaktiválás mentés /// /// /// [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveAdatszotarDeactivate([FromBody] ItemListModel parameters) { if (parameters.Items.Count == 0) { throw new StatusError(HttpStatusCode.BadRequest, CommonResource.ValasszonKiLegalabbEgyElemet); } bool success = GroupModifyItemActivity(parameters, false); if (!success) { throw new StatusError(HttpStatusCode.BadRequest, AdminisztracioResource.DeaktivalasNemLehetsegesAzElemVedett); } return new HttpResponseMessage(HttpStatusCode.OK); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveElementsOrder(OrderItemListModel parameters) { if (parameters.Items.Count == 0) { throw new StatusError(HttpStatusCode.BadRequest, AdminisztracioResource.NincsAdatszotarLekerveMentesCsakKeresesUtanLehetseges); } foreach (var item in parameters.Items) { if (item.Sorszam <= 0) { throw new StatusError(HttpStatusCode.BadRequest, AdminisztracioResource.SorszamErtekeCsakPozitivSzamLehet); } } try { var helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); foreach (var item in parameters.Items) { helper.UpdateSorszam(item.Id, item.Sorszam, ClaimData.KovTanevID); } return new HttpResponseMessage(HttpStatusCode.OK); } catch (CannotBeModifiedException ex) { throw new StatusError(HttpStatusCode.BadRequest, ex.Message); } } /// /// Adatszótár törlés /// /// /// [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteAdatszotar([FromBody] int id) { try { var helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); if (helper.IsProtected(id)) { throw new StatusError(HttpStatusCode.BadRequest, AdminisztracioResource.TorlesNemLehetsegesAzElemVedett); } helper.Delete(id); return new HttpResponseMessage(HttpStatusCode.OK); } catch (EntityDeleteFailedException ex) { var uzenet = string.Format(ErrorResource.AdatszotarNemTorolhetoKapcsolatMiatt, ex.ConnectionErrorMessage); throw new StatusError(HttpStatusCode.BadRequest, uzenet); } catch (StatusError) { throw; } catch (Exception e) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AzElemNemTorolhetoMertEgyVagyTobbKapcsolodasaVan) { UnHandledException = e }; } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public IHttpActionResult DeleteSelectedAdatszotar(List idList) { var helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); string errorMsg = string.Empty; var counter = 0; foreach (var id in idList) { try { if (helper.IsProtected(id)) { var adatszotarElem = helper.GetAdatszotarElem(id); errorMsg += $"{adatszotarElem.Megnevezes}: {AdminisztracioResource.TorlesNemLehetsegesAzElemVedett}" + Environment.NewLine + Environment.NewLine; continue; } helper.Delete(id); counter++; } catch (EntityDeleteFailedException ex) { var adatszotarElem = helper.GetAdatszotarElem(id); var uzenet = string.Format(ErrorResource.AdatszotarNemTorolhetoKapcsolatMiatt, ex.ConnectionErrorMessage); errorMsg += $"{adatszotarElem.Megnevezes}: {uzenet}" + Environment.NewLine + Environment.NewLine; continue; } catch (Exception e) { var adatszotarElem = helper.GetAdatszotarElem(id); errorMsg += $"{adatszotarElem.Megnevezes}: {ErrorResource.AzElemNemTorolhetoMertEgyVagyTobbKapcsolodasaVan}" + Environment.NewLine + Environment.NewLine; continue; } } if (string.IsNullOrWhiteSpace(errorMsg)) return Json(new { Message = string.Format(ErrorResource.NSorTorlesSikeres, counter) }); if (counter > 0) { errorMsg += Environment.NewLine + string.Format(ErrorResource.NSorTorlesSikeres, counter); } throw new StatusError(HttpStatusCode.BadRequest, errorMsg); } #region Helpers private AdatszotarCO Convert_Model_to_CO(AdatszotarGridModel model) { AdatszotarCO co = new AdatszotarCO { ID = model.AdatszotarID, AdatszotarTipus = model.AdatszotarTipusNev, AdatszotarTipusId = model.AdatszotarTipusId, Lathato = model.IsLathato, Megnevezes = model.Megnevezes, Sorszam = model.Sorszam, Megnevezes1 = model.Megnevezes1, Megnevezes2 = model.Megnevezes2, Megnevezes3 = model.Megnevezes3, Megnevezes4 = model.Megnevezes4, Color = model.Color != null ? model.Color.Replace("#", "") : "", IsBold = model.IsBold, Suly = model.Suly, Protected = model.IsProtected, IsSorszamozando = model.IsSorszamozando, IsTanorai = model.IsTanorai, IsTanorankivuli = model.IsTanorankivuli, IsLeNemKotottMunkaido = model.IsLeNemKotottMunkaido, }; return co; } private AdatszotarGridModel Convert_CO_to_Model(AdatszotarCO co) { AdatszotarGridModel model = new AdatszotarGridModel() { ID = string.Empty, AdatszotarTipusNev = co.AdatszotarTipus, AdatszotarTipusId = co.AdatszotarTipusId, AdatszotarID = co.ID, IsLathato = co.Lathato ?? false, Megnevezes = co.Megnevezes, Sorszam = co.Sorszam, Megnevezes1 = co.Megnevezes1, Megnevezes2 = co.Megnevezes2, Megnevezes3 = co.Megnevezes3, Megnevezes4 = co.Megnevezes4, Color = "#" + co.Color != null ? co.Color : "000000", IsBold = co.IsBold, Suly = co.Suly, IsProtected = co.Protected, IsSorszamozando = co.IsSorszamozando, IsTanorai = co.IsTanorai, IsTanorankivuli = co.IsTanorankivuli, IsLeNemKotottMunkaido = co.IsLeNemKotottMunkaido, }; return model; } public AdatszotarGridModel GetAdatszotarElem(int id) { return new AdatszotarGridModel(new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetAdatszotarElem(id)); } private bool GroupModifyItemActivity(ItemListModel parameters, bool active) { var helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var adatszotarIds = new List(); foreach (var item in parameters.Items) { adatszotarIds.Add(item.Id); } bool success = helper.ModifyItemActivity(adatszotarIds, active); return success; } private DataSet FormatDataset(DataSet ds) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { for (int j = 0; j < ds.Tables[0].Columns.Count; j++) { if (ds.Tables[0].Columns[j].ColumnName == "Lathato") ds.Tables[0].Rows[i]["Lathato"] = SDAConvert.ToBooleanFromTF(ds.Tables[0].Rows[i]["Lathato"], false); if (ds.Tables[0].Columns[j].ColumnName == "Protected") ds.Tables[0].Rows[i]["Protected"] = SDAConvert.ToBooleanFromTF(ds.Tables[0].Rows[i]["Protected"], false); } } return ds; } public class ItemListModel { public List Items { set; get; } } public class ItemModel { public int Id { set; get; } } public class OrderItemListModel { public List Items { set; get; } } public class OrderItemModel { public int Id { set; get; } public int Sorszam { set; get; } } #endregion public JsonResult> GetAdatszotarTipusList() { var tipusok = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetEditableAdatszotarTipusok().OrderBy(x => x.megnevezes).ToList(); var dropdownListItems = new List(); foreach ((int id, string megnevezes) in tipusok) { var sli = new ComboBoxListItem() { Text = megnevezes, Value = id.ToString() }; dropdownListItems.Add(sli); } return Json(dropdownListItems); } public HttpResponseMessage ChangeSelectedAdatszotarToLathato(List idList) { AdatszotarHelper helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); foreach (var id in idList) { var co = helper.GetAdatszotarElem(Convert.ToInt32(id)); co.Lathato = true; helper.Update(co, ClaimData.KovTanevID); } return new HttpResponseMessage(HttpStatusCode.OK); } public HttpResponseMessage ChangeSelectedAdatszotarToRejtett(List idList) { AdatszotarHelper helper = new AdatszotarHelper(ConnectionTypeExtensions.GetSessionConnectionType()); foreach (var id in idList) { var co = helper.GetAdatszotarElem(Convert.ToInt32(id)); co.Lathato = false; helper.Update(co, ClaimData.KovTanevID); } return new HttpResponseMessage(HttpStatusCode.OK); } } }