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

351 lines
15 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Logic;
using Kreta.BusinessLogic.Security;
using Kreta.Core;
using Kreta.Framework;
using Kreta.Framework.Entities;
using Kreta.Framework.Util;
using Kreta.Resources;
using Kreta.Web.Areas.Intezmeny.Models;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.Grid;
using Kreta.Web.Security;
namespace Kreta.Web.Areas.Intezmeny.ApiControllers
{
[ApiRoleClaimsAuthorize(true)]
[ApiRolePackageAuthorize(KretaClaimPackages.Adminisztrator.ClaimValue)]
public class CsengetesiRendApiController : ApiController
{
public DataSourceResult GetCsengetesiRendGrid(string data, DataSourceRequest request)
{
var (gridParameter, modelList) = GetGridData(request);
return modelList.ToDataSourceResult(gridParameter);
}
public HttpResponseMessage GetExport(DataSourceRequest request)
{
try
{
var (gridParameter, modelList) = GetGridData(request);
modelList = modelList.SortingAndPaging(gridParameter.OrderDictionary);
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<CsengetesiRendGridModel>(CsengetesiRendGridModel.CsengetesiRendExportAttributeId);
var memoryStream = SimpleExportLogic.GetExport(CsengetesiRendResource.CsengetesiRendExportSheetName, simpleExportColumnCos, modelList, ClaimData.SelectedTanevID.Value);
return HttpResponseExtensions.GetFileHttpResponse(memoryStream.ToArray(), CsengetesiRendResource.CsengetesiRendExportFileName);
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAFajlExportalasaKozben) { UnHandledException = ex };
}
}
private (GridParameters gridParameter, List<CsengetesiRendGridModel> modelList) GetGridData(DataSourceRequest request)
{
var gridParameter = Converter.GridParameter(request);
var coList = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsengetesiRendCoList();
var modelList = new List<CsengetesiRendGridModel>();
foreach (var co in coList)
{
var gridModel = new CsengetesiRendGridModel(co);
modelList.Add(gridModel);
}
return (gridParameter, modelList);
}
public DataSourceResult GetCsengetesiRendOrai(int csrendID, bool onlyReal, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
var ds = helper.GetCsengetesiRendOraiForGrid(csrendID, onlyReal);
return ds.ToDataSourceResult();
}
public DataSourceResult GetCsengetesiRendTanevrendAdatai(string csrendID, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))] DataSourceRequest request)
{
var helper = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
var ds = helper.GetTanevrendByCsengRend(SDAConvert.ToInt32(csrendID));
return ds.ToDataSourceResult();
}
public CsengetesiRendModel GetCsengetesiRendProperties(int csengRendID)
{
var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var co = helper.GetCsengetesiRendById(csengRendID);
var model = new CsengetesiRendModel();
model.ID = co.ID;
model.Nev = co.Nev;
model.Aktiv = co.Aktiv;
return model;
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage MentesUjModositottCsengRend(SaveCsengetesiRendModel csrendOrak) //CsengetesiRendModel model,
{
try
{
CsengetesiRendModel model = new CsengetesiRendModel();
model.ID = csrendOrak.CsengRendID;
model.Nev = csrendOrak.CsengRendNev;
model.Aktiv = csrendOrak.CsengRendAktiv;
if (string.IsNullOrWhiteSpace(model.Nev.Trim()))
{
ModelState.AddModelError("NevHiba", StringResourcesUtil.GetString(4038)); //A csengetésirend név megadása kötelező.
}
var cshelper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetSessionConnectionType());
if (!ClaimData.IsActivTanev && new CsengetesiRendHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).CheckCsengRendNevEgyezes(csrendOrak.CsengRendID, csrendOrak.CsengRendNev))
{
throw new StatusError(HttpStatusCode.BadRequest, StringResourcesUtil.GetString(3796)); //A megadott név már létezik!
}
if (model.ID.Value <= 0)
{
var insertOralista = ConvertModelListToCoList(-1, csrendOrak.Orak, ModelState);
var insertHibaLista = helper.ValidateCsengetesiRendOrak(insertOralista.Where(a => a.Aktiv).ToList());
foreach (var item in insertHibaLista)
{
ModelState.AddModelError("OraHiba", item.Value);
}
}
if (ModelState.IsValid)
{
var csengetesiRendID = cshelper.SaveOrUpdateCsengetesiRend(ConvertModelToCo(model));
var oralista = ConvertModelListToCoList(csengetesiRendID, csrendOrak.Orak, ModelState);
var hibaLista = helper.ValidateCsengetesiRendOrak(oralista.Where(a => a.Aktiv).ToList());
foreach (var item in hibaLista)
{
ModelState.AddModelError("OraHiba", item.Value);
}
if (ModelState.IsValid)
{
helper.SaveCsengetesiRendOraLista(oralista, csrendOrak.IsVisszamenoleges, ClaimData.KovTanevID);
return new HttpResponseMessage(HttpStatusCode.OK);
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
catch (FormatException)
{
throw new StatusError(HttpStatusCode.BadRequest, StringResourcesUtil.GetString(2484));
}
catch (SDA.DataProvider.UniqueKeyViolationException)
{
throw new StatusError(HttpStatusCode.BadRequest, StringResourcesUtil.GetString(3796)); //A megadott név már létezik!
}
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage SetCsengetesiRendAktiv(CsengetesiRendTorlesModel model)
{
var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
helper.SetCsengetesirend((int)model.ID, true);
int kovTanevId = ClaimData.KovTanevID ?? new TanevHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetKovetkezoTanev().Key;
if (kovTanevId != default(int) && kovTanevId != ClaimData.SelectedTanevID)
{
helper.FollowUpCsengetesiRend(kovTanevId, (int)model.ID);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage CsengRendTorles(CsengetesiRendTorlesModel model)
{
try
{
if (model.ID.IsEntityId())
{
var helper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var csengetesiRend = helper.GetCsengetesiRendById(model.ID.Value);
if (csengetesiRend.Aktiv)
{
throw new StatusError(HttpStatusCode.BadRequest, Framework.StringResourcesUtil.GetString(3809)); //Aktív csengetési rend nem törölhető!
}
helper.DeleteCsengetesiRend(model.ID.Value);
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (EntityDeleteFailedException ex)
{
var uzenet = string.Format(ErrorResource.NemTorolhetoKapcsolatMiatt, OrarendResource.CsengetesiRend, ex.ConnectionErrorMessage);
throw new StatusError(HttpStatusCode.BadRequest, uzenet);
}
}
[HttpGet]
public bool CsengetesiRendValidacio(int valasztottCsengRendId, int torlendoCsengRendId)
{
var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
CsengetesiRendOraCO valasztottCsengRendResult = helper.GetCsengetesiRendKapcsolodoOra(valasztottCsengRendId);
CsengetesiRendOraCO torlendoCsengRendResult = helper.GetCsengetesiRendKapcsolodoOra(torlendoCsengRendId);
bool isFullValid = false;
if (valasztottCsengRendResult.MinOraszam == torlendoCsengRendResult.MinOraszam && valasztottCsengRendResult.MaxOraszam == torlendoCsengRendResult.MaxOraszam)
{
var valasztottCsengRendOraKezdet = helper.GetCsengetesiRendKapcsolodoOraKezdeteVege(valasztottCsengRendId);
var torlendoCsengRendOraVeg = helper.GetCsengetesiRendKapcsolodoOraKezdeteVege(torlendoCsengRendId);
if (valasztottCsengRendOraKezdet.Count == torlendoCsengRendOraVeg.Count && !valasztottCsengRendOraKezdet.Except(torlendoCsengRendOraVeg).Any())
{
isFullValid = true;
}
}
else
{
throw new StatusError(HttpStatusCode.BadRequest, CsengetesiRendResource.OraszamNemEgyezik);
}
return isFullValid;
}
[HttpGet]
public void CsengetesiRendUpdateAndDel(int valasztottCsengRendId, int torlendoCsengRendId)
{
var helper = new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
CsengetesiRendOraCO torlendoCsengRendResult = helper.GetCsengetesiRendKapcsolodoOra(torlendoCsengRendId);
if (torlendoCsengRendResult.Aktiv == false)
{
var csRendHelper = new CsengetesiRendHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
if (torlendoCsengRendResult.ID.HasValue)
{
helper.UpdateCsengetesiRend(valasztottCsengRendId, torlendoCsengRendId);
csRendHelper.DeleteCsengetesiRend(torlendoCsengRendId);
}
}
else
{
throw new StatusError(HttpStatusCode.BadRequest, CsengetesiRendResource.AktivCsengRendNemTorolheto);
}
}
[HttpGet]
public CsengetesiRendOraCO CsengetesiRendDetails(int csengRendID)
{
return new CsengetesiRendOrakHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCsengetesiRendKapcsolodoOra(csengRendID);
}
#region Converters
private CsengetesiRendCO ConvertModelToCo(CsengetesiRendModel model)
{
var co = new CsengetesiRendCO();
co.ID = model.ID;
co.Nev = model.Nev.Trim();
co.Aktiv = model.Aktiv;
return co;
}
private List<CsengetesiRendOraCO> ConvertModelListToCoList(int csengetesiRendId, List<CsengetesiRendOraModel> modelList, ModelStateDictionary modelState)
{
var colist = new List<CsengetesiRendOraCO>();
Regex regex = new Regex(Core.Constants.RegularExpressions.TimePicker);
foreach (CsengetesiRendOraModel item in modelList)
{
var co = new CsengetesiRendOraCO();
co.ID = item.ID;
co.CsengetesiRendID = csengetesiRendId;
co.Oraszam = item.Oraszam;
co.Aktiv = item.Aktiv;
if (item.Aktiv)
{
if (string.IsNullOrWhiteSpace(item.Kezd))
{
modelState.AddModelError(nameof(item.Kezd), string.Format(CsengetesiRendResource.KezdeteKotelezo, item.Oraszam));
}
else
{
if (!regex.IsMatch(item.Kezd))
{
modelState.AddModelError(nameof(item.Kezd), string.Format(CsengetesiRendResource.KezdeteRosszFormatum, item.Oraszam));
}
else
{
var split = item.Kezd.Split(':');
co.Kezd = new DateTime(1900, 01, 01);
co.Kezd = co.Kezd.AddHours(SDAConvert.ToInt32(split[0])).AddMinutes(SDAConvert.ToInt32(split[1]));
}
}
if (string.IsNullOrWhiteSpace(item.Veg))
{
modelState.AddModelError(nameof(item.Veg), string.Format(CsengetesiRendResource.VegeKotelezo, item.Oraszam));
}
else
{
if (!regex.IsMatch(item.Veg))
{
modelState.AddModelError(nameof(item.Veg), string.Format(CsengetesiRendResource.VegeRosszFormatum, item.Oraszam));
}
else
{
var split = item.Veg.Split(':');
co.Veg = new DateTime(1900, 01, 01);
co.Veg = co.Veg.AddHours(SDAConvert.ToInt32(split[0])).AddMinutes(SDAConvert.ToInt32(split[1]));
}
}
}
colist.Add(co);
}
return colist;
}
#endregion
}
}