using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.IO; using System.Linq; using System.Runtime.Caching; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.HelperClasses.ImportCo; using Kreta.BusinessLogic.Logic; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Enums.ManualEnums.ImportExport; using Kreta.Resources; using Newtonsoft.Json; namespace Kreta.BusinessLogic.Helpers.ImportExport { public class TanulokElerhetosegiAdataikImportExportHelper : LogicBase { #region Fields private readonly string _importObjectCacheKey; #endregion Fields #region Properties public static Dictionary ImportHeaderList => new Dictionary { { 00, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloNeve }, { 01, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloOktatasiAzonosito }, { 02, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloTelefonszam }, { 03, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamAlapertelmezett }, { 04, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamTipusa }, { 05, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloEmailCim }, { 06, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailAlapertelmezett }, { 07, ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailTipus } }; public TanulokElerhetosegiAdataikImportCo ImportCo { get => (TanulokElerhetosegiAdataikImportCo)Cache.Get(_importObjectCacheKey); set { if (ImportCo != null) { Cache.Remove(_importObjectCacheKey); } Cache.Add(_importObjectCacheKey, value, new CacheItemPolicy { SlidingExpiration = TimeSpan.FromMinutes(30) }); } } #endregion Properties #region Constructors public TanulokElerhetosegiAdataikImportExportHelper(IConnectionType connectionType) : base(connectionType) { _importObjectCacheKey = $"{nameof(TanulokElerhetosegiAdataikImportCo)}_{IntezmenyId}_{FelhasznaloId}_ImportObjectCacheKey"; } #endregion Constructors public void SetImportCo(List> importData, int importMuvelet, bool isSzakkepzoIntezmeny) { TanulokElerhetosegiAdataikImportCo importCo = GetImportCoFromImportData(importData, isSzakkepzoIntezmeny); importCo.ImportMuvelet = importMuvelet; SetNemImportalhatoSorokByValidation(importCo); List coList = importCo.TanuloCoList; Dictionary telefonCompareHashImportItemCompareCoDictionary = GetTelefonCompareHashImportItemCompareCoDictionary(coList); Dictionary emailCompareHashImportItemCompareCoDictionary = GetEmailCompareHashImportItemCompareCoDictionary(coList); foreach (TanulokElerhetosegiAdataikImportItemCo importItem in importCo.MainImportItemList) { if (!string.IsNullOrWhiteSpace(importItem.Telefonszam)) { SetOperationTelefon(importItem, telefonCompareHashImportItemCompareCoDictionary, importCo.ImportMuvelet); } if (!string.IsNullOrWhiteSpace(importItem.EmailCim)) { SetOperationEmail(importItem, emailCompareHashImportItemCompareCoDictionary, importCo.ImportMuvelet); } } importCo.MainImportItemList.RemoveRange(importCo.NemImportalhatoItemList); var telefonImportJsonItemList = new List(); var emailImportJsonItemList = new List(); foreach (TanulokElerhetosegiAdataikImportItemCo importItem in importCo.MainImportItemList) { if (!string.IsNullOrWhiteSpace(importItem.Telefonszam)) { telefonImportJsonItemList.Add(new TelefonTanuloImportJsonItemCo(importItem, TanevId, IntezmenyId, FelhasznaloId)); } if (!string.IsNullOrWhiteSpace(importItem.EmailCim)) { emailImportJsonItemList.Add(new EmailTanuloImportJsonItemCo(importItem, TanevId, IntezmenyId, FelhasznaloId)); } } importCo.TelefonTanuloImportJsonItemList = telefonImportJsonItemList; importCo.EmailTanuloImportJsonItemList = emailImportJsonItemList; ImportCo = importCo; } private static void SetNemImportalhatoSorokByValidation(TanulokElerhetosegiAdataikImportCo importCo) { Dictionary> validationResultDictionary = importCo.Validate(); foreach (TanulokElerhetosegiAdataikImportItemCo importItem in importCo.MainImportItemList.Where(x => validationResultDictionary.Keys.Contains(x.LineNumber))) { IEnumerable validationResultList = validationResultDictionary[importItem.LineNumber]; importItem.ErrorList = validationResultList.Select(x => x.ErrorMessage).ToList(); importCo.NemImportalhatoItemList.Add(importItem); } importCo.MainImportItemList.RemoveRange(importCo.NemImportalhatoItemList); } private static void SetOperationTelefon(TanulokElerhetosegiAdataikImportItemCo importItem, Dictionary compareHashImportItemCompareCoDictionary, int importMuvelet) { var compareHash = importItem.CompareHashTelefon; if (!compareHashImportItemCompareCoDictionary.ContainsKey(compareHash)) { importItem.OperationTelefon = (int)ImportItemOperationEnum.Insert; } else { ImportItemCompareCo importItemCompareCo = compareHashImportItemCompareCoDictionary[compareHash]; if (importMuvelet == (int)ImportMuveletEnum.InsertAndUpdate) { importItem.TelefonId = importItemCompareCo.Id; importItem.OperationTelefon = (int)ImportItemOperationEnum.Update; } } } private static void SetOperationEmail(TanulokElerhetosegiAdataikImportItemCo importItem, Dictionary compareHashImportItemCompareCoDictionary, int importMuvelet) { var compareHash = importItem.CompareHashEmail; if (!compareHashImportItemCompareCoDictionary.ContainsKey(compareHash)) { importItem.OperationEmail = (int)ImportItemOperationEnum.Insert; } else { ImportItemCompareCo importItemCompareCo = compareHashImportItemCompareCoDictionary[compareHash]; if (importMuvelet == (int)ImportMuveletEnum.InsertAndUpdate) { importItem.EmailId = importItemCompareCo.Id; importItem.OperationEmail = (int)ImportItemOperationEnum.Update; } } } private TanulokElerhetosegiAdataikImportCo GetImportCoFromImportData(List> importData, bool isSzakkepzoIntezmeny) { var importCo = new TanulokElerhetosegiAdataikImportCo { TanuloCoList = new TanuloHelper(ConnectionType).GetTanuloCoList() }; var lineNumber = 1; foreach (var importDataRow in importData.Skip(1)) { var importItemCo = new TanulokElerhetosegiAdataikImportItemCo(TanevId, isSzakkepzoIntezmeny) { LineNumber = lineNumber, TanuloNeveImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloNeve)], TanuloOktatasiAzonositoImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloOktatasiAzonosito)], TanuloTelefonszamImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloTelefonszam)], TelefonszamAlapertelmezettImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamAlapertelmezett)], TelefonszamTipusaImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamTipusa)], TanuloEmailCimImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTanuloEmailCim)], EmailAlapertelmezettImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailAlapertelmezett)], EmailTipusImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailTipus)] }; importItemCo.FelhasznaloId = importCo.TanuloCoList.FirstOrDefault(x => x.FelhasznaloNyomtatasiNevComparableString == importItemCo.TanuloNeveImportData?.ToComparableString() && x.FelhasznaloOktatasiAzonositoComparableString == importItemCo.FelhasznaloOktatasiAzonosito?.ToComparableString())?.Id; var telefonMd5HashInput = importItemCo.FelhasznaloId.ToString() + importItemCo.Telefonszam?.ToComparableString(); importItemCo.CompareHashTelefon = ImportExportHelper.GetMd5Hash(telefonMd5HashInput); var emailMd5HashInput = importItemCo.FelhasznaloId.ToString() + importItemCo.EmailCim?.ToComparableString(); importItemCo.CompareHashEmail = ImportExportHelper.GetMd5Hash(emailMd5HashInput); var tanuloMd5HashInput = importItemCo.FelhasznaloId.ToString(); importItemCo.CompareHash = ImportExportHelper.GetMd5Hash(tanuloMd5HashInput); if (importItemCo.FelhasznaloId.IsEntityId()) { var tanuloHelper = new TanuloHelper(ConnectionType); importItemCo.IsVanAlapertelmezettEmail = tanuloHelper.IsTanulonakVanAlapertelmezettEmailCime(importItemCo.FelhasznaloId.Value); importItemCo.IsVanAlapertelmezettTelefonszam = tanuloHelper.IsTanulonakVanAlapertelmezettTelefonszama(importItemCo.FelhasznaloId.Value); } importCo.MainImportItemList.Add(importItemCo); lineNumber++; } return importCo; } #region Template public MemoryStream GetTemplate() { List simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(TanuloItemCo.TanulokElerhetosegiAdataikTemplateExportAttributeId, GetDefaultDropDownColumnSourceDictionary()); return SimpleExportLogic.GetTemplate(ImportExportTanulokElerhetosegiAdataikResource.ImportDefaultSheetName, simpleExportColumnCos); } #endregion Template #region Export public MemoryStream GetExport() { List coList = new TanuloHelper(ConnectionType).GetTanuloCoList().OrderBy(t => t.FelhasznaloNyomtatasiNev).ToList(); SetTelefonszamEsEmail(coList); List simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(TanuloItemCo.TanulokElerhetosegiAdataikTemplateExportAttributeId, GetDefaultDropDownColumnSourceDictionary()); return SimpleExportLogic.GetExport(ImportExportTanulokElerhetosegiAdataikResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId); } private void SetTelefonszamEsEmail(List tanuloItemCoList) { foreach (var tanuloItemCo in tanuloItemCoList) { if (tanuloItemCo.TelefonList != null && tanuloItemCo.TelefonList.Any()) { var telefon = tanuloItemCo.TelefonList.FirstOrDefault(x => x.IsAlapertelmezett) ?? tanuloItemCo.TelefonList.FirstOrDefault(); tanuloItemCo.Telefonszam = telefon?.Telefonszam ?? string.Empty; tanuloItemCo.IsAlapertelmezettTelefonszam = telefon?.IsAlapertelmezett == true ? Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Igen) : Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Nem); tanuloItemCo.TelefonszamTipusNev = telefon?.TipusNev ?? TelefonTipusEnum.Ismeretlen.GetDisplayName(TanevId); } if (tanuloItemCo.EmailList != null && tanuloItemCo.EmailList.Any()) { var email = tanuloItemCo.EmailList.FirstOrDefault(x => x.IsAlapertelmezett) ?? tanuloItemCo.EmailList.FirstOrDefault(); tanuloItemCo.EmailCim = email?.EmailCim ?? string.Empty; tanuloItemCo.IsAlapertelmezettEmailCim = email?.IsAlapertelmezett == true ? Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Igen) : Enum.GetName(typeof(IgenNemEnum), IgenNemEnum.Nem); tanuloItemCo.EmailCimTipusNev = email?.TipusNev ?? EmailTipusEnum.Na.GetDisplayName(TanevId); } } } public MemoryStream GetNemImportalhatoSorokExport() { List coList = ImportCo.NemImportalhatoItemList; List simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(TanulokElerhetosegiAdataikImportItemCo.NemImportalhatoSorokExportAttributeId); return ImportExportHelper.NemImportalhatoSorokExport(ImportExportTanulokElerhetosegiAdataikResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId); } #endregion Export private Dictionary GetTelefonCompareHashImportItemCompareCoDictionary(List tanuloItemCoList) { var compareHashImportItemCompareCoDictionary = new Dictionary(); foreach (TanuloItemCo tanuloItemCo in tanuloItemCoList) { foreach (TelefonItemCo telefonItemCo in tanuloItemCo.TelefonList) { string telefonMd5HashInput = tanuloItemCo.FelhasznaloId.ToString() + telefonItemCo.Telefonszam?.ToComparableString(); string compareHash = ImportExportHelper.GetMd5Hash(telefonMd5HashInput); var importItemCompareCo = new ImportItemCompareCo { Id = telefonItemCo.Id, CompareHash = compareHash }; if (!compareHashImportItemCompareCoDictionary.ContainsKey(compareHash)) { compareHashImportItemCompareCoDictionary.Add(compareHash, importItemCompareCo); } } } return compareHashImportItemCompareCoDictionary; } private Dictionary GetEmailCompareHashImportItemCompareCoDictionary(List tanuloItemCoList) { var compareHashImportItemCompareCoDictionary = new Dictionary(); foreach (TanuloItemCo tanuloItemCo in tanuloItemCoList) { foreach (EmailItemCo emailItemCo in tanuloItemCo.EmailList) { string emailMd5HashInput = tanuloItemCo.FelhasznaloId.ToString() + emailItemCo.EmailCim?.ToComparableString(); string compareHash = ImportExportHelper.GetMd5Hash(emailMd5HashInput); var importItemCompareCo = new ImportItemCompareCo { Id = emailItemCo.Id, CompareHash = compareHash }; if (!compareHashImportItemCompareCoDictionary.ContainsKey(compareHash)) { compareHashImportItemCompareCoDictionary.Add(compareHash, importItemCompareCo); } } } return compareHashImportItemCompareCoDictionary; } private Dictionary> GetDefaultDropDownColumnSourceDictionary() { var dropDownColumnSourceDictionary = new Dictionary>() { { ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamAlapertelmezett, EnumExtensions.GetEnumDisplayNameList(TanevId) }, }; Dal.CustomConnection.Run(ConnectionType, dalHandler => { var connectionType = new DalHandlerConnectionType(ConnectionType, dalHandler); dropDownColumnSourceDictionary.Add(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamTipusa, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.TelefonTipus, new List { (int)TelefonTipusEnum.PublikusTelefonszam })); dropDownColumnSourceDictionary.Add(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailAlapertelmezett, EnumExtensions.GetEnumDisplayNameList(TanevId)); dropDownColumnSourceDictionary.Add(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailTipus, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EmailTipus, new List { (int)EmailTipusEnum.PublikusEmailcim })); }); return dropDownColumnSourceDictionary; } public void Import(object importJsonObject, int importMuvelet, string tableNameList, IEnumerable alapertelmezettEmailFelhasznaloIds, IEnumerable alapertelmezettTelefonFelhasznaloIds, bool isSubTable = false) { string importJson = JsonConvert.SerializeObject(importJsonObject); bool isTorles = importMuvelet == (int)ImportMuveletEnum.DeleteAndInsert; Dal.CustomConnection.Run(ConnectionType, dalHandler => { var importExportDal = dalHandler.ImportExportDal(); importExportDal.UpdateTanulokElerhetosegeiAlapertelmezett(FelhasznaloId, alapertelmezettEmailFelhasznaloIds, alapertelmezettTelefonFelhasznaloIds); importExportDal.TanulokElerhetosegiAdataikImport(IntezmenyId, TanevId, FelhasznaloId, importJson, isTorles, isSubTable, tableNameList); }); } } }