init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
|
@ -0,0 +1,278 @@
|
|||
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.ImportExport;
|
||||
using Kreta.Resources;
|
||||
|
||||
namespace Kreta.BusinessLogic.Helpers.ImportExport
|
||||
{
|
||||
public class EszkozImportExportHelper : LogicBase
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly string _importObjectCacheKey;
|
||||
|
||||
#endregion Fields
|
||||
|
||||
#region Properties
|
||||
|
||||
public static Dictionary<int, string> ImportHeaderList => new Dictionary<int, string>
|
||||
{
|
||||
{ 00, ImportExportEszkozResource.ImportHeaderNameEszkozNeve },
|
||||
{ 01, ImportExportEszkozResource.ImportHeaderNameHelyiseg },
|
||||
{ 02, ImportExportEszkozResource.ImportHeaderNameEszkozTipus },
|
||||
{ 03, ImportExportEszkozResource.ImportHeaderNameMennyiseg },
|
||||
{ 04, ImportExportEszkozResource.ImportHeaderNameEszkozSzemelyiFelelose },
|
||||
{ 05, ImportExportEszkozResource.ImportHeaderNameLeltariSzam }
|
||||
};
|
||||
|
||||
public EszkozImportCo ImportCo
|
||||
{
|
||||
get => (EszkozImportCo)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 EszkozImportExportHelper(IConnectionType connectionType) : base(connectionType)
|
||||
{
|
||||
_importObjectCacheKey = $"{nameof(EszkozImportCo)}_{IntezmenyId}_{FelhasznaloId}_ImportObjectCacheKey";
|
||||
}
|
||||
|
||||
#endregion Constructors
|
||||
|
||||
public void SetImportCo(List<List<string>> importData, int importMuvelet)
|
||||
{
|
||||
EszkozImportCo importCo = GetImportCoFromImportData(importData);
|
||||
importCo.ImportMuvelet = importMuvelet;
|
||||
|
||||
SetNemImportalhatoSorokByValidation(importCo);
|
||||
|
||||
SetOperationAndNemImportalhatoSorokByOperation(importCo);
|
||||
|
||||
var mainImportJsonItemList = new List<EszkozImportJsonItemCo>(importCo.MainImportItemList.Select(x => new EszkozImportJsonItemCo(x, importCo.TeremCoList, importCo.FelelosCoList, TanevId, IntezmenyId, FelhasznaloId)));
|
||||
importCo.MainImportJsonItemList = mainImportJsonItemList;
|
||||
|
||||
ImportCo = importCo;
|
||||
}
|
||||
|
||||
private static void SetNemImportalhatoSorokByValidation(EszkozImportCo importCo)
|
||||
{
|
||||
Dictionary<int, List<ValidationResult>> validationResultDictionary = importCo.Validate();
|
||||
|
||||
//NOTE: Azokat a sorokat, amelyek hibásak beletesszük a NemImportalhatoItemList-be!
|
||||
foreach (EszkozImportItemCo 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);
|
||||
}
|
||||
|
||||
//NOTE: Azokat a sorokat, amelyek bekerültek a NemImportalhatoItemList-be, azokat kiveszzük a MainImportItemList-ből!
|
||||
importCo.MainImportItemList.RemoveRange(importCo.NemImportalhatoItemList);
|
||||
}
|
||||
|
||||
private void SetOperationAndNemImportalhatoSorokByOperation(EszkozImportCo importCo)
|
||||
{
|
||||
int importMuvelet = importCo.ImportMuvelet;
|
||||
//NOTE: Azért van szükség Dictionary-re, mert így sokkal gyorsabb a keresés!
|
||||
Dictionary<string, ImportItemCompareCo> compareHashImportItemCompareCoDictionary = GetCompareHashImportItemCompareCoDictionary(importCo.EszkozCoList);
|
||||
foreach (EszkozImportItemCo importItem in importCo.MainImportItemList)
|
||||
{
|
||||
string compareHash = importItem.CompareHash;
|
||||
//NOTE: Ha nem találtunk egyezést, akkor mindeképpen Insert!
|
||||
if (!compareHashImportItemCompareCoDictionary.ContainsKey(compareHash))
|
||||
{
|
||||
importItem.Operation = (int)ImportItemOperationEnum.Insert;
|
||||
}
|
||||
//NOTE: Ha találtunk egyezést, akkor...
|
||||
else
|
||||
{
|
||||
ImportItemCompareCo importItemCompareCo = compareHashImportItemCompareCoDictionary[compareHash];
|
||||
//NOTE: ...ha az import művelet DeleteAndInsert és a db-ből jövő adat Importalt(a nem importáltakat egyelőre nem töröljük), akkor Insert, mert töröljük a korábbi elemeket és újra be kell szúrni!
|
||||
if (importMuvelet == (int)ImportMuveletEnum.DeleteAndInsert && importItemCompareCo.Importalt)
|
||||
{
|
||||
importItem.Operation = (int)ImportItemOperationEnum.Insert;
|
||||
}
|
||||
//NOTE: ...ha nincs törlés, akkor...
|
||||
else
|
||||
{
|
||||
//NOTE: ...ha a művelet InsertAndUpdate, akkor Update és beállítjuk az Id-t!
|
||||
if (importMuvelet == (int)ImportMuveletEnum.InsertAndUpdate)
|
||||
{
|
||||
importItem.Id = importItemCompareCo.Id;
|
||||
importItem.Operation = (int)ImportItemOperationEnum.Update;
|
||||
}
|
||||
//NOTE: ...ha a művelet nem InsertAndUpdate, akkor hozzá kell adni a nem NemImportalhatoItemList-hez és jelezni, hogy már szerepel az adatbázisban(Insert vagy DeleteAndInsert műveletnél. A DeleteAndInsert csak akkor fut be ide, ha az elem nem importált.)!
|
||||
else
|
||||
{
|
||||
importItem.ErrorList.Add(ImportExportCommonResource.NemImportalhatoMertMarSzerepelAzAdatbazisban);
|
||||
importCo.NemImportalhatoItemList.Add(importItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//NOTE: Azokat a sorokat, amelyek bekerültek a NemImportalhatoItemList-be, azokat kiveszzük a MainImportItemList-ből!
|
||||
importCo.MainImportItemList.RemoveRange(importCo.NemImportalhatoItemList);
|
||||
}
|
||||
|
||||
private EszkozImportCo GetImportCoFromImportData(List<List<string>> importData)
|
||||
{
|
||||
var importCo = new EszkozImportCo
|
||||
{
|
||||
EszkozCoList = new EszkozHelper(ConnectionType).GetEszkozCoList(),
|
||||
FelelosCoList = new AlkalmazottHelper(ConnectionType).GetAlkalmazottCoList(),
|
||||
TeremCoList = new TeremHelper(ConnectionType).GetTeremCoList(),
|
||||
};
|
||||
|
||||
int lineNumber = 1;
|
||||
foreach (List<string> importDataRow in importData.Skip(1))
|
||||
{
|
||||
var importItemCo = new EszkozImportItemCo(TanevId)
|
||||
{
|
||||
LineNumber = lineNumber,
|
||||
|
||||
EszkozNeveImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportEszkozResource.ImportHeaderNameEszkozNeve)],
|
||||
HelyisegImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportEszkozResource.ImportHeaderNameHelyiseg)],
|
||||
EszkozTipusImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportEszkozResource.ImportHeaderNameEszkozTipus)],
|
||||
DarabszamImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportEszkozResource.ImportHeaderNameMennyiseg)],
|
||||
EszkozSzemelyiFeleloseImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportEszkozResource.ImportHeaderNameEszkozSzemelyiFelelose)],
|
||||
LeltariSzamImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportEszkozResource.ImportHeaderNameLeltariSzam)]
|
||||
};
|
||||
|
||||
string md5HashInput = importItemCo.Nev?.ToComparableString();
|
||||
importItemCo.CompareHash = ImportExportHelper.GetMd5Hash(md5HashInput);
|
||||
|
||||
importCo.MainImportItemList.Add(importItemCo);
|
||||
|
||||
lineNumber++;
|
||||
}
|
||||
|
||||
return importCo;
|
||||
}
|
||||
|
||||
#region Template
|
||||
|
||||
public MemoryStream GetTemplate()
|
||||
{
|
||||
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<EszkozItemCo>(EszkozItemCo.EszkozTemplateExportAttributeId, GetDefaultDropDownColumnSourceDictionary());
|
||||
return SimpleExportLogic.GetTemplate(ImportExportEszkozResource.ImportDefaultSheetName, simpleExportColumnCos);
|
||||
}
|
||||
|
||||
#endregion Template
|
||||
|
||||
#region Export
|
||||
|
||||
public MemoryStream GetExport()
|
||||
{
|
||||
List<EszkozItemCo> coList = new EszkozHelper(ConnectionType).GetEszkozCoList().OrderBy(o => o.Nev).ToList();
|
||||
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<EszkozItemCo>(EszkozItemCo.EszkozExportAttributeId, GetExportDropDownColumnSourceDictionary());
|
||||
return SimpleExportLogic.GetExport(ImportExportEszkozResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId);
|
||||
}
|
||||
|
||||
public MemoryStream GetEszkozKeresesExport(EszkozokSearchCo co)
|
||||
{
|
||||
List<EszkozItemCo> coList = new EszkozHelper(ConnectionType).GetEszkozKeresesExport(co).OrderBy(o => o.Nev).ToList();
|
||||
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<EszkozItemCo>(EszkozItemCo.EszkozExportAttributeId);
|
||||
return SimpleExportLogic.GetExport(ImportExportEszkozResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId);
|
||||
}
|
||||
|
||||
public MemoryStream GetNemImportalhatoSorokExport()
|
||||
{
|
||||
List<EszkozImportItemCo> coList = ImportCo.NemImportalhatoItemList;
|
||||
List<SimpleExportColumnCo> simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos<EszkozImportItemCo>(EszkozImportItemCo.NemImportalhatoSorokExportAttributeId, GetDefaultDropDownColumnSourceDictionary());
|
||||
return ImportExportHelper.NemImportalhatoSorokExport(ImportExportEszkozResource.ImportDefaultSheetName, simpleExportColumnCos, coList, TanevId);
|
||||
}
|
||||
|
||||
#endregion Export
|
||||
|
||||
private Dictionary<string, ImportItemCompareCo> GetCompareHashImportItemCompareCoDictionary(IList<EszkozItemCo> coList)
|
||||
{
|
||||
var compareHashImportItemCompareCoDictionary = new Dictionary<string, ImportItemCompareCo>();
|
||||
foreach (EszkozItemCo co in coList)
|
||||
{
|
||||
string md5HashInput = co.NevComparableString;
|
||||
string compareHash = ImportExportHelper.GetMd5Hash(md5HashInput);
|
||||
|
||||
var importItemCompareCo = new ImportItemCompareCo
|
||||
{
|
||||
Id = co.Id,
|
||||
CompareHash = compareHash,
|
||||
Importalt = co.Importalt
|
||||
};
|
||||
//NOTE: Elvileg nem fordulhatna elő, de ha az adatbázisban duplikált adat van, akkor csak az elsőt adjuk hozzá!
|
||||
if (!compareHashImportItemCompareCoDictionary.ContainsKey(compareHash))
|
||||
{
|
||||
compareHashImportItemCompareCoDictionary.Add(compareHash, importItemCompareCo);
|
||||
}
|
||||
}
|
||||
|
||||
return compareHashImportItemCompareCoDictionary;
|
||||
}
|
||||
|
||||
private Dictionary<string, IList<string>> GetDefaultDropDownColumnSourceDictionary()
|
||||
{
|
||||
//NOTE: Create dropdown lists
|
||||
var dropDownColumnSourceDictionary = new Dictionary<string, IList<string>>();
|
||||
|
||||
Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
var connectionType = new DalHandlerConnectionType(ConnectionType, dalHandler);
|
||||
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ImportHeaderNameEszkozTipus, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EszkozTipus));
|
||||
|
||||
var helper = new ImportExportHelper(connectionType);
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ImportHeaderNameHelyiseg, helper.GetTeremList());
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ImportHeaderNameEszkozSzemelyiFelelose, helper.GetTanarList(true));
|
||||
});
|
||||
|
||||
return dropDownColumnSourceDictionary;
|
||||
}
|
||||
|
||||
private Dictionary<string, IList<string>> GetExportDropDownColumnSourceDictionary()
|
||||
{
|
||||
//NOTE: Create dropdown lists
|
||||
var dropDownColumnSourceDictionary = new Dictionary<string, IList<string>>();
|
||||
|
||||
Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
var connectionType = new DalHandlerConnectionType(ConnectionType, dalHandler);
|
||||
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ImportHeaderNameEszkozTipus, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EszkozTipus));
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ExportHeaderNameKategoria, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EszkozKategoria));
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ExportHeaderNameCel, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EszkozCel));
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ExportHeaderNameJelleg, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EszkozJelleg));
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ExportHeaderNameMennyisegiEgyseg, EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.MertekegysegTipus));
|
||||
|
||||
var helper = new ImportExportHelper(connectionType);
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ImportHeaderNameHelyiseg, helper.GetTeremList());
|
||||
dropDownColumnSourceDictionary.Add(ImportExportEszkozResource.ImportHeaderNameEszkozSzemelyiFelelose, helper.GetTanarList(true));
|
||||
});
|
||||
|
||||
return dropDownColumnSourceDictionary;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue