Files
kreta/Kreta.WebApi/Naplo/Kreta.Naplo.Domain/V3/Orarend/OraNaplozasRequest.cs
T
2024-03-13 00:33:46 +01:00

124 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Kreta.BusinessLogic.Logic.Naplozas;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Naplo.Domain.V3.UniqueIdentifier;
using Kreta.Resources;
namespace Kreta.Naplo.Domain.V3.Orarend
{
public class OraNaplozasRequest : IValidatableObject
{
public OraNaplozasRequest(OrarendElemUid orarendElemUid, string tema, bool isElmaradt, List<TanuloForOraNaplozasListRequest> tanuloLista, string hazifeladat, DateTime? hazifeladatHatarido, int? hazifeladatId)
{
OrarendElemUid = orarendElemUid;
Tema = tema;
IsElmaradt = isElmaradt;
TanuloLista = tanuloLista;
Hazifeladat = hazifeladat;
HazifeladatHatarido = hazifeladatHatarido;
HazifeladatId = hazifeladatId;
foreach (var tanulo in TanuloLista)
{
if (OccurrenceNumberByPrimaryKey.ContainsKey(tanulo.Id))
{
OccurrenceNumberByPrimaryKey[tanulo.Id]++;
}
else
{
OccurrenceNumberByPrimaryKey.Add(tanulo.Id, 1);
}
}
}
public OrarendElemUid OrarendElemUid { get; set; }
public string Tema { get; set; }
public bool IsElmaradt { get; set; }
public List<TanuloForOraNaplozasListRequest> TanuloLista { get; set; }
public string Hazifeladat { get; set; }
public DateTime? HazifeladatHatarido { get; set; }
public int? HazifeladatId { get; set; }
public Dictionary<int, int> OccurrenceNumberByPrimaryKey = new Dictionary<int, int>();
public void ConvertTo(NaplozasMobilCo co)
{
co.OraAdat.Datum = OrarendElemUid.Datum;
co.OraAdat.IsElmaradt = IsElmaradt;
co.OraAdat.Tema = Tema;
co.OraAdat.OrarendiOraId = OrarendElemUid.Tipus == CalendarOraTypeEnum.OrarendiOra ? OrarendElemUid.Id : (int?)null;
co.OraAdat.TanitasiOraId = OrarendElemUid.Tipus == CalendarOraTypeEnum.TanitasiOra ? OrarendElemUid.Id : (int?)null;
co.Hazifeladat.Id = HazifeladatId;
co.Hazifeladat.Szoveg = Hazifeladat;
co.Hazifeladat.Hatarido = HazifeladatHatarido;
foreach (var tanulo in TanuloLista)
{
var tanuloMulasztas = new NaplozasMobilCo.MulasztasModel
{
TanuloId = tanulo.Id,
MulasztasTipus = (int)tanulo.Mulasztas.Tipus,
Keses = tanulo.Mulasztas.Keses
};
foreach (var esemenyTipus in tanulo.FeljegyzesTipusLista)
{
switch (esemenyTipus)
{
case (int)EsemenyTipusEnum.HaziFeladatHiany:
tanuloMulasztas.HazifeladatHiany = true;
break;
case (int)EsemenyTipusEnum.Felszereleshiany:
tanuloMulasztas.FelszerelesHiany = true;
break;
case (int)EsemenyTipusEnum.Dicseret:
tanuloMulasztas.TanoraiDicseret = true;
break;
case (int)EsemenyTipusEnum.SzakmaiMentessegNemHivatalos:
tanuloMulasztas.Felmentes = true;
break;
}
}
co.MulasztasList.Add(tanuloMulasztas);
}
}
public Dictionary<Predicate<OraNaplozasRequest>, string> ModelValidaciok => new Dictionary<Predicate<OraNaplozasRequest>, string>
{
{
x => x.HazifeladatHatarido < x.OrarendElemUid.Datum.Date.AddDays(1),
ErrorResource.HazifeladatNemrogzithetoHataridoKorabbiMintAzOraDatuma
},
{
x => x.HazifeladatHatarido < DateTime.Today.AddDays(1),
ErrorResource.HazifeladatNemrogzithetoHataridoKorabbiMintAHolnapiNap
},
{
x => x.HazifeladatId.HasValue && string.IsNullOrWhiteSpace(x.Hazifeladat),
OrarendResource.HazifeladatSzovegKotelezo
},
{
x => x.TanuloLista.Any(y => (int)y.Mulasztas.Tipus == (int)MulasztasTipusEnum.keses && y.Mulasztas.Keses <= 0),
"A késés értéke nem lehet 0 vagy negatív szám!"
},
{
x => x.OccurrenceNumberByPrimaryKey.Any(y => y.Value > 1),
$"A következő tanulók többször szerepelnek: {string.Join(", ", OccurrenceNumberByPrimaryKey.Where(x => x.Value > 1).Select(y => y.Key))}"
}
};
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) => ModelValidaciok.Where(x => x.Key.Invoke(this)).AsEnumerable().Select(x => new ValidationResult(x.Value));
}
}