kreta/KretaWeb/Areas/Tantargy/ApiControllers/TantargyakApiController.cs
2024-03-13 00:33:46 +01:00

414 lines
18 KiB
C#

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.Logic;
using Kreta.BusinessLogic.Security;
using Kreta.BusinessLogic.Utils;
using Kreta.Core;
using Kreta.Enums.ManualEnums;
using Kreta.Framework.Entities;
using Kreta.Framework.Util;
using Kreta.Resources;
using Kreta.Web.Areas.Tantargy.Models;
using Kreta.Web.Areas.TanuloErtekeles.Models.TanuloErtekeles;
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.Tantargy.ApiControllers
{
[ApiRoleClaimsAuthorize(true)]
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public class TantargyakApiController : ApiController
{
public bool IsDualisKepzesEnabled => new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType()).GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.DualisKepzes, IntezmenyConfigTipusEnum.IsEnabled);
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public DataSourceResult GetTantargyakGrid(string data, DataSourceRequest request)
{
var (gridParameter, modelList) = GetGridData(data, request, IsDualisKepzesEnabled);
return modelList.ToDataSourceResult(gridParameter);
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public HttpResponseMessage GetExport(string data, DataSourceRequest request)
{
try
{
var (gridParameter, modelList) = GetGridData(data, request, IsDualisKepzesEnabled);
modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary);
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<TantargyakGridModel>(TantargyakGridModel.TantargyakExportAttributeId);
var memoryStream = SimpleExportLogic.GetExport(TantargyResource.ExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value);
return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), $"{TantargyResource.Tantargyak_Export}_{DateTime.Now:yyyy_MM_dd}.xlsx");
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex };
}
}
private (GridParameters gridParameter, List<TantargyakGridModel> modelList) GetGridData(string data, DataSourceRequest request, bool isFromSzervezet)
{
var model = JsonConvert.DeserializeObject<TantargySearchModel>(data);
model.IsFromSzervezet = isFromSzervezet;
model.IsSzakkepzo = ClaimData.IsSzakkepzoIntezmeny;
var gridParameter = Converter.GridParameter(request);
var coList = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTantargyCoList(model.ConvertToCo());
var modelList = new List<TantargyakGridModel>();
foreach (var co in coList)
{
var gridModel = new TantargyakGridModel(co);
modelList.Add(gridModel);
}
return (gridParameter, modelList);
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public DataSourceResult GetTantargyFoglalkozasaiGrid(int tantargyID, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var fhelper = new TantargyFelosztasHelper(ConnectionTypeExtensions.GetSessionConnectionType());
fhelper.GridParameters = Converter.GridParameter(request);
var foglalkozasok = fhelper.GetTantargyFoglalkozasai(tantargyID);
return foglalkozasok.ToDataSourceResult();
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public DataSourceResult GetTantargyOrarendiOraiGrid(int tantargyID, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var ohelper = new OrarendiOraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
ohelper.GridParameters = Converter.GridParameter(request);
var orarendiorak = ohelper.GetOrarendiOrakByTantargyId(tantargyID);
return orarendiorak.ToDataSourceResult();
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public DataSourceResult GetTantargyTanmeneteiGrid(int tantargyID, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var thelper = new TanmenetHelper(ConnectionTypeExtensions.GetSessionConnectionType());
thelper.GridParameters = Converter.GridParameter(request);
var tanmenetek = thelper.GetTantargyTanmenetei(tantargyID);
return tanmenetek.ToDataSourceResult();
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public DataSourceResult GetTantargyMegtartottTanoraiGrid(int tantargyID, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var thelper = new TanoraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
thelper.GridParameters = Converter.GridParameter(request);
var tanmenetek = thelper.GetTantargyMegtartottTanorai(tantargyID);
return tanmenetek.ToDataSourceResult();
}
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public DataSourceResult GetTantargyErtekelesListGrid(int tantargyId, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType())
{
GridParameters = Converter.GridParameter(request)
};
var tanuloErtekelesListModel = new TanuloErtekelesListModel
{
TantargyIdSearch = tantargyId,
FeladatKategoriaIdSearch = Constants.MindenErteke.FeladatKategoria
};
DataSet dataSet = helper.GetTanuloErtekelesListGridDataSet(tanuloErtekelesListModel.ToCo());
return dataSet.ToDataSourceResult();
}
public HttpResponseMessage SaveModifiedOrNewTantargy(TantargyModel model)
{
try
{
ValidateModel(model);
if (ModelState.IsValid)
{
TantargyHelper h = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
TantargyCO co = Convert_Model_to_CO(model);
h.SaveOrUpdateTantargy(co);
return new HttpResponseMessage(HttpStatusCode.OK);
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
catch (UniqueKeyViolationException)
{
/*Már létezik ilyen nevű tantárgy*/
StatusError error = new StatusError(HttpStatusCode.BadRequest, StringResourcesUtils.GetString(4850));
throw error;
}
}
public HttpResponseMessage SaveModTantargy(TantargyModModel model)
{
bool? isFoTargyE = default;
if (model.IsFoTargy.HasValue)
{
isFoTargyE = model.IsFoTargy > 0;
}
bool? isGyakorlatiTargy = default;
if (model.GyakorlatiTargy.HasValue)
{ isGyakorlatiTargy = model.GyakorlatiTargy > 0; }
bool? isAmiTargy = default;
if (model.IsAmiTargyMod.HasValue)
{ isAmiTargy = model.IsAmiTargyMod > 0; }
bool? isMszgTargy = default;
if (model.IsMszgTargyMod.HasValue)
{ isMszgTargy = model.IsMszgTargyMod > 0; }
bool? isKollegiumiTargy = default;
if (model.IsKollegiumiTargy.HasValue)
{ isKollegiumiTargy = model.IsKollegiumiTargy > 0; }
bool? isFelnottoktatasTargy = default;
if (model.IsFelnottOktatasTargy.HasValue)
{ isFelnottoktatasTargy = model.IsFelnottOktatasTargy > 0; }
bool? isNincsBeloleOra = default;
if (model.IsNincsBeloleOraMod.HasValue)
{ isNincsBeloleOra = model.IsNincsBeloleOraMod > 0; }
bool? isEgymiTargy = default;
if (model.IsEgymiTargyMod.HasValue)
{ isEgymiTargy = model.IsEgymiTargyMod > 0; }
int? sorszam = model.Sorszam;
bool? isAltantargyNyomtatvanyban = default;
if (model.AltantargyNyomtatvanyban.HasValue)
{ isAltantargyNyomtatvanyban = model.AltantargyNyomtatvanyban > 0; }
if (ModelState.IsValid)
{
if (string.IsNullOrWhiteSpace(model.TantargyakIDArray))
{
var h = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var co = new TantargyTobbesModositasCO(model.ID.Value, model.TargyKategoria, model.ESLTargyKategoria, isFoTargyE, isGyakorlatiTargy, isAltantargyNyomtatvanyban, model.FoTargyID, sorszam, isAmiTargy, isMszgTargy, isKollegiumiTargy, isFelnottoktatasTargy, isEgymiTargy, isNincsBeloleOra);
h.TantargyTobbesModify(co);
return new HttpResponseMessage(HttpStatusCode.OK);
}
else
{
string[] tantargyIDArray = model.TantargyakIDArray.Split(',');
var h = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
foreach (var item in tantargyIDArray)
{
var co = new TantargyTobbesModositasCO(int.Parse(item), model.TargyKategoria, model.ESLTargyKategoria, isFoTargyE, isGyakorlatiTargy, isAltantargyNyomtatvanyban, model.FoTargyID, sorszam, isAmiTargy, isMszgTargy, isKollegiumiTargy, isFelnottoktatasTargy, isEgymiTargy, isNincsBeloleOra);
h.TantargyTobbesModify(co);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteTantargy([FromBody] int tantargyID)
{
try
{
TantargyHelper h = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
h.DeleteTantargyById(tantargyID);
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (EntityDeleteFailedException ex)
{
var uzenet = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, TantargyResource.Tantargy, ex.ConnectionErrorMessage);
throw new StatusError(HttpStatusCode.BadRequest, uzenet);
}
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public IHttpActionResult DeleteSelectedTantargy(List<int> idList)
{
var connectionType = ConnectionTypeExtensions.GetSessionConnectionType();
var h = new TantargyHelper(connectionType);
var errorMsg = string.Empty;
var counter = 0;
foreach (var id in idList)
{
try
{
h.DeleteTantargyById(id, false);
counter++;
}
catch (EntityDeleteFailedException ex)
{
var tantargyNev = h.GetTantargyById(id).TantargyNev;
var errorMessage = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, tantargyNev, ex.ConnectionErrorMessage);
errorMsg += $"{errorMessage}{Environment.NewLine}{Environment.NewLine}";
continue;
}
}
if (idList.Any())
{
new TanoraHelper(connectionType).UpdateTanitasiOraEvesSorszamTeljesTanev();
}
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);
}
private TantargyCO Convert_Model_to_CO(TantargyModel model)
{
TantargyCO co = new TantargyCO
{
AltantargyNyomtatvanyban = model.AltantargyNyomtatvanyban,
FoTargyID = model.FoTargyID,
FoTargyNev = model.FoTargyNev,
GyakorlatiTargy = model.GyakorlatiTargy,
ID = model.ID,
isFoTargy = model.IsFoTargy,
NevNyomtatvanyban = model.NevNyomtatvanyban,
TantargyNev = model.TantargyNev,
TantargyRovidNev = model.TantargyRovidNev,
TargyKategoria = model.TargyKategoria,
TargyKategoriaNev = model.TargyKategoriaNev,
ESLTantargykategoria = model.ESLTargyKategoria,
ESLTantargykategoriaNev = model.ESLTargyKategoriaNev,
TantargyAngolNev = model.TantargyAngolNev,
TantargyNemetNev = model.TantargyNemetNev,
TantargyHorvatNev = model.TantargyHorvatNev,
TantargyRomanNev = model.TantargyRomanNev,
TantargySzerbNev = model.TantargySzerbNev,
Sorszam = model.Sorszam,
Megjegyzes = model.Megjegyzes,
Gyakorlatigenyesseg = model.Gyakorlatigenyesseg,
IsAmiTargy = model.IsAmiTargyMod,
IsKollegiumiTargy = model.IsKollegiumiTargy,
IsFelnottOktatasTargy = model.IsFelnottOktatas,
IsNincsBeloleOra = model.IsNincsBeloleOraMod,
IsEgymiTargy = model.IsEgymi,
IsTanulmanyiAtlagbaNemSzamit = model.IsTanulmanyiAtlagbaNemSzamit,
IsOsztalynaplobanNemJelenikMeg = model.IsOsztalynaplobanNemJelenikMeg,
IsOsztalyokOrarendjebenMegjelenik = model.IsOsztalyOrarendjebenMegjelenik,
IsMszgTargy = model.IsMszgTargy,
MufajTipusId = model.AmiKepzesiJellemzokModel.MufajTipusId,
TanszakTipusId = model.AmiKepzesiJellemzokModel.TanszakTipusId,
MuveszetiAgId = model.AmiKepzesiJellemzokModel.MuveszetiAgId
};
co.SetErtekelesKorlatozasok(model.ErtekelesKorlatozasIdList);
return co;
}
public JsonResult<List<ComboBoxListItem>> GetFotargyakList([DataSourceRequest] DataSourceRequest request)
{
var helper = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var dictionary = helper.GetFotargyak();
List<ComboBoxListItem> dropdownListItems = new List<ComboBoxListItem>();
foreach (var item in dictionary)
{
ComboBoxListItem sli = new ComboBoxListItem() { Text = item.Value, Value = item.Key };
dropdownListItems.Add(sli);
}
return Json(dropdownListItems);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public IHttpActionResult GetFotargyakhozTartozikAltargy(List<int> tantargyIdList)
{
if (tantargyIdList.Any())
{
TantargyHelper h = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
List<string> errorList = h.GetFotargyhozTartozikAltargy(tantargyIdList);
string errorMsg = string.Empty, entityName = string.Empty;
if (errorList.Any())
{
errorMsg += $"{TantargyResource.AFotargyNemAllithatoAltarggyaMivelTartozikHozzaAltantargy}{Environment.NewLine}{string.Join(Environment.NewLine + " ", errorList)}";
throw new StatusError(HttpStatusCode.BadRequest, errorMsg);
}
}
return Json(new { Text = "" });
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public IHttpActionResult GetSzorgalomElegtelenTantargyList(List<int> tantargyIdList)
{
TantargyHelper h = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var tantargyList = h.GetTantargyakEgyesErtekelessel(tantargyIdList);
return Json(JsonConvert.SerializeObject(tantargyList));
}
private void ValidateModel(TantargyModel model)
{
if (model.IsAmiTargyMod && model.IsMszgTargy)
{
ModelState.AddModelError(nameof(model.IsAmiTargyMod), TantargyResource.AmiMszgTargyValidacioHiba);
}
if (model.TantargyNev == TantargyResource.DualisKepzes)
{
ModelState.AddModelError(nameof(model.TantargyNev), TantargyResource.DualisKepzesTantargyNemModosithatoMertVedettElem);
}
else if (model.TantargyNev == TantargyResource.ApaczaiKonzultacio)
{
ModelState.AddModelError(nameof(model.TantargyNev), TantargyResource.ApaczaiKonzultacioTantargyNemModosithatoMertVedettElem);
}
}
}
}