using System; using System.Collections.Generic; using System.Data; using System.Net; using System.Net.Http; using System.Text; using System.Web; using System.Web.Http; using System.Web.Http.ModelBinding; using System.Web.Http.Results; using Kendo.Mvc.Extensions; using Kendo.Mvc.UI; 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.Core.Exceptions; using Kreta.Framework; using Kreta.Framework.Entities; using Kreta.Framework.Util; using Kreta.Resources; using Kreta.Web.Areas.Tantargy.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.Tantargy.ApiControllers { public class BaseTantargyFelosztasApiController : ApiController { public DataSourceResult GetTantargyFelosztasok(string data, DataSourceRequest request) { var (gridParameter, modelList, _) = GetGridData(data, request); var ret = modelList.ToDataSourceResult(gridParameter); return ret; } public HttpResponseMessage GetExport(string data, DataSourceRequest request) { try { var (gridParameter, modelList, exportAttributeName) = GetGridData(data, request); modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary); var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(exportAttributeName); var memoryStream = SimpleExportLogic.GetExport(TantargyfelosztasResource.ExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value); return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), string.Format(TantargyfelosztasResource.ExportFileNameFormat, ClaimData.IntezmenyAzonosito)); } catch (Exception ex) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex }; } } private (GridParameters gridParameter, List modelList, string exportAttributeName) GetGridData(string data, DataSourceRequest request) { var connection = ConnectionTypeExtensions.GetSessionConnectionType(); var model = JsonConvert.DeserializeObject(data); var gridParameter = Converter.GridParameter(request); var keresesModel = model.ConvertToCo(); if (model.IsFromSzervezet) { var szervezetId = new SzervezetHelper(connection).GetAlkalmazottSzervezetId(ClaimData.FelhasznaloId); keresesModel.SzervezetId = szervezetId; } var coList = new TantargyFelosztasHelper(connection).GetTantargyFelosztasCoList(keresesModel); var modelList = new List(); foreach (var co in coList) { var gridModel = new TantargyFelosztasGridModel(co); modelList.Add(gridModel); } var exportAttributeName = model.IsFromSzervezet ? TantargyFelosztasGridModel.DualisTantargyFelosztasExportAttributeId : TantargyFelosztasGridModel.TantargyFelosztasExportAttributeId; return (gridParameter, modelList, exportAttributeName); } [ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Dualis_Admin.ClaimValue, KretaClaimPackages.IsSzakiranyuOktatasertFelelos.ClaimValue)] [HttpPost] [ApiValidateAjaxAntiForgeryToken] public void StoreSelectedTanar([FromBody] int tanarID) { if (tanarID > 0) { HttpContext.Current.Application["tanarId"] = tanarID; } } [HttpPost] public JsonResult ValidateTantargyFelosztasModify(TantargyFelosztasModositasaModel model) { var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var result = helper.DuplicatedTantargyfelosztas(model.TanarId, model.CsoportID, model.TantargyId, model.Id); return Json(result); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage SaveFelosztas(SaveFelosztasModel model) { try { var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()); foreach (var item in model.felosztasok) { if (item?.CsoportID.HasValue == true && ((item.TantargyID.HasValue && item.Oraszam.HasValue) || (item.TantargyID.HasValue && model.IsFromSzervezet))) { helper.CreateOrUpdateFelosztas(new TantargyFelosztasCO { TanarID = model.tanarID, OsztalyCsoportID = item.CsoportID.Value, TantargyID = item.TantargyID.Value, Oraszam = item.Oraszam ?? 0, TuloraSzam = item.TuloraSzam ?? 0, OsszevontOra = item.OsszevontOra, NemzetisegiOra = item.NemzetisegiOra, MegbizasiOraszam = item.MegbizasiOraszam ?? 0 }, isFromSzervezet: model.IsFromSzervezet); } } return new HttpResponseMessage(HttpStatusCode.OK); } catch (BlException e) { throw new StatusError(HttpStatusCode.BadRequest, e.Message); } } public DataSourceResult GetTantargyFelosztasokFelvetel(string data, bool isFromSzervezet, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var model = JsonConvert.DeserializeObject(data); var dataSet = new DataSet(); var dataTable = new DataTable(); dataTable.Columns.Add("ID"); dataTable.Columns.Add("OsztalyCsoport"); dataTable.Columns.Add("OsztalyCsoportID"); dataTable.Columns.Add("Tantargy"); dataTable.Columns.Add("TantargyID"); dataTable.Columns.Add("Oraszam"); dataTable.Columns.Add("Tuloraszam"); dataTable.Columns.Add("OsszevontOra"); dataTable.Columns.Add("OsszevontOra_BNAME"); dataTable.Columns.Add("NemzetisegiOra"); dataTable.Columns.Add("NemzetisegiOra_BNAME"); dataTable.Columns.Add("MegbizasiOraszam"); dataTable.Columns.Add("Valid"); if (model.TanarId.HasValue) { DataSet tantargyfelosztasDataSet; var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()); helper.GridParameters = Converter.GridParameter(request); tantargyfelosztasDataSet = helper.GetTantargyFelosztasData(model.TanarId, isFromSzervezet: isFromSzervezet); foreach (DataRow dataRow in tantargyfelosztasDataSet.Tables[0].Rows) { dataTable.Rows.Add( dataRow["ID"], dataRow["OsztalyCsoport"], dataRow["OsztalyCsoportID"], dataRow["Tantargy"], dataRow["TantargyID"], dataRow["Oraszam"], dataRow["Tuloraszam"], dataRow["OsszevontOra"], dataRow["OsszevontOra_BNAME"], dataRow["NemzetisegiOra"], dataRow["NemzetisegiOra_BNAME"], dataRow["MegbizasiOraszam"], true ); } for (int i = 0; i < 20; i++) { dataTable.Rows.Add( Guid.NewGuid(), string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, false, string.Empty, false, string.Empty, string.Empty, false ); } } dataSet.Tables.Add(dataTable); return dataSet.ToDataSourceResult(); } public JsonResult> GetTantargyakDD([DataSourceRequest] DataSourceRequest request) { var helper = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var tantargyak = helper.GetTanarTantargyaiByTanevCsoportositva(isSzakkepzo: ClaimData.IsSzakkepzoIntezmeny); var dropdownListItems = new List(); foreach (var row in tantargyak) { if (!string.IsNullOrWhiteSpace(row.Value)) { var sli = new ComboBoxListItem() { Text = row.Text, Value = row.Value }; dropdownListItems.Add(sli); } } return Json(dropdownListItems); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage ModifyTantargyFelosztas(TantargyFelosztasModositasaModel model) { try { if (model.Oraszam < model.TuloraSzam) { ModelState.AddModelError("TuloraSzam", TantargyfelosztasResource.ATuloraNemLehetNagyobbMintAzOraszam); } if (ModelState.IsValid) { var connectionType = ConnectionTypeExtensions.GetSessionConnectionType(); var helper = new TantargyFelosztasHelper(connectionType); var orarendiOraHelper = new OrarendiOraHelper(connectionType); var eredetiTtf = helper.GetFoglalkozasById(model.Id); var tanarId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TanarID"]); var tantargyId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TantargyID"]); var osztalycsoportId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["OsztalyCsoportID"]); var ttfCo = new TantargyFelosztasVisszamenolegesCO { EredetiTanarId = tanarId, EredetiTantargyId = tantargyId, EredetiOsztalyCsoportId = osztalycsoportId, ModosultTanarId = model.TanarId, ModosultTantargyId = model.TantargyId, ModosultOsztalyCsoportId = model.CsoportID }; if (model.VisszamenolegesModositas) { if (tanarId != model.TanarId) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, TantargyResource.VisszamenolegesModositasNemLehetHaTanar); } if (!helper.ValidateTantargyfelosztasVisszamenolegesModositas(ttfCo, out var errorMessage)) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errorMessage); } if (tantargyId != model.TantargyId || osztalycsoportId != model.CsoportID) { helper.TantargyfelosztasVisszamenolegesModositas(ttfCo); new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType()).AtlagUjraSzamitasVisszamenolegesModositasUtan(ttfCo); } } if (model.KapcsolodoOrarendiOrakModositasa) { helper.UpdateOrarendiOraAfterTantargyfelosztasUpdate(ttfCo); } else if (tantargyId != model.TantargyId || osztalycsoportId != model.CsoportID) { helper.RemoveOrarendiOraTTFRelation(model.Id); } helper.CreateOrUpdateFelosztas(new TantargyFelosztasCO { ID = model.Id, Oraszam = model.Oraszam, OsztalyCsoportID = model.CsoportID, TanarID = model.TanarId, TantargyID = model.TantargyId, FoglalkozasTipusa = model.TipusId, OsszevontOra = model.OsszevontOra, NemzetisegiOra = model.NemzetisegiOra, MegbizasiOraszam = model.MegbizasiOraszam, TuloraSzam = model.TuloraSzam }); if (tanarId != model.TanarId) { helper.HandleTanarValtozasOrarendiOrakon(model.Id); } orarendiOraHelper.UpdateOrarend(); return new HttpResponseMessage(HttpStatusCode.OK); } return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } catch (BlException e) { throw new StatusError(HttpStatusCode.BadRequest, e.Message); } catch (Exception e) { throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAMuveletSoran) { UnHandledException = e }; } } [HttpPost] public JsonResult ModifyTantargyFelosztasConfirmContent(TantargyFelosztasModositasaModel model) { var sb = new StringBuilder(); var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType()); var eredetiTtf = helper.GetFoglalkozasById(model.Id); var tanarId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TanarID"]); var tantargyId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["TantargyID"]); var osztalycsoportId = Convert.ToInt32(eredetiTtf.Tables[0].Rows[0]["OsztalyCsoportID"]); var ttfCo = new TantargyFelosztasVisszamenolegesCO { EredetiTanarId = tanarId, EredetiTantargyId = tantargyId, EredetiOsztalyCsoportId = osztalycsoportId, ModosultTanarId = model.TanarId, ModosultTantargyId = model.TantargyId, ModosultOsztalyCsoportId = model.CsoportID }; if (model.VisszamenolegesModositas) { sb.AppendFormat(TantargyResource.VisszamenolegesModositasFormat, model.TanorakSzama.ToString(), model.ErtekelesekSzama.ToString(), model.MulasztasokSzama.ToString()).AppendLine(); if (model.TantargyId != tantargyId) { if (helper.GetEgyszerAdhatoErtekelesekTanatargyfelosztasModositasAlapjan(ttfCo).Count > 0) { sb.AppendLine(TantargyResource.MarLetezikEgyszerAdhatoErtekeles); } } } if (model.KapcsolodoOrarendiOrakModositasa) { var m = helper.TantargyfelosztasbanValtozoOrarendiOrak(ttfCo); if (m.Tables[0].Rows.Count > 0) { sb.AppendLine(TantargyResource.AtirasraKerulOrarendiElemek); foreach (var row in m.Tables[0].AsEnumerable()) { var kezdete = DateTime.Parse(row["ErvenyessegKezdete"].ToString()).ToShortDateString(); var vege = row["ErvenyessegVege"] != null ? DateTime.Parse(row["ErvenyessegVege"].ToString()).ToShortDateString() : string.Empty; sb.AppendFormat(TantargyResource.AtirasraKerulOrarendiElemekFormat, row["Hetirend"], row["Nap"], row["Ora"], kezdete, vege).AppendLine(); } } else { sb.AppendLine(TantargyResource.NincsModositandoOrarendiElem); } } return Json(sb.ToString()); } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public HttpResponseMessage DeleteTantargyFelosztas([FromBody] int id) { try { var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); helper.DeleteTargyFelosztas(id); return new HttpResponseMessage(HttpStatusCode.OK); } catch (Framework.Entities.EntityDeleteFailedException) { var uzenet = string.Format(StringResourcesUtil.GetString(5490), StringResourcesUtil.GetString(1621)); throw new StatusError(HttpStatusCode.BadRequest, uzenet); } } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public IHttpActionResult DeleteSelectedTantargyFelosztas(List idList) { string errorMsg = string.Empty, entityName = string.Empty; var counter = 0; var helper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()); foreach (var id in idList) { try { helper.DeleteTargyFelosztas(id); counter++; } catch (CannotBeDeletedException ex) { errorMsg += $"{ex.Message}{Environment.NewLine}"; continue; } catch (EntityDeleteFailedException ex) { var errorMessage = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, OrarendResource.Tantargyfelosztas, ex.ConnectionErrorMessage); errorMsg += $"{errorMessage}{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); } } }