using System; using System.Collections.Generic; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Logic.TanuloErtekeles; using Kreta.Core.ConnectionType; using Kreta.Core.Enum; using Kreta.Core.Exceptions; using Kreta.Core.Logic; using Kreta.DataAccessManual.Util; using Kreta.Ellenorzo.BL.VN.Logic; using Kreta.Ellenorzo.BL.VN.OsztalyCsoport; using Kreta.Ellenorzo.Dao.VN.Ertekeles; using Kreta.Ellenorzo.Domain.VN.Adatszotar; using Kreta.Ellenorzo.Domain.VN.Common; using Kreta.Ellenorzo.Domain.VN.Ertekeles; using Kreta.Ellenorzo.Domain.VN.Felhasznalo.Alkalmazott.Tanar; using Kreta.Ellenorzo.Domain.VN.Felhasznalo.Tanulo; using Kreta.Ellenorzo.Domain.VN.OsztalyCsoport; using Kreta.Ellenorzo.Domain.VN.Tantargy; using Kreta.Ellenorzo.Domain.VN.UniqueIdentifier; using Kreta.Enums; using Kreta.Enums.ManualEnums; using ErtekelesErtekFajta = Kreta.Ellenorzo.Enums.VN.ErtekelesErtekFajta; namespace Kreta.Ellenorzo.BL.VN.Ertekeles { internal static class ErtekelesSubqueries { ////TODO DevKornél: Refaktorálni! internal static HashSet ListErtekeles(DefaultConnectionParameters dcp, ErtekelesListRequest request) { new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid(); var response = new HashSet(new ErtekelesListResponse()); if (request.TanuloIds?.Count < 1 || request.TantargyUids?.Count() < 1) { return response; } var helper = new TanuloErtekelesHelper(new DalHandlerConnectionType(new MobileConnectionType(dcp.FelhasznaloId, dcp.IntezmenyId, dcp.IntezmenyAzonosito, dcp.TanevId), dcp.DalHandler)); var tanuloErtekelesei = helper.GetTanuloErtekelesListDataSet(new TanuloErtekelesListCo { Id = request.Uid?.Id, TanevId = dcp.TanevId, TanuloIds = request.TanuloIds, DatumTol = request.DatumTol, DatumIg = request.DatumIg, OktatasiNevelesiFeladatId = request.OktatasiNevelesiFeladatId, TantargyUids = request.TantargyUids?.Select(t => t.UidRaw).ToList(), ErtekelesekTipus = request.ErtekelesekTipus }).Tables[0]; if (tanuloErtekelesei.Rows.Count > 0) { var osztalyCsoportok = OsztalyCsoportSubqueries.ListOsztalyCsoport(dcp, new OsztalyCsoportListRequest { TanuloIds = request.TanuloIds }).ToList(); List<(int tanuloId, int feladatKategoriaId, int? evfolyamTipusId)> tanuloIdAndFeladatKategoriaIdAndEvfolyamTipusIdList = osztalyCsoportok.Select(x => (x.TanuloUid.Id, x.OktatasNevelesiKategoria.Uid.Id, x.OktatasNevelesiKategoria == OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas ? null : x?.EvfolyamTipus.Uid.Id)) .Distinct().ToList(); helper.RemoveMasEvfolyamTanuloErtekelesek(tanuloErtekelesei, tanuloIdAndFeladatKategoriaIdAndEvfolyamTipusIdList); helper.RemoveTanuloJogosultsagMiattiErtekelesek(request.TanuloIds, tanuloErtekelesei); } List egyszerAdhatoErtekelesTipusIdList = EnumExtensions.GetErtekelesTipusDictionaryItems(dcp.TanevId, true).Select(x => x.Id).ToList(); foreach (var ertekeles in tanuloErtekelesei.ToDaoList()) { var kozos = new ErtekelesListResponse { Uid = new ErtekelesUid(ertekeles.Id, ErtekelesJelleg.Ertekeles), Datum = ertekeles.Datum, Tipus = new Adatszotar(ertekeles.TipusId, ertekeles.TipusNeve), KeszitesDatum = ertekeles.RogzitesDatum, SzovegesErtekelesRovidNev = ertekeles.SzovegesErtekelesRovidNev, ErtekeloTanar = new TanarSimplifiedResponse { Uid = new TanarUid(ertekeles.ErtekeloId), Nev = ertekeles.ErtekeloNyomtatasiNev }, OsztalyCsoport = new OsztalyCsoportSimplifiedResponse { Uid = new OsztalyCsoportUid(ertekeles.OsztalyCsoportId) }, Tanulo = new TanuloSimplifiedResponse { Uid = new TanuloUid(ertekeles.TanuloId) } }; if (ertekeles.IsMagatartasSzorgalom) { if (request.TantargyUids == null || request.TantargyUids.Contains(new TantargyUid("Magatartas"), new TantargyUid())) { FillUpMagatartas(response, kozos, ertekeles, egyszerAdhatoErtekelesTipusIdList); } if (request.TantargyUids == null || request.TantargyUids.Contains(new TantargyUid("Szorgalom"), new TantargyUid())) { FillUpSzorgalom(response, kozos, ertekeles, egyszerAdhatoErtekelesTipusIdList); } } else { FillUpErtekeles(response, kozos, ertekeles, egyszerAdhatoErtekelesTipusIdList); } } var orderedTantargyHashSet = response.Select(x => x.Tantargy).Distinct(new TantargyResponse()).ToHashSet(); TantargyLogic.OrderTantargyList(orderedTantargyHashSet, dcp.TanevId); foreach (var ertekeles in response) { var index = orderedTantargyHashSet.Single(x => x.Uid.UidRaw == ertekeles.Tantargy.Uid.UidRaw).SortIndex; ertekeles.SortIndex = index; ertekeles.Tantargy.SortIndex = index; } IEnumerable filteredResponse = response.Where(x => request.Uid?.Jelleg == null || x.Uid.Jelleg == request.Uid.Jelleg); return RequestFilterLogic.CreateUidFilteredListResponse, ErtekelesListRequest, ErtekelesUid>(filteredResponse.OrderBy(x => x.SortIndex).ToHashSet(), request); void FillUpErtekeles(HashSet listResponse, ErtekelesListResponse kozos, ErtekelesResponseDao ertekeles, List egyszerAdhatoErtekelesTipusIds) { kozos.Mod = kozos.Tipus.Uid.Id == (int)ErtekelesTipusEnum.evkozi_jegy_ertekeles ? new Adatszotar(ertekeles.ErtekelesModId ?? 0, ertekeles.ErtekelesModNeve) : null; kozos.Tema = string.IsNullOrWhiteSpace(ertekeles.ErtekelesTema) ? null : ertekeles.ErtekelesTema; kozos.Tantargy = new TantargyResponse( ertekeles.TantargyId.Value, ertekeles.TantargyNev, ertekeles.SorSzam, new Adatszotar(ertekeles.TantargyKategoriaId.Value, ertekeles.TantargyKategoriaNeve)) { IsFotargy = ertekeles.IsFotargy.Value, FotargyNev = ertekeles.FotargyNev, FotargyKategoriaId = ertekeles.FotargyTantargyKategoriaId }; var ertekelesOsztalyzatText = ertekeles.ErtekelesOsztalyzatNeve; var ertekelesSzovegText = ertekeles.ErtekelesSzovegFormazott ?? ertekeles.ErtekelesSzoveg; var ertekelesSzazalek = ertekeles.ErtekelesSzazalekErteke; var ertekelesOsztalyzatValue = TanuloErtekelesLogicBase.GetOsztalyzatTextShort(ertekeles.ErtekelesOsztalyzatId, egyszerAdhatoErtekelesTipusIds, true); kozos.ErtekFajta = !string.IsNullOrWhiteSpace(ertekelesOsztalyzatText) ? ErtekelesErtekFajta.Osztalyzat : !string.IsNullOrWhiteSpace(ertekelesSzovegText) ? ErtekelesErtekFajta.Szoveges : ertekelesSzazalek != null ? ErtekelesErtekFajta.Szazalekos : ErtekelesErtekFajta.None; kozos.SulySzazalekErteke = kozos.ErtekFajta == ErtekelesErtekFajta.Osztalyzat ? ertekeles.ErtekelesSuly.HasValue ? ertekeles.ErtekelesSuly.Value : (int?)100 : null; kozos.SzovegesErtek = kozos.ErtekFajta.Uid.Id == (int)ErtekelesErtekFajta.Osztalyzat ? ertekelesOsztalyzatText : kozos.ErtekFajta.Uid.Id == (int)ErtekelesErtekFajta.Szoveges ? ertekelesSzovegText : kozos.ErtekFajta.Uid.Id == (int)ErtekelesErtekFajta.Szazalekos ? ertekelesSzazalek + "%" : null; kozos.SzamErtek = kozos.ErtekFajta.Uid.Id == (int)ErtekelesErtekFajta.Osztalyzat ? Convert.ToInt32(ertekelesOsztalyzatValue) : kozos.ErtekFajta.Uid.Id == (int)ErtekelesErtekFajta.Szoveges ? null : kozos.ErtekFajta.Uid.Id == (int)ErtekelesErtekFajta.Szazalekos ? Convert.ToInt32(ertekelesSzazalek) : (int?)null; if (!listResponse.Add(kozos)) { throw new BlException(BlExceptionType.DuplikaltKulcs); } } void FillUpMagatartas(HashSet listResponse, ErtekelesListResponse kozos, ErtekelesResponseDao ertekeles, List egyszerAdhatoErtekelesTipusIds) { var magatartasOsztalyzatText = ertekeles.MagatartasOsztalyzatSzovegesen; var magatartasSzovegText = ertekeles.MagatartasSzovegFormazott; var magatartasErtekText = ertekeles.MagatartasErtekSzovegesen; var magatartasOsztalyzatValue = TanuloErtekelesLogicBase.GetOsztalyzatTextShort(ertekeles.MagatartasOsztalyzatId, egyszerAdhatoErtekelesTipusIds, true); int? magatartasFajta = !string.IsNullOrWhiteSpace(magatartasOsztalyzatText) ? (int)ErtekelesErtekFajta.Osztalyzat : !string.IsNullOrWhiteSpace(magatartasSzovegText) ? (int)ErtekelesErtekFajta.Szoveges : !string.IsNullOrWhiteSpace(magatartasErtekText) ? (int)ErtekelesErtekFajta.MagatartasErtek : (int?)null; if (magatartasFajta.HasValue) { var magatartasErtekeles = new ErtekelesListResponse(kozos) { ErtekFajta = (ErtekelesErtekFajta)magatartasFajta, Uid = new ErtekelesUid(ertekeles.Id, ErtekelesJelleg.Magatartas), Tantargy = TantargyLogic.MagatartasTantargy }; switch (magatartasFajta) { case (int)ErtekelesErtekFajta.Osztalyzat: magatartasErtekeles.SzovegesErtek = magatartasOsztalyzatText; magatartasErtekeles.SzamErtek = Convert.ToInt32(magatartasOsztalyzatValue); break; case (int)ErtekelesErtekFajta.Szoveges: magatartasErtekeles.SzovegesErtek = magatartasSzovegText; break; case (int)ErtekelesErtekFajta.MagatartasErtek: magatartasErtekeles.SzovegesErtek = magatartasErtekText; break; default: throw new BlException(BlExceptionType.ValtozoErtekeNemLehetNull); } if (!listResponse.Add(magatartasErtekeles)) { throw new BlException(BlExceptionType.DuplikaltKulcs); } } } void FillUpSzorgalom(HashSet listResponse, ErtekelesListResponse kozos, ErtekelesResponseDao ertekeles, List egyszerAdhatoErtekelesTipusIds) { var szorgalomOsztalyzatText = ertekeles.SzorgalomOsztalyzatSzovegesen; var szorgalomSzovegText = ertekeles.SzorgalomSzovegFormazott; var szorgalomErtekText = ertekeles.SzorgalomErtekSzoveges; var szorgalomOsztalyzatValue = TanuloErtekelesLogicBase.GetOsztalyzatTextShort(ertekeles.SzorgalomOsztalyzatId, egyszerAdhatoErtekelesTipusIds, true); var szorgalomFajta = !string.IsNullOrWhiteSpace(szorgalomOsztalyzatText) ? (int)ErtekelesErtekFajta.Osztalyzat : !string.IsNullOrWhiteSpace(szorgalomSzovegText) ? (int)ErtekelesErtekFajta.Szoveges : !string.IsNullOrWhiteSpace(szorgalomErtekText) ? (int)ErtekelesErtekFajta.SzorgalomErtek : (int?)null; if (szorgalomFajta.HasValue) { var szorgalomErtekeles = new ErtekelesListResponse(kozos) { ErtekFajta = (ErtekelesErtekFajta)szorgalomFajta, Uid = new ErtekelesUid(ertekeles.Id, ErtekelesJelleg.Szorgalom), Tantargy = TantargyLogic.SzorgalomTantargy }; switch (szorgalomFajta) { case (int)ErtekelesErtekFajta.Osztalyzat: szorgalomErtekeles.SzovegesErtek = szorgalomOsztalyzatText; szorgalomErtekeles.SzamErtek = Convert.ToInt32(szorgalomOsztalyzatValue); break; case (int)ErtekelesErtekFajta.Szoveges: szorgalomErtekeles.SzovegesErtek = szorgalomSzovegText; break; case (int)ErtekelesErtekFajta.SzorgalomErtek: szorgalomErtekeles.SzovegesErtek = szorgalomErtekText; break; default: throw new BlException(BlExceptionType.ValtozoErtekeNemLehetNull); } if (!listResponse.Add(szorgalomErtekeles)) { throw new BlException(BlExceptionType.DuplikaltKulcs); } } } } } }