kreta/Kreta.BusinessLogic/Logic/TanuloErtekeles/TanuloErtekelesValidacioMobil.cs
2024-03-13 00:33:46 +01:00

140 lines
6.5 KiB
C#

using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Core.Validation.Exceptions;
using Kreta.Core.Validation.Exceptions.Enum;
using Kreta.DataAccessManual.Interfaces;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Logic.TanuloErtekeles
{
public class TanuloErtekelesValidacioMobil : TanuloErtekelesValidacioBase
{
#region Constructors
public TanuloErtekelesValidacioMobil(IConnectionType connectionType) : base(connectionType)
{
}
#endregion Constructors
public List<TanuloErtekelesCo> Validate(IDalHandler dalHandler, List<TanuloErtekelesCo> tanuloErtekelesCoList, out List<ValidationExceptionItem> validationExceptionItemList)
{
//NOTE: A validációhoz szükséges közös adatok, minden egyes item-nél benne vannak és ezek megegyeznek, ezért elég ha csak a firstItem-et vizsgáljuk
TanuloErtekelesCo firstItem = tanuloErtekelesCoList.FirstOrDefault();
var tanuloIdList = tanuloErtekelesCoList.Select(x => x.TanuloId).ToList();
//NOTE: Levalidáljuk, hogy van-e egyáltalán menteni való elem!
IsExists(firstItem);
if (!IsValid)
{
ThrowExeption(tanuloErtekelesCoList);
}
//NOTE: Levalidáljuk a közös, alap adatokat!
IsValidOsztalyCsoportId(firstItem);
IsValidTanoraiCeluOsztalyCsoport(firstItem);
IsValidTipusId(firstItem);
IsValidDatum(firstItem);
List<int> egyszerAdhatoErtekelesTipusIds = EnumExtensions.GetErtekelesTipusDictionaryItems(ConnectionType.TanevId, true).Select(x => x.Id).ToList();
if (!firstItem.IsMagatartasSzorgalom)
{
IsValidSpecialisErtekelesOsztalyzatId(tanuloErtekelesCoList, egyszerAdhatoErtekelesTipusIds, firstItem.TipusId);
IsValidErtekelesFajta(tanuloErtekelesCoList);
IsValidTantargyId(firstItem);
IsValidErtekelesTema(firstItem);
}
else
{
IsValidMagatartasSzorgalomFajta(tanuloErtekelesCoList);
}
if (!IsValid)
{
ThrowExeption(tanuloErtekelesCoList);
}
//NOTE: Levalidáljuk a közös, alap adatokra épülő dolgokat!
IsValidDatumIsTanitasiNap(firstItem);
IsValidUtolsoTanitasiNapUtanErtekeles(firstItem);
if (!firstItem.IsMagatartasSzorgalom)
{
IsValidErtekelesModId(firstItem);
}
if (!IsValid)
{
ThrowExeption(tanuloErtekelesCoList);
}
validationExceptionItemList = new List<ValidationExceptionItem>();
var result = new List<TanuloErtekelesCo>();
DataSet tanuloMentessegValidationDataSet = null;
if (!firstItem.IsMagatartasSzorgalom)
{
var helper = new TanuloErtekelesHelper(ConnectionType);
tanuloMentessegValidationDataSet = helper.ValidateTanuloListTanuloMentesseg(tanuloIdList, firstItem.TantargyId.Value, firstItem.Datum);
}
var osztalyCsoportHelper = new OsztalyCsoportHelper(ConnectionType);
List<TantargyItemCo> tantargyCoList = new TantargyHelper(ConnectionType).GetTantargyCoList();
//NOTE: Levalidáljuk az összes bejövő tanuló értékelést!
foreach (TanuloErtekelesCo tanuloErtekelesCo in tanuloErtekelesCoList)
{
IsValid = true;
//IsValidDuplikaltErtekeles(dalHandler, tanuloErtekelesCo); // web-en nincs ilyen vizsgálat és enged teljesen ugyan olyan értékelést menteni
//NOTE: Az egyszer adható tanuló értékelés validációra csak akkor van szükség, ha a tanuló az osztály/csoport tagja.
var isTanuloOsztalyCsoportTagja = IsValidTanuloOsztalyCsoportTagja(dalHandler, tanuloErtekelesCo, osztalyCsoportHelper);
if (isTanuloOsztalyCsoportTagja)
{
IsValidEgyszerAdhatoTanuloErtekeles(firstItem, new List<TanuloErtekelesCo> { tanuloErtekelesCo }, egyszerAdhatoErtekelesTipusIds);
}
if (!firstItem.IsMagatartasSzorgalom)
{
IsValidTanuloMentesseg(tanuloErtekelesCo, tanuloMentessegValidationDataSet);
IsValidErtekelesSzazalek(tanuloErtekelesCo);
IsValidSzorgalomTargykategoriaErtekeles(tanuloErtekelesCo, tantargyCoList);
IsValidErtekelesSzoveg(tanuloErtekelesCo);
}
if (IsValid)
{
result.Add(tanuloErtekelesCo);
}
else
{
validationExceptionItemList.Add(new ValidationExceptionItem(tanuloErtekelesCo.TanuloId.ToString(), string.Join("; ", ErrorMessageList)));
ErrorMessageList.Clear();
}
}
return result;
}
private void ThrowExeption(List<TanuloErtekelesCo> tanuloErtekelesCoList)
{
var validationItems = new List<ValidationExceptionItem>();
foreach (TanuloErtekelesCo tanuloErtekelesCo in tanuloErtekelesCoList)
{
validationItems.Add(new ValidationExceptionItem(tanuloErtekelesCo.TanuloId.ToString(), string.Join("; ", ErrorMessageList)));
}
throw new ValidationException(ValidationErrorType.Undefined, TanuloErtekelesResource.HibasErtekelesElem, validationItems.DistinctBy(v => v.Id));
}
private void IsValidDuplikaltErtekeles(IDalHandler dalHandler, TanuloErtekelesCo tanuloErtekelesCo)
{
bool isTanuloErtekelt = dalHandler.TanuloErtekelesDal().IsTanuloErtekelt(ConnectionType.IntezmenyId, ConnectionType.TanevId, tanuloErtekelesCo.Datum, tanuloErtekelesCo.ErtekelesModId, tanuloErtekelesCo.TipusId, tanuloErtekelesCo.TantargyId.Value, tanuloErtekelesCo.ErtekelesTema, tanuloErtekelesCo.TanuloId, tanuloErtekelesCo.ErtekelesOsztalyzatId, tanuloErtekelesCo.ErtekelesSzazalek, tanuloErtekelesCo.ErtekelesSzoveg);
if (isTanuloErtekelt)
{
ErrorMessageList.Add(TanuloErtekelesResource.ATanulonakEzAzErtekelesMarRogzitesreKerultKorabban);
IsValid = false;
}
}
}
}