This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,18 @@
using System.Collections.Generic;
using Kreta.Ellenorzo.BL.VN.Ellenorzo;
using Kreta.Ellenorzo.Domain.VN.Common;
using Kreta.Ellenorzo.Domain.VN.Ertekeles.Atlag.OsztalyAtlag;
namespace Kreta.Ellenorzo.BL.VN.Ertekeles.Atlag.OsztalyAtlag
{
public class OsztalyAtlagFacade : EllenorzoFacade
{
public OsztalyAtlagFacade(MobileUser mobileUser) : base(mobileUser)
{
}
public HashSet<OsztalyAtlagListResponse> ListAktualisTanuloOsztalyAtlag(OsztalyAtlagListRequest request)
=> RunSubquery(() => OsztalyAtlagSubqueries.ListAktualisTanuloOsztalyAtlag(DefaultConnectionParameters, request));
}
}

View file

@ -0,0 +1,105 @@
using System.Collections.Generic;
using System.Linq;
using Kreta.Core.Enum;
using Kreta.Core.Exceptions;
using Kreta.Ellenorzo.BL.VN.Ertekeles.Atlag.TantargyiAtlag;
using Kreta.Ellenorzo.BL.VN.Felhasznalo.Tanulo;
using Kreta.Ellenorzo.BL.VN.Logic;
using Kreta.Ellenorzo.BL.VN.OsztalyCsoport;
using Kreta.Ellenorzo.BL.VN.Tantargy;
using Kreta.Ellenorzo.Domain.VN.Common;
using Kreta.Ellenorzo.Domain.VN.Ertekeles.Atlag.OsztalyAtlag;
using Kreta.Ellenorzo.Domain.VN.Ertekeles.Atlag.TantargyiAtlag;
using Kreta.Ellenorzo.Domain.VN.OsztalyCsoport;
using Kreta.Ellenorzo.Domain.VN.OsztalyCsoport.Osztaly;
using Kreta.Ellenorzo.Domain.VN.Tantargy;
using Kreta.Ellenorzo.Enums.VN;
using Kreta.Enums;
using Kreta.KretaServer.SystemSettings;
namespace Kreta.Ellenorzo.BL.VN.Ertekeles.Atlag.OsztalyAtlag
{
internal static class OsztalyAtlagSubqueries
{
internal static HashSet<OsztalyAtlagListResponse> ListAktualisTanuloOsztalyAtlag(DefaultConnectionParameters dcp, OsztalyAtlagListRequest request)
{
var result = new HashSet<OsztalyAtlagListResponse>(new OsztalyAtlagListResponse());
var isOsztalyAtlagMegjelenik = SystemSettingsManager.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Osztalyatlag_megjelenitese_az_ellenorzo_feluleten, dcp.IntezmenyAzonosito, dcp.TanevId);
if (!isOsztalyAtlagMegjelenik)
{
return result;
}
var osztalyCsoportok = OsztalyCsoportSubqueries
.ListOsztalyCsoport(dcp, new OsztalyCsoportListRequest
{
TanuloIds = new List<int> { dcp.TanuloId },
OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatUid.Id
});
var aktivOsztalyok = osztalyCsoportok.Where(ocs => ocs.OsztalyCsoportTipus == OsztalyCsoportTipus.Osztaly);
if (!aktivOsztalyok.Any())
{
return result;
}
var osztalyokTanuloi = TanuloSubqueries.ListOsztalyokAktivTanuloIds(dcp, new OsztalyTanuloiListRequest { OsztalyIds = aktivOsztalyok.Select(o => o.Uid.Id).ToList() });
if (osztalyokTanuloi.Count < 1)
{
return result;
}
var tanuloAktualisanTanultTantargyai = TantargySubqueries.ListTanuloAktualisanTanultTantargy(dcp, new TanuloAktualisanTanultTantargyListRequest()
{
TanuloId = dcp.TanuloId,
OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatUid.Id,
TantargyUids = request.TantargyUids,
OsztalyCsoportok = osztalyCsoportok
});
if (tanuloAktualisanTanultTantargyai.Count < 1)
{
return result;
}
var tantargyiAtlagokByTanulo = TantargyiAtlagSubqueries.GetTantargyiAtlagByTanulo(dcp,
new TantargyiAtlagRequest()
{
TanuloIds = osztalyokTanuloi,
Tantargyak = tanuloAktualisanTanultTantargyai,
OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatUid.Id
});
foreach (var tantargy in tanuloAktualisanTanultTantargyai)
{
tantargyiAtlagokByTanulo.TryGetValue((dcp.TanuloId, tantargy.Uid.Id), out var tanuloAtlagByTantargy);
var atlagokByTantargy = tantargyiAtlagokByTanulo.Where(x => x.Key.TantargyId == tantargy.Uid.Id && x.Value.HasValue).Select(x => x.Value.Value).ToList();
var osztalyCsoportAtlagByTantargy = atlagokByTantargy.Count > 0 ? AtlagLogic.GetSimpleAtlag(atlagokByTantargy) : (decimal?)null;
if ((request.IsAtlagNeeded && (tanuloAtlagByTantargy.HasValue || osztalyCsoportAtlagByTantargy.HasValue)) ||
!request.IsAtlagNeeded ||
tantargy == TantargyLogic.MagatartasTantargy ||
tantargy == TantargyLogic.SzorgalomTantargy)
{
if (!result.Add(new OsztalyAtlagListResponse
{
OsztalyCsoportAtlag = osztalyCsoportAtlagByTantargy,
TanuloAtlag = tanuloAtlagByTantargy,
OsztalyCsoportAtlagtolValoElteres = (tanuloAtlagByTantargy ?? 0) - (osztalyCsoportAtlagByTantargy ?? 0),
Tantargy = tantargy,
Uid = tantargy.Uid.UidRaw
}))
{
throw new BlException(BlExceptionType.DuplikaltKulcs);
}
}
}
return result;
}
}
}

