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

403 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.Text;
using System.Web.Http;
using System.Web.Http.ModelBinding;
using System.Web.Http.Results;
using Kendo.Mvc.UI;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.BusinessLogic.Security;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
using Kreta.Web.Areas.Orarend.Models;
using Kreta.Web.Areas.Tanar.Logic;
using Kreta.Web.Areas.Tanar.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.Tanar.ApiControllers
{
[ApiRoleClaimsAuthorize(true)]
[ApiRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Adminisztrator.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)]
[ApiRolePackageDenyAuthorize(KretaClaimPackages.IsDualisKepzohelyiOktato.ClaimValue)]
public class FogadooraApiController : ApiController
{
public DataSourceResult GetFogadooraGridForAdmin(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))]
DataSourceRequest request)
{
return GetFogadooraGrid(data, request);
}
public DataSourceResult GetFogadooraGridForTanar(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))]
DataSourceRequest request)
{
return GetFogadooraGrid(data, request, ClaimData.FelhasznaloId);
}
public DataSourceResult GetFogadooraGrid(string data, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))]
DataSourceRequest request, int? tanarId = null)
{
var model = JsonConvert.DeserializeObject<FogadooraSearchModel>(data);
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
return helper.GetFogadoora(model.ConvertModelToCo(tanarId)).ToDataSourceResult();
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteFogadooraById([FromBody] int fogadooraId) => DeleteFogadoora(fogadooraId, (int)OraModositasiIdoszakTipus.EgyOra);
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteFogadooraByFogadooraModel(FogadooraModel model)
{
return DeleteFogadoora(model.Id.Value, model.ModositasiIdoszakTipus);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage DeleteFogadoora(int fogadooraId, int modositasiIdoszakTipus)
{
try
{
new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType()).DeleteFogadoora(fogadooraId, modositasiIdoszakTipus);
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (Exception e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
}
public FogadooraModel ConvertFogadooraModelFromFogadooraId(int fogadooraId)
{
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var co = helper.GetFogadooraById(fogadooraId);
var model = new FogadooraModel
{
FogadoOraDatuma = co.FogadoOraDatuma,
SelectedOsztalyCsoportIdList = co.SelectedOsztalyCsoportIdList
};
return model;
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public HttpResponseMessage SaveFogadoora(FogadooraModel model)
{
try
{
model = FogadooraLogic.SetFogadooraDate(model);
if (new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetSystemSettingValue<bool>(Enums.RendszerBeallitasTipusEnum.kotott_munkaido_nevelesseloktatassal_le_nem_kotott_resz_kezelesenek_tiltasa))
{
model.IsNemKotottMunkaido = false;
}
var fogadooraHelper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var fogadooraCo = FogadooraLogic.ConvertModelToCo(model);
fogadooraCo.TanarId = ClaimData.FelhasznaloId;
ModelState.AddRange(fogadooraHelper.SaveFogadoora(fogadooraCo));
if (ModelState.IsValid)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
catch (Exception e)
{
throw new StatusError(HttpStatusCode.BadRequest, e.Message);
}
}
public DataSourceResult GetOsztalyCsoportGrid([ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))]
DataSourceRequest request)
{
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
DataSet ds = helper.GetFogadooraOsztalyCsoportok(ClaimData.IsSzuperOsztalyfonok || ClaimData.IsAdministrator);
return ds.ToDataSourceResult();
}
public DataSourceResult GetFogadooraJelentkezettGondviselokGrid(int id, [ModelBinder(typeof(ModelBinder.DataSourceRequestModelBinder))]
DataSourceRequest request)
{
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
helper.GridParameters = Converter.GridParameter(request);
DataSet ds = helper.GetFogadooraJelentkezettGondviselokDataSet(id);
return ds.ToDataSourceResult();
}
[HttpGet]
public IHttpActionResult IsFogadooraJelentkezettGondviselokForUpdate(int id, bool isJelentkezesekKezelese, bool IsIdosavraOsztas, int egysegnyiIdopontok, int modositasiIdoszakTipus, DateTime kezdete, DateTime vege, string modifiedOcsList)
{
try
{
var isIdopontUjraGeneralasKell = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).IsIdopontUjraGeneralasKell(id, isJelentkezesekKezelese, IsIdosavraOsztas, egysegnyiIdopontok, kezdete, vege);
var isFogadooraJelentkezettGondviselok = IsFogadooraJelentkezettGondviselok(id, modositasiIdoszakTipus, JsonConvert.DeserializeObject<Dictionary<int, bool>>(modifiedOcsList));
return Ok(new { isIdopontUjraGeneralasKell, isFogadooraJelentkezettGondviselok });
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.InternalServerError, ErrorResource.NemSikerultAMuvelet) { UnHandledException = ex };
}
}
[HttpGet]
public bool IsFogadooraJelentkezettGondviselok(int id, int modositasiIdoszakTipus, Dictionary<int, bool> modifiedOcsList)
{
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
TanevCO tanevCO;
var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType());
tanevCO = tanevHelper.GetTanevInfo();
var fogadooraCo = helper.GetFogadooraById(id);
var kezdete = new DateTime();
var vege = new DateTime();
switch (modositasiIdoszakTipus)
{
case (int)OraModositasiIdoszakTipus.EgyOra:
kezdete = fogadooraCo.FogadoOraKezdete;
vege = fogadooraCo.FogadoOraKezdete;
break;
case (int)OraModositasiIdoszakTipus.AdottNaptol:
kezdete = fogadooraCo.FogadoOraDatuma;
vege = tanevCO.UtolsoTanitasiNap;
break;
case (int)OraModositasiIdoszakTipus.AdottNapig:
kezdete = DateTime.Now;
vege = fogadooraCo.FogadoOraDatuma;
break;
case (int)OraModositasiIdoszakTipus.TeljesIdoszak:
kezdete = DateTime.Now;
vege = tanevCO.UtolsoTanitasiNap;
break;
}
if (modifiedOcsList == null || modifiedOcsList.Count == 0)
{
return helper.GetFogadooraJelentkezettGondviselokByGroupId(fogadooraCo.GroupId, kezdete, vege).Tables[0].Rows.Count > 0;
}
var ds = helper.GetFogadooraJelentkezettGondviselokDataSet(id);
var dv = ds.Tables[0].DefaultView;
var filteredList = modifiedOcsList.Where(x => x.Value == false);
if (filteredList.Any())
{
dv.RowFilter = "OsztalyCsoportId IN (" + string.Join(",", filteredList.Select(y => y.Key)) + ")";
}
return dv.ToTable().Rows.Count > 0;
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public IHttpActionResult ValidateFogadoora(FogadooraModel model)
{
model = FogadooraLogic.SetFogadooraDate(model);
TanevCO tanevCO;
var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType());
tanevCO = tanevHelper.GetTanevInfo();
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var co = new FogadooraCo
{
Rendszeresseg = model.Rendszeresseg,
FogadoOraKezdete = model.FogadoOraKezdete,
RendszeresFogadooraElsoDatuma = model.RendszeresFogadooraElsoDatuma,
RendszeresFogadooraUtolsoDatuma = model.RendszeresFogadooraUtolsoDatuma,
FogadoOraDatuma = model.FogadoOraDatuma,
FogadooraDatumList = model.FogadooraDatumList
};
var datumList = helper.GetFogadooraDatumList(co);
var datumListWithKezdetVege = new List<(DateTime kezdet, DateTime veg)>();
foreach (var datum in datumList)
{
var idopont = (datum.AddHours(model.FogadoOraKezdete.Hour).AddMinutes(model.FogadoOraKezdete.Minute)
, datum.AddHours(model.FogadoOraVege.Hour).AddMinutes(model.FogadoOraVege.Minute));
datumListWithKezdetVege.Add(idopont);
}
var teremOrarendDs = helper.GeTeremOrarendDs(DateTime.Now, tanevCO.UtolsoTanitasiNap, model.TeremId.Value);
var pedagogusOrarendDs = helper.GetPedagogusOrarendDs(DateTime.Now, tanevCO.UtolsoTanitasiNap);
var pedagogusFogadooraDs = helper.GetPedagogusFogadooraDs(DateTime.Now, tanevCO.UtolsoTanitasiNap);
var teremFogadooraDs = helper.GetTeremFogadooraDs(DateTime.Now, tanevCO.UtolsoTanitasiNap, model.TeremId.Value);
var teremUtkozesList = FogadooraLogic.TeremUtkozesList(teremOrarendDs, datumListWithKezdetVege);
var pedagogusUtkozes = FogadooraLogic.PedagogusUtkozesList(pedagogusOrarendDs, datumListWithKezdetVege);
var fogadooraUtkozes = FogadooraLogic.FogadooraUtkozesList(pedagogusFogadooraDs, datumListWithKezdetVege, model.Id);
var fogadooraTeremUtkozes = FogadooraLogic.FogadooraTeremUtkozesList(teremFogadooraDs, datumListWithKezdetVege, model.Id);
var figyelmezetetesText = new StringBuilder();
figyelmezetetesText.Append(FogadooraResource.FogadooraFelveteleSoranUtkozesLepettFel);
var tiltasText = new StringBuilder();
tiltasText.Append(FogadooraResource.FogadooraFelveteleSoranUtkozesLepettFel);
var isFigyelmeztetes = false;
var isTiltas = false;
switch (FogadooraLogic.TeremUtkozesSystemSetting)
{
case 1: /*Ütközés nem lehetséges*/
if (teremUtkozesList.Count > 0)
{
tiltasText.Append(FogadooraResource.Teremutkozes);
isTiltas = true;
}
break;
case 2: /*Figyelmeztetés*/
//case 3: /*Ütközés lehetséges*/
if (teremUtkozesList.Count > 0)
{
figyelmezetetesText.Append(FogadooraResource.Teremutkozes);
isFigyelmeztetes = true;
}
break;
}
switch (FogadooraLogic.NapirendUtkozes)
{
case 1:
if (pedagogusUtkozes.Count > 0)
{
tiltasText.Append(FogadooraResource.OrarendUtkozes);
isTiltas = true;
}
break;
case 2:
//case 3:
if (pedagogusUtkozes.Count > 0)
{
figyelmezetetesText.Append(FogadooraResource.OrarendUtkozes);
isFigyelmeztetes = true;
}
break;
}
if (fogadooraUtkozes.Count > 0)
{
tiltasText.AppendFormat(FogadooraResource.FogadooraUtkozes, string.Join(",", fogadooraUtkozes.Select(row => row.Field<DateTime>("FogadooraKezdete").ToString("yyyy.MM.dd. HH:mm"))));
isTiltas = true;
}
if (fogadooraTeremUtkozes.Count > 0)
{
figyelmezetetesText.AppendFormat(FogadooraResource.FogadooraTeremUtkozes, string.Join(",", fogadooraTeremUtkozes.Select(row => row.Field<DateTime>("FogadooraKezdete").ToString("yyyy.MM.dd. HH:mm"))));
isFigyelmeztetes = true;
}
if (isTiltas)
{
throw new StatusError(HttpStatusCode.BadRequest, tiltasText.ToString());
}
if (isFigyelmeztetes)
{
return Json(new { Valid = false, Text = figyelmezetetesText.Append(FogadooraResource.AkarjafolytatniKerdes).ToString() });
}
return Json(new { Valid = true, Text = string.Empty });
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public JsonResult<List<ExportColumn>> GetExportColumnsForTanar()
{
List<ExportColumn> Items = new List<ExportColumn>
{
new ExportColumn() { Field = "OsztalyCsoport", Title = FogadooraResource.OsztalyCsoport },
new ExportColumn() { Field = "Terem", Title = FogadooraResource.Terem },
new ExportColumn() { Field = "FogadooraKezdete", Title = FogadooraResource.FogadooraKezdete },
new ExportColumn() { Field = "FogadooraVege", Title = FogadooraResource.FogadooraVege },
new ExportColumn() { Field = "Rendszeresseg", Title = FogadooraResource.Rendszeresseg },
new ExportColumn() { Field = "JelentkezesekKezelese", Title = FogadooraResource.JelentkezesekKezelese }
};
return Json(Items);
}
[HttpPost]
[ApiValidateAjaxAntiForgeryToken]
public JsonResult<List<ExportColumn>> GetExportColumnsForAdmin()
{
List<ExportColumn> Items = new List<ExportColumn>
{
new ExportColumn() { Field = "OsztalyCsoport", Title = FogadooraResource.OsztalyCsoport },
new ExportColumn() { Field = "Terem", Title = FogadooraResource.Terem },
new ExportColumn() { Field = "FogadooraKezdete", Title = FogadooraResource.FogadooraKezdete },
new ExportColumn() { Field = "FogadooraVege", Title = FogadooraResource.FogadooraVege },
new ExportColumn() { Field = "Pedagogus", Title = FogadooraResource.Pedagogus },
new ExportColumn() { Field = "Rendszeresseg", Title = FogadooraResource.Rendszeresseg },
new ExportColumn() { Field = "JelentkezesekKezelese", Title = FogadooraResource.JelentkezesekKezelese }
};
return Json(Items);
}
public DataSourceResult GetFogadooraGridForTanarExport(string searchFilter, string sortColumn, string sortDir)
{
var model = JsonConvert.DeserializeObject<FogadooraSearchModel>(searchFilter);
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var fogadoOrak = helper.GetFogadoora(model.ConvertModelToCo(ClaimData.FelhasznaloId));
if (sortColumn != "-" && sortDir != "-")
{
DataSet result = new DataSet();
fogadoOrak.Tables[0].DefaultView.Sort = (sortColumn).ToUpper() + " " + (sortDir).ToUpper();
result.Tables.Add(fogadoOrak.Tables[0].DefaultView.ToTable());
return result.ToDataSourceResult();
}
return fogadoOrak.ToDataSourceResult();
}
public DataSourceResult GetFogadooraGridForAdminExport(string searchFilter, string sortColumn, string sortDir)
{
var model = JsonConvert.DeserializeObject<FogadooraSearchModel>(searchFilter);
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var fogadoOrak = helper.GetFogadoora(model.ConvertModelToCo(null));
if (sortColumn != "-" && sortDir != "-")
{
DataSet result = new DataSet();
fogadoOrak.Tables[0].DefaultView.Sort = (sortColumn).ToUpper() + " " + (sortDir).ToUpper();
result.Tables.Add(fogadoOrak.Tables[0].DefaultView.ToTable());
return result.ToDataSourceResult();
}
return fogadoOrak.ToDataSourceResult();
}
}
}