using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Felmentes; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Ora.Common; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Ora.OrarendiOra.JavasoltJelenlet; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Tanulo; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Enum; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Logic; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.SubqueriesRepo.Get; using Kreta.Core.ConnectionType; using Kreta.Core.Validation.Exceptions; using Kreta.Core.Validation.Exceptions.Enum; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.Resources; namespace Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.SubqueriesRepo { public static class OrarendiOraSubqueries { /// /// Returns the filters to be executory from the template. The order of filters does not matter. /// public static List ListJavasoltJelenlet(int teacherId, int intezmenyId, string intezmenyAzonosito, int tanevId, IDalHandler h, JavasoltJelenletGetRequestCo request, Enums.OktNevelesiKategoriaEnum? oktatasNevelesKategoriaEnum) { var response = new List(); var tanarHelyettesitesLogic = new HelyettesitesLogic.Tanar(teacherId, tanevId, intezmenyId, intezmenyAzonosito, oktatasNevelesKategoriaEnum); foreach (var orarendiOraKey in request.Key) { var orarendiOraEntity = h.OrarendiOra().Get(orarendiOraKey.OrarendiOraId); if (!orarendiOraKey.IsHelyettesitesKeresoAltalTalaltOra && orarendiOraEntity.TanarId != teacherId && !tanarHelyettesitesLogic.IsHelyettesito(orarendiOraEntity.OsztalyCsoportId, orarendiOraEntity.TantargyId)) { throw new ValidationException(ValidationErrorType.Undefined, NaploApiResource.NincsJogosultsagaCsakASajatVagyHelyettesitesiOraKerdezhetoLe); } var osztalyTanuloi = OraSubqueries.GetOsztalyTanuloi(teacherId, new OsztalyTanuloiRequestCo() { OsztalyCsoportId = orarendiOraEntity.OsztalyCsoportId, OraShortDatuma = orarendiOraKey.OraKezdetDatuma }, intezmenyAzonosito, intezmenyId, tanevId); var igazolasLista = h.IgazolasDal().GetIgazolasokListajaGrid( new IgazolasokListajaSearchPCO { OsztalyCsoportSearch = orarendiOraEntity.OsztalyCsoportId, IgazolasDatuma = orarendiOraKey.OraKezdetDatuma }, oktatasNevelesKategoriaEnum).Tables[0]; response.Add(new JavasoltJelenletGetResponseCo { OrarendiOraId = orarendiOraKey.OrarendiOraId, OraKezdetDatuma = orarendiOraKey.OraKezdetDatuma, TanuloLista = GetTanuloListaWithSzuroLista(osztalyTanuloi.TanuloLista, igazolasLista, orarendiOraEntity.TantargyId, orarendiOraKey.OraKezdetDatuma, orarendiOraKey.OraVegDatuma, orarendiOraEntity.OsztalyCsoportId) }); } return response; bool HasTanuloIgazolas(int tanuloId, DataTable igazolasLista) => igazolasLista.AsEnumerable().Any(x => x.Field("TanuloId") == tanuloId); List GetTanuloListaWithSzuroLista(List tanuloLista, DataTable igazolasLista, int tantargyId, DateTime oraKezdetDatuma, DateTime oraVegDatuma, int osztalyCsoportId) { var javasoltJelenletTanuloLista = new List(); if (!tanuloLista.Any()) { return javasoltJelenletTanuloLista; } var parhuzamosOranNaplozottTanuloIdList = OrarendiOraLogic.ListParhuzamosOranNaplozottMulasztasTanuloId(oraKezdetDatuma, oraVegDatuma, new MobileConnectionType(teacherId, intezmenyId, intezmenyAzonosito, tanevId), h); var elozoOranHianyzottTanuloIdList = OraLogic.ListElozoOranHianyzottTanuloId(oraKezdetDatuma, osztalyCsoportId, teacherId, intezmenyId, intezmenyAzonosito, tanevId); var isMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled = SystemSettingsLogic.IsMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled(intezmenyAzonosito, tanevId, teacherId, intezmenyId); var isMagantanuloOralatogatasAloliMentessegEnabled = SystemSettingsLogic.IsMagantanuloOralatogatasAloliMentessegEnabled(tantargyId, intezmenyAzonosito, tanevId, teacherId, intezmenyId); var felmentesek = FelmentesSubqueries.ListFelmentes(new FelmentesGetRequestCo { TanuloIds = tanuloLista.Select(t => t.Id), FelhasznaloId = teacherId, IntezmenyId = intezmenyId, IntezmenyAzonosito = intezmenyAzonosito, TanevId = tanevId, TantargyId = tantargyId }); foreach (var tanulo in tanuloLista) { var javasoltJelenletTemplateTipusSzuroLista = new List { new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.Default) }; if (HasTanuloIgazolas(tanulo.Id, igazolasLista)) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.Igazolas)); } if (elozoOranHianyzottTanuloIdList?.Contains(tanulo.Id) ?? false) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.ElozoOranHianyzott)); } if (isMulasztasokParhuzamosOraKezelesUtkozesVizsgalatEnabled && parhuzamosOranNaplozottTanuloIdList.Contains(tanulo.Id)) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.ParhuzamosOranNaplozott)); } if (felmentesek.ContainsKey(tanulo.Id) && TanuloLogic.CalculateIsNowFelmentett(felmentesek[tanulo.Id], oraKezdetDatuma, intezmenyId, intezmenyAzonosito, tanevId, FelmentesType.OralatogatasAlol)) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.Felmentes)); } if (tanulo.TanugyiAdatok.IsSzakmaiGyakorlatonLevo) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.SzakmaiGyakorlat)); } if (tanulo.TanugyiAdatok.IsJogviszonySzunetelteto) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.JogviszonySzuneteltetes)); } if (TanuloLogic.CalculateIsNowMagantanulo(tanulo.IsMaganTanulo, tanulo.MaganTanulosagKezdetDatuma, tanulo.MaganTanulosagVegeDatuma, oraKezdetDatuma) && isMagantanuloOralatogatasAloliMentessegEnabled) { javasoltJelenletTemplateTipusSzuroLista.Add(new JavasoltJelenletSzuroGetResponseCo(JavasoltJelenletTemplateType.MagantanuloOralatogatasAloliMentesseg)); } javasoltJelenletTanuloLista.Add(new JavasoltJelenletTanuloGetResponseCo { TanuloId = tanulo.Id, JavasoltJelenletTemplateTipusSzuroLista = javasoltJelenletTemplateTipusSzuroLista }); } return javasoltJelenletTanuloLista; } } } }