View file

@ -0,0 +1,31 @@
using System.Collections.Generic;
using Kreta.Core.FeatureToggle;
using Kreta.Ellenorzo.BL.VN.Ellenorzo;
using Kreta.Ellenorzo.Domain.VN.Common;
using Kreta.Ellenorzo.Domain.VN.Ertekeles.Atlag.TantargyiAtlag;
using Kreta.Ellenorzo.Enums.VN;
namespace Kreta.Ellenorzo.BL.VN.Ertekeles.Atlag.TantargyiAtlag
{
public class TantargyiAtlagFacade : EllenorzoFacade
{
private readonly IFeatureContext _featureContext;
public TantargyiAtlagFacade(MobileUser mobileUser, IFeatureContext featureContext) : base(mobileUser)
{
_featureContext = featureContext;
}
public List<TantargyiAtlagListResponse> ListAktualisTanuloTantargyiAtlag(TantargyiAtlagListRequest request)
=> RunSubquery(() => TantargyiAtlagSubqueries.ListTanuloTantargyiAtlag(DefaultConnectionParameters,
new TantargyiAtlagListRequest
{
OktatasiNevelesiFeladatUid = request.OktatasiNevelesiFeladatUid,
IsAtlagAlakulasaIncluded = request.IsAtlagAlakulasaIncluded,
TanuloId = DefaultConnectionParameters.TanuloId,
ErtekelesekTipus = ErtekelesekTipusEnum.NemBizonyitvanyErtekelesTipus,
TantargyUid = request.TantargyUid,
IsMobileApiCacheEnabled = _featureContext.IsEnabled(Core.Constants.FeatureName.MobileEllenorzoApiCache)
}));
}
}

View file

