using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Kreta.BusinessLogic.Validation; using Kreta.Core; using Kreta.Core.CustomAttributes; using Kreta.Enums; using Kreta.Framework.Util; using Kreta.Resources; using Newtonsoft.Json; namespace Kreta.BusinessLogic.HelperClasses.ImportCo { public class OratervImportCo : BaseImportCo { [JsonIgnore] public List MainImportItemList { get; set; } = new List(); [JsonIgnore] public List NemImportalhatoItemList { get; set; } = new List(); [JsonIgnore] public List TantervCOList { get; set; } [JsonIgnore] public List TantargyCOList { get; set; } [JsonIgnore] public List OratervCOList { get; set; } [JsonIgnore] public List OratervTantargyCOList { get; set; } [JsonProperty("T_TANTARGY_OSSZES")] public List TantargyImportJsonItemList { get; set; } [JsonProperty("T_ORATERV_OSSZES")] public List OratervImportJsonItemList { get; set; } [JsonProperty("T_ORATERVTARGY_OSSZES")] public List OratervTantargyImportJsonItemList { get; set; } public Dictionary> Validate() { var validationResultDictionary = new Dictionary>(); foreach (OratervImportItemCo importItem in MainImportItemList) { var validationResultList = new List(); //NOTE: Az import item-eket egyesével levalidáljuk! var blValidator = new BlValidator(importItem); if (!blValidator.IsValid) { validationResultList.AddRange(blValidator.ErrorList); } if (validationResultList.Count > 0) { validationResultDictionary.Add(importItem.LineNumber, validationResultList); } } Dictionary lineNumberCompareHashDictionary = MainImportItemList.ToDictionary(x => x.LineNumber, x => x.CompareHash); var duplicatedRowConditonTextList = new List { ImportExportOratervResource.ImportHeaderNameOratervNeve, ImportExportOratervResource.ImportHeaderNameTantargyNeve }; ValidateDuplicatedRows(validationResultDictionary, lineNumberCompareHashDictionary, duplicatedRowConditonTextList); foreach (var importItemCo in MainImportItemList) { //NOTE: Ilyen nevű óraterv már létezik az adatbázisban másik tantervben var oratervCo = OratervCOList.SingleOrDefault(x => x.Nev == importItemCo.OratervNeve && x.TantervNev != importItemCo.TantervNeve); if (oratervCo != default) { var validationResult = new ValidationResult(string.Format(ImportExportOratervResource.HibaIlyenNevuOratervMarLetezikARendszerbenATanevben, oratervCo.TantervNev, oratervCo.Nev)); if (validationResultDictionary.ContainsKey(importItemCo.LineNumber)) { validationResultDictionary[importItemCo.LineNumber].Add(validationResult); } else { validationResultDictionary.Add(importItemCo.LineNumber, new List { validationResult }); } } //NOTE: Ilyen nevű óraterv már létezik az importban másik tantervben var otherImportItemCo = MainImportItemList.FirstOrDefault(x => x.OratervNeve == importItemCo.OratervNeve && x.TantervNeve != importItemCo.TantervNeve); if (otherImportItemCo != default) { var validationResult = new ValidationResult(string.Format(ImportExportOratervResource.HibaIlyenNevuOratervMarLetezikAzImportbanATanevben, otherImportItemCo.TantervNeve, otherImportItemCo.OratervNeve)); if (validationResultDictionary.ContainsKey(importItemCo.LineNumber)) { validationResultDictionary[importItemCo.LineNumber].Add(validationResult); } else { validationResultDictionary.Add(importItemCo.LineNumber, new List { validationResult }); } } //NOTE: Ilyen nevű óraterv már létezik az adatbázisban másik évfolyamnál oratervCo = OratervCOList.SingleOrDefault(x => x.Nev == importItemCo.OratervNeve && x.TantervNev == importItemCo.TantervNeve && x.Evfolyam != importItemCo.EvfolyamId); if (oratervCo != default) { var validationResult = new ValidationResult(string.Format(ImportExportOratervResource.HibaIlyenNevuOratervMarLetezikARendszerbenMasikEvfolyamnal, oratervCo.EvfolyamNev, oratervCo.Nev)); if (validationResultDictionary.ContainsKey(importItemCo.LineNumber)) { validationResultDictionary[importItemCo.LineNumber].Add(validationResult); } else { validationResultDictionary.Add(importItemCo.LineNumber, new List { validationResult }); } } //NOTE: Ilyen nevű óraterv már létezik az importban másik évfolyamnál otherImportItemCo = MainImportItemList.FirstOrDefault(x => x.OratervNeve == importItemCo.OratervNeve && x.TantervNeve == importItemCo.TantervNeve && x.EvfolyamId != importItemCo.EvfolyamId); if (otherImportItemCo != default) { var validationResult = new ValidationResult(string.Format(ImportExportOratervResource.HibaIlyenNevuOratervMarLetezikAzImportbanMasikEvfolyamnal, otherImportItemCo.TantervNeve, otherImportItemCo.OratervNeve)); if (validationResultDictionary.ContainsKey(importItemCo.LineNumber)) { validationResultDictionary[importItemCo.LineNumber].Add(validationResult); } else { validationResultDictionary.Add(importItemCo.LineNumber, new List { validationResult }); } } } return validationResultDictionary; } } public class OratervImportItemCo : BaseImportItemCo, IValidatableObject { private readonly int _tanevId; private OratervImportItemCo() { } public OratervImportItemCo(int tanevId) { _tanevId = tanevId; } #region Fields /// /// Technikai paraméter(ek) a reflection-ös exporthoz. /// public const string NemImportalhatoSorokExportAttributeId = nameof(NemImportalhatoSorokExportAttributeId); #endregion Fields [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 00, nameof(ImportExportOratervResource.ImportHeaderNameTantervNeve), typeof(ImportExportOratervResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameTantervNeve), ResourceType = typeof(ImportExportOratervResource))] public string TantervNeveImportData { get; set; } [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 01, nameof(ImportExportOratervResource.ImportHeaderNameOratervNeve), typeof(ImportExportOratervResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameOratervNeve), ResourceType = typeof(ImportExportOratervResource))] public string OratervNeveImportData { get; set; } [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 02, nameof(ImportExportOratervResource.ImportHeaderNameEvfolyamNeve), typeof(ImportExportOratervResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameEvfolyamNeve), ResourceType = typeof(ImportExportOratervResource))] public string EvfolyamNeveImportData { get; set; } [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 03, nameof(ImportExportOratervResource.ImportHeaderNameTantargyNeve), typeof(ImportExportOratervResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameTantargyNeve), ResourceType = typeof(ImportExportOratervResource))] [MaxLength(150, ErrorMessageResourceName = nameof(TantargyResource.ATantargyNeveMaximum150KarakterLehet), ErrorMessageResourceType = typeof(TantargyResource))] public string TantargyNeveImportData { get; set; } [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 04, nameof(ImportExportOratervResource.ImportHeaderNameEvesOraszam), typeof(ImportExportOratervResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameEvesOraszam), ResourceType = typeof(ImportExportOratervResource))] [DisplayFormat(DataFormatString = Constants.DataFormats.EvesOraszam)] [RegularExpression(Constants.RegularExpressions.EvesOraszam, ErrorMessageResourceName = nameof(ImportExportOratervResource.HibaAzEvesOraszamFormatumaNemMegfelelo), ErrorMessageResourceType = typeof(ImportExportOratervResource))] public string EvesOraszamImportData { get; set; } public string TantervNeve => GetStringValue(TantervNeveImportData); public string OratervNeve => GetStringValue(OratervNeveImportData); public string TantargyNeve => GetStringValue(TantargyNeveImportData); public string EvfolyamNeve => GetStringValue(EvfolyamNeveImportData); public double? EvesOraszam => GetDoubleValue(EvesOraszamImportData); public int? TantervId { get; set; } public int? TantargyId { get; set; } public int? EvfolyamId => ((int)GeneratedAdatszotarTipusEnum.EvfolyamTipus).GetItemIdByTypeAndName(EvfolyamNeve, _tanevId); public int? OratervId { get; set; } public int? OratervTantargyId { get; set; } public int OperationTantargy { get; set; } public int OperationOraterv { get; set; } public string CompareHashTantargy { get; set; } public string CompareHashOraterv { get; set; } public IEnumerable Validate(ValidationContext validationContext) { //NOTE: Ha van megadva bármilyen érték az import data-ban, hogy ne legyen dupla validálás a required miatt. if (!string.IsNullOrWhiteSpace(TantervNeveImportData)) { if (!TantervId.IsEntityId()) { yield return new ValidationResult(ImportExportOratervResource.HibaJelenlegARendszerbenNemSzerepelIlyenNevuTanterv); } } //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(TantargyNeveImportData)) { //NOTE: Ha az érték null, akkor a bejövő adat nem megfelelő formátumú! if (!TantargyId.IsEntityId()) { //yield return new ValidationResult(ImportExportOratervResource.HibaJelenlegARendszerbenNemSzerepelIlyenNevuTantargy); } } //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(EvfolyamNeveImportData)) { //NOTE: Ha az érték null, akkor a bejövő adat nem megfelelő formátumú! if (!EvfolyamId.IsEntityId()) { yield return new ValidationResult(ImportExportOratervResource.HibaJelenlegARendszerbenNemSzerepelIlyenNevuEvfolyam); } } } } public class OratervImportJsonItemCo : BaseImportJsonItemCo { public OratervImportJsonItemCo(OratervImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { Id = importItemCo.OratervId; TantervNeve = importItemCo.TantervNeve; OratervNeve = importItemCo.OratervNeve; EvfolyamNeve = importItemCo.EvfolyamNeve; EvfolyamId = importItemCo.EvfolyamId; TantervId = importItemCo.TantervId; LineNumber = importItemCo.LineNumber; Operation = importItemCo.OperationOraterv; } [JsonIgnore] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameTantervNeve), ResourceType = typeof(ImportExportOratervResource))] public string TantervNeve { get; set; } [JsonIgnore] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameEvfolyamNeve), ResourceType = typeof(ImportExportOratervResource))] public string EvfolyamNeve { get; set; } #region Import Json Properties [JsonProperty("C_NEV")] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameOratervNeve), ResourceType = typeof(ImportExportOratervResource))] public string OratervNeve { get; set; } [JsonProperty("C_EVFOLYAM")] public int? EvfolyamId { get; set; } [JsonProperty("C_TANTERVID")] public int? TantervId { get; set; } #region Default Required Import Json Properties #endregion #endregion } public class OratervTargyImportJsonItemCo : BaseImportJsonItemCo { public OratervTargyImportJsonItemCo(OratervImportItemCo importItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { Id = importItemCo.OratervTantargyId; OratervNeve = importItemCo.OratervNeve; TantargyNeve = importItemCo.TantargyNeve; OratervId = importItemCo.OratervId; TantargyId = importItemCo.TantargyId; EvesOraszam = importItemCo.EvesOraszam ?? 0; TantervNeve = importItemCo.TantervNeve; EvfolyamNeve = importItemCo.EvfolyamNeve; LineNumber = importItemCo.LineNumber; Operation = importItemCo.Operation; } [JsonProperty("OratervNev")] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameOratervNeve), ResourceType = typeof(ImportExportOratervResource))] public string OratervNeve { get; set; } [JsonProperty("TantargyNev")] [Display(Name = nameof(ImportExportOratervResource.ImportHeaderNameTantargyNeve), ResourceType = typeof(ImportExportOratervResource))] public string TantargyNeve { get; set; } [JsonIgnore] public string EvfolyamNeve { get; set; } [JsonIgnore] public string TantervNeve { get; set; } #region Import Json Properties [JsonProperty("C_TANTARGYID")] public int? TantargyId { get; set; } [JsonProperty("C_ORATERVID")] public int? OratervId { get; set; } [JsonProperty("C_EVESORASZAM")] public double EvesOraszam { get; set; } #region Default Required Import Json Properties #endregion #endregion } }