kreta/Kreta.WebApi/Naplo/Kreta.Naplo.BusinessLogic/V3/Orarend/OrarendSubqueries.cs
2024-03-13 00:33:46 +01:00

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;
}
}
}