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 Validate(IDalHandler dalHandler, List tanuloErtekelesCoList, out List 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 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(); var result = new List(); 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 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 }, 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 tanuloErtekelesCoList) { var validationItems = new List(); 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; } } } }