508 lines
29 KiB
C#
508 lines
29 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using Kreta.BusinessLogic.Classes;
|
|
using Kreta.BusinessLogic.HelperClasses;
|
|
using Kreta.BusinessLogic.Helpers;
|
|
using Kreta.BusinessLogic.Helpers.SystemSettings;
|
|
using Kreta.BusinessLogic.Interfaces;
|
|
using Kreta.BusinessLogic.Logic.Naplozas;
|
|
using Kreta.BusinessLogic.Logic.Naplozas.Validacio;
|
|
using Kreta.Client.CoreApi;
|
|
using Kreta.Core.ConnectionType;
|
|
using Kreta.Core.Enum;
|
|
using Kreta.Core.Exceptions;
|
|
using Kreta.Core.Logic;
|
|
using Kreta.Core.Validation.Exceptions;
|
|
using Kreta.DataAccessManual;
|
|
using Kreta.DataAccessManual.ParameterClasses;
|
|
using Kreta.DataAccessManual.Util;
|
|
using Kreta.Enums;
|
|
using Kreta.Enums.ManualEnums;
|
|
using Kreta.Enums.ManualEnums.SystemSettings;
|
|
using Kreta.Framework.Entities;
|
|
using Kreta.Naplo.BusinessLogic.V3.Csatolmany;
|
|
using Kreta.Naplo.BusinessLogic.V3.Felmentes;
|
|
using Kreta.Naplo.BusinessLogic.V3.Logic;
|
|
using Kreta.Naplo.BusinessLogic.V3.Ora;
|
|
using Kreta.Naplo.Dao.V3.Orarend;
|
|
using Kreta.Naplo.Domain.V3.Common;
|
|
using Kreta.Naplo.Domain.V3.Csatolmany;
|
|
using Kreta.Naplo.Domain.V3.Ertekeles;
|
|
using Kreta.Naplo.Domain.V3.Felmentes;
|
|
using Kreta.Naplo.Domain.V3.Logic;
|
|
using Kreta.Naplo.Domain.V3.Orarend;
|
|
using Kreta.Naplo.Domain.V3.OsztalyCsoport;
|
|
using Kreta.Naplo.Domain.V3.UniqueIdentifier;
|
|
using Kreta.Naplo.Domain.V3.Utility;
|
|
using Kreta.Resources;
|
|
|
|
namespace Kreta.Naplo.BusinessLogic.V3.Orarend
|
|
{
|
|
internal static class OrarendSubqueries
|
|
{
|
|
internal static HashSet<OrarendElemResponse> GetOrarend(DefaultConnectionParameters dcp, OrarendRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
return ListOrarendElemek(dcp, request.DatumTol, request.DatumIg);
|
|
}
|
|
|
|
internal static OrarendElemResponse GetOrarendElem(DefaultConnectionParameters dcp, OrarendElemRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
return ListOrarendElemek(dcp, request.OrarendElemUid.Datum, request.OrarendElemUid.Datum.AddDays(1), request.OrarendElemUid.Id, request.OrarendElemUid.Tipus)
|
|
.FirstOrDefault() ?? throw new BlException(ErrorResource.AzOratIdokozbenToroltekKerjukFrissitsen, BlExceptionType.NemLetezoEntitas);
|
|
}
|
|
|
|
internal static HashSet<OrarendElemResponse> ListOrarendElemek(DefaultConnectionParameters dcp, DateTime datumTol, DateTime datumIg, int? orarendElemId = null, CalendarOraTypeEnum? orarendElemTipus = null)
|
|
{
|
|
var orarendElemek = new HashSet<OrarendElemResponse>();
|
|
var eventList = new OrarendHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler))
|
|
.GetOrarendElemekMobilNaplo(datumTol, datumIg, dcp.FelhasznaloId);
|
|
|
|
if (orarendElemId != null)
|
|
{
|
|
if (orarendElemTipus == CalendarOraTypeEnum.OrarendiOra)
|
|
{
|
|
eventList = new List<OrarendCO.ExtendedEvent>()
|
|
{
|
|
eventList.FirstOrDefault(e => (e.oraType == CalendarOraTypeEnum.OrarendiOra || e.oraType == CalendarOraTypeEnum.TanitasiOra) && e.OrarendiOraId == orarendElemId && e.datum == datumTol)
|
|
};
|
|
}
|
|
else
|
|
{
|
|
eventList = new List<OrarendCO.ExtendedEvent>()
|
|
{
|
|
eventList.FirstOrDefault(e => e.oraType == orarendElemTipus && e.id == orarendElemId && e.datum == datumTol)
|
|
};
|
|
}
|
|
}
|
|
|
|
if (eventList.Any() && eventList.First() == null)
|
|
{
|
|
return orarendElemek;
|
|
}
|
|
|
|
var oraFiles = CsatolmanySubqueries.ListCsatolmanyok(dcp, new CsatolmanyListRequest
|
|
{
|
|
DatumTol = datumTol,
|
|
DatumIg = datumIg,
|
|
OrarendElemek = eventList.Where(o => o.oraType != CalendarOraTypeEnum.TanevRendjeEsemeny).Select(o => new OrarendElemSimplified(o.id, o.OrarendiOraId ?? 0, o.OrarendiOraGroupId ?? 0, o.oraType, o.datum.Value))
|
|
});
|
|
|
|
var kezdoIdopont = new SystemSettingsHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetSystemSettingValue<TimeSpan>(RendszerBeallitasTipusEnum.Az_elektronikus_naplo_megjelenesenek_kezdoidopontja);
|
|
var lezartOsztalyokEsBontottCsoportjaik = new NaplozarasLogic(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetLezartOsztalyokEsBontottCsoportjaik();
|
|
var naplozarasDatum = new OrarendHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetNaplozarasDate(null);
|
|
|
|
foreach (var tanarOra in eventList)
|
|
{
|
|
if (tanarOra.oraType == CalendarOraTypeEnum.TanevRendjeEsemeny)
|
|
{
|
|
orarendElemek.Add(
|
|
new OrarendElemResponse
|
|
{
|
|
Uid = new OrarendElemUid(tanarOra.id, tanarOra.oraType, tanarOra.start.Value),
|
|
Nev = tanarOra.title,
|
|
Kezdete = tanarOra.start.Value.Add(kezdoIdopont).AddMinutes(-1),
|
|
Vege = tanarOra.end.Value.Add(kezdoIdopont).AddMinutes(-1),
|
|
Allapot = (int)TanoraAllapotaEnum.TanevRendjeEsemeny,
|
|
Csatolmanyok = new List<CsatolmanyResponse>()
|
|
});
|
|
}
|
|
else if (!tanarOra.allDay)
|
|
{
|
|
var oraResponse = new OrarendElemResponse
|
|
{
|
|
Uid = new OrarendElemUid(tanarOra.id, tanarOra.oraType, tanarOra.datum.Value),
|
|
Nev = tanarOra.TantargyTeljesNev,
|
|
HasOrarendiOra = tanarOra.OrarendiOraGroupId.HasValue,
|
|
OsztalyCsoportId = tanarOra.TanevRendOsztalyCsoportId,
|
|
OsztalyCsoportNev = tanarOra.OsztalyCsoport,
|
|
TantargyId = tanarOra.TantargyId,
|
|
TantargyNev = tanarOra.TantargyTeljesNev,
|
|
Terem = tanarOra.Terem,
|
|
Kezdete = tanarOra.start.Value,
|
|
Vege = tanarOra.end.Value,
|
|
Tema = tanarOra.Tema,
|
|
Oraszam = tanarOra.hanyadikora,
|
|
Allapot = (int)tanarOra.OraAllapota,
|
|
TanarUid = tanarOra.TanarIdpUniqueId,
|
|
TanarNev = tanarOra.TanarNev,
|
|
HelyettesitoTanarUid = tanarOra.HelyettesitoTanarIdpUniqueId,
|
|
HelyettesitoTanarNev = tanarOra.HelyettesNev,
|
|
EvesOraSorszam = tanarOra.EvesOraSorszam,
|
|
HaziFeladatId = tanarOra.HaziFeladatId,
|
|
BejelentettSzamonkeresId = tanarOra.BejelentettSzamonkeresId,
|
|
BejelentettSzamonkeresMod = tanarOra.BejelentettSzamonkeresMod,
|
|
BejelentettSzamonkeresTema = tanarOra.BejelentettSzamonkeresTema,
|
|
ElozoNaplozottOraDatum = tanarOra.ElozoNaplozottOraDatum,
|
|
ElozoNaplozottOraTema = tanarOra.ElozoNaplozottOraTema,
|
|
Naplozart = lezartOsztalyokEsBontottCsoportjaik.Contains(tanarOra.TanevRendOsztalyCsoportId) || tanarOra.datum.Value <= naplozarasDatum
|
|
};
|
|
|
|
oraResponse.Csatolmanyok = oraFiles[oraResponse.Uid];
|
|
if (!tanarOra.CsengetesiRendId.HasValue)
|
|
{
|
|
oraResponse.Oraszam = null;
|
|
}
|
|
|
|
orarendElemek.Add(oraResponse);
|
|
}
|
|
}
|
|
|
|
return orarendElemek;
|
|
}
|
|
|
|
public static string OraNaplozas(DefaultConnectionParameters dcp, OraNaplozasRequest request, IFileServiceHelper fileServiceHelper, ICoreApiClient coreApiClient)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
if (request.IsElmaradt)
|
|
{
|
|
if (new SystemSettingsHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Elmaradt_tanitasi_ora_rogzitesenek_tiltasa))
|
|
{
|
|
throw new BlException("Az órát az intézményi beállítások alapján nem lehet elmaradtra naplózni", BlExceptionType.FunkcioKikapcsolva);
|
|
}
|
|
}
|
|
|
|
var naploValidacioParameters = new NaploValidacioParameters(from: request.OrarendElemUid.Datum, to: request.OrarendElemUid.Datum.AddDays(1),
|
|
new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), felhasznaloSzerepkor: null);
|
|
var naploValidator = new NaploValidacio(naploValidacioParameters);
|
|
|
|
try
|
|
{
|
|
var logicCo = new NaplozasMobilCo();
|
|
request.ConvertTo(logicCo);
|
|
var tanitasiOraId = new NaplozasLogic(naploValidator, logicCo).SaveNaplozas(fileServiceHelper, coreApiClient).TanitasiOraId;
|
|
|
|
return UidLogic.Concat(tanitasiOraId, CalendarOraTypeEnum.TanitasiOra, request.OrarendElemUid.Datum.ToIso8601Utc().ToIso8601UtcString());
|
|
}
|
|
catch (ValidationException exception)
|
|
{
|
|
throw new BlException(exception.Message, BlExceptionType.ModelValidacio);
|
|
}
|
|
catch (BlException exception)
|
|
{
|
|
throw new BlException(exception.Message, BlExceptionType.ModelValidacio);
|
|
}
|
|
catch (EntityNotFoundException)
|
|
{
|
|
throw new BlException(ErrorResource.NaplozasSikertelenAzOraMarNemLetezikAKivalasztottNapon, BlExceptionType.NemLetezoEntitas);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
throw new BlException(ErrorResource.SikertelenMentes, exception);
|
|
}
|
|
}
|
|
|
|
public static string OraNaplozasTorles(DefaultConnectionParameters dcp, OraNaplozasTorlesRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
try
|
|
{
|
|
var naploValidacioParameters = new NaploValidacioParameters(from: request.OrarendElemUid.Datum, to: request.OrarendElemUid.Datum.AddDays(1),
|
|
new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), felhasznaloSzerepkor: null);
|
|
var naploValidator = new NaploValidacio(naploValidacioParameters);
|
|
var logicCo = new NaplozasMobilCo();
|
|
request.ConvertTo(logicCo);
|
|
new NaplozasLogic(naploValidator, logicCo).NaplozasValidacio();
|
|
|
|
var tanoraHelper = new TanoraHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler));
|
|
var tanitasiOra = dcp.DalHandler.TanitasiOra().Get(request.OrarendElemUid.Id);
|
|
|
|
if (tanitasiOra.TanarId != dcp.FelhasznaloId && tanitasiOra.HelyettesitoTanarId != dcp.FelhasznaloId)
|
|
{
|
|
throw new BlException(BlExceptionType.NincsJogosultsag);
|
|
}
|
|
|
|
tanoraHelper.NaplozasTorlese(request.OrarendElemUid.Id, true);
|
|
var orarendiOra = tanoraHelper.GetOrarendiOraIdForTanitasiOra(tanitasiOra);
|
|
if (orarendiOra != null)
|
|
{
|
|
return UidLogic.Concat(orarendiOra.ID, CalendarOraTypeEnum.OrarendiOra, request.OrarendElemUid.Datum.ToIso8601Utc().ToIso8601UtcString());
|
|
}
|
|
else
|
|
{
|
|
return UidLogic.Concat(-1, CalendarOraTypeEnum.OrarendiOra, request.OrarendElemUid.Datum.ToIso8601Utc().ToIso8601UtcString());
|
|
}
|
|
}
|
|
catch (ValidationException exception)
|
|
{
|
|
throw new BlException(exception.Message, BlExceptionType.ModelValidacio);
|
|
}
|
|
catch (BlException exception) when (exception.ExceptionType is BlExceptionType.ModelValidacio)
|
|
{
|
|
throw new BlException(exception.Message, BlExceptionType.ModelValidacio);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
throw new BlException(ErrorResource.SikertelenTorles, exception);
|
|
}
|
|
}
|
|
|
|
internal static IEnumerable<TanuloJelenletResponse> GetTanuloJelenlet(DefaultConnectionParameters dcp, TanuloJelenletRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
var connection = new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId);
|
|
|
|
(var oraKezdete, var oraVege, var osztalyCsoportId, var tantargyId) = GetOraAlapadatok(dcp, request);
|
|
|
|
var parhuzamosOranNaplozott = new MulasztasHelper(connection).ListParhuzamosOranNaplozottMulasztasTanuloId(oraKezdete, oraVege, request.OrarendElemUid.Id);
|
|
var mulasztasok = OraSubqueries.GetTanuloJelenlet(dcp, new Domain.V3.Ora.TanuloJelenletRequest(request.OrarendElemUid.Id));
|
|
|
|
var osztalyCsoportTanuloi = FelmentesSubqueries.GetFelmentesekWithTanuloAdatok(dcp, new FelmentesRequest { OsztalyCsoportId = osztalyCsoportId, Datum = oraKezdete, TantargyId = tantargyId });
|
|
var isMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled = new SystemSettingsHelper(connection).GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.A_foglalkozasok_mulasztasi_adatai_megadasanal_a_parhuzamos_orakkal_valo_utkozes_vizsgalata);
|
|
var igazolasLista = dcp.DalHandler.IgazolasDal().GetIgazolasokByDate(request.OrarendElemUid.Datum, dcp.TanevId, dcp.IntezmenyId).ToDaoList<JelenletIgazolasResponseDao>().Select(x => x.TanuloId);
|
|
var magantanuloMulasztasSystemSetting = (SystemSettingMagantanuloMulasztas)new SystemSettingsHelper(connection).GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.Magantanulo_oralatogatas_aloli_mentessegenek_kezelese);
|
|
var isNemGyakorlatiTantargyonResztKellVennie = magantanuloMulasztasSystemSetting != SystemSettingMagantanuloMulasztas.CsakGyakorlaton && !new TantargyHelper(connection).IsGyakorlatiTantargy(tantargyId);
|
|
var alapertelmezettJelenlet = new SystemSettingsHelper(connection).GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.alapertelmezett_statusz_naplozasok_eseteben);
|
|
var elozoOranHianyzoAjanlasa = new FelhasznaloHelper(connection).GetProfilTipus(dcp.FelhasznaloId, "HianyzokAutoKitoltes");
|
|
var elozoOranhianyzottTanuloIdList = elozoOranHianyzoAjanlasa ? dcp.DalHandler.Tanulo().GetElozoOranHianyzottTanulok(oraKezdete, osztalyCsoportId) : new List<int>();
|
|
var tantargybolElozoOranHianyzottTanuloIdList = dcp.DalHandler.OrarendiOra().GetElozoOranHianyzottTanulo(tantargyId, osztalyCsoportId, oraKezdete, dcp.TanevId, dcp.IntezmenyId);
|
|
|
|
return CheckTanuloJelenlet(osztalyCsoportTanuloi, mulasztasok, igazolasLista, parhuzamosOranNaplozott, elozoOranhianyzottTanuloIdList, tantargybolElozoOranHianyzottTanuloIdList, tantargyId, isMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled, magantanuloMulasztasSystemSetting, isNemGyakorlatiTantargyonResztKellVennie, alapertelmezettJelenlet);
|
|
}
|
|
|
|
internal static IEnumerable<HetirendListResponse> ListHetirend(DefaultConnectionParameters dcp, HetirendListRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
return dcp.DalHandler.NaptariHet().GetNaptariHetList(dcp.TanevId, new NaptariHetAndOrarendOverlapFilter
|
|
{
|
|
OrarendElemKezdoNapDatuma = request.OrarendElemKezdoNapDatuma,
|
|
OrarendElemVegNapDatuma = request.OrarendElemVegNapDatuma
|
|
})
|
|
.ToDaoList<NaptariHetResponseDao>()
|
|
.Select(x => new HetirendListResponse
|
|
{
|
|
Id = x.Id,
|
|
HetSorszama = x.HetSorszama,
|
|
KezdoNapDatuma = x.KezdoNapDatuma,
|
|
VegNapDatuma = x.VegNapDatuma,
|
|
Hetirend = x.HetirendNev ?? ((int)HetiRendTipusEnum.MindegyikHet).GetDisplayName<HetiRendTipusEnum>(dcp.TanevId)
|
|
});
|
|
}
|
|
|
|
internal static BejelentettSzamonkeresekResponse GetBejelentettSzamonkeres(DefaultConnectionParameters dcp, int id)
|
|
{
|
|
var szamonkeres = dcp.DalHandler.SzamonkeresElorejelzes().GetBejelentettSzamonkeresekGrid(
|
|
dcp.IntezmenyId,
|
|
dcp.TanevId,
|
|
new SzamonkeresElorejelzesSearchPco
|
|
{
|
|
SzamonkeresIds = new List<int>() { id },
|
|
}, null).ToDaoList<BejelentettSzamonkeresResponseDao>().FirstOrDefault();
|
|
|
|
if (szamonkeres == null)
|
|
{
|
|
throw new BlException(BlExceptionType.NemLetezoEntitas);
|
|
}
|
|
|
|
return new BejelentettSzamonkeresekResponse
|
|
{
|
|
Id = szamonkeres.Id,
|
|
Tema = szamonkeres.Tema,
|
|
ErtekelesMod = szamonkeres.ErtekelesMod,
|
|
OraSzam = szamonkeres.OraSzam,
|
|
TantargyId = szamonkeres.TantargyId,
|
|
TantargyNev = szamonkeres.TantargyNev,
|
|
TanarUid = szamonkeres.TanarUid,
|
|
TanarNev = szamonkeres.TanarNev
|
|
};
|
|
}
|
|
|
|
internal static void DeleteBejelentettSzamonkeres(DefaultConnectionParameters dcp, int id)
|
|
{
|
|
var szamonkeres = dcp.DalHandler.SzamonkeresElorejelzes().Get(id);
|
|
if (szamonkeres.Torolt) throw new BlException(ErrorResource.ASzamonkeresIdokozbenMarTorolveLett, BlExceptionType.NemLetezoEntitas);
|
|
if (szamonkeres.RogzitoId != dcp.FelhasznaloId) throw new BlException(BlExceptionType.NincsJogosultsag);
|
|
dcp.DalHandler.SzamonkeresElorejelzes().Delete(id);
|
|
}
|
|
|
|
internal static void PostSzamonkeres(DefaultConnectionParameters dcp, SzamonkeresRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
var connection = new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId);
|
|
var systemSettingsHelper = new SystemSettingsHelper(connection);
|
|
var limitFigyelmeztetesiTiltasiBeallitas = systemSettingsHelper.GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.Limit_Figyelmeztetesi_Tiltasi_Beallitas);
|
|
var ertekelesModokBeallitasaNapiLimithez = systemSettingsHelper.GetSystemSettingValue<List<int>>(RendszerBeallitasTipusEnum.Ertekeles_Modok_Beallitasa_Napi_Limithez);
|
|
var napiSzamonkeresiLimit = systemSettingsHelper.GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.Napi_Szamonkeresi_Limit);
|
|
var orarendiOra = dcp.DalHandler.OrarendiOra().Get(request.OrarendElemUid.Id);
|
|
var orarendiOraGroupId = orarendiOra.OrarendiOraGroupId.Value;
|
|
var szamonkeresElorejelzesCO = new SzamonkeresElorejelzesCO
|
|
{
|
|
OrarendiOraGroupId = orarendiOraGroupId,
|
|
Datum = request.OrarendElemUid.Datum,
|
|
Megnevezes = request.Tema,
|
|
SzamonkeresModId = request.ErtekelesMod
|
|
};
|
|
|
|
if (dcp.DalHandler.SzamonkeresElorejelzes().HasSzamonkeresForOrarendiOraGroupId(dcp.TanevId, orarendiOraGroupId))
|
|
{
|
|
throw new BlException(OrarendResource.SzamonkeresMarRogzitveAzAdottOrahoz, BlExceptionType.ModelValidacio);
|
|
}
|
|
|
|
var szamonkeresElorejelzesHelper = new SzamonkeresElorejelzesHelper(connection);
|
|
var tanulokSzamonkeresElorejelzesei = szamonkeresElorejelzesHelper.GetTanulokSzamonkeresElorejelzesei(new SzamonkeresElorejelzesSearchCO
|
|
{
|
|
OraGroupId = orarendiOraGroupId,
|
|
Datum = request.OrarendElemUid.Datum,
|
|
NapiSzamonkeresLimit = napiSzamonkeresiLimit,
|
|
OsztalyCsoportId = orarendiOra.OsztalyCsoportId,
|
|
ErtekelesModokLimithez = ertekelesModokBeallitasaNapiLimithez
|
|
});
|
|
if (ertekelesModokBeallitasaNapiLimithez.Contains(request.ErtekelesMod) && napiSzamonkeresiLimit > 0 && ertekelesModokBeallitasaNapiLimithez.Count > 0 && limitFigyelmeztetesiTiltasiBeallitas < 3)
|
|
{
|
|
switch (limitFigyelmeztetesiTiltasiBeallitas)
|
|
{
|
|
case 1:
|
|
if (tanulokSzamonkeresElorejelzesei != null && tanulokSzamonkeresElorejelzesei.Tables.Count > 0 && tanulokSzamonkeresElorejelzesei.Tables[0].Rows.Count > 0)
|
|
{
|
|
throw new BlException(string.Format(OrarendResource.AMegengedettMennyiseguSzamonkeresMarRogzitesreKerültAzAdottNapra, napiSzamonkeresiLimit), BlExceptionType.ModelValidacio);
|
|
}
|
|
break;
|
|
case 2:
|
|
if (tanulokSzamonkeresElorejelzesei != null && tanulokSzamonkeresElorejelzesei.Tables.Count > 0 && tanulokSzamonkeresElorejelzesei.Tables[0].Rows.Count > 0)
|
|
{
|
|
if (request.ForceSave)
|
|
{
|
|
szamonkeresElorejelzesHelper.SaveSzamonkeresElorejelzes(szamonkeresElorejelzesCO, dcp.FelhasznaloId, dcp.IntezmenyId);
|
|
return;
|
|
}
|
|
throw new BlException(string.Format(OrarendResource.AMegengedettMennyiseguSzamonkeresMarRogzitesreKerültAzAdottNapraBiztosanRogzitiIgyIsASzamonkerest, napiSzamonkeresiLimit), HttpStatusCode.Conflict);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
szamonkeresElorejelzesHelper.SaveSzamonkeresElorejelzes(szamonkeresElorejelzesCO, dcp.FelhasznaloId, dcp.IntezmenyId);
|
|
}
|
|
|
|
internal static IEnumerable<FelmentesResponse> GetFelmentes(DefaultConnectionParameters dcp, int tantargyId)
|
|
{
|
|
return dcp.DalHandler.Tanulo().GetTanulokFelmentesei(new List<int>(), dcp.TanevId, isFromSzervezet: true, tantargyId: tantargyId).ToDaoList<FelmentesResponseDao>()
|
|
.Select(f => new FelmentesResponse
|
|
{
|
|
TanuloId = f.TanuloId,
|
|
TantargyNev = f.TantargyNev,
|
|
ErtekelesAloliFelmentes = f.ErtekelesMentesites,
|
|
TanoraLatogatasaAloliFelmentes = f.OraMentesites,
|
|
SzovegesenErtekelheto = f.SzovegesenErtekelheto,
|
|
FelmentesOka = f.FelmentesOka,
|
|
FelmentesKezdete = f.FelmentesKezdete,
|
|
FelmentesVege = f.FelmentesVege
|
|
});
|
|
}
|
|
|
|
private static (DateTime, DateTime, int, int) GetOraAlapadatok(DefaultConnectionParameters dcp, TanuloJelenletRequest request)
|
|
{
|
|
var oraKezdete = request.OrarendElemUid.Datum;
|
|
var oraVege = request.OrarendElemUid.Datum;
|
|
var osztalyCsoportId = 0;
|
|
var tantargyId = 0;
|
|
|
|
if (request.OrarendElemUid.Tipus == CalendarOraTypeEnum.OrarendiOra)
|
|
{
|
|
var orarendiOra = dcp.DalHandler.OrarendiOra().Get(request.OrarendElemUid.Id);
|
|
oraKezdete = oraKezdete.AddHours(orarendiOra.OraKezdete.Value.Hour).AddMinutes(orarendiOra.OraKezdete.Value.Minute);
|
|
oraVege = oraVege.AddHours(orarendiOra.OraVege.Value.Hour).AddMinutes(orarendiOra.OraVege.Value.Minute);
|
|
osztalyCsoportId = orarendiOra.OsztalyCsoportId;
|
|
tantargyId = orarendiOra.TantargyId;
|
|
}
|
|
|
|
else if (request.OrarendElemUid.Tipus == CalendarOraTypeEnum.TanitasiOra)
|
|
{
|
|
var tanitasiOra = dcp.DalHandler.TanitasiOra().Get(request.OrarendElemUid.Id);
|
|
oraKezdete = tanitasiOra.OraKezdete;
|
|
oraVege = tanitasiOra.OraVege;
|
|
osztalyCsoportId = tanitasiOra.OsztalyCsoportId;
|
|
tantargyId = tanitasiOra.TantargyId;
|
|
}
|
|
|
|
return (oraKezdete, oraVege, osztalyCsoportId, tantargyId);
|
|
}
|
|
|
|
private static IEnumerable<TanuloJelenletResponse> CheckTanuloJelenlet(IEnumerable<(int tanuloId, int? tantargyId, TanuloMentessegResponse mentessegResponse)> osztalyCsoportTanuloi,
|
|
HashSet<Domain.V3.Ora.TanuloJelenletResponse> mulasztasok,
|
|
IEnumerable<int> igazolasLista,
|
|
List<int> parhuzamosOranNaplozott,
|
|
List<int> elozoOranHianyzottTanuloIdList,
|
|
List<int> tantargybolElozoOranHianyzottTanuloIdList,
|
|
int tantargyId,
|
|
bool isMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled,
|
|
SystemSettingMagantanuloMulasztas magantanuloMulasztasSystemSetting,
|
|
bool isNemGyakorlatiTantargyonResztKellVennie,
|
|
int alapertelmezettJelenlet)
|
|
{
|
|
var response = new List<TanuloJelenletResponse>();
|
|
foreach (var tanulo in osztalyCsoportTanuloi)
|
|
{
|
|
var isEnabledHianyzas = true;
|
|
var allapot = alapertelmezettJelenlet;
|
|
var figyelmeztetoSzovegList = new List<string>();
|
|
|
|
if (elozoOranHianyzottTanuloIdList.Contains(tanulo.tanuloId))
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.hianyzas;
|
|
}
|
|
if (tantargybolElozoOranHianyzottTanuloIdList.Contains(tanulo.tanuloId))
|
|
{
|
|
figyelmeztetoSzovegList.Add(NaploApiResource.ElozoOranHianyzott);
|
|
}
|
|
if (igazolasLista.Contains(tanulo.tanuloId))
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.hianyzas;
|
|
figyelmeztetoSzovegList.Add(OrarendResource.ATanulonakVanRogzitveIgazolasa);
|
|
}
|
|
if (isMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled && parhuzamosOranNaplozott.Contains(tanulo.tanuloId))
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.ures;
|
|
isEnabledHianyzas = false;
|
|
figyelmeztetoSzovegList.Add(OrarendResource.ParhuzamosOranMarNaploztak);
|
|
}
|
|
if (tanulo.mentessegResponse.IsMaganTanulo && magantanuloMulasztasSystemSetting != SystemSettingMagantanuloMulasztas.KotelezoMegjelenie && isNemGyakorlatiTantargyonResztKellVennie)
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.ures;
|
|
isEnabledHianyzas = false;
|
|
figyelmeztetoSzovegList.Add(OrarendResource.Magantanulo);
|
|
}
|
|
if (tanulo.mentessegResponse.TanoraLatogatasaAloliFelmentes && tanulo.tantargyId == tantargyId)
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.ures;
|
|
isEnabledHianyzas = false;
|
|
figyelmeztetoSzovegList.Add(tanulo.mentessegResponse.FelmentesOka);
|
|
}
|
|
if (tanulo.mentessegResponse.ErtekelesAloliFelmentes && tanulo.tantargyId == tantargyId)
|
|
{
|
|
figyelmeztetoSzovegList.Add(tanulo.mentessegResponse.FelmentesOka);
|
|
}
|
|
if (tanulo.mentessegResponse.IsSzakmaiGyakorlatonLevo)
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.ures;
|
|
}
|
|
if (tanulo.mentessegResponse.IsJogviszonySzunetelteto)
|
|
{
|
|
allapot = (int)MulasztasTipusEnum.ures;
|
|
isEnabledHianyzas = false;
|
|
}
|
|
|
|
var mulasztas = mulasztasok.Where(x => x.TanuloId == tanulo.tanuloId).FirstOrDefault();
|
|
|
|
if (mulasztas != null)
|
|
{
|
|
allapot = mulasztas.MulasztasTipus;
|
|
}
|
|
|
|
response.Add(new TanuloJelenletResponse(tanulo.tanuloId, allapot, mulasztas?.Keses, string.Join(" | ", figyelmeztetoSzovegList), isEnabledHianyzas));
|
|
}
|
|
|
|
return response;
|
|
}
|
|
}
|
|
}
|