using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Kreta.BusinessLogic.Validation; using Kreta.Core; using Kreta.Core.CustomAttributes; using Kreta.Resources; using Newtonsoft.Json; namespace Kreta.BusinessLogic.HelperClasses.ImportCo { public class TanmenetImportCo : BaseImportCo { [JsonIgnore] public List MainImportItemList { get; set; } = new List(); [JsonIgnore] public List NemImportalhatoItemList { get; set; } = new List(); [JsonProperty("T_TANMENET_OSSZES")] public List MainImportJsonItemList { get; set; } [JsonIgnore] public TantargyfelosztasItemCo Tantargyfelosztas { get; set; } public Dictionary> Validate() { var validationResultDictionary = new Dictionary>(); foreach (TanmenetImportItemCo 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 { ImportExportTanmenetResource.ImportHeaderNameOraszam }; ValidateDuplicatedRows(validationResultDictionary, lineNumberCompareHashDictionary, duplicatedRowConditonTextList); return validationResultDictionary; } } public class TanmenetImportItemCo : BaseImportItemCo, IValidatableObject { #region Fields /// /// Technikai paraméter(ek) a reflection-ös exporthoz. /// public const string NemImportalhatoSorokExportAttributeId = nameof(NemImportalhatoSorokExportAttributeId); #endregion Fields [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 00, nameof(ImportExportTanmenetResource.ImportHeaderNameOraszam), typeof(ImportExportTanmenetResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [MaxLength(4, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTanmenetResource.ImportHeaderNameOraszam), ResourceType = typeof(ImportExportTanmenetResource))] public string OraszamImportData { get; set; } [SimpleExportColumn(NemImportalhatoSorokExportAttributeId, 01, nameof(ImportExportTanmenetResource.ImportHeaderNameTema), typeof(ImportExportTanmenetResource))] [Required(ErrorMessageResourceName = nameof(ErrorResource.Required), ErrorMessageResourceType = typeof(ErrorResource))] [MaxLength(1000, ErrorMessageResourceName = nameof(CommonResource.MaxLengthValidation), ErrorMessageResourceType = typeof(CommonResource))] [Display(Name = nameof(ImportExportTanmenetResource.ImportHeaderNameTema), ResourceType = typeof(ImportExportTanmenetResource))] public string TemaImportData { get; set; } public int? OraSorszam => GetIntValue(OraszamImportData); public string Tema => GetStringValue(TemaImportData); public TanmenetItemCo Tanmenet { get; set; } #region Validate public IEnumerable Validate(ValidationContext validationContext) { //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 (!OraSorszam.HasValue) { yield return new ValidationResult(string.Format(ImportExportCommonResource.InvalidNumberFormat, ImportExportTanmenetResource.ImportHeaderNameOraszam, OraszamImportData)); } else { if (OraSorszam < 0 || OraSorszam > 720) { yield return new ValidationResult(ErrorResource.AzOraSzamaCsakEgy0Es720KozottiEgeszSzamLehet); } } } } #endregion Validate } public class TanmenetImportJsonItemCo : BaseImportJsonItemCo { public TanmenetImportJsonItemCo(TanmenetImportItemCo importItemCo, TantargyfelosztasItemCo tantargyfelosztasItemCo, int tanevId, int intezmenyId, int felhasznaloId) : base(tanevId, intezmenyId, felhasznaloId) { Now = DateTime.Now; if (importItemCo.Tanmenet != null) { BejegyzesIdeje = importItemCo.Tanmenet.BejegyzesIdeje; BejegyzesIdejeString = importItemCo.Tanmenet.BejegyzesIdejeString; } else { BejegyzesIdeje = Now; BejegyzesIdejeString = Now.ToString(Constants.ToStringPattern.SortableDateTimePattern); } TantargyId = tantargyfelosztasItemCo.TantargyId; OsztalyCsoportId = tantargyfelosztasItemCo.OsztalyCsoportId; TanarId = tantargyfelosztasItemCo.TanarId; Tema = importItemCo.Tema; //NOTE: Az OraSorszam.Value nem lehet null, mert ide már csak olyan elem jön be, aminek van óraszáma! OraSorszam = importItemCo.OraSorszam.Value; Nev = $"{OraSorszam}. {Tema}"; Id = importItemCo.Id; LineNumber = importItemCo.LineNumber; Operation = importItemCo.Operation; } #region Import Json Properties [JsonIgnore] public DateTime BejegyzesIdeje { get; set; } [JsonProperty("C_BEJEGYZESIDEJE")] public string BejegyzesIdejeString { get; set; } [JsonProperty("C_ORASZAM")] public int OraSorszam { get; set; } [JsonProperty("C_TANTARGYID")] public int TantargyId { get; set; } [JsonProperty("C_OSZTALYCSOPORTID")] public int OsztalyCsoportId { get; set; } [JsonProperty("C_FELTOLTOID")] public int TanarId { get; set; } [JsonProperty("C_TEMA")] public string Tema { get; set; } [JsonProperty("C_NEV")] public string Nev { get; set; } #region Default Required Import Json Properties [JsonProperty("C_MEGJEGYZES")] public string Megjegyzes => null; [JsonProperty("C_ROVIDNEV")] public string RovidNev => null; #endregion Default Required Import Json Properties #endregion Import Json Properties } }