@ -0,0 +1,139 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Kreta.BusinessLogic.Caching;
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.Helpers;
using Kreta.Ellenorzo.BL.VN.Logic;
using Kreta.Ellenorzo.BL.VN.Tantargy;
using Kreta.Ellenorzo.Dao.VN.Ertekeles.Atlag;
using Kreta.Ellenorzo.Domain.VN;
using Kreta.Ellenorzo.Domain.VN.Common;
using Kreta.Ellenorzo.Domain.VN.Ertekeles;
using Kreta.Ellenorzo.Domain.VN.Ertekeles.Atlag.TantargyiAtlag;
using Kreta.Ellenorzo.Domain.VN.Felhasznalo.Tanulo;
using Kreta.Ellenorzo.Domain.VN.Indexers;
using Kreta.Ellenorzo.Domain.VN.Tantargy;
using Kreta.Ellenorzo.Domain.VN.UniqueIdentifier;
namespace Kreta.Ellenorzo.BL.VN.Ertekeles.Atlag.TantargyiAtlag
{
internal static class TantargyiAtlagSubqueries
{
internal static List<TantargyiAtlagListResponse> ListTanuloTantargyiAtlag(DefaultConnectionParameters dcp, TantargyiAtlagListRequest request)
{
var response = new List<TantargyiAtlagListResponse>();
var tantargyiAtlagCache = KretaServer.KretaServer.Instance.CacheManager.AquireCacheMobile<TantargyiAtlagCache>();
var cacheEnabledAndNotNull = request.IsMobileApiCacheEnabled && tantargyiAtlagCache != null;
var kesleltetesBeallitva = new TanuloErtekelesHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetKesleltetettMegjelenitesOraszam() > 0;
var tanuloAktualisanTanultTargyai = TantargySubqueries.ListTanuloAktualisanTanultTantargy(dcp, new TanuloAktualisanTanultTantargyListRequest
{
TanuloId = request.TanuloId,
OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatUid?.Id,
TantargyUids = request.TantargyUid != null ? new List<TantargyUid> { request.TantargyUid } : null
});
if (cacheEnabledAndNotNull && !kesleltetesBeallitva)
{
foreach (var tantargy in tanuloAktualisanTanultTargyai)
{
var tantargyiAtlagFromCache = tantargyiAtlagCache.GetTantargyiAtlag(request.TanuloId, dcp.IntezmenyAzonosito, tantargy.Uid.UidRaw, request.OktatasiNevelesiFeladatUid?.Id);
if (tantargyiAtlagFromCache != null)
{
if (tantargyiAtlagFromCache.Tantargy != tantargy)
{
tantargyiAtlagFromCache.Tantargy = tantargy;
tantargyiAtlagCache.AddOrUpdateTantargyiAtlag(request.TanuloId, dcp.IntezmenyAzonosito, tantargy.Uid.UidRaw, request.OktatasiNevelesiFeladatUid?.Id, tantargyiAtlagFromCache);
}
response.Add(tantargyiAtlagFromCache);
}
}
}
var tantargyakNotInCache = tanuloAktualisanTanultTargyai.Except(response.Select(t => t.Tantargy), new TantargyResponse()).ToHashSet(new TantargyResponse());
if (tantargyakNotInCache.Any())
{
foreach (var tanuloTantargyiAtlaggal in GetTantargyiAtlagByTanuloDictionary(dcp, new TantargyiAtlagRequest
{
TanuloIds = new List<int> { request.TanuloId },
Tantargyak = tantargyakNotInCache,
OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatUid?.Id,
ErtekelesekTipus = request.ErtekelesekTipus
}).Where(x => x.Value.Ertekelesek.Count > 0 || x.Key.Tantargy.TantargyInTtf).ToDictionary(p => p.Key, p => p.Value))
{
_ = tanuloAktualisanTanultTargyai.TryGetValue(new TantargyResponse(tanuloTantargyiAtlaggal.Key.Tantargy.Uid), out var foundTantargy);
if (foundTantargy == null)
{
throw new BlException(BlExceptionType.NemLetezoEntitas);
}
var (sulyozottOsztalyzatOsszege, sulyozottOsztalyzatSzama, sulyozottAtlag) = AtlagLogic.GetAtlagTuple(tanuloTantargyiAtlaggal.Value.Ertekelesek);
var tantargyiAtlag = new TantargyiAtlagListResponse
{
Tanulo = new TanuloSimplifiedResponse { Uid = new TanuloUid(tanuloTantargyiAtlaggal.Key.TanuloId) },
Tantargy = new TantargyResponse(tanuloTantargyiAtlaggal.Key.Tantargy.Uid, foundTantargy.Nev, foundTantargy.Kategoria, foundTantargy.SortIndex),
Atlag = sulyozottAtlag,
SulyozottOsztalyzatOsszege = sulyozottOsztalyzatOsszege,
SulyozottOsztalyzatSzama = sulyozottOsztalyzatSzama,
SortIndex = foundTantargy.SortIndex,
AtlagAlakulasaIdoFuggvenyeben = request.IsAtlagAlakulasaIncluded ? ErtekelesLogic.GetAtlagAlakulasaIdoFuggvenyeben(tanuloTantargyiAtlaggal.Value) : null
};
response.Add(tantargyiAtlag);
if (cacheEnabledAndNotNull)
{
tantargyiAtlagCache.AddOrUpdateTantargyiAtlag(request.TanuloId, dcp.IntezmenyAzonosito, tantargyiAtlag.Tantargy.Uid.UidRaw, request.OktatasiNevelesiFeladatUid?.Id, tantargyiAtlag);
}
}
}
return response;
}
internal static Dictionary<(int TanuloId, int TantargyId), decimal?> GetTantargyiAtlagByTanulo(DefaultConnectionParameters dcp, TantargyiAtlagRequest request)
{
return new TanuloErtekelesHelper(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId))
.GetTantargyiAtlagListDataSet(request.Tantargyak.Select(t => t.Uid.Id).ToList(), request.TanuloIds, request.OktatasiNevelesiFeladatId)
.ToDaoList<TantargyiAtlagResponseDao>()
.ToDictionary(tantargyiAtlag => (tantargyiAtlag.TanuloId, tantargyiAtlag.TantargyId), tantargyiAtlag => tantargyiAtlag.SulyozottAtlag);
}
internal static Dictionary<(int TanuloId, TantargyResponse Tantargy), TantargyiAtlagResponse> GetTantargyiAtlagByTanuloDictionary(DefaultConnectionParameters dcp, TantargyiAtlagRequest request)
{
var ertekelesek = ErtekelesSubqueries.ListErtekeles(dcp, new ErtekelesListRequest
{
TanuloIds = request.TanuloIds,
TantargyUids = new UidsCollection<TantargyUid>(string.Join(Constant.UidDelimiter.ToString(), request.Tantargyak.Select(t => t.Uid.UidRaw)), s_uidConverter),
OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatId,
ErtekelesekTipus = request.ErtekelesekTipus
});
var tanulokEsTantargyakSzorzat =
(from tanulo in request.TanuloIds
from tantargy in request.Tantargyak
select (tanuloAndTargy: (tanulo, tantargy), tantargyiAtlag: new TantargyiAtlagResponse())).ToDictionary(x => x.tanuloAndTargy, x => x.tantargyiAtlag
, new LambdaComparer<(int TanuloId, TantargyResponse Tantargy)>((x, y) => x.TanuloId == y.TanuloId && x.Tantargy.Uid.Equals(y.Tantargy.Uid)));
foreach (var ertekeles in ertekelesek)
{
tanulokEsTantargyakSzorzat[(ertekeles.Tanulo.Uid.Id, ertekeles.Tantargy)].Add(ertekeles);
}
return tanulokEsTantargyakSzorzat;
}
private static readonly Converter<string[], TantargyUid> s_uidConverter = uidRaw => new TantargyUid(uidRaw[0]);
}
}