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 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 TanuloLista { get; set; } public string Hazifeladat { get; set; } public DateTime? HazifeladatHatarido { get; set; } public int? HazifeladatId { get; set; } public Dictionary OccurrenceNumberByPrimaryKey = new Dictionary(); 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, string> ModelValidaciok => new Dictionary, 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 Validate(ValidationContext validationContext) => ModelValidaciok.Where(x => x.Key.Invoke(this)).AsEnumerable().Select(x => new ValidationResult(x.Value)); } }