266 lines
15 KiB
C#
266 lines
15 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using Kreta.BusinessLogic.Classes;
|
|
using Kreta.BusinessLogic.HelperClasses;
|
|
using Kreta.BusinessLogic.Helpers;
|
|
using Kreta.BusinessLogic.Helpers.SystemSettings;
|
|
using Kreta.Core.ConnectionType;
|
|
using Kreta.Core.Enum;
|
|
using Kreta.Core.Exceptions;
|
|
using Kreta.DataAccess.Interfaces;
|
|
using Kreta.DataAccessManual.Util;
|
|
using Kreta.Ellenorzo.BL.VN.Logic;
|
|
using Kreta.Ellenorzo.BL.VN.Ora;
|
|
using Kreta.Ellenorzo.Domain.VN.Adatszotar;
|
|
using Kreta.Ellenorzo.Domain.VN.Common;
|
|
using Kreta.Ellenorzo.Domain.VN.Csatolmany;
|
|
using Kreta.Ellenorzo.Domain.VN.Felhasznalo.Alkalmazott.Tanar;
|
|
using Kreta.Ellenorzo.Domain.VN.Orarend;
|
|
using Kreta.Ellenorzo.Domain.VN.OsztalyCsoport;
|
|
using Kreta.Ellenorzo.Domain.VN.Tantargy;
|
|
using Kreta.Ellenorzo.Domain.VN.Terem;
|
|
using Kreta.Ellenorzo.Domain.VN.UniqueIdentifier;
|
|
using Kreta.Enums;
|
|
using Kreta.Enums.ManualEnums;
|
|
using Kreta.Web.Logging.Abstractions;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace Kreta.Ellenorzo.BL.VN.Orarend
|
|
{
|
|
internal static class OrarendSubqueries
|
|
{
|
|
internal static HashSet<OrarendElemListResponse> ListOrarend(DefaultConnectionParameters dcp, ITraceLogger logger, OrarendElemListRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
return ListOrarendElemek(dcp, logger, request.DatumTol, request.DatumIg);
|
|
}
|
|
|
|
internal static OrarendElemListResponse GetOrarendElem(DefaultConnectionParameters dcp, ITraceLogger logger, OrarendElemGetRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
return ListOrarendElemek(dcp, logger, request.OrarendElemUid.Datum, request.OrarendElemUid.Datum, request.OrarendElemUid.Id, request.OrarendElemUid.Tipus).FirstOrDefault() ??
|
|
throw new BlException(BlExceptionType.NemLetezoEntitas);
|
|
}
|
|
|
|
private static HashSet<OrarendElemListResponse> ListOrarendElemek(DefaultConnectionParameters dcp, ITraceLogger logger, DateTime datumTol, DateTime datumIg, int? orarendElemId = null, CalendarOraTypeEnum? orarendElemTipus = null)
|
|
{
|
|
var response = new HashSet<OrarendElemListResponse>(new OrarendElemListResponse());
|
|
|
|
var orarend = dcp.DalHandler.OrarendiOra().GetOrarendForMobile(
|
|
dcp.IntezmenyId,
|
|
dcp.TanevId,
|
|
datumTol,
|
|
datumIg.AddDays(1), /// HACK @DevKornél: DatumIg+1 nap, hogy a filter zárt intervallumot határozzon meg
|
|
null,
|
|
null,
|
|
dcp.TanuloId,
|
|
false,
|
|
OrarendTipusEnum.Minden,
|
|
null,
|
|
null,
|
|
false,
|
|
null);
|
|
|
|
/// KRETA2-3484 miatt
|
|
//var torolhetoSorok = orarend.Tables[0].AsEnumerable().Where(r => r.Field<bool>("Ures_BOOL")).ToList();
|
|
|
|
//foreach (var torolhetoSor in torolhetoSorok)
|
|
//{
|
|
// orarend.Tables[0].Rows.Remove(torolhetoSor);
|
|
//}
|
|
var connection = new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler);
|
|
var feladatok = new DktFeladatHelper(connection).GetFeladatokByDateRange(datumTol, datumIg, true);
|
|
|
|
IEnumerable<OrarendCO.ExtendedEvent> tanuloOraLista = new OrarendHelper(connection).GetTanuloOrarendDataForMobile(
|
|
orarend,
|
|
datumTol,
|
|
datumIg,
|
|
dcp.TanuloId,
|
|
haziFeladatok: feladatok.Where(f => f.FeladatTipusId == (int)FeladatTipusEnum.HaziFeladat));
|
|
|
|
if (orarendElemId.HasValue && orarendElemTipus.HasValue)
|
|
{
|
|
tanuloOraLista = tanuloOraLista.Where(x => x.id == orarendElemId && x.oraType == orarendElemTipus && x.datum == datumTol);
|
|
}
|
|
|
|
var tanuloOraListaTanevRendjeEsemenyekNelkul = tanuloOraLista.Where(x => !x.allDay); ///tanévrendje események skip
|
|
var isTanoraTemaAzEllenorzobenLathato = new SystemSettingsHelper(connection).GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Tanora_Tema_Az_Ellenorzoben);
|
|
|
|
FillUpTanuloOrai();
|
|
FillUpTanevRendjeEsemenyek();
|
|
|
|
var feladatokTipusSzerint = GetFeladatokTipusSzerint(feladatok);
|
|
|
|
foreach (var tanuloOraja in response.Where(o => !o.IsTanevRendjeEsemeny))
|
|
{
|
|
if (feladatokTipusSzerint[FeladatTipusEnum.HaziFeladat].Any() && tanuloOraja.HasHaziFeladat)
|
|
{
|
|
var haziFeladat = feladatokTipusSzerint[FeladatTipusEnum.HaziFeladat].Where(x =>
|
|
x.TantargyId == tanuloOraja.Tantargy.Uid.Id &&
|
|
x.OsztalyCsoportId == tanuloOraja.OsztalyCsoport.Uid.Id &&
|
|
x.Datum == tanuloOraja.Uid.Datum &&
|
|
((x.Oraszam.HasValue && tanuloOraja.Oraszam.HasValue && x.Oraszam.Value == tanuloOraja.Oraszam.Value) || (x.Idopont.HasValue && x.Idopont.Value.TimeOfDay == tanuloOraja.KezdetIdopont.TimeOfDay)))
|
|
.Select(y => y.ID).FirstOrDefault();
|
|
tanuloOraja.HaziFeladatUid = new HaziFeladatUid(haziFeladat);
|
|
}
|
|
if (feladatokTipusSzerint[FeladatTipusEnum.OraiFeladat].Any())
|
|
{
|
|
var oraiFeladatGuid = feladatokTipusSzerint[FeladatTipusEnum.OraiFeladat].Where(x =>
|
|
x.TantargyId == tanuloOraja.Tantargy.Uid.Id &&
|
|
x.OsztalyCsoportId == tanuloOraja.OsztalyCsoport.Uid.Id &&
|
|
x.Datum == tanuloOraja.Uid.Datum &&
|
|
((x.Oraszam.HasValue && tanuloOraja.Oraszam.HasValue && x.Oraszam.Value == tanuloOraja.Oraszam.Value) || (x.Idopont.HasValue && x.Idopont.Value.TimeOfDay == tanuloOraja.KezdetIdopont.TimeOfDay)))
|
|
.Select(y => y.GroupId).FirstOrDefault();
|
|
if (oraiFeladatGuid.HasValue)
|
|
{
|
|
tanuloOraja.FeladatGroupUid = new OraiFeladatGroupUid(SDAConvert.ToGuid(oraiFeladatGuid));
|
|
}
|
|
}
|
|
if (feladatokTipusSzerint[FeladatTipusEnum.NyelviFeladat].Any())
|
|
{
|
|
var nyelviFeladatGuid = feladatokTipusSzerint[FeladatTipusEnum.NyelviFeladat].Where(x =>
|
|
x.TantargyId == tanuloOraja.Tantargy.Uid.Id &&
|
|
x.OsztalyCsoportId == tanuloOraja.OsztalyCsoport.Uid.Id &&
|
|
x.Datum == tanuloOraja.Uid.Datum &&
|
|
((x.Oraszam.HasValue && tanuloOraja.Oraszam.HasValue && x.Oraszam.Value == tanuloOraja.Oraszam.Value) || (x.Idopont.HasValue && x.Idopont.Value.TimeOfDay == tanuloOraja.KezdetIdopont.TimeOfDay)))
|
|
.Select(y => y.GroupId).FirstOrDefault();
|
|
if (nyelviFeladatGuid.HasValue)
|
|
{
|
|
tanuloOraja.NyelviFeladatGroupUid = new NyelviFeladatGroupUid(SDAConvert.ToGuid(nyelviFeladatGuid));
|
|
}
|
|
}
|
|
}
|
|
|
|
return response;
|
|
|
|
void FillUpTanuloOrai()
|
|
{
|
|
var helper = new TanoraHelper(connection);
|
|
var oraFiles = CsatolmanySubqueries.ListCsatolmanyok(dcp, new CsatolmanyListRequest
|
|
{
|
|
DatumTol = datumTol,
|
|
DatumIg = datumIg,
|
|
OrarendElemUids = tanuloOraListaTanevRendjeEsemenyekNelkul.Select(o => new OrarendElemUid(o.id, o.oraType, o.datum.Value)
|
|
{
|
|
OrarendiOraId = o.OrarendiOraId ?? 0,
|
|
OrarendiOraGroupId = o.OrarendiOraGroupId ?? 0
|
|
})
|
|
});
|
|
|
|
var helyettesitesLathatosagaAzEllenorzoben = new SystemSettingsHelper(connection).GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.helyettesites_lathatosaga_az_ellenorzoben);
|
|
|
|
var orakAdatai = orarend.Tables[0].Rows.Cast<DataRow>().Select(row => new
|
|
{
|
|
TantargyId = SDAConvert.ToInt32(row["TantargyId"], -1),
|
|
OsztalyCsoportId = SDAConvert.ToInt32(row["OsztCsopId"]),
|
|
TanarId = SDAConvert.ToInt32(row["TanarID"]),
|
|
OraKezdete = Convert.ToDateTime(row["OraKezdete"])
|
|
});
|
|
var elozoOrakAdatai = new OrarendiOraHelper(connection).GetElozoOrakAdatai(JsonConvert.SerializeObject(orakAdatai));
|
|
|
|
foreach (var tanuloOraja in tanuloOraListaTanevRendjeEsemenyekNelkul)
|
|
{
|
|
var responseItem = new OrarendElemListResponse
|
|
{
|
|
Uid = new OrarendElemUid(tanuloOraja.id, tanuloOraja.oraType, tanuloOraja.datum.Value),
|
|
OrarendiOraUid = new OrarendElemUid(tanuloOraja.OrarendiOraId ?? tanuloOraja.OrarendiOraGroupId ?? 0, CalendarOraTypeEnum.OrarendiOra, tanuloOraja.datum.Value),
|
|
Oraszam = tanuloOraja.hanyadikora,
|
|
KezdetIdopont = tanuloOraja.start.Value,
|
|
VegIdopont = tanuloOraja.end.Value,
|
|
Tema = isTanoraTemaAzEllenorzobenLathato && !string.IsNullOrWhiteSpace(tanuloOraja.Tema) ? tanuloOraja.Tema : null,
|
|
TanuloJelenlet = tanuloOraja.TanuloJelenlet != 0 ? (int?)tanuloOraja.TanuloJelenlet : null,
|
|
Allapot = (int)tanuloOraja.OraAllapota,
|
|
IsTanevRendjeEsemeny = tanuloOraja.allDay
|
|
};
|
|
|
|
responseItem.BejelentettSzamonkeresUid = tanuloOraja.hasBejelentettSzamonkeres ? new BejelentettSzamonkeresUid(tanuloOraja.BejelentettSzamonkeresIdList[0]) : null;
|
|
responseItem.Tantargy = new TantargyResponse(
|
|
tanuloOraja.TantargyId,
|
|
tanuloOraja.TantargyTeljesNev, /// Ha ki van töltve a tantárgy rövid neve, akkor az kerül bele, egyébként a teljes neve
|
|
new Adatszotar<TargyKategoriaTipusEnum>(tanuloOraja.TantargyKategoriaId, tanuloOraja.TantargyKategoria));
|
|
responseItem.OsztalyCsoport = new OsztalyCsoportResponse { Uid = new OsztalyCsoportUid(tanuloOraja.TanevRendOsztalyCsoportId), Nev = tanuloOraja.OsztalyCsoport };
|
|
responseItem.Terem = new TeremSimplifiedResponse { Nev = tanuloOraja.Terem };
|
|
responseItem.OratTartoTanar = new TanarSimplifiedResponse { Nev = tanuloOraja.TanarNev };
|
|
responseItem.HelyettesTanar = new TanarSimplifiedResponse { Nev = string.IsNullOrWhiteSpace(tanuloOraja.HelyettesNev) || !helyettesitesLathatosagaAzEllenorzoben ? null : tanuloOraja.HelyettesNev };
|
|
responseItem.HasHaziFeladat = tanuloOraja.hasHaziFeladat;
|
|
responseItem.Csatolmanyok = oraFiles[responseItem.Uid];
|
|
responseItem.IsDigitalisOra = tanuloOraja.IsDigitalisOra;
|
|
responseItem.DigitalisEszkozTipus = tanuloOraja.DigitalisEszkozTipus;
|
|
responseItem.DigitalisPlatformTipus = tanuloOraja.DigitalisPlatformTipus;
|
|
responseItem.DigitalisTamogatoEszkozTipusList = tanuloOraja.DigitalisTamogatoEszkozTipusList;
|
|
responseItem.Letrehozas = tanuloOraja.Letrehozas;
|
|
responseItem.UtolsoModositas = tanuloOraja.UtolsoModositas;
|
|
|
|
if (tanuloOraja.isElmaradt)
|
|
{
|
|
responseItem.OraEvesSorszama = null;
|
|
}
|
|
else
|
|
{
|
|
responseItem.OraEvesSorszama = tanuloOraja.EvesOraSorszam;
|
|
if (tanuloOraja.OraAllapota == TanoraAllapotaEnum.Nem_naplozott)
|
|
{
|
|
responseItem.OraEvesSorszama = (int.TryParse(elozoOrakAdatai.FirstOrDefault(o => o.TantargyId == tanuloOraja.TantargyId && o.OsztalyCsoportId == tanuloOraja.TanevRendOsztalyCsoportId && o.TanarId == tanuloOraja.TanarId && o.OraKezdete == tanuloOraja.start.Value)?.ElozoOraEvesSorszama, out var oraszam) ? oraszam : default) + 1;
|
|
}
|
|
}
|
|
|
|
if (!response.Add(responseItem))
|
|
{
|
|
logger.Warn($"OrarendElemResponse: OrarendElem duplikált. {JsonConvert.SerializeObject(responseItem)}");
|
|
}
|
|
}
|
|
}
|
|
|
|
void FillUpTanevRendjeEsemenyek()
|
|
{
|
|
foreach (var tanuloOraja in tanuloOraLista.Where(x => x.allDay))
|
|
{
|
|
var responseItem = new OrarendElemListResponse
|
|
{
|
|
Uid = new OrarendElemUid(tanuloOraja.id, tanuloOraja.oraType, new DateTime(tanuloOraja.start.Value.Year, tanuloOraja.start.Value.Month, tanuloOraja.start.Value.Day)),
|
|
KezdetIdopont = tanuloOraja.start.Value,
|
|
VegIdopont = tanuloOraja.end.Value,
|
|
TanuloJelenlet = tanuloOraja.TanuloJelenlet != 0 ? (int?)tanuloOraja.TanuloJelenlet : null,
|
|
Allapot = (int)TanoraAllapotaEnum.TanevRendjeEsemeny,
|
|
IsTanevRendjeEsemeny = tanuloOraja.allDay,
|
|
TanevRendjeEsemenyNeve = tanuloOraja.title,
|
|
Csatolmanyok = new List<CsatolmanySimplifiedResponse>()
|
|
};
|
|
|
|
if (!response.Add(responseItem))
|
|
{
|
|
throw new BlException(BlExceptionType.DuplikaltKulcs);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Dictionary<FeladatTipusEnum, List<IDKT_Feladat>> GetFeladatokTipusSzerint(List<IDKT_Feladat> feladatok)
|
|
{
|
|
var feladatokTipusSzerint = new Dictionary<FeladatTipusEnum, List<IDKT_Feladat>> {
|
|
{ FeladatTipusEnum.HaziFeladat, new List<IDKT_Feladat>() },
|
|
{ FeladatTipusEnum.OraiFeladat, new List<IDKT_Feladat>() },
|
|
{ FeladatTipusEnum.NyelviFeladat, new List<IDKT_Feladat>() }
|
|
};
|
|
foreach (var feladat in feladatok)
|
|
{
|
|
if (feladat.FeladatTipusId == (int)FeladatTipusEnum.HaziFeladat)
|
|
{
|
|
feladatokTipusSzerint[FeladatTipusEnum.HaziFeladat].Add(feladat);
|
|
}
|
|
else if (feladat.FeladatTipusId == (int)FeladatTipusEnum.OraiFeladat)
|
|
{
|
|
feladatokTipusSzerint[FeladatTipusEnum.OraiFeladat].Add(feladat);
|
|
}
|
|
else if (feladat.FeladatTipusId == (int)FeladatTipusEnum.NyelviFeladat)
|
|
{
|
|
feladatokTipusSzerint[FeladatTipusEnum.NyelviFeladat].Add(feladat);
|
|
}
|
|
}
|
|
return feladatokTipusSzerint;
|
|
}
|
|
}
|
|
}
|