using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Validation; using Kreta.Enums; using Kreta.Resources; using Newtonsoft.Json; namespace Kreta.BusinessLogic.HelperClasses.ImportCo { public class BaseTantargyfelosztasImportCo : BaseImportCo { [JsonProperty("T_TANTARGY_OSSZES")] public List TantargyImportJsonItemList { get; set; } [JsonProperty("T_OSZTALYCSOPORT_OSSZES")] public List OsztalyCsoportImportJsonItemList { get; set; } [JsonProperty("T_OSZTALY_OSSZES")] public List OsztalyImportJsonItemList { get; set; } [JsonProperty("T_CSOPORT_OSSZES")] public List CsoportImportJsonItemList { get; set; } [JsonIgnore] public int FeladatellatasiHelyId { get; set; } [JsonIgnore] public List TanarCoList { get; set; } [JsonIgnore] public List OsztalyCoList { get; set; } [JsonIgnore] public List CsoportCoList { get; set; } [JsonIgnore] public List TeremCoList { get; set; } [JsonIgnore] public FeladatEllatasiHelyCO FeladatellatasiHelyCo { get; set; } [JsonIgnore] public int FeladatKategoriaId { get; set; } public Dictionary> Validate(List baseTantargyfelosztasImportItemList) { var validationResultDictionary = new Dictionary>(); foreach (BaseTantargyfelosztasImportItemCo importItem in baseTantargyfelosztasImportItemList) { var validationResultList = new List(); var isDualisElem = false; //NOTE: Az import item-eket egyesével levalidáljuk! var blValidator = new BlValidator(importItem); if (!blValidator.IsValid) { validationResultList.AddRange(blValidator.ErrorList); } //NOTE: Levalidáljuk, hogy a tanár szerepel-e az adatbázisban, ha nem üres string(illetve, ha több ugyanolyan nevű tanár szerepel, akkor megnézzük születési idő alapján is). // Azért nem BlValidator-ban, mert így csak egyszer kell lekérni a tanárlistát! var tanarNevToCompare = importItem.TanarNev?.ToComparableString(); if (!string.IsNullOrWhiteSpace(tanarNevToCompare)) { if (!importItem.TanarSzuletesiIdo.HasValue && TanarCoList.All(x => x.FelhasznaloNyomtatasiNevComparableString != tanarNevToCompare) || importItem.TanarSzuletesiIdo.HasValue && !TanarCoList.Any(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare && x.FelhasznaloSzuletesiIdo == importItem.TanarSzuletesiIdo)) { validationResultList.Add(new ValidationResult(string.Format(ImportExportCommonResource.TanarIsNotInDatabase, importItem.TanarNevImportData))); } if (!importItem.TanarSzuletesiIdo.HasValue && TanarCoList.Count(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare) > 1) { validationResultList.Add(new ValidationResult(string.Format(ImportExportCommonResource.TanarExistsMoreTimesInDatabase, importItem.TanarNevImportData))); } else if (TanarCoList.Where(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare && (!importItem.TanarSzuletesiIdo.HasValue || x.FelhasznaloSzuletesiIdo == importItem.TanarSzuletesiIdo))?.ToList()?.Count() > 1) { validationResultList.Add(new ValidationResult(ErrorResource.AzImportalasFajlAzonosNeveketEsSzuletesiDatumokatTartalmaz)); } else { var tanarCo = TanarCoList.SingleOrDefault(x => x.FelhasznaloNyomtatasiNevComparableString == tanarNevToCompare && (!importItem.TanarSzuletesiIdo.HasValue || x.FelhasznaloSzuletesiIdo == importItem.TanarSzuletesiIdo)); if (tanarCo != null) { if (tanarCo.SzerepkorTipusIdString.Equals(SzerepkorTipusEnum.alkalmazott.ToString())) { validationResultList.Add(new ValidationResult(ImportExportCommonResource.TantargyfelosztasNemLehetsegesCsakAlkalmazottJogunak)); } if (tanarCo.SzervezetId.HasValue && !isDualisElem) { isDualisElem = true; } } } } var csoportNevToCompare = importItem.CsoportNev?.ToComparableString(); if (!string.IsNullOrWhiteSpace(csoportNevToCompare) && baseTantargyfelosztasImportItemList.Any(x => x.OsztalyNev?.ToComparableString() == csoportNevToCompare)) { validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottCsoportSzerepelOsztalykentADokumentumban)); } if (!string.IsNullOrWhiteSpace(csoportNevToCompare) && OsztalyCoList.Any(x => x.NevComparableString == csoportNevToCompare)) { validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottCsoportSzerepelOsztalykentAzAdatbazisban)); } var osztalyNevToCompare = importItem.OsztalyNev?.ToComparableString(); if (!string.IsNullOrWhiteSpace(osztalyNevToCompare) && baseTantargyfelosztasImportItemList.Any(x => x.CsoportNev?.ToComparableString() == osztalyNevToCompare)) { validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottOsztalySzerepelCsoportkentADokumentumban)); } if (!string.IsNullOrWhiteSpace(osztalyNevToCompare) && CsoportCoList.Any(x => x.NevComparableString == osztalyNevToCompare)) { validationResultList.Add(new ValidationResult(ImportExportTantargyfelosztasResource.AMegadottOsztalySzerepelCsoportkentAzAdatbazisban)); } if (!isDualisElem && !string.IsNullOrWhiteSpace(csoportNevToCompare)) { var csoportCo = CsoportCoList.SingleOrDefault(x => x.NevComparableString == csoportNevToCompare); if (csoportCo != null && csoportCo.SzervezetId.HasValue) { isDualisElem = true; } } var tantargyNevToCompare = importItem.TantargyNev?.ToComparableString(); if (!isDualisElem && !string.IsNullOrWhiteSpace(tantargyNevToCompare) && tantargyNevToCompare.Equals(TantargyResource.DualisKepzes.ToComparableString())) { isDualisElem = true; } if (isDualisElem) { validationResultList.Add(new ValidationResult(ImportExportCommonResource.DualisKepzeshezKapcsolodoElemekImportalasaNemLehetseges)); } if (validationResultList.Count > 0) { validationResultDictionary.Add(importItem.LineNumber, validationResultList); } } return validationResultDictionary; } } public class BaseTantargyfelosztasImportItemCo : BaseImportItemCo { [MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameOsztaly), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string OsztalyNevImportData { get; set; } [MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameCsoport), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string CsoportNevImportData { get; set; } [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameTantargy), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string TantargyNevImportData { get; set; } [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [MaxLength(255, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTantargyfelosztasResource.ImportHeaderNameTanar), ResourceType = typeof(ImportExportTantargyfelosztasResource))] public string TanarNevImportData { get; set; } public string OsztalyNev => GetStringValue(OsztalyNevImportData); public string CsoportNev => GetStringValue(CsoportNevImportData); public bool IsCsoport => !string.IsNullOrWhiteSpace(CsoportNev); public string OsztalyCsoportNev => IsCsoport ? CsoportNev : OsztalyNev; public string TantargyNev => GetStringValue(TantargyNevImportData); public DateTime? TanarSzuletesiIdo => GetSzuletesIdoFromNev(TanarNevImportData); public string TanarSzuletesiIdoString => GetDateTimeString(TanarSzuletesiIdo); public string TanarNev => GetNev(TanarNevImportData, TanarSzuletesiIdo); public int? TanarId { get; set; } public string TantargyfelosztasNev => $"{TantargyNev} - {OsztalyCsoportNev} - {TanarNev}"; public int? CsoportTipusId { get; set; } public bool IsOsszefuggoSzakmaiGyakorlat => CsoportTipusId == (int)CsoportTipusEnum.OsszefuggoSzakmaiGyakorlatiCsoport; public int OperationTantargy { get; set; } public string CompareHashTantargy { get; set; } public int OperationOsztaly { get; set; } public string CompareHashOsztaly { get; set; } public int OperationCsoport { get; set; } public string CompareHashCsoport { get; set; } } public class TantargyImportJsonItemCo : BaseImportJsonItemCo { public TantargyImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { Nev = importItemCo.TantargyNev; RovidNev = Nev.Length > 20 ? Nev.Substring(0, 20) : Nev; NevNyomtatvanyban = Nev; LineNumber = importItemCo.LineNumber; Operation = importItemCo.OperationTantargy; } public TantargyImportJsonItemCo(OratervImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { Nev = importItemCo.TantargyNeve; RovidNev = Nev.Length > 20 ? Nev.Substring(0, 20) : Nev; NevNyomtatvanyban = Nev; LineNumber = importItemCo.LineNumber; Operation = importItemCo.OperationTantargy; } #region Import Json Properties [JsonProperty("C_NEV")] public string Nev { get; set; } [JsonProperty("C_ROVIDNEV")] public string RovidNev { get; set; } [JsonProperty("C_NEVNYOMTATVANYBAN")] public string NevNyomtatvanyban { get; set; } #region Default Required Import Json Properties [JsonProperty("C_GYAKORLATI")] public string IsGyakorlati => SDAConvert.ToSDABoolean(false); [JsonProperty("C_TARGYKATEGORIA")] public int Tantargykategoria => (int)TargyKategoriaTipusEnum.na; [JsonProperty("C_ALTANTARGYKENTNYOMTATVANYBAN")] public string IsAltantargykentNyomtatvanyban => SDAConvert.ToSDABoolean(false); [JsonProperty("C_TANORANKIVULI")] public string IsTanoranKivuli => SDAConvert.ToSDABoolean(false); [JsonProperty("C_FOTARGYE")] public string IsFotargy => SDAConvert.ToSDABoolean(true); [JsonProperty("C_FOTARGYID")] public int? FotargyId => null; #endregion Default Required Import Json Properties #endregion Import Json Properties } public class OsztalyCsoportImportJsonItemCo : BaseImportJsonItemCo { public OsztalyCsoportImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int operationOsztalyCsoport, string osztalyCsoportNev, int feladatellatasiHelyId, int feladatKategoriaId, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { Nev = osztalyCsoportNev; FeladatellatasiHelyId = feladatellatasiHelyId; FeladatKategoriaId = feladatKategoriaId; LineNumber = importItemCo.LineNumber; Operation = operationOsztalyCsoport; } #region Import Json Properties [JsonProperty("C_NEV")] public string Nev { get; set; } [JsonProperty("C_FELADATELLATASIHELYID")] public int FeladatellatasiHelyId { get; set; } #region Default Required Import Json Properties [JsonProperty("C_ISTECHNIKAI")] public string IsTechnikaiOsztaly => SDAConvert.ToSDABoolean(false); [JsonProperty("C_VEGZOSEVFOLYAM")] public string IsVegzosEvfolyam => SDAConvert.ToSDABoolean(false); [JsonProperty("C_EVFOLYAMTIPUSA")] public int EvfolyamTipus => (int)EvfolyamTipusEnum.na; [JsonProperty("C_KERESZTFELEVES")] public string IsKeresztfeleves => SDAConvert.ToSDABoolean(false); [JsonProperty("C_FELADATKATEGORIAID")] public int FeladatKategoriaId { get; set; } [JsonProperty("C_MEGJEGYZES")] public string Megjegyzes => null; [JsonProperty("C_TERVEZETTLETSZAM")] public int? TervezettLetszam => null; [JsonProperty("C_TEREMID")] public int? TeremId => null; [JsonProperty("C_KEPZESIFORMA")] public int KepzesiForma => (int)TanterviJellegEnum.nappali_rendszeru_iskolai_oktatas; [JsonProperty("C_ISGYOGYPEDAGOGIAILOGOPEDIAI")] public string IsGyogypedagogiaiLogopediai => SDAConvert.ToSDABoolean(false); #endregion Default Required Import Json Properties #endregion Import Json Properties } public class OsztalyImportJsonItemCo : BaseImportJsonItemCo { public OsztalyImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { OsztalyCsoportNev = importItemCo.OsztalyNev; LineNumber = importItemCo.LineNumber; Operation = importItemCo.OperationOsztaly; } #region Import Json Properties [JsonProperty("OsztalyCsoportNev")] public string OsztalyCsoportNev { get; set; } #region Default Required Import Json Properties [JsonProperty("C_KETTANNYELVU")] public string IsKettannyelvu => SDAConvert.ToSDABoolean(false); [JsonProperty("C_NEMZETISEGI")] public string IsNemzetisegi => SDAConvert.ToSDABoolean(false); [JsonProperty("C_NYELVIELOKESZITO")] public string IsNyelvielokeszito => SDAConvert.ToSDABoolean(false); [JsonProperty("C_SPORT")] public string IsSport => SDAConvert.ToSDABoolean(false); [JsonProperty("C_OSZTALYNAPLOLEIRASA")] public string OsztalynaploLeirasa => null; [JsonProperty("C_OSZTALYNAPLOMEGNYITASA")] public string OsztalynaploMegnyitasaDate => null; [JsonProperty("C_OSZTALYNAPLOZARASA")] public string OsztalynaploZarasaDate => null; [JsonProperty("C_OSZTALYFONOKID")] public int? OsztalyfonokId => null; [JsonProperty("C_OFOHELYETTESID")] public int? OsztalyfonokHelyettesId => null; [JsonProperty("C_TANTERVID")] public int? TantervId => null; #endregion Default Required Import Json Properties #endregion Import Json Properties } public class CsoportImportJsonItemCo : BaseImportJsonItemCo { public CsoportImportJsonItemCo(BaseTantargyfelosztasImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { OsztalyCsoportNev = importItemCo.CsoportNev; OsztalybontasNev = importItemCo.OsztalyNev; //NOTE: Az CsoportTipusId.Value nem lehet null, mert ide már csak olyan elem jön be, aminek van csoprt típusa! Tipus = importItemCo.CsoportTipusId.Value; LineNumber = importItemCo.LineNumber; Operation = importItemCo.OperationCsoport; } #region Import Json Properties [JsonProperty("OsztalyCsoportNev")] public string OsztalyCsoportNev { get; set; } [JsonProperty("OsztalybontasNev")] public string OsztalybontasNev { get; set; } [JsonProperty("C_TIPUSA")] public int Tipus { get; set; } #region Default Required Import Json Properties [JsonProperty("C_CSOPORTNAPLOLEIRAS")] public string CsoportnaploLeiras => null; [JsonProperty("C_CSOPORTNAPLOMEGNYITASA")] public string CsoportnaploMegnyitasaDate => null; [JsonProperty("C_CSOPORTNAPLOZARASA")] public string CsoportnaploZarasaDate => null; [JsonProperty("C_CSOPORTVEZETOID")] public int? CsoportvezetoId => null; [JsonProperty("C_OSZTALYBONTASID")] public int? OsztalybontasId => null; #endregion Default Required Import Json Properties #endregion Import Json Properties } }