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;
}
}
}
}