403 lines
18 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|