336 lines
14 KiB
C#
336 lines
14 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.Security;
|
|
using Kreta.Core;
|
|
using Kreta.Enums.ManualEnums;
|
|
using Kreta.Framework;
|
|
using Kreta.Framework.Entities;
|
|
using Kreta.Resources;
|
|
using Kreta.Web.Areas.Hianyzas.Helpers;
|
|
using Kreta.Web.Areas.Hianyzas.Models;
|
|
using Kreta.Web.Areas.Hianyzas.Models.Mulasztasok;
|
|
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.Hianyzas.ApiControllers
|
|
{
|
|
[ApiRoleClaimsAuthorize(true)]
|
|
[ApiRolePackageAuthorize(KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue,
|
|
KretaClaimPackages.Evfolyamfelelos.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)]
|
|
public class BaseMulasztasokApiController : ApiController
|
|
{
|
|
|
|
public JsonResult<List<ComboBoxListItem>> GetTanoraList(string cascadeFilter)
|
|
{
|
|
DateTime? datumInput;
|
|
DateTime temp;
|
|
if (DateTime.TryParse(cascadeFilter, out temp))
|
|
{
|
|
datumInput = temp;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception();
|
|
}
|
|
IDictionary<string, string> tanorak;
|
|
|
|
var result = new List<ComboBoxListItem>();
|
|
|
|
var helper = new TanoraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
|
|
|
|
tanorak = helper.GetMegtartottOraByDatumAndOsztalyFonok(datumInput.Value, ClaimData.FelhasznaloId);
|
|
|
|
foreach (var item in tanorak)
|
|
{
|
|
var sli = new ComboBoxListItem { Text = item.Value, Value = item.Key };
|
|
result.Add(sli);
|
|
}
|
|
|
|
return Json(result);
|
|
}
|
|
|
|
public JsonResult<List<ComboBoxListItem>> GetIgazoltList()
|
|
{
|
|
var result = new List<ComboBoxListItem>
|
|
{
|
|
new ComboBoxListItem
|
|
{
|
|
Value = ((int) IgazoltSearchEnum.Igazolt).ToString(),
|
|
Text = StringResourcesUtil.GetString(2568)
|
|
},
|
|
new ComboBoxListItem
|
|
{
|
|
Value = ((int) IgazoltSearchEnum.Igazolatlan).ToString(),
|
|
Text = StringResourcesUtil.GetString(2800)
|
|
},
|
|
new ComboBoxListItem
|
|
{
|
|
Value = ((int) IgazoltSearchEnum.NemEllenorzott).ToString(),
|
|
Text = StringResourcesUtil.GetString(4571)
|
|
}
|
|
};
|
|
|
|
//Igazolt
|
|
//Igazolatlan
|
|
//Nem ellenőrzött
|
|
|
|
return Json(result);
|
|
}
|
|
|
|
[HttpPost]
|
|
[ApiValidateAjaxAntiForgeryToken]
|
|
public HttpResponseMessage DeleteMulasztas([FromBody] int id)
|
|
{
|
|
CheckMulasztas(id);
|
|
|
|
try
|
|
{
|
|
var helper = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
|
|
|
|
helper.DeleteMulasztasById(id);
|
|
|
|
return new HttpResponseMessage(HttpStatusCode.OK);
|
|
}
|
|
catch (EntityDeleteFailedException)
|
|
{
|
|
throw new StatusError(HttpStatusCode.BadRequest,
|
|
string.Format(StringResourcesUtil.GetString(5490),
|
|
StringResourcesUtil.GetString(500) /*,
|
|
e.ConnectionErrorMessage*/)
|
|
/*A(z) mulasztás nem törölhető, mert egy vagy több kapcsolódása van (kapcsolatok: {1})!*/);
|
|
}
|
|
}
|
|
|
|
[NonAction]
|
|
public HttpResponseMessage SaveMulasztasList(List<MulasztasokSaveModel> list, int? szervezetTipusId = null)
|
|
{
|
|
var helper = new MulasztasHelper(ConnectionTypeExtensions.GetSessionConnectionType());
|
|
|
|
foreach (var item in list)
|
|
{
|
|
if (item.ID != 0 && (item.Visszavonhato.Value || item.Igazolt != null))
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(item.Megjegyzes) && item.Megjegyzes.Length > 255)
|
|
{
|
|
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AMegjegyzesMax255KarakterLehet);
|
|
}
|
|
|
|
if(!szervezetTipusId.HasValue)
|
|
{
|
|
CheckMulasztas(item.ID.Value);
|
|
}
|
|
|
|
MulasztasokCo co = MulasztasokHelper.ConvertNaploNezetMulasztasokSaveModelToCo(item);
|
|
var mulasztasNotificaton = helper.SaveOrUpdateMulasztas(co);
|
|
}
|
|
}
|
|
|
|
return new HttpResponseMessage(HttpStatusCode.OK);
|
|
}
|
|
|
|
[NonAction]
|
|
public HttpResponseMessage SaveNaploNezetMulasztasList(MulasztasokNaploNezetSaveModel model, int? szervezetTipusId = null)
|
|
{
|
|
var helper = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
|
|
|
|
foreach (var mulasztas in model.Mulasztasok)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(mulasztas.Megjegyzes) && mulasztas.Megjegyzes.Length > 255)
|
|
{
|
|
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.AMegjegyzesMax255KarakterLehet);
|
|
}
|
|
|
|
if (!mulasztas.ID.HasValue)
|
|
{
|
|
var mulasztasDbId = helper.GetMulasztasId(mulasztas.TanuloId, mulasztas.TanitasiOraId);
|
|
|
|
if (mulasztasDbId.IsEntityId())
|
|
{
|
|
mulasztas.ID = mulasztasDbId;
|
|
}
|
|
}
|
|
|
|
if (mulasztas.ID.HasValue)
|
|
{
|
|
CheckMulasztas(mulasztas.ID.Value);
|
|
}
|
|
|
|
CheckTanulo(mulasztas.TanuloId);
|
|
}
|
|
|
|
CheckUtkozes(helper, model, szervezetTipusId);
|
|
|
|
var sikertelenMulasztasMentesek = new List<string>();
|
|
foreach (var mulasztas in model.Mulasztasok)
|
|
{
|
|
var co = MulasztasokHelper.ConvertNaploNezetMulasztasokSaveModelToCo(mulasztas);
|
|
try
|
|
{
|
|
_ = helper.SaveOrUpdateNaplonezetMulasztas(co);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sikertelenMulasztasMentesek.Add(ex.Message);
|
|
}
|
|
}
|
|
|
|
if (sikertelenMulasztasMentesek.Count > 0)
|
|
{
|
|
throw new StatusError(HttpStatusCode.BadRequest, string.Join("<br/>", sikertelenMulasztasMentesek.Distinct()));
|
|
}
|
|
|
|
return new HttpResponseMessage(HttpStatusCode.OK);
|
|
}
|
|
|
|
private void CheckUtkozes(MulasztasHelper mulasztasHelper, MulasztasokNaploNezetSaveModel model, int? szervezetTipusId = null)
|
|
{
|
|
if (!model.Mulasztasok.Any(m => m.MulasztasTipus == (int)Enums.MulasztasTipusEnum.hianyzas))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var naploNezetGridDs = mulasztasHelper.GetMulasztasokNaploNezetGrid(model.OsztalyCsoportId, model.NaploNezetDatum, IsCsoportVezeto(), szervezetTipusId);
|
|
|
|
var oraColumnPrefixes = Enumerable.Range(Core.Constants.Mulasztas.OraSorszamMinValue, Core.Constants.Mulasztas.OraSorszamMaxValue - Core.Constants.Mulasztas.OraSorszamMinValue + 1)
|
|
.Select(i => "Ora" + (i < 0 ? "Minusz" + Math.Abs(i) : i.ToString()));
|
|
var foglalkozasColumnPrefixes = Enumerable.Range(1, Core.Constants.Mulasztas.FoglalkozasCount)
|
|
.Select(i => "Foglalkozas" + i.ToString());
|
|
var columnPrefixes = oraColumnPrefixes.Concat(foglalkozasColumnPrefixes);
|
|
|
|
var tanitasiOraIdHashSet = new HashSet<int>();
|
|
foreach (DataRow dataRow in naploNezetGridDs.Tables[0].AsEnumerable())
|
|
{
|
|
foreach (var columnPrefix in columnPrefixes)
|
|
{
|
|
var tanitasiOraId = dataRow.Field<int?>(columnPrefix + "TanitasiOraId");
|
|
if (tanitasiOraId.HasValue)
|
|
{
|
|
tanitasiOraIdHashSet.Add(tanitasiOraId.Value);
|
|
}
|
|
}
|
|
}
|
|
|
|
var tanitasiOraKezdeteVegeList = mulasztasHelper.ListTanitasiOraKezdeteVege(tanitasiOraIdHashSet);
|
|
|
|
var errorMessages = new List<string>();
|
|
|
|
var mulasztasokGroupByTanulo = model.Mulasztasok.Where(m => m.MulasztasTipus == (int)Enums.MulasztasTipusEnum.hianyzas).GroupBy(x => x.TanuloId);
|
|
foreach (var mulasztasokGroup in mulasztasokGroupByTanulo)
|
|
{
|
|
var tanuloRow = naploNezetGridDs.Tables[0].AsEnumerable().First(r => r.Field<int>("TanuloId") == mulasztasokGroup.Key);
|
|
|
|
var tanitasiOraIdListByTanuloHianyzas = mulasztasokGroup.Select(m => m.TanitasiOraId).ToList();
|
|
foreach (var columnPrefix in columnPrefixes)
|
|
{
|
|
var mulasztasTipus = tanuloRow.Field<string>(columnPrefix + "MulasztasTipus");
|
|
if (!string.IsNullOrWhiteSpace(mulasztasTipus) && int.Parse(mulasztasTipus) == (int)Enums.MulasztasTipusEnum.hianyzas)
|
|
{
|
|
var tanitasiOraId = tanuloRow.Field<int>(columnPrefix + "TanitasiOraId");
|
|
tanitasiOraIdListByTanuloHianyzas.Add(tanitasiOraId);
|
|
}
|
|
}
|
|
|
|
var tanitasiOraKezdeteVegeListByTanuloHianyzas = tanitasiOraKezdeteVegeList.Where(t => tanitasiOraIdListByTanuloHianyzas.Contains(t.Id));
|
|
var utkozoGroups = GetUtkozoGroups(tanitasiOraKezdeteVegeListByTanuloHianyzas);
|
|
foreach (var utkozoGroup in utkozoGroups.Where(g => g.Count > 1))
|
|
{
|
|
var errorMessage = string.Format(MulasztasResource.HianyzasUtkozesError,
|
|
string.Join(MulasztasResource.EsAz,
|
|
utkozoGroup.Select(g => g.Oraszam.HasValue
|
|
? string.Format(MulasztasResource._0Ora, g.Oraszam)
|
|
: string.Format(MulasztasResource._0korKezdodoOra, g.OraKezdete.ToString(Core.Constants.ToStringPattern.HungarianTime)))));
|
|
errorMessages.Add(errorMessage);
|
|
}
|
|
}
|
|
|
|
if (errorMessages.Any())
|
|
{
|
|
throw new StatusError(HttpStatusCode.BadRequest, string.Join(Constants.General.DoubleBr, errorMessages));
|
|
}
|
|
}
|
|
|
|
private IEnumerable<IList<TanitasiOraCo>> GetUtkozoGroups(IEnumerable<TanitasiOraCo> tanitasiOraList)
|
|
{
|
|
var result = new List<List<TanitasiOraCo>>();
|
|
|
|
foreach (var tanitasiOra in tanitasiOraList)
|
|
{
|
|
var group = result.FirstOrDefault(r => r.Any(x => x.OraKezdete < tanitasiOra.OraVege && tanitasiOra.OraKezdete < x.OraVege));
|
|
if (group != null)
|
|
{
|
|
group.Add(tanitasiOra);
|
|
}
|
|
else
|
|
{
|
|
result.Add(new List<TanitasiOraCo> { tanitasiOra });
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public JsonResult<bool> VaneMarIgazolt(int tipusId, int tanuloId, int oraId)
|
|
{
|
|
var helper = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
|
|
|
|
return Json(helper.VaneMarIgazolt(tipusId, tanuloId, oraId));
|
|
}
|
|
|
|
public void CheckOsztalyCsoport(int osztalyCsoportId)
|
|
{
|
|
var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization));
|
|
if (!authorization.IsValidOsztalyCsoport(osztalyCsoportId))
|
|
{
|
|
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz);
|
|
}
|
|
}
|
|
|
|
public void CheckCsoport(int csoportId)
|
|
{
|
|
var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization));
|
|
if (!authorization.IsValidCsoport(csoportId))
|
|
{
|
|
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz);
|
|
}
|
|
}
|
|
|
|
public void CheckTanulo(int tanuloId, bool lehetTTF = false)
|
|
{
|
|
var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization));
|
|
if (!authorization.IsValidTanulo(tanuloId, lehetTTF))
|
|
{
|
|
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz);
|
|
}
|
|
}
|
|
|
|
private void CheckMulasztas(int mulasztasId)
|
|
{
|
|
var authorization = (IKretaAuthorization)Request.GetDependencyScope().GetService(typeof(IKretaAuthorization));
|
|
if (!authorization.IsValidMulasztas(mulasztasId))
|
|
{
|
|
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.AFelhasznalonakNincsMegfeleloJogosultsagaAFunkcioHasznalatahoz);
|
|
}
|
|
}
|
|
|
|
public bool IsCsoportVezeto()
|
|
{
|
|
return ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.CsoportVezeto.ClaimValue)
|
|
&& !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.Osztalyfonok.ClaimValue)
|
|
&& !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.SzuperOsztalyfonok.ClaimValue)
|
|
&& !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.Evfolyamfelelos.ClaimValue);
|
|
}
|
|
}
|
|
}
|