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.TanitasiOra.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 TanitasiOraSubqueries { /// /// 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 tanitasiOraKey in request.Key) { var tanitasiOraEntity = h.TanitasiOra().Get(tanitasiOraKey.TanitasiOraId); if (tanitasiOraEntity.TanarId != teacherId && !tanarHelyettesitesLogic.IsHelyettesito(tanitasiOraEntity.OsztalyCsoportId, tanitasiOraEntity.TantargyId)) { throw new ValidationException(ValidationErrorType.Undefined, NaploApiResource.NincsJogosultsagaCsakASajatVagyHelyettesitesiOraKerdezhetoLe); } var osztalyTanuloi = OraSubqueries.GetOsztalyTanuloi(teacherId, new OsztalyTanuloiRequestCo() { OsztalyCsoportId = tanitasiOraEntity.OsztalyCsoportId, OraShortDatuma = tanitasiOraEntity.Datum }, intezmenyAzonosito, intezmenyId, tanevId); var igazolasLista = h.IgazolasDal().GetIgazolasokListajaGrid( new IgazolasokListajaSearchPCO { OsztalyCsoportSearch = tanitasiOraEntity.OsztalyCsoportId, IgazolasDatuma = tanitasiOraEntity.OraKezdete }, oktatasNevelesKategoriaEnum).Tables[0]; response.Add(new JavasoltJelenletGetResponseCo { TanitasiOraId = tanitasiOraKey.TanitasiOraId, TanuloLista = GetTanuloListaWithSzuroLista(osztalyTanuloi.TanuloLista, igazolasLista, tanitasiOraEntity.TantargyId, tanitasiOraEntity.OraKezdete, tanitasiOraEntity.OraVege, tanitasiOraKey.TanitasiOraId, tanitasiOraEntity.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 tanitasiOraId, int osztalyCsoportId) { var javasoltJelenletTanuloLista = new List(); if (!tanuloLista.Any()) { return javasoltJelenletTanuloLista; } var parhuzamosOranNaplozottTanuloIdList = TanitasiOraLogic.ListParhuzamosOranNaplozottMulasztasTanuloId(oraKezdetDatuma, oraVegDatuma, tanitasiOraId, 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; } } } }