using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.Core; using Kreta.Enums; using Kreta.Enums.ManualEnums.ImportExport; using Kreta.Resources; using Newtonsoft.Json; namespace Kreta.BusinessLogic.HelperClasses.ImportCo { public class TantargyfelosztasImportCo : BaseTantargyfelosztasImportCo { [JsonIgnore] public List MainImportItemList { get; set; } = new List(); [JsonIgnore] public List NemImportalhatoItemList { get; set; } = new List(); [JsonProperty("T_FOGLALKOZAS_OSSZES")] public List MainImportJsonItemList { get; set; } [JsonIgnore] public int TantargyfelosztasImportTipus { get; set; } public Dictionary> Validate(FeladatEllatasiHelyCO feladatellatasiHelyCo) { Dictionary> validationResultDictionary = Validate(GetBaseImportItemCoList()); if (TantargyfelosztasImportTipus == (int)TantargyfelosztasImportTipusEnum.FeladatfelosztasImport) { string csoportNevPrefix = $"{feladatellatasiHelyCo.MukodesiHelyNev} - {feladatellatasiHelyCo.OktatasiNevelesiFeladatNev} - "; foreach (TantargyfelosztasImportItemCo importItem in MainImportItemList) { var validationResultList = new List(); if (!string.IsNullOrWhiteSpace(importItem.CsoportNev)) { var csoportItem = CsoportCoList.SingleOrDefault(x => x.Nev == importItem.CsoportNev); if (csoportItem != null) { var csoportNevWithoutPrefix = importItem.CsoportNev.Substring(csoportNevPrefix.Length); if (csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasSzakertoiBizottsagiTevekenyseg && csoportItem.TipusId != (int)CsoportTipusEnum.szakertoi_bizottsagi_tevekenyseg || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasNevelesiTanacsadas && csoportItem.TipusId != (int)CsoportTipusEnum.nevelesi_tanacsadas || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasKonduktivPedagogiaiEllatas && csoportItem.TipusId != (int)CsoportTipusEnum.konduktiv_pedagogiai_ellatas || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasIskolapszichologiaiOvodapszichologiaiEllatas && csoportItem.TipusId != (int)CsoportTipusEnum.iskolapszichologiai_ovodapszichologiai_ellatas || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasLogopediaiEllatas && csoportItem.TipusId != (int)CsoportTipusEnum.logopediai_ellatas || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasGyogytestneveles && csoportItem.TipusId != (int)CsoportTipusEnum.gyogytestneveles || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasGyogypedagogiaiTanacsadas && csoportItem.TipusId != (int)CsoportTipusEnum.gyogypedagogiai_tanacsadas_korai_fejlesztes_es_gondozas || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasKiemeltenTehetsegesGyermekekTanulokGondozasa && csoportItem.TipusId != (int)CsoportTipusEnum.kiemelten_tehetseges_gyermekek_tanulok_gondozasa || csoportNevWithoutPrefix == ImportExportTantargyfelosztasResource.ImportHeaderNameFeladatfelosztasTovabbtanulasiPalyavalasztasiTanacsadas && csoportItem.TipusId != (int)CsoportTipusEnum.tovabbtanulasi_palyavalasztasi_tanacsadas) { validationResultList.Add(new ValidationResult(string.Format(ImportExportTantargyfelosztasResource.Az0CsoportMarLetezikAzAdatbazisbanDeATipusaNem1, csoportItem.Nev, csoportNevWithoutPrefix))); } } } if (validationResultList.Count > 0) { if (validationResultDictionary.ContainsKey(importItem.LineNumber)) { validationResultDictionary[importItem.LineNumber].AddRange(validationResultList); } else { validationResultDictionary.Add(importItem.LineNumber, validationResultList); } } } } return validationResultDictionary; } public List GetBaseImportItemCoList() { var result = MainImportItemList.ConvertAll(new Converter(x => x)); return result; } } public class TantargyfelosztasImportItemCo : BaseTantargyfelosztasImportItemCo, IValidatableObject { [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [MaxLength(5, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameOraszam), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string OraszamImportData { get; set; } [MaxLength(5, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameTulora), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string TuloraImportData { get; set; } [MaxLength(5, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameTtfOraszamKorrekcio), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string TtfOraszamKorrekcioImportData { get; set; } [MaxLength(5, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameNemzetisegiOra), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string NemzetisegiOraImportData { get; set; } [MaxLength(5, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameMegbizasiOraszam), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string MegbizasiOraszamImportData { get; set; } public double? Oraszam => GetDoubleValue(OraszamImportData); public double? Tuloraszam => GetDoubleValue(TuloraImportData, 0); public bool? IsOsszevontOra => GetBooleanValue(TtfOraszamKorrekcioImportData, false); public bool? IsNemzetisegiOra => GetBooleanValue(NemzetisegiOraImportData, false); public double? MegbizasiOraszam => GetDoubleValue(MegbizasiOraszamImportData, 0); public double OraszamSum { get; set; } #region Validate public IEnumerable Validate(ValidationContext validationContext) { if (string.IsNullOrWhiteSpace(OsztalyNev) && string.IsNullOrWhiteSpace(CsoportNev)) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.OsztalyOrCsoportRequired); } else if (OsztalyNev == CsoportNev) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.OsztalyCsoportNemLehetEgyenlo); } //NOTE: Ha van megadva bármilyen érték az import data-ban, meg kell vizsgálni, hogy sikerült-e átkonvertálni a megfelelő típusra. if (!string.IsNullOrWhiteSpace(OraszamImportData)) { //NOTE: Ha az érték null, akkor a bejövő adat nem megfelelő formátumú! if (!Oraszam.HasValue) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.NemMegfeleloAzOraszamFormatuma); } else { if (Oraszam < 0) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.AzOraszamNemLehetKisebbMint0); } else if (Oraszam > Constants.General.TantargyfelosztasImportMaxOraszam) { yield return new ValidationResult(string.Format(ImportExportTantargyfelosztasResource.AzOraszamNemLehetNagyobbMint0, Constants.General.TantargyfelosztasImportMaxOraszam.ToString())); } if (Tuloraszam.HasValue) { if (Tuloraszam < 0) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.AzTuloraNemLehetKisebbMint0); } else if (Tuloraszam > Oraszam) { yield return new ValidationResult(string.Format(ImportExportTantargyfelosztasResource.AzTuloraNemLehetNagyobbMintAzOraszam0, Oraszam.ToString())); } } } } //NOTE: Ha van megadva bármilyen érték az import data-ban, meg kell vizsgálni, hogy sikerült-e átkonvertálni a megfelelő típusra. if (!string.IsNullOrWhiteSpace(TuloraImportData)) { //NOTE: Ha az érték null, akkor a bejövő adat nem megfelelő formátumú! if (!Tuloraszam.HasValue) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.NemMegfeleloATuloraFormatuma); } } if (!IsOsszevontOra.HasValue) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.NemMegfeleloATtfOraszamKorrekcioFormatuma); } if (!IsNemzetisegiOra.HasValue) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.NemMegfeleloANemzetisegiOraFormatuma); } if (!MegbizasiOraszam.HasValue) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.NemMegfeleloMegbizasiSzerzodesselEllatottOraFormatuma); } else { if (MegbizasiOraszam < 0) { yield return new ValidationResult(ImportExportTantargyfelosztasResource.AMegbizasiOraszamNemLehetKisebbMint0); } else if (MegbizasiOraszam > Constants.General.TantargyfelosztasImportMaxOraszam) { yield return new ValidationResult(string.Format(ImportExportTantargyfelosztasResource.AMegbizasiOraszamNemLehetNagyobbMint, Constants.General.TantargyfelosztasImportMaxOraszam.ToString())); } } if (!CsoportTipusId.IsEntityId()) { yield return new ValidationResult(string.Format(ImportExportTantargyfelosztasResource.NemLetezikAzAlabbiCsoportTipusAdatszotar, CsoportNev)); } } #endregion Validate } public class TantargyfelosztasImportJsonItemCo : BaseImportJsonItemCo { public TantargyfelosztasImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, string compareHash, double oraszam, double tuloraszam, bool isOsszevontOra, bool isNemzetisegiOra, double megbizasiOraszam, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { OsztalyCsoportNev = importItemCo.OsztalyCsoportNev; TantargyNev = importItemCo.TantargyNev; Nev = importItemCo.TantargyfelosztasNev; Oraszam = oraszam; TipusId = importItemCo.IsCsoport ? (int)FoglalkozasTipusEnum.tanora_osztalybontasos_ : (int)FoglalkozasTipusEnum.tanora; Tuloraszam = tuloraszam; IsOsszevontOra = isOsszevontOra; IsNemzetisegiOra = isNemzetisegiOra; MegbizasiOraszam = megbizasiOraszam; //NOTE: Az TanarId.Value nem lehet null, mert ide már csak olyan elem jön be, aminek van tanár id-ja! TanarId = importItemCo.TanarId.Value; TanarNev = importItemCo.TanarNev; Id = importItemCo.Id; LineNumber = importItemCo.LineNumber; Operation = importItemCo.Operation; CompareHash = compareHash; } [JsonIgnore] public string CompareHash { get; set; } #region Import Json Properties [JsonProperty("OsztalyCsoportNev")] public string OsztalyCsoportNev { get; set; } [JsonProperty("TantargyNev")] public string TantargyNev { get; set; } [JsonIgnore] public string TanarNev { get; set; } [JsonProperty("C_TANARID")] public int TanarId { get; set; } [JsonProperty("C_NEV")] public string Nev { get; set; } [JsonProperty("C_ORASZAM")] public double Oraszam { get; set; } [JsonProperty("C_FOGLALKOZASTIPUSA")] public int TipusId { get; set; } [JsonProperty("C_TULORASZAM")] public double Tuloraszam { get; set; } [JsonIgnore] public bool IsOsszevontOra { get; set; } [JsonProperty("C_ISOSSZEVONTORA")] public string IsOsszevontOraString => SDAConvert.ToSDABoolean(IsOsszevontOra); [JsonIgnore] public bool IsNemzetisegiOra { get; set; } [JsonProperty("C_ISNEMZETISEGI")] public string IsNemzetisegiOraString => SDAConvert.ToSDABoolean(IsNemzetisegiOra); [JsonProperty("C_MEGBIZASIORASZAM")] public double MegbizasiOraszam { get; set; } #region Default Required Import Json Properties [JsonProperty("C_ERTEKELESKELL")] public string IsErtekelesKell => SDAConvert.ToSDABoolean(true); [JsonProperty("C_MULASZTASKELL")] public string IsMulasztasKell => SDAConvert.ToSDABoolean(true); [JsonProperty("C_TANARFELVEHETI")] public string IsTanarFelveheti => SDAConvert.ToSDABoolean(true); #endregion Default Required Import Json Properties #endregion Import Json Properties } }