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

172 lines
7 KiB
C#

using System;
using System.Collections.Generic;
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.Helpers;
using Kreta.BusinessLogic.Logic;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
using Kreta.Core.Exceptions;
using Kreta.Enums;
using Kreta.Framework.Util;
using Kreta.Resources;
using Kreta.Web.Areas.OsztalyCsoport.Logic;
using Kreta.Web.Areas.OsztalyCsoport.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.OsztalyCsoport.ApiControllers
{
[ApiRoleClaimsAuthorize(true)]
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Dualis_Admin.ClaimValue, KretaClaimPackages.IsSzakiranyuOktatasertFelelos.ClaimValue)]
public class BaseCsoportApiController : ApiController
{
[NonAction]
public DataSourceResult GetCsoportGrid(string data, DataSourceRequest request)
{
var (gridParameter, modelList) = GetGridData(data, request);
return modelList.ToDataSourceResult(gridParameter);
}
public DataSourceResult GetCsoportTanuloi(string csoportId, [System.Web.Http.ModelBinding.ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
return OsztalyCsoportLogic.GetCsoportTanuloi(csoportId, request);
}
[NonAction]
public HttpResponseMessage SaveModifiedOrNewCsoport(AlapkepzesCsoportModel model)
{
try
{
ModelState.AddRange(AlapkepzesOsztalyCsoportLogic.ValidateCsoport(model));
if (ModelState.IsValid)
{
AlapkepzesOsztalyCsoportLogic.SaveCsoport(model);
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (SDA.DataProvider.UniqueKeyViolationException)
{
throw new StatusError(HttpStatusCode.BadRequest, OsztalyCsoportResource.AMegadottNevMarLetezik);
}
catch (BlException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
}
public HttpResponseMessage SaveModCsoport(CsoportModModel model)
{
try
{
ModelState.AddRange(OsztalyCsoportLogic.ValidateCsoportGroup(model));
if (ModelState.IsValid)
{
var errorMessage = OsztalyCsoportLogic.SaveCsoportGroup(model);
if (!string.IsNullOrWhiteSpace(errorMessage))
{
errorMessage = $"{ErrorResource.AzAlabbiOsztalyCsoportokModositasaSikertelenVoltMertVanTanuloBesorolas}{errorMessage}";
return Request.CreateResponse(HttpStatusCode.OK, errorMessage);
}
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (BlException e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
}
[NonAction]
public IHttpActionResult DeleteCsoport([FromBody] int csoportID, bool isFromSzervezet)
{
var csoportList = new List<int> { csoportID };
return DeleteKijeloltCsoportok(csoportList);
}
[HttpPost]
public IHttpActionResult DeleteKijeloltCsoportok(List<int> csoportLista)
{
var errorMsg = OsztalyCsoportLogic.DeleteCsoportGroup(csoportLista, out bool deleteError);
if (deleteError)
{
throw new StatusError(HttpStatusCode.BadRequest, errorMsg);
}
return Json(new { Message = errorMsg });
}
public DataSourceResult GetCsoportOrarendiOrai(string csoportId, [System.Web.Http.ModelBinding.ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request, bool isFromSzervezet)
{
return OsztalyCsoportLogic.GetCsoportOrarendiOrai(csoportId, request, isFromSzervezet);
}
public (GridParameters gridParameter, List<CsoportGridModel> modelList) GetGridData(string data, DataSourceRequest request, bool aktualisLetszam = false)
{
var connection = ConnectionTypeExtensions.GetSessionConnectionType();
var model = JsonConvert.DeserializeObject<CsoportSearchModel>(data);
var gridParameter = Converter.GridParameter(request);
int? felhasznaloSzervezetId = null;
if (ClaimData.FelhasznaloSzerepkor != SzerepkorTipusEnum.Adminisztrator)
{
felhasznaloSzervezetId = new SzervezetHelper(connection).GetAlkalmazottSzervezetId(ClaimData.FelhasznaloId);
model.SzervezetId = felhasznaloSzervezetId;
}
var coList = new CsoportHelper(connection).GetCsoportKeresesCoList(model.ConvertToCo(OsztalyCsoportLogic.GetSearchDate()), felhasznaloSzervezetId);
var modelList = coList.Select(x => new CsoportGridModel(x, aktualisLetszam)).ToList();
modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary);
return (gridParameter, modelList);
}
public HttpResponseMessage GetExport(string data, DataSourceRequest request, bool isFromSzervezet)
{
try
{
var (gridParameter, modelList) = GetGridData(data, request);
modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary);
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<CsoportGridModel>(isFromSzervezet ? CsoportGridModel.CsoportSzervezetExportAttributeId : CsoportGridModel.CsoportExportAttributeId);
var memoryStream = SimpleExportLogic.GetExport(OsztalyCsoportResource.CsoportExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value);
var exportFileName = OsztalyCsoportResource.CsoportExportFileName;
if (isFromSzervezet)
{
exportFileName = $"{OsztalyCsoportResource.DualisCsoportokExportFileNev}_{DateTime.Now.Year}_{DateTime.Now.Month}_{DateTime.Now.Day}{Core.Constants.ImportExport.FileExtensionExcelX}";
}
return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), exportFileName);
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex };
}
}
}
}