355 lines
19 KiB
C#
355 lines
19 KiB
C#
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<int, string> ImportHeaderList => new Dictionary<int, string>
|
|
{
|
|
{ 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<List<string>> importData, int importMuvelet, bool isSzakkepzoIntezmeny)
|
|
{
|
|
TanulokElerhetosegiAdataikImportCo importCo = GetImportCoFromImportData(importData, isSzakkepzoIntezmeny);
|
|
importCo.ImportMuvelet = importMuvelet;
|
|
|
|
SetNemImportalhatoSorokByValidation(importCo);
|
|
|
|
List<TanuloItemCo> coList = importCo.TanuloCoList;
|
|
Dictionary<string, ImportItemCompareCo> telefonCompareHashImportItemCompareCoDictionary = GetTelefonCompareHashImportItemCompareCoDictionary(coList);
|
|
Dictionary<string, ImportItemCompareCo> 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<TelefonTanuloImportJsonItemCo>();
|
|
var emailImportJsonItemList = new List<EmailTanuloImportJsonItemCo>();
|
|
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<int, List<ValidationResult>> validationResultDictionary = importCo.Validate();
|
|
|
|
foreach (TanulokElerhetosegiAdataikImportItemCo importItem in importCo.MainImportItemList.Where(x => validationResultDictionary.Keys.Contains(x.LineNumber)))
|
|
{
|
|
IEnumerable<ValidationResult> 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<string, ImportItemCompareCo> 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<string, ImportItemCompareCo> 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<List<string>> 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<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<TanuloItemCo>(TanuloItemCo.TanulokElerhetosegiAdataikTemplateExportAttributeId, GetDefaultDropDownColumnSourceDictionary());
|
|
return SimpleExportLogic.GetTemplate(ImportExportTanulokElerhetosegiAdataikResource.ImportDefaultSheetName, simpleExportColumnCos);
|
|
}
|
|
|
|
#endregion Template
|
|
|
|
#region Export
|
|
|
|
public MemoryStream GetExport()
|
|
{
|
|
List<TanuloItemCo> coList = new TanuloHelper(ConnectionType).GetTanuloCoList().OrderBy(t => t.FelhasznaloNyomtatasiNev).ToList();
|
|
SetTelefonszamEsEmail(coList);
|
|
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<TanuloItemCo>(TanuloItemCo.TanulokElerhetosegiAdataikTemplateExportAttributeId, GetDefaultDropDownColumnSourceDictionary());
|
|
return SimpleExportLogic.GetExport(ImportExportTanulokElerhetosegiAdataikResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId);
|
|
}
|
|
|
|
private void SetTelefonszamEsEmail(List<TanuloItemCo> 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<TanulokElerhetosegiAdataikImportItemCo> coList = ImportCo.NemImportalhatoItemList;
|
|
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<TanulokElerhetosegiAdataikImportItemCo>(TanulokElerhetosegiAdataikImportItemCo.NemImportalhatoSorokExportAttributeId);
|
|
return ImportExportHelper.NemImportalhatoSorokExport(ImportExportTanulokElerhetosegiAdataikResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId);
|
|
}
|
|
|
|
#endregion Export
|
|
|
|
private Dictionary<string, ImportItemCompareCo> GetTelefonCompareHashImportItemCompareCoDictionary(List<TanuloItemCo> tanuloItemCoList)
|
|
{
|
|
var compareHashImportItemCompareCoDictionary = new Dictionary<string, ImportItemCompareCo>();
|
|
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<string, ImportItemCompareCo> GetEmailCompareHashImportItemCompareCoDictionary(List<TanuloItemCo> tanuloItemCoList)
|
|
{
|
|
var compareHashImportItemCompareCoDictionary = new Dictionary<string, ImportItemCompareCo>();
|
|
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<string, IList<string>> GetDefaultDropDownColumnSourceDictionary()
|
|
{
|
|
var dropDownColumnSourceDictionary = new Dictionary<string, IList<string>>()
|
|
{
|
|
{
|
|
ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamAlapertelmezett,
|
|
EnumExtensions.GetEnumDisplayNameList<IgenNemEnum>(TanevId)
|
|
},
|
|
};
|
|
|
|
Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
|
{
|
|
var connectionType = new DalHandlerConnectionType(ConnectionType, dalHandler);
|
|
|
|
dropDownColumnSourceDictionary.Add(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameTelefonszamTipusa, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.TelefonTipus, new List<int> { (int)TelefonTipusEnum.PublikusTelefonszam }));
|
|
|
|
dropDownColumnSourceDictionary.Add(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailAlapertelmezett, EnumExtensions.GetEnumDisplayNameList<IgenNemEnum>(TanevId));
|
|
|
|
dropDownColumnSourceDictionary.Add(ImportExportTanulokElerhetosegiAdataikResource.ImportHeaderNameEmailTipus, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EmailTipus, new List<int> { (int)EmailTipusEnum.PublikusEmailcim }));
|
|
});
|
|
|
|
return dropDownColumnSourceDictionary;
|
|
}
|
|
|
|
public void Import(object importJsonObject, int importMuvelet, string tableNameList, IEnumerable<int> alapertelmezettEmailFelhasznaloIds, IEnumerable<int> 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);
|
|
});
|
|
}
|
|
}
|
|
}
|