using System.Collections.Generic; using System.Data; using System.Linq; using System.Web.Http; using System.Web.Http.ModelBinding; using Kendo.Mvc.UI; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; using Kreta.Core; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework.Util; using Kreta.Web.Areas.TanuloErtekeles.Models.TanuloErtekeles; using Kreta.Web.Helpers; using Kreta.Web.Helpers.Grid; using Kreta.Web.Models; using Kreta.Web.Security; using Newtonsoft.Json; namespace Kreta.Web.Areas.TanuloErtekeles.ApiControllers { [ApiRoleClaimsAuthorize(true)] [ApiRolePackageAuthorize(KretaClaimPackages.Ellenorzo.ClaimValue)] public class OsztalyzatokApiController : ApiController { public DataSourceResult GetOsztalyzatokFeleviErtesitoGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var result = GetOsztalyzatokErtesitoGrid(data, request, (int)ErtekelesTipusEnum.felevi_jegy_ertekeles); return result; } public DataSourceResult GetOsztalyzatokEvvegiErtesitoGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request) { var result = GetOsztalyzatokErtesitoGrid(data, request, (int)ErtekelesTipusEnum.evvegi_jegy_ertekeles); return result; } private DataSourceResult GetOsztalyzatokErtesitoGrid(string data, DataSourceRequest request, int ertekelesTipusEnumId) { var model = JsonConvert.DeserializeObject(data); var osztalyId = model.OsztalyId; if (!osztalyId.IsEntityId()) { return new DataSourceResult(); } var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType()) { GridParameters = Converter.GridParameter(request) }; var feladatKategoriaId = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOsztalyCsoportFeladatKategoria(osztalyId.Value); var tanuloErtekelesListModel = new TanuloErtekelesListModel { TanuloIdSearch = ClaimData.FelhasznaloId, TipusIdSearch = ertekelesTipusEnumId, OsztalyCsoportIdSearch = osztalyId.Value, FeladatKategoriaIdSearch = feladatKategoriaId, KellKapcsolodoCsoportokSearch = true }; var dataSet = helper.GetTanuloErtekelesListGridDataSet(tanuloErtekelesListModel.ToCo(), pErtekelesTextTemaval: true); var dataTable = dataSet.Tables[0]; if (feladatKategoriaId != (int)OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas) { var datum = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetDatumInTanev(); var tanuloOsztalyId = new TanuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetTanuloOsztalyIdByFeladatKategoria(ClaimData.FelhasznaloId, datum, (OktNevelesiKategoriaEnum)feladatKategoriaId); if (!tanuloOsztalyId.IsEntityId()) { dataTable.Rows.Clear(); } else { var tanuloOsztalyEvfolyamTipusId = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOsztalyCsoportEvfolyamTipusId(tanuloOsztalyId.Value); var tanuloIdAndFeladatKategoriaIdAndEvfolyamTipusIdList = new List<(int tanuloId, int feladatKategoriaId, int? evfolyamTipusId)> { (ClaimData.FelhasznaloId, feladatKategoriaId, tanuloOsztalyEvfolyamTipusId) }; helper.RemoveMasEvfolyamTanuloErtekelesek(dataTable, tanuloIdAndFeladatKategoriaIdAndEvfolyamTipusIdList); } } helper.RemoveTanuloJogosultsagMiattiErtekelesek(new List() { ClaimData.FelhasznaloId }, dataTable); var gridDataSet = dataSet.Tables[0].Rows.Count > 0 ? GetSortedDataSet(dataSet.Tables[0]) : dataSet; return gridDataSet.ToDataSourceResult(); } private DataSet GetSortedDataSet(DataTable dataTable) { var targyKategoriaTipusDictionaryItemList = ((int)GeneratedAdatszotarTipusEnum.TargyKategoriaTipus).GetItemsByType(ClaimData.SelectedTanevID.Value); dataTable.Columns.Add("TantargyKategoriaOrder"); dataTable.Columns.Add("FotargyTantargyKategoriaOrder"); var tanuloErtekelesRows = dataTable.Rows.Cast().ToList(); foreach (var dataRow in tanuloErtekelesRows) { var tantargyKategoriaId = SDAConvert.ToNullableInt32(dataRow["TantargyKategoriaId"]); dataRow["TantargyKategoriaOrder"] = SDAConvert.ToBooleanFromTF(dataRow["IsMagatartasSzorgalom"]) ? 0 : tantargyKategoriaId.IsEntityId() ? targyKategoriaTipusDictionaryItemList.Single(x => x.Id == tantargyKategoriaId.Value).Order : null; var fotargyTantargyKategoriaId = SDAConvert.ToNullableInt32(dataRow["FotargyTantargyKategoriaId"]); dataRow["FotargyTantargyKategoriaOrder"] = fotargyTantargyKategoriaId.IsEntityId() ? targyKategoriaTipusDictionaryItemList.Single(x => x.Id == fotargyTantargyKategoriaId.Value).Order : null; } var sortedDataTable = dataTable .AsEnumerable() .OrderBy(x => SDAConvert.ToBoolean(x["IsFotargy"]) ? SDAConvert.ToNullableInt32(x["TantargyKategoriaOrder"]) ?? 10000 : SDAConvert.ToNullableInt32(x["FotargyTantargyKategoriaOrder"]) ?? 10000) .ThenBy(x => SDAConvert.ToBoolean(x["IsFotargy"]) ? SDAConvert.ToString(x["TantargyNev"]) : SDAConvert.ToString(x["FotargyNev"])) .ThenBy(x => SDAConvert.ToBoolean(x["IsFotargy"]) ? 0 : 1) .ThenBy(x => SDAConvert.ToString(x["TantargyNev"])) .CopyToDataTable(); var gridDataSet = new DataSet(); gridDataSet.Tables.Add(sortedDataTable); return gridDataSet; } [HttpPost] [ApiValidateAjaxAntiForgeryToken] public ZaradekModel GetTanuloZaradek(string osztalyId) { var tanuloCo = new TanuloHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanuloiAdatok(ClaimData.FelhasznaloId, kovTanevId: null, ClaimData.IsSelectedTanev20_21OrLater, ClaimData.IsSelectedTanev21_22OrLater, int.Parse(osztalyId)); return tanuloCo.Zaradek.TanuloCsoportId.HasValue ? new ZaradekModel(tanuloCo.Zaradek.TanuloCsoportId.Value, tanuloCo.ID.Value) : new ZaradekModel(); } } }