447 lines
20 KiB
C#
447 lines
20 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Kreta.BusinessLogic.Classes;
|
|
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Get.Ora.Common;
|
|
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Logic;
|
|
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.SubqueriesRepo;
|
|
using Kreta.BusinessLogic.HelperClasses;
|
|
using Kreta.BusinessLogic.Helpers;
|
|
using Kreta.BusinessLogic.Helpers.SystemSettings;
|
|
using Kreta.BusinessLogic.Logic.Naplozas.Elokeszites;
|
|
using Kreta.Core.ConnectionType;
|
|
using Kreta.Core.Validation.Exceptions;
|
|
using Kreta.Core.Validation.Exceptions.Enum;
|
|
using Kreta.DataAccessManual;
|
|
using Kreta.DataAccessManual.Interfaces;
|
|
using Kreta.Enums;
|
|
using Kreta.Enums.ManualEnums;
|
|
using Kreta.Resources;
|
|
|
|
namespace Kreta.BusinessLogic.Logic.Naplozas.Validacio
|
|
{
|
|
public class NaploValidacio
|
|
{
|
|
private List<OrarendCO.ExtendedEvent> OrarendLista
|
|
{
|
|
get
|
|
{
|
|
var helper = new OrarendHelper(ConnectionType);
|
|
|
|
return helper.GetOrarendiOrakEsVagyNapirendekEsTanorak(_parameters.FelhasznaloSzerepkor, _parameters.From, _parameters.To, ConnectionType.FelhasznaloId, osztalyCsoportId: null, tanuloId: null, csakOrarend: false, OrarendTipusEnum.Minden, isTanuloOrGondviselo: false, EventColorEnum.Kek);
|
|
}
|
|
}
|
|
|
|
private readonly NaploValidacioParameters _parameters;
|
|
|
|
public IConnectionType ConnectionType
|
|
{
|
|
get
|
|
{
|
|
return _parameters.ConnectionType;
|
|
}
|
|
}
|
|
|
|
public NaploValidacio(NaploValidacioParameters parameters)
|
|
{
|
|
_parameters = parameters;
|
|
}
|
|
|
|
/// INFO @D.Kornél: Mobil használja
|
|
public void MobilValidateModel(NaplozasElokeszitesModel model)
|
|
{
|
|
OrarendCO.ExtendedEvent ora;
|
|
LezartNaploValidacio(model);
|
|
if (!model.IsTanora)
|
|
{
|
|
ora = GetOra(model);
|
|
CheckIsOraExists(ora);
|
|
HelyettesitettOra(ora);
|
|
}
|
|
else
|
|
{
|
|
ora = GetTanora(model);
|
|
CheckIsOraExists(ora);
|
|
//TODO: ha nem az övé vagy helyettese
|
|
}
|
|
|
|
KorabbanNaplozottOra(model, ora);
|
|
CheckElmaradtraNaplozas(model, ora);
|
|
if (!model.IsElmaradtOra)
|
|
{
|
|
ValidateMulasztasRekords(model);
|
|
TemaValidacio(model);
|
|
}
|
|
NaplozasDatumValidacio(model);
|
|
}
|
|
|
|
public void ValidateModel(NaplozasElokeszitesModel model)
|
|
{
|
|
if (!model.IsEgyediNaplozas)
|
|
{
|
|
if (model.IsTanora)
|
|
{
|
|
var ora = GetTanora(model);
|
|
CheckIsOraExists(ora);
|
|
//TODO: ha nem az övé vagy helyettese
|
|
}
|
|
else
|
|
{
|
|
OrarendCO.ExtendedEvent ora;
|
|
if (model.Helyettesites.IsKeresoAltalTalaltOra)
|
|
{
|
|
ora = GetHelyettesOra(model);
|
|
}
|
|
else
|
|
{
|
|
ora = GetOra(model);
|
|
}
|
|
|
|
CheckIsOraExists(ora);
|
|
KorabbanNaplozottOra(model, ora);
|
|
HelyettesitettOra(ora);
|
|
}
|
|
}
|
|
|
|
ValidateMulasztasRekords(model);
|
|
NaplozasDatumValidacio(model);
|
|
TemaValidacio(model);
|
|
}
|
|
|
|
public bool TeremUtkozesEllenorzes(NaplozasElokeszitesModel model)
|
|
{
|
|
bool teremutkozes;
|
|
int tanoraID, orarendiOraID, hetirend;
|
|
var helper = new TanoraHelper(ConnectionType);
|
|
|
|
if (!model.OraAdat.TeremId.HasValue)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.MenteshezATeremMegadasaKotelezo);
|
|
}
|
|
if (model.IsEgyediNaplozas)
|
|
{
|
|
tanoraID = 0;
|
|
orarendiOraID = 0;
|
|
hetirend = (int)HetiRendTipusEnum.MindegyikHet;
|
|
}
|
|
else if (model.IsTanora)
|
|
{
|
|
tanoraID = model.OraAdat.TanitasiOraId.Value;
|
|
|
|
(var oraId, var hRend) = helper.GetOrarendIdAndHetirend(tanoraID);
|
|
|
|
if (oraId.HasValue)
|
|
{
|
|
orarendiOraID = oraId.Value;
|
|
if (hRend.HasValue)
|
|
{
|
|
hetirend = hRend.Value;
|
|
}
|
|
else
|
|
{
|
|
hetirend = (int)HetiRendTipusEnum.MindegyikHet;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
orarendiOraID = 0;
|
|
hetirend = (int)HetiRendTipusEnum.MindegyikHet;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
tanoraID = 0;
|
|
orarendiOraID = model.OraAdat.OrarendiOraId.Value;
|
|
var orarendiOraHelper = new OrarendiOraHelper(ConnectionType);
|
|
hetirend = orarendiOraHelper.GetHetirend(orarendiOraID);
|
|
}
|
|
|
|
teremutkozes = helper.TanitasiOraTeremUtkozesEllenorzes(tanoraID, orarendiOraID, model.OraAdat.TeremId.Value, (int)model.OraAdat.HetNapja, hetirend, model.OraAdat.OraKezdete, model.OraAdat.OraVege);
|
|
|
|
return teremutkozes;
|
|
}
|
|
|
|
public string GetOsztalyEsTanarOraiUtkozes(NaplozasElokeszitesModel model)
|
|
{
|
|
int osztalyCsoportId;
|
|
if (!model.OraAdat.OsztalyCsoportId.HasValue && model.OraAdat.FoglakozasId.HasValue)
|
|
{
|
|
var helper = new TantargyFelosztasHelper(ConnectionType);
|
|
var data = helper.GetTantargyFelosztas(model.OraAdat.FoglakozasId.Value);
|
|
osztalyCsoportId = data.OsztalyCsoportID;
|
|
}
|
|
else
|
|
{
|
|
osztalyCsoportId = model.OraAdat.OsztalyCsoportId.Value;
|
|
}
|
|
|
|
var tanorahelper = new TanoraHelper(ConnectionType);
|
|
var errorMsg = tanorahelper.GetOsztalyEsTanarOrai(model.OraAdat.TanarId.Value, osztalyCsoportId, model.OraAdat.OraKezdete, model.OraAdat.OraVege, model.OraAdat.TanitasiOraId, model.OraAdat.OrarendiOraId);
|
|
|
|
return errorMsg;
|
|
}
|
|
|
|
public OrarendCO.ExtendedEvent GetTanora(NaplozasElokeszitesModel model)
|
|
{
|
|
return OrarendLista.Find(x => x.id == model.OraAdat.TanitasiOraId && x.datum.Value.Date == model.OraAdat.OraKezdete.Date);
|
|
}
|
|
|
|
public void CheckElmaradtraNaplozas(NaplozasElokeszitesModel model, OrarendCO.ExtendedEvent ora)
|
|
{
|
|
if (ora.OraAllapota == TanoraAllapotaEnum.Elmaradt && !model.IsElmaradtOra)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.ResourceAlreadyExists, ErrorResource.NaplozasSikertelenKorabbanMarElmaradtOrakentNaplozasraKerult);
|
|
}
|
|
|
|
if (ora.OraAllapota == TanoraAllapotaEnum.Naplozott && model.IsElmaradtOra)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.ResourceAlreadyExists, ErrorResource.NaplozasSikertelenAzOraMarKorabbanNaplozasraKerult);
|
|
}
|
|
}
|
|
|
|
private void CheckIsOraExists(OrarendCO.ExtendedEvent ora)
|
|
{
|
|
if (ora == null)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.ResourceNotFound, ErrorResource.NaplozasSikertelenAzOraMarNemLetezikAKivalasztottNapon);
|
|
}
|
|
}
|
|
|
|
private OrarendCO.ExtendedEvent GetHelyettesOra(NaplozasElokeszitesModel model)
|
|
{
|
|
var helper = new OrarendHelper(ConnectionType);
|
|
|
|
var date = model.OraAdat.OraKezdete.Date;
|
|
var helyettesOralista = helper.GetOrarendiOrakEsVagyNapirendekEsTanorak(_parameters.FelhasznaloSzerepkor, date, date.AddDays(1), model.OraAdat.TanarId, osztalyCsoportId: null, tanuloId: null, csakOrarend: false, OrarendTipusEnum.Minden, isTanuloOrGondviselo: false, EventColorEnum.Kek);
|
|
return helyettesOralista.Find(x => x.OrarendiOraId == model.OraAdat.OrarendiOraId);
|
|
}
|
|
|
|
private OrarendCO.ExtendedEvent GetOra(NaplozasElokeszitesModel model)
|
|
{
|
|
return OrarendLista.Find(x => x.OrarendiOraId == model.OraAdat.OrarendiOraId && x.datum.Value.Date == model.OraAdat.OraKezdete.Date);
|
|
}
|
|
|
|
private void HelyettesitettOra(OrarendCO.ExtendedEvent ora)
|
|
{
|
|
if (ora.OraAllapota == TanoraAllapotaEnum.Nem_naplozott && ora.helyettesitoId.HasValue && ora.helyettesitoId != ConnectionType.FelhasznaloId)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.ResourceNotFound, ErrorResource.NaplozasSikertelenAzOraraHelyettesitesLettKiivaAzAdminAltal);
|
|
}
|
|
}
|
|
|
|
private void KorabbanNaplozottOra(NaplozasElokeszitesModel model, OrarendCO.ExtendedEvent ora)
|
|
{
|
|
if (model.OraAdat.TanitasiOraId.HasValue)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (ora.OraAllapota == TanoraAllapotaEnum.Nem_naplozott)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (ora.OraAllapota == TanoraAllapotaEnum.Elmaradt)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.ResourceAlreadyExists, ErrorResource.NaplozasSikertelenKorabbanMarElmaradtOrakentNaplozasraKerult);
|
|
}
|
|
|
|
if (ora.OraAllapota == TanoraAllapotaEnum.Naplozott)
|
|
{
|
|
if (ora.helyettesitoId.HasValue && ora.helyettesitoId != ConnectionType.FelhasznaloId)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.ResourceAlreadyExists, ErrorResource.NaplozasSikertelenAzOratKorabbanMarHelyettesitettkentNaploztaEgyMasikTanar);
|
|
}
|
|
|
|
throw new ValidationException(ValidationErrorType.ResourceAlreadyExists, ErrorResource.NaplozasSikertelenAzOraMarKorabbanNaplozasraKerult);
|
|
}
|
|
}
|
|
|
|
private void TemaValidacio(NaplozasElokeszitesModel model)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(model.OraAdat.Tema))
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.NaplozasSikertelenTemaMegadasaKotelezo);
|
|
}
|
|
if (model.OraAdat.Tema.Length > 1000) /*db ben ez a max char jelenleg*/
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.TemaTulHosszu);
|
|
}
|
|
}
|
|
|
|
/// INFO @D.Kornél: használja a mobil
|
|
public void NaplozasDatumValidacio(NaplozasElokeszitesModel model)
|
|
{
|
|
if (!model.NaplozhatoDatum)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.NaplozasSikertelenJovobeliDatumraNemLehetNaplozni);
|
|
}
|
|
|
|
if (model.OraAdat.OraKezdete >= model.OraAdat.OraVege)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.OraKezdeteNagyobbMintAVege);
|
|
}
|
|
|
|
var isNaplozhatZarastolFuggetlenul = new NaplozarasLogic(ConnectionType).IsNaplozhatZarastolFuggetlenul(model.OraAdat.OraKezdete, model.OraAdat.OsztalyCsoportId);
|
|
if (!isNaplozhatZarastolFuggetlenul && new OrarendHelper(ConnectionType).GetNaplozarasDate(null) >= model.OraAdat.OraKezdete)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.NaplozasSikertelenNemNaplozhatoNaplozarasMiatt);
|
|
}
|
|
|
|
if (model.OraAdat.OraVege.Date != model.OraAdat.OraKezdete.Date)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, OrarendResource.AtiveloNaplozasNemEngedelyezett);
|
|
}
|
|
|
|
var orarendHelper = new OrarendHelper(ConnectionType);
|
|
|
|
if (orarendHelper.GetIsMunkaszunetiNap(model.OraAdat.OraKezdete.Date, model.OraAdat.OsztalyCsoportId.Value))
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.MunkaszunetiNapraTanoraNemVehetoFel);
|
|
}
|
|
|
|
var sysSettingsHelper = new SystemSettingsHelper(ConnectionType);
|
|
DateTime? szakGyakKezdDatum, szakGyakVegDatum, utolsoTanitasiNap;
|
|
var tanevRendHelper = new TanevrendHelper(ConnectionType);
|
|
var tanevHelper = new TanevHelper(ConnectionType);
|
|
szakGyakKezdDatum = sysSettingsHelper.GetSystemSettingValue<DateTime?>(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_kezd_datum);
|
|
szakGyakVegDatum = sysSettingsHelper.GetSystemSettingValue<DateTime?>(RendszerBeallitasTipusEnum.Osszefuggo_gyakorlat_veg_datum);
|
|
utolsoTanitasiNap = tanevHelper.GetTanevInfo().UtolsoTanitasiNap;
|
|
var isRendkivuliNap = tanevRendHelper.IsRendkivuliTanitasiNap(model.OraAdat.OraKezdete);
|
|
|
|
if (model.OraAdat.OraKezdete.Date > utolsoTanitasiNap)
|
|
{
|
|
if ((model.OraAdat.OraKezdete.Date < szakGyakKezdDatum || model.OraAdat.OraKezdete.Date > szakGyakVegDatum) && !isRendkivuliNap)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.NaplozasSikertelenNyariNaplozasMiatt);
|
|
}
|
|
|
|
if (!isRendkivuliNap && !new CsoportHelper(ConnectionType).IsNyariSzakmaiGyakorlatos(model.OraAdat.OsztalyCsoportId.Value) && !model.SzervezetTipusId.HasValue)
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.EbbenAzIdoszakbanCsakOsszefuggoSzakmaiGyakorlatiCsoportotLehetNaplozni);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void LezartNaploValidacio(NaplozasElokeszitesModel model)
|
|
{
|
|
if (model.OraAdat.OsztalyCsoportId.HasValue && new NaplozarasLogic(ConnectionType).GetLezartOsztalyokEsBontottCsoportjaik().Contains(model.OraAdat.OsztalyCsoportId.Value))
|
|
{
|
|
throw new ValidationException(ValidationErrorType.Undefined, ErrorResource.AzElektronikusNaploLezarva);
|
|
}
|
|
}
|
|
private void ValidateMulasztasRekords(NaplozasElokeszitesModel model)
|
|
{
|
|
if (model.IsElmaradtOra)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var jelenletList = model.IsEgyediNaplozas ? GetEgyediOraJavasoltJelenlet(model, h)
|
|
: model.IsTanora ?
|
|
GetTanitasiOraJavasoltJelenlet(model, h, oktatasNevelesKategoriaEnum: null) : GetOrarendiOraJavasoltJelenlet(model, h);
|
|
|
|
SetMulastasValuesToValid(model, jelenletList);
|
|
});
|
|
}
|
|
private void SetMulastasValuesToValid(NaplozasElokeszitesModel model, IEnumerable<IJavasoltJelenletTanuloGetResponseCo> javasoltJelenlet)
|
|
{
|
|
var invalidRecords = new List<MulasztasItem>();
|
|
var template = model.IsTanora ? new JavasoltJelenletTemplateLogic(TanoraAllapotaEnum.Naplozott) : new JavasoltJelenletTemplateLogic(TanoraAllapotaEnum.Nem_naplozott);
|
|
|
|
foreach (var item in model.Mulasztas.MulasztasList)
|
|
{
|
|
var tanuloMulasztas = javasoltJelenlet.SingleOrDefault(t => t.TanuloId == item.TanuloId);
|
|
if (tanuloMulasztas != null)
|
|
{
|
|
var tanuloMulasztasTemplate = template.GetCalculatedJelenletJavaslatConsideringSzuro(tanuloMulasztas.JavasoltJelenletTemplateTipusSzuroLista);
|
|
|
|
MulasztasTipusEnum mulasztasTypus;
|
|
if (item.Keses.HasValue && item.Keses > 0 && !item.MulasztasTipus.HasValue)
|
|
{
|
|
mulasztasTypus = MulasztasTipusEnum.keses;
|
|
}
|
|
else
|
|
{
|
|
if (item.MulasztasTipus.HasValue)
|
|
{
|
|
mulasztasTypus = (MulasztasTipusEnum)item.MulasztasTipus.Value;
|
|
}
|
|
else
|
|
{
|
|
mulasztasTypus = MulasztasTipusEnum.ures;
|
|
}
|
|
}
|
|
|
|
var mulasztasTemplate = tanuloMulasztasTemplate.SzuroElemLista.First(t => t.MulasztasTipusAdatszotar == mulasztasTypus);
|
|
if (!mulasztasTemplate.IsEnabled)
|
|
{
|
|
invalidRecords.Add(item);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
invalidRecords.Add(item);
|
|
}
|
|
}
|
|
|
|
foreach (var item in invalidRecords)
|
|
{
|
|
model.Mulasztas.MulasztasList.Remove(item);
|
|
}
|
|
}
|
|
private IEnumerable<IJavasoltJelenletTanuloGetResponseCo> GetOrarendiOraJavasoltJelenlet(NaplozasElokeszitesModel model, IDalHandler h, OktNevelesiKategoriaEnum? oktatasNevelesKategoriaEnum = null)
|
|
{
|
|
var jelenletList = OrarendiOraSubqueries.ListJavasoltJelenlet(model.UserId, ConnectionType.IntezmenyId, ConnectionType.IntezmenyAzonosito, ConnectionType.TanevId, h, new Classes.MobileApi.Naplo.V2.Co.Get.Ora.OrarendiOra.JavasoltJelenlet.JavasoltJelenletGetRequestCo()
|
|
{
|
|
Key = new Classes.MobileApi.Naplo.V2.Co.Get.Ora.OrarendiOra.JavasoltJelenlet.JavasoltJelenletKeyGetRequestCo[]
|
|
{
|
|
new Classes.MobileApi.Naplo.V2.Co.Get.Ora.OrarendiOra.JavasoltJelenlet.JavasoltJelenletKeyGetRequestCo(){
|
|
OrarendiOraId = model.OraAdat.OrarendiOraId.Value,
|
|
OraKezdetDatuma = model.OraAdat.OraKezdete,
|
|
OraVegDatuma = model.OraAdat.OraVege,
|
|
IsHelyettesitesKeresoAltalTalaltOra = model.Helyettesites.IsKeresoAltalTalaltOra
|
|
}
|
|
}
|
|
}, oktatasNevelesKategoriaEnum);
|
|
|
|
return jelenletList[0].TanuloLista;
|
|
}
|
|
|
|
private IEnumerable<IJavasoltJelenletTanuloGetResponseCo> GetEgyediOraJavasoltJelenlet(NaplozasElokeszitesModel model, IDalHandler h, OktNevelesiKategoriaEnum? oktatasNevelesKategoriaEnum = OktNevelesiKategoriaEnum.NevelesOktatas)
|
|
{
|
|
var jelenletList = EgyediOraSubqueries.ListJavasoltJelenlet(model.UserId, ConnectionType.IntezmenyAzonosito, ConnectionType.TanevId, h, new Classes.MobileApi.Naplo.V2.Co.Get.Ora.EgyediOra.JavasoltJelenlet.JavasoltJelenletGetRequestCo()
|
|
{
|
|
Key = new Classes.MobileApi.Naplo.V2.Co.Get.Ora.EgyediOra.JavasoltJelenlet.JavasoltJelenletKeyGetRequestCo[]
|
|
{
|
|
new Classes.MobileApi.Naplo.V2.Co.Get.Ora.EgyediOra.JavasoltJelenlet.JavasoltJelenletKeyGetRequestCo()
|
|
{
|
|
OsztalyCsoportId = model.OraAdat.OsztalyCsoportId.Value,
|
|
TantargyId = model.OraAdat.TantargyId.Value,
|
|
OraKezdetDatuma = model.OraAdat.OraKezdete,
|
|
OraVegDatuma = model.OraAdat.OraVege
|
|
}
|
|
}
|
|
}, oktatasNevelesKategoriaEnum, ConnectionType.IntezmenyId);
|
|
|
|
return jelenletList[0].TanuloLista;
|
|
}
|
|
|
|
private IEnumerable<IJavasoltJelenletTanuloGetResponseCo> GetTanitasiOraJavasoltJelenlet(NaplozasElokeszitesModel model, IDalHandler h, OktNevelesiKategoriaEnum? oktatasNevelesKategoriaEnum = null)
|
|
{
|
|
var jelenletList = TanitasiOraSubqueries.ListJavasoltJelenlet(model.UserId, ConnectionType.IntezmenyId, ConnectionType.IntezmenyAzonosito, ConnectionType.TanevId, h, new Classes.MobileApi.Naplo.V2.Co.Get.Ora.TanitasiOra.JavasoltJelenlet.JavasoltJelenletGetRequestCo()
|
|
{
|
|
Key = new Classes.MobileApi.Naplo.V2.Co.Get.Ora.TanitasiOra.JavasoltJelenlet.JavasoltJelenletKeyGetRequestCo[]
|
|
{
|
|
new Classes.MobileApi.Naplo.V2.Co.Get.Ora.TanitasiOra.JavasoltJelenlet.JavasoltJelenletKeyGetRequestCo(){
|
|
TanitasiOraId = model.OraAdat.TanitasiOraId.Value
|
|
}
|
|
}
|
|
}, oktatasNevelesKategoriaEnum);
|
|
|
|
return jelenletList[0].TanuloLista;
|
|
}
|
|
}
|
|
}
|