264 lines
14 KiB
C#
264 lines
14 KiB
C#
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<ErtekelesListResponse> ListErtekeles(DefaultConnectionParameters dcp, ErtekelesListRequest request)
|
|
{
|
|
new ValidatorLogic(request).ThrowExceptionIfModelIsNotvalid();
|
|
|
|
var response = new HashSet<ErtekelesListResponse>(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<int> egyszerAdhatoErtekelesTipusIdList = EnumExtensions.GetErtekelesTipusDictionaryItems(dcp.TanevId, true).Select(x => x.Id).ToList();
|
|
foreach (var ertekeles in tanuloErtekelesei.ToDaoList<ErtekelesResponseDao>())
|
|
{
|
|
var kozos = new ErtekelesListResponse
|
|
{
|
|
Uid = new ErtekelesUid(ertekeles.Id, ErtekelesJelleg.Ertekeles),
|
|
Datum = ertekeles.Datum,
|
|
Tipus = new Adatszotar<ErtekelesTipusEnum>(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<ErtekelesListResponse> filteredResponse = response.Where(x => request.Uid?.Jelleg == null || x.Uid.Jelleg == request.Uid.Jelleg);
|
|
|
|
return RequestFilterLogic.CreateUidFilteredListResponse<HashSet<ErtekelesListResponse>, ErtekelesListRequest, ErtekelesUid>(filteredResponse.OrderBy(x => x.SortIndex).ToHashSet(), request);
|
|
|
|
void FillUpErtekeles(HashSet<ErtekelesListResponse> listResponse, ErtekelesListResponse kozos, ErtekelesResponseDao ertekeles, List<int> egyszerAdhatoErtekelesTipusIds)
|
|
{
|
|
kozos.Mod = kozos.Tipus.Uid.Id == (int)ErtekelesTipusEnum.evkozi_jegy_ertekeles ?
|
|
new Adatszotar<ErtekelesModEnum>(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<TargyKategoriaTipusEnum>(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<ErtekelesListResponse> listResponse, ErtekelesListResponse kozos, ErtekelesResponseDao ertekeles, List<int> 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<ErtekelesListResponse> listResponse, ErtekelesListResponse kozos, ErtekelesResponseDao ertekeles, List<int> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|