This commit is contained in:
2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions
@@ -0,0 +1,27 @@
using System.Collections.Generic;
using Kreta.Ellenorzo.BL.VN.Ellenorzo;
using Kreta.Ellenorzo.Domain.VN.Common;
using Kreta.Ellenorzo.Domain.VN.Fogadoora;
using Kreta.Ellenorzo.Domain.VN.Fogadoora.Idopont;
namespace Kreta.Ellenorzo.BL.VN.Fogadoora
{
public class FogadooraFacade : EllenorzoFacade
{
public FogadooraFacade(MobileUser mobileUser) : base(mobileUser)
{
}
public HashSet<FogadooraListResponse> ListFogadoora(FogadooraListRequest request)
=> RunSubquery(() => FogadooraSubqueries.ListFogadoora(DefaultConnectionParameters, request));
public FogadooraResponse GetFogadoora(string uid)
=> RunSubquery(() => FogadooraSubqueries.GetFogadoora(DefaultConnectionParameters, uid));
public void DeleteFogadooraIdopontJelentkezes(FogadooraIdopontJelentkezesDeleteRequest request) => RunSubquery(()
=> FogadooraSubqueries.DeleteSajatFogadooraIdopontJelentkezes(DefaultConnectionParameters, request));
public void CreateFogadooraIdopontJelentkezes(FogadooraJelentkezesCreateRequest request)
=> RunSubquery(() => FogadooraSubqueries.CreateFogadooraIdopontJelentkezes(DefaultConnectionParameters, request));
}
}
@@ -0,0 +1,175 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Kreta.BusinessLogic.Helpers;
using Kreta.Core.ConnectionType;
using Kreta.Core.Enum;
using Kreta.Core.Exceptions;
using Kreta.Core.Logic;
using Kreta.DataAccessManual.Util;
using Kreta.Ellenorzo.BL.VN.Logic;
using Kreta.Ellenorzo.Dao.VN.Fogadoora;
using Kreta.Ellenorzo.Domain.VN.Common;
using Kreta.Ellenorzo.Domain.VN.Felhasznalo.Alkalmazott.Tanar;
using Kreta.Ellenorzo.Domain.VN.Fogadoora;
using Kreta.Ellenorzo.Domain.VN.Fogadoora.Idopont;
using Kreta.Ellenorzo.Domain.VN.Terem;
using Kreta.Ellenorzo.Domain.VN.UniqueIdentifier;
using Kreta.Ellenorzo.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
namespace Kreta.Ellenorzo.BL.VN.Fogadoora
{
internal static class FogadooraSubqueries
{
internal static HashSet<FogadooraListResponse> ListFogadoora(DefaultConnectionParameters dcp, FogadooraListRequest request)
{
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
var fogadoorakAndFogadooraIdopontokDaoList = dcp.DalHandler.Fogadoora().GetTanarFogadoorakByGondviseloId(dcp.GondviseloId.Value, request.Uid?.Id, request.DatumTol).ToDaoList<FogadooraResponseDao>();
if (!fogadoorakAndFogadooraIdopontokDaoList.Any())
{
return new HashSet<FogadooraListResponse>();
}
var fogadooraIdopontokByTanarId = fogadoorakAndFogadooraIdopontokDaoList.GroupBy(i => (i.TanarId, i.TanarNev))
.ToDictionary(i => i.Key, i => i.GroupBy(l => l.FogadooraId));
return GetFogadooraListResponse(fogadooraIdopontokByTanarId).ToHashSet();
}
private static IEnumerable<FogadooraListResponse> GetFogadooraListResponse(Dictionary<(int TanarId, string TanarNev), IEnumerable<IGrouping<int, FogadooraResponseDao>>> fogadooraIdopontokByTanarId)
{
foreach ((var tanarId, var tanarNev) in fogadooraIdopontokByTanarId.Keys)
{
var tanarFogadoorai = new FogadooraListResponse()
{
Tanar = new TanarSimplifiedResponse
{
Uid = new TanarUid(tanarId),
Nev = tanarNev
},
Fogadoorak = fogadooraIdopontokByTanarId[(tanarId, tanarNev)].Select(fogadoora => CreateFogadooraResponse(fogadoora, fogadoora.First())).ToList()
};
yield return tanarFogadoorai;
}
}
private static FogadooraResponse CreateFogadooraResponse(IGrouping<int, FogadooraResponseDao> fogadoora, FogadooraResponseDao fogadooraValueFirst)
{
return new FogadooraResponse
{
Uid = new FogadooraUid(fogadoora.Key),
Terem = new TeremSimplifiedResponse
{
Uid = new TeremUid(fogadooraValueFirst.TeremId),
Nev = fogadooraValueFirst.TeremNev
},
IsJelentkezesFeatureEnabled = fogadooraValueFirst.TipusId != (int)FogadooraTipusEnum.NemJelentkezheto,
KezdoIdopont = fogadooraValueFirst.FogadooraKezdete,
VegIdopont = fogadooraValueFirst.FogadooraVege,
JelentkezesHatarido = fogadooraValueFirst.JelentkezesHatarido,
Idopontok = fogadooraValueFirst.FogadooraIdopontId.HasValue ? GetFogadooraIdopontok(fogadoora).ToList() : new List<FogadooraIdopontResponse>()
};
}
private static IEnumerable<FogadooraIdopontResponse> GetFogadooraIdopontok(IGrouping<int, FogadooraResponseDao> fogadoora)
{
return fogadoora.Where(fogadooraIdopont => fogadooraIdopont.IsSzabadIdopont || (!fogadooraIdopont.IsSzabadIdopont && fogadooraIdopont.IsJelentkeztem))
.Select(idopont => new FogadooraIdopontResponse
{
Uid = new FogadooraIdopontUid(idopont.FogadooraIdopontId.Value),
FogadooraUid = new FogadooraUid(idopont.FogadooraId),
FogadooraKezdete = idopont.FogadooraKezdete,
KezdoIdopont = idopont.FogadooraIdopontKezdete.Value,
VegIdopont = idopont.FogadooraIdopontVege.Value,
JelentkezesHatarido = idopont.JelentkezesHatarido,
IsJelentkeztem = idopont.IsJelentkeztem
});
}
internal static FogadooraResponse GetFogadoora(DefaultConnectionParameters dcp, string uid)
{
return ListFogadoora(dcp, new FogadooraListRequest() { Uid = new FogadooraUid(uid) }).SingleOrDefault()?.Fogadoorak?.SingleOrDefault() ?? throw new BlException(BlExceptionType.NemLetezoEntitas);
}
internal static void DeleteSajatFogadooraIdopontJelentkezes(DefaultConnectionParameters dcp, FogadooraIdopontJelentkezesDeleteRequest request)
{
var jogosultElemek = ListHozzaferhetoFogadooraIdopont(dcp);
if (jogosultElemek.TryGetValue(new FogadooraIdopontResponse { Uid = new FogadooraIdopontUid(request.FogadooraIdopontUid.Id) }, out var talaltElem))
{
if (!talaltElem.IsJelentkeztem)
{
throw new BlException(BlExceptionType.AMuveletNemVegezhetoElTobbszor);
}
if (DateTime.Now > talaltElem.FogadooraKezdete)
{
throw new BlException(ErrorResource.FogadooraJelentkezestMarNemLehetLemondani, BlExceptionType.ModelValidacio);
}
}
else
{
throw new BlException(BlExceptionType.NemLetezoEntitas);
}
var isJelentkezesFeatureEnabled = dcp.DalHandler.Fogadoora().IsFogadooraJelentkezesFeatureEnabled(request.FogadooraIdopontUid.Id);
if (!isJelentkezesFeatureEnabled)
{
throw new BlException(BlExceptionType.FunkcioKikapcsolva);
}
new FogadooraHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler))
.FogadooraGondviseloJelentkezesLemondas(request.FogadooraIdopontUid.Id, dcp.GondviseloId.Value);
}
internal static void CreateFogadooraIdopontJelentkezes(DefaultConnectionParameters dcp, FogadooraJelentkezesCreateRequest request)
{
var jogosultElemek = ListHozzaferhetoFogadooraIdopont(dcp);
if (jogosultElemek.TryGetValue(new FogadooraIdopontResponse { Uid = new FogadooraIdopontUid(request.FogadooraIdopontUid.Id) }, out var talaltElem))
{
if (talaltElem.IsJelentkeztem)
{
throw new BlException(BlExceptionType.AMuveletNemVegezhetoElTobbszor);
}
if (DateTime.Now > (talaltElem.JelentkezesHatarido ?? talaltElem.FogadooraKezdete))
{
throw new BlException(ErrorResource.FogadooraJelentkezesHataridejeLejart, BlExceptionType.ModelValidacio);
}
if (jogosultElemek.Any(x => x.FogadooraUid.Id == talaltElem.FogadooraUid.Id && x.IsJelentkeztem))
{
throw new BlException(BlExceptionType.AMuveletNemVegezhetoElTobbszor);
}
}
else
{
throw new BlException(BlExceptionType.NemLetezoEntitas);
}
var isJelentkezesFeatureEnabled = dcp.DalHandler.Fogadoora().IsFogadooraJelentkezesFeatureEnabled(request.FogadooraIdopontUid.Id);
if (!isJelentkezesFeatureEnabled)
{
throw new BlException(BlExceptionType.FunkcioKikapcsolva);
}
new FogadooraHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler))
.FogadooraGondviseloJelentkezes(request.FogadooraIdopontUid.Id, dcp.GondviseloId.Value);
}
internal static HashSet<FogadooraIdopontResponse> ListHozzaferhetoFogadooraIdopont(DefaultConnectionParameters dcp)
{
var response = new HashSet<FogadooraIdopontResponse>();
if (FelhasznaloLogic.IsJogosult(false, dcp.JogosultsagLista, FelhasznaloSzerepkor.Gondviselo))
{
response = ListFogadoora(dcp, new FogadooraListRequest())
.SelectMany(x => x.Fogadoorak).SelectMany(f => f.Idopontok).ToHashSet(new FogadooraIdopontResponse());
}
return response;
}
}
}