using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V3.Co.Ertekeles; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Logic; using Kreta.BusinessLogic.Logic.TanuloErtekeles; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.Core.Enum; using Kreta.Core.Exceptions; using Kreta.Core.Logic; using Kreta.Core.Validation.Exceptions; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework.Entities; using Kreta.Framework.Util; using Kreta.Naplo.BusinessLogic.V3.Logic; using Kreta.Naplo.Dao.V3.Orarend; using Kreta.Naplo.Dao.V3.OsztalyCsoport; using Kreta.Naplo.Dao.V3.Tanulo; using Kreta.Naplo.Domain.V3.Common; using Kreta.Naplo.Domain.V3.Enum; using Kreta.Naplo.Domain.V3.Ertekeles; using Kreta.Naplo.Domain.V3.OsztalyCsoport; using Kreta.Resources; namespace Kreta.Naplo.BusinessLogic.V3.OsztalyCsoport { public static class OsztalyCsoportSubqueries { internal static void CreateOsztalyCsoportErtekeles(DefaultConnectionParameters dcp, List request) { if (request.Any(r => !r.TanuloLista.Any())) { throw new BlException(TanuloErtekelesResource.NincsKitoltveEgyetlenErtekelesSem, BlExceptionType.ModelValidacio); } if (IsRequestContainsDuplicatedItem(request)) { throw new BlException(TanuloErtekelesResource.ErtekelesDuplikalt, BlExceptionType.DuplikaltKulcs); } foreach ((var datum, var osztalyCsoportId) in request.Select(x => (x.Datum, x.OsztalyCsoportId)).Distinct()) { if (!new NaplozarasLogic(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId)) .IsErtekelhetZarastolFuggetlenul(datum, osztalyCsoportId)) { throw new BlException(TanuloErtekelesResource.ErtekelesNemAdhatoNaplozarasMiatt, BlExceptionType.NaploZaras); } } foreach (var osztalyCsoportErtekeles in request) { var tanuloListaCo = osztalyCsoportErtekeles.TanuloLista.Select(x => new TanuloForOsztalyCsoportErtekelesRequestCo { Ertekeles = new ErtekelesRequestCo { OsztalyzatTipus = x.Ertekeles.OsztalyzatTipus.Uid.Id, Szazalek = x.Ertekeles.Szazalek, Szoveg = x.Ertekeles.Szoveg }, TanuloId = x.TanuloId }).ToList(); var co = new OsztalyCsoportErtekelesRequestCo { Datum = osztalyCsoportErtekeles.Datum.Date, Mod = osztalyCsoportErtekeles.Mod.Uid.Id, Tema = osztalyCsoportErtekeles.Tema, OsztalyCsoportId = osztalyCsoportErtekeles.OsztalyCsoportId, TantargyId = osztalyCsoportErtekeles.TantargyId, TanuloLista = tanuloListaCo }; try { new TanuloErtekelesHelper(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId)) .SaveTanuloErtekelesListMobil(dcp.FelhasznaloId, co); } catch (BlException exception) { throw new BlException(exception.Message, BlExceptionType.ModelValidacio); } catch (EntityNotFoundException) { throw new BlException(ErrorResource.AzElemNemTalalhatoVagyToroltek, BlExceptionType.ModelValidacio); } } } internal static IEnumerable GetOsztalyCsoportTanuloi(DefaultConnectionParameters dcp, OsztalyCsoportTanuloRequest request) { return dcp.DalHandler.TanuloCsoport().OsztalyTanuloi(dcp.TanevId, new List() { request.OsztalyCsoportId }, datum: request.Datum ?? DateTime.Now) .ToDaoList() .Select(x => new OsztalyCsoportTanuloResponse { TanuloId = x.Id, TanuloNev = x.Nev, TanuloSzuletesiDatum = x.SzuletesiDatum, TanuloAnyjaNeve = x.AnyjaNeve }); } private static bool IsRequestContainsDuplicatedItem(List request) { var requestUniqueItems = new HashSet<(DateTime datum, int tantargyId, string tema, int tanuloErtekelesHashCode)>(); foreach (var item in request) { var tanuloErtekelesHashCode = item.TanuloLista.Select(x => $"{x.TanuloId} + {x.Ertekeles.OsztalyzatTipus} + {x.Ertekeles.Szazalek} + {x.Ertekeles.Szoveg}") .Aggregate((a, b) => a + b).GetHashCode(); if (!requestUniqueItems.Add((item.Datum, item.TantargyId, item.Tema, tanuloErtekelesHashCode))) { return true; } } return false; } internal static HashSet GetOsztalyCsoportErtekelesek(DefaultConnectionParameters dcp, OsztalyCsoportErtekelesekRequest request) { if (!new NaplozarasLogic(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId)) .IsErtekelhetZarastolFuggetlenul(request.Datum, request.OsztalyCsoportId)) { throw new BlException(TanuloErtekelesResource.ErtekelesNemAdhatoNaplozarasMiatt, BlExceptionType.NaploZaras); } var response = new HashSet(); var osztalyCsoportTanuloi = GetOsztalyCsoportTanuloi(dcp, new OsztalyCsoportTanuloRequest { OsztalyCsoportId = request.OsztalyCsoportId }); if (request.TanuloId.HasValue) { osztalyCsoportTanuloi = osztalyCsoportTanuloi.Where(t => t.TanuloId == request.TanuloId.Value); } var ertekelesekDaoList = dcp.DalHandler.TanuloErtekelesDal().GetErtekelesekDataSet(request.TantargyId, request.OsztalyCsoportId, request.TanuloId) .ToDaoList(); var ertekelesek = FilterErtekelesek(dcp.TanevId, ertekelesekDaoList, ErtekelesLekeresTipusEnum.NemBizonyitvanyErtekelesTipus); var mentessegekDaoList = dcp.DalHandler.Tanulo().GetMentessegDataSet(request.TantargyId, request.TanuloId, request.Datum).ToDaoList(); if (ertekelesek.Any()) { var tanuloOrderedGroupedErtekelesek = ertekelesek.GroupBy(e => e.TanuloId); var tanuloIds = ertekelesek.Select(e => e.TanuloId).Distinct().ToList(); var tantargyiAtlagokDaoList = dcp.DalHandler.TanuloErtekelesDal().GetTantargyiAtlagListDataSet(dcp.TanevId, new List { request.TantargyId }, tanuloIds) .ToDaoList(); foreach (var tanuloOrderedGroupedErtekeles in tanuloOrderedGroupedErtekelesek) { var legujabbErtekeles = tanuloOrderedGroupedErtekeles.First(); var tanuloMentesseg = mentessegekDaoList.Where(tm => tm.TanuloId == legujabbErtekeles.TanuloId); response.Add(new OsztalyCsoportErtekelesekResponse { TanuloId = legujabbErtekeles.TanuloId, TanuloErtekelesFelmentes = new TanuloMentessegResponse { TanoraLatogatasaAloliFelmentes = tanuloMentesseg.FirstOrDefault()?.TanoraLatogatasaAloliFelmentes ?? false, ErtekelesAloliFelmentes = tanuloMentesseg.FirstOrDefault()?.ErtekelesAloliFelmentes ?? false, SzovegesenErtekelheto = tanuloMentesseg.FirstOrDefault()?.SzovegesenErtekelheto ?? false, FelmentesOka = tanuloMentesseg.FirstOrDefault()?.FelmentesOka }, TanuloTantargyiAtlag = tantargyiAtlagokDaoList.Where(ta => ta.TanuloId == legujabbErtekeles.TanuloId).Select(ta => ta.SulyozottAtlag).FirstOrDefault(), TanuloErtekelesSzam = tanuloOrderedGroupedErtekeles.Count(), TanuloUtolsoErtekeles = new ErtekelesResponse { OsztalyzatTipus = legujabbErtekeles.ErtekelesOsztalyzatId, Szazalek = legujabbErtekeles.ErtekelesSzazalek, Szoveg = legujabbErtekeles.ErtekelesSzoveg, TipusId = legujabbErtekeles.TipusId }, TanuloUtolsoErtekelesDatum = legujabbErtekeles.ErtekelesDatum }); } } var tanulokErtekelesekNelkul = osztalyCsoportTanuloi.Where(t => !response.Select(g => g.TanuloId).Contains(t.TanuloId)); foreach (var tanuloErtekelesNelkul in tanulokErtekelesekNelkul) { var tanuloMentesseg = mentessegekDaoList.Where(tm => tm.TanuloId == tanuloErtekelesNelkul.TanuloId); _ = response.Add(new OsztalyCsoportErtekelesekResponse { TanuloId = tanuloErtekelesNelkul.TanuloId, TanuloErtekelesFelmentes = new TanuloMentessegResponse { TanoraLatogatasaAloliFelmentes = tanuloMentesseg.FirstOrDefault()?.TanoraLatogatasaAloliFelmentes ?? false, ErtekelesAloliFelmentes = tanuloMentesseg.FirstOrDefault()?.ErtekelesAloliFelmentes ?? false, SzovegesenErtekelheto = tanuloMentesseg.FirstOrDefault()?.SzovegesenErtekelheto ?? false, FelmentesOka = tanuloMentesseg.FirstOrDefault()?.FelmentesOka }, TanuloTantargyiAtlag = null, TanuloErtekelesSzam = 0, TanuloUtolsoErtekeles = null, TanuloUtolsoErtekelesDatum = null }); } return response; } private static List FilterErtekelesek(int tanevId, List ertekelesekDaoList, ErtekelesLekeresTipusEnum ertekelesTipus) { var egyszerAdhatoTanuloErtekelesTipusIdList = EnumExtensions.GetErtekelesTipusDictionaryItems(tanevId, true).Select(x => x.Id).ToList(); switch (ertekelesTipus) { case ErtekelesLekeresTipusEnum.NemBizonyitvanyErtekelesTipus: return ertekelesekDaoList.Where(e => egyszerAdhatoTanuloErtekelesTipusIdList.All(b => b != e.TipusId)).ToList(); case ErtekelesLekeresTipusEnum.BizonyitvanyErtekelesTipus: return ertekelesekDaoList.Where(e => egyszerAdhatoTanuloErtekelesTipusIdList.Any(b => b == e.TipusId)).ToList(); case ErtekelesLekeresTipusEnum.MindenErtekelesTipus: return ertekelesekDaoList; default: return ertekelesekDaoList; } } internal static void TanuloErtekelesMentes(DefaultConnectionParameters dcp, int id, TanuloErtekelesMentesRequest request) { new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid(); var connectionType = new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler); var tanuloErtekelesCo = new TanuloErtekelesHelper(connectionType).GetTanuloErtekelesCoById(id); if (tanuloErtekelesCo != null && tanuloErtekelesCo.ErtekeloId == dcp.FelhasznaloId) { if ((tanuloErtekelesCo.OsztalyCsoportId.HasValue && new NaplozarasLogic(connectionType).GetLezartOsztalyokEsBontottCsoportjaik().Contains(tanuloErtekelesCo.OsztalyCsoportId.Value)) || tanuloErtekelesCo.Datum <= new OrarendHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetNaplozarasDate(null)) { throw new BlException(TanuloErtekelesResource.AKivalasztottOsztalyNaplojaLezartNemModosithatErtekelestAzOsztalyTanuloinaknak, BlExceptionType.NaploZaras); } var tanuloErtekelesCoList = new List(); tanuloErtekelesCo.Datum = request.ErtekelesDatum; tanuloErtekelesCo.ErtekelesModId = request.ErtekelesModId; tanuloErtekelesCo.ErtekelesTema = request.ErtekelesTema; tanuloErtekelesCo.ErtekelesOsztalyzatId = request.ErtekelesOsztalyzatId; tanuloErtekelesCo.ErtekelesSzoveg = tanuloErtekelesCo.ErtekelesSzovegFormazott = request.ErtekelesSzoveg; tanuloErtekelesCo.ErtekelesSzazalek = request.ErtekelesSzazalek; tanuloErtekelesCoList.Add(tanuloErtekelesCo); tanuloErtekelesCoList = new TanuloErtekelesValidacioMobil(connectionType).Validate(dcp.DalHandler, tanuloErtekelesCoList, out List errors); if (errors.Any()) { throw TanuloErtekelesLogicMobil.GetValidationException(errors); } new TanuloErtekelesHelper(connectionType).SaveTanuloErtekelesList(dcp.FelhasznaloId, tanuloErtekelesCoList); } else { throw new BlException(BlExceptionType.NincsJogosultsag); } } internal static void DeleteOsztalyCsoportErtekeles(DefaultConnectionParameters dcp, int id) { var connectionType = new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler); var tanuloErtekelesCo = new TanuloErtekelesHelper(connectionType).GetTanuloErtekelesCoById(id); var naplozarasLogic = new NaplozarasLogic(connectionType); if (tanuloErtekelesCo != null && tanuloErtekelesCo.ErtekeloId == dcp.FelhasznaloId) { if (naplozarasLogic.IsCsakErtekelesZarasaVagyErtekelesEsNaploZarasaBeallitas() && tanuloErtekelesCo.Datum <= new OrarendHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetNaplozarasDate(null)) { throw new BlException(TanuloErtekelesResource.AzErtekelesNemTorolhetoErtekelesZarasMiatt, BlExceptionType.NaploZaras); } if (tanuloErtekelesCo.OsztalyCsoportId.HasValue && naplozarasLogic.GetLezartOsztalyokEsBontottCsoportjaik().Contains(tanuloErtekelesCo.OsztalyCsoportId.Value)) { throw new BlException(TanuloErtekelesResource.AKivalasztottOsztalyNaplojaLezartNemTorolhetErtekelestAzOsztalyTanuloinaknak, BlExceptionType.NaploZaras); } new TanuloErtekelesHelper(connectionType).DeleteTanuloErtekelesById(id); } else { throw new BlException(BlExceptionType.NincsJogosultsag); } } internal static OsztalyCsoportTanuloAdatokResponse GetOsztalyCsoportTanuloAdatok(DefaultConnectionParameters dcp, int id) { var response = new OsztalyCsoportTanuloAdatokResponse(); var tanuloAdatok = dcp.DalHandler.Tanulo().GetOsztalyCsoportTanuloAdatokDataSet(id).ToDaoList(); var tanuloGondviselok = dcp.DalHandler.Tanulo().GetGondviselok(id, dcp.TanevId).ToDaoList(); return tanuloAdatok.Select(t => new OsztalyCsoportTanuloAdatokResponse { TanuloId = t.TanuloId, TanuloNev = t.TanuloNev, TanuloSzuletesiDatum = t.TanuloSzuletesiDatum, TanuloAnyjaNeve = t.TanuloAnyjaNeve, OsztalyCsoportok = tanuloAdatok.Select(o => new OsztalyCsoportResponse { OsztalyCsoportId = o.OsztalyCsoportId, OsztalyCsoportNev = o.OsztalyCsoportNev }).ToList(), Gondviselok = tanuloGondviselok.Select(g => new OsztalyCsoportGondviseloResponse { Id = g.GondviseloId, Nev = g.GondviseloNev, RokonsagiFok = g.GondviseloRokonsagiFok?.GetDisplayName(dcp.TanevId), Telefonszam = g.GondviseloTelefonszam, Email = g.GondviseloEmail, IsTorvenyesKepviselo = g.IsTorvenyesKepviselo }).ToList() }).First(); } internal static IEnumerable GetMondatbank(DefaultConnectionParameters dcp, MondatbankRequest request) { var osztalyCsoport = dcp.DalHandler.OsztalyCsoport().Get(request.OsztalyCsoportId); return dcp.DalHandler.TanuloErtekelesMondatbankDal().GetTanuloErtekelesMondatbankData(dcp.TanevId, (int)ErtekelesTipusEnum.evkozi_jegy_ertekeles, (int)ErtMondatbankTipusEnum.Tantargy, request.TantargyId, osztalyCsoport.EvfolyamTipusa).ToDaoList() .Select(m => new MondatbankResponse { RovidNev = m.RovidNev, Nev = RichTextLogic.RemoveHtmlForMobile(m.Nev) }); } internal static IEnumerable GetOsztalyokCsoportok(DefaultConnectionParameters dcp) { var osztalyCsoportAdatok = dcp.DalHandler.OsztalyCsoport().GetOsztalyCsoportAdatokDataSet().ToDaoList(); var tanitottOsztalyokCsoportok = dcp.DalHandler.Foglalkozas().GetTanarFoglalkozasok(dcp.FelhasznaloId, dcp.TanevId) .Tables[0].Rows.Cast().Select(row => SDAConvert.ToInt32(row["OCSID"])).ToList(); return osztalyCsoportAdatok.Select(ocs => new OsztalyokCsoportokResponse { OsztalyCsoportId = ocs.OsztalyCsoportId, OsztalyCsoportNev = ocs.OsztalyCsoportNev, IsTanitom = tanitottOsztalyokCsoportok.Contains(ocs.OsztalyCsoportId), OsztalyfonokCsoportvezetoUid = ocs.OsztalyfonokCsoportvezetoUid, OsztalyfonokCsoportvezetoNev = ocs.OsztalyfonokCsoportvezetoNev, OsztalyfonokHelyettesUid = ocs.OsztalyfonokHelyettesUid, OsztalyfonokHelyettesNev = ocs.OsztalyfonokHelyettesNev }); } internal static IEnumerable GetTanuloErtekelesei(DefaultConnectionParameters dcp, TanuloErtekelesekRequest request) { var ertekelesek = dcp.DalHandler.TanuloErtekelesDal().GetTanuloErtekeleseiDataSet(request.TanuloId, request.TantargyId, request.OsztalyCsoportId).ToDaoList(); var lezartOsztalyokEsBontottCsoportjaik = new NaplozarasLogic(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetLezartOsztalyokEsBontottCsoportjaik(); var naplozart = lezartOsztalyokEsBontottCsoportjaik.Contains(request.OsztalyCsoportId); var naplozarasDatum = new DateTime(); if (!naplozart) { naplozarasDatum = new OrarendHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)).GetNaplozarasDate(null); } return ertekelesek.Select(ertekeles => new TanuloErtekelesekResponse { ErtekelesId = ertekeles.ErtekelesId, TantargyId = ertekeles.TantargyId, TantargyNev = ertekeles.TantargyNev, Ertekeles = ertekeles.ErtekelesSzazalek.HasValue ? $"{ertekeles.ErtekelesSzazalek}%" : !string.IsNullOrEmpty(ertekeles.ErtekelesSzoveg) ? ertekeles.ErtekelesSzoveg : ertekeles.ErtekelesOsztalyzatNev, ErtekelesOsztalyzatId = ertekeles.ErtekelesOsztalyzatId, ErtekelesOsztalyzatNev = !string.IsNullOrEmpty(ertekeles.ErtekelesOsztalyzatNev) ? ertekeles.ErtekelesOsztalyzatNev : null, ErtekelesSzoveg = ertekeles.ErtekelesSzovegFormazott ?? ertekeles.ErtekelesSzoveg, ErtekelesSzazalek = ertekeles.ErtekelesSzazalek, ErtekelesFajtaId = ertekeles.ErtekelesSzazalek.HasValue ? (int)TanuloErtekelesFajtaEnum.Szazalekos : !string.IsNullOrEmpty(ertekeles.ErtekelesSzoveg) ? (int)TanuloErtekelesFajtaEnum.Szoveges : (int)TanuloErtekelesFajtaEnum.Osztalyzat, ErtekelesFajtaNev = ertekeles.ErtekelesSzazalek.HasValue ? TanuloErtekelesFajtaEnum.Szazalekos.ToDisplayName() : !string.IsNullOrEmpty(ertekeles.ErtekelesSzoveg) ? TanuloErtekelesFajtaEnum.Szoveges.ToDisplayName() : TanuloErtekelesFajtaEnum.Osztalyzat.ToDisplayName(), ErtekelesModId = ertekeles.ErtekelesModId, ErtekelesModNev = ertekeles.ErtekelesModNev, ErtekelesTipusId = ertekeles.ErtekelesTipusId, ErtekelesTipusNev = ertekeles.ErtekelesTipusNev, ErtekelesTema = ertekeles.ErtekelesTema, ErtekelesDatum = ertekeles.ErtekelesDatum, ErtekelesSuly = ertekeles.ErtekelesSuly, ErtekelesRogzitesDatum = ertekeles.ErtekelesRogzitesDatum, TanarUid = ertekeles.TanarUid, OsztalyCsoportId = ertekeles.OsztalyCsoportId, FeladatEllatasiHelyId = ertekeles.FeladatEllatasiHelyId, FeladatEllatasiHelyNev = ertekeles.MukodesiHelyNev + " - " + ertekeles.OktatasiNevelesiFeladatTipusId.GetItemNameFromCache(dcp.TanevId, dcp.IntezmenyAzonosito), Naplozart = naplozart || ertekeles.ErtekelesDatum <= naplozarasDatum }); } internal static IEnumerable GetBejelentettSzamonkeresek(DefaultConnectionParameters dcp, BejelentettSzamonkeresekRequest request) { new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid(); var response = new HashSet(); var szamonkeresek = dcp.DalHandler.SzamonkeresElorejelzes().GetSzamonkeresElorejelzesDetailDataSet( dcp.IntezmenyId, dcp.TanevId, new SzamonkeresElorejelzesSearchPco { OraGroupId = 0, OsztalyCsoportId = request.OsztalyCsoportId, Datum = request.Datum }, true).ToDaoList(); foreach (var szamonkeres in szamonkeresek) { var bejelentettSzamonkeres = new BejelentettSzamonkeresekResponse { Id = szamonkeres.Id, Tema = szamonkeres.Tema, ErtekelesMod = szamonkeres.ErtekelesMod, OraSzam = szamonkeres.OraSzam, TantargyId = szamonkeres.TantargyId, TantargyNev = szamonkeres.TantargyNev, TanarUid = szamonkeres.TanarUid, TanarNev = szamonkeres.TanarNev }; response.Add(bejelentettSzamonkeres); } return response; } } }