79 lines
4.1 KiB
C#
79 lines
4.1 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Kreta.BusinessLogic.Helpers;
|
|
using Kreta.Core.ConnectionType;
|
|
using Kreta.Core.Logic;
|
|
using Kreta.Naplo.Dao.V3.Orarend;
|
|
using Kreta.Naplo.Domain.V3.Common;
|
|
using Kreta.Naplo.Domain.V3.Ertekeles;
|
|
using Kreta.Naplo.Domain.V3.Felmentes;
|
|
|
|
namespace Kreta.Naplo.BusinessLogic.V3.Felmentes
|
|
{
|
|
public static class FelmentesSubqueries
|
|
{
|
|
internal static IEnumerable<(int tanuloId, int? tantargyId, TanuloMentessegResponse mentessegResponse)> GetFelmentesekWithTanuloAdatok(DefaultConnectionParameters dcp, FelmentesRequest request)
|
|
{
|
|
var osztalyCsoportTanuloi = new OsztalyCsoportHelper(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId))
|
|
.GetOsztalyCsoportTanulokEsFelmenteseik(request.OsztalyCsoportId, request.Datum, request.TanuloId, request.TantargyId).ToDaoList<JelenletResponseDao>();
|
|
|
|
|
|
return GetTanulokWithFelmentesek(osztalyCsoportTanuloi).Select(x => (x.TanuloId, x.TantargyId, new TanuloMentessegResponse
|
|
{
|
|
TanoraLatogatasaAloliFelmentes = x.IsOraMentesites ?? false,
|
|
ErtekelesAloliFelmentes = x.IsErtekelesMentesseg ?? false,
|
|
SzovegesenErtekelheto = x.IsSzovegesenErtekelheto ?? true,
|
|
FelmentesOka = x.MentessegOka,
|
|
IsMaganTanulo = (x.IsMaganTanulo ?? false) &&
|
|
(x.MaganTanulosagKezdetDatuma.HasValue ? x.MaganTanulosagKezdetDatuma <= request.Datum : true) &&
|
|
(x.MaganTanulosagVegeDatuma.HasValue ? x.MaganTanulosagVegeDatuma >= request.Datum : true),
|
|
IsJogviszonySzunetelteto = x.IsJogviszonySzunetelteto ?? false,
|
|
IsSzakmaiGyakorlatonLevo = x.IsSzakmaiGyakorlatonLevo ?? false
|
|
|
|
}));
|
|
}
|
|
|
|
private static IEnumerable<JelenletResponseDao> GetTanulokWithFelmentesek(List<JelenletResponseDao> osztalyCsoportTanuloi)
|
|
{
|
|
foreach (var felmentesek in osztalyCsoportTanuloi.GroupBy(x => (x.TanuloId, x.TantargyId)))
|
|
{
|
|
if (felmentesek.Any())
|
|
{
|
|
var felmentes = felmentesek.First();
|
|
|
|
if (felmentesek.Count() > 1)
|
|
{
|
|
AggregateFelmentesek(felmentesek, felmentes);
|
|
}
|
|
|
|
yield return felmentes;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Aggregálni kell a felmentéseket a következő logika alapján
|
|
/// lényegében a két felmentést kell uniózni, ami az időpont esetében egyértelmű (legkorábbitól a legkésőbbig), a CB esetében meg vagy kapcsolatotot jelent, azaz ami legalább egynél be van pipálva
|
|
/// </summary>
|
|
/// <param name="felmentesek">felmentes lista ha több is szerepel</param>
|
|
/// <param name="felmentes">felmentes elem</param>
|
|
private static void AggregateFelmentesek(IGrouping<(int TanuloId, int? TantargyId), JelenletResponseDao> felmentesek, JelenletResponseDao felmentes)
|
|
{
|
|
var aggeregateFelmentes = felmentesek.Aggregate((currentValue, sequenceValue) => new JelenletResponseDao
|
|
{
|
|
IsOraMentesites = currentValue.IsOraMentesites.GetValueOrDefault() || sequenceValue.IsOraMentesites.GetValueOrDefault(),
|
|
IsErtekelesMentesseg = currentValue.IsErtekelesMentesseg.GetValueOrDefault() || sequenceValue.IsErtekelesMentesseg.GetValueOrDefault(),
|
|
IsSzovegesenErtekelheto = currentValue.IsSzovegesenErtekelheto.GetValueOrDefault() || sequenceValue.IsSzovegesenErtekelheto.GetValueOrDefault(),
|
|
MentessegOka = currentValue.MentessegOka + $" | {sequenceValue.MentessegOka}"
|
|
|
|
});
|
|
|
|
felmentes.IsOraMentesites = aggeregateFelmentes.IsOraMentesites;
|
|
felmentes.IsErtekelesMentesseg = aggeregateFelmentes.IsErtekelesMentesseg;
|
|
felmentes.IsSzovegesenErtekelheto = aggeregateFelmentes.IsSzovegesenErtekelheto;
|
|
felmentes.MentessegOka = aggeregateFelmentes.MentessegOka;
|
|
}
|
|
}
|
|
}
|