init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
|
@ -0,0 +1,339 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.Caching;
|
||||
using Aspose.Cells;
|
||||
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;
|
||||
|
||||
namespace Kreta.BusinessLogic.Helpers.ImportExport
|
||||
{
|
||||
public class TanuloErtekelesMondatbankImportExportHelper : LogicBase
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly string _importObjectCacheKey;
|
||||
|
||||
#endregion Fields
|
||||
|
||||
#region Properties
|
||||
|
||||
public static Dictionary<int, string> ImportHeaderList => new Dictionary<int, string>
|
||||
{
|
||||
{ 00, ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameRovidNev },
|
||||
{ 01, ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameSzoveg },
|
||||
{ 02, ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTanuloErtekelesTipus },
|
||||
{ 03, ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameEvfolyamTipus },
|
||||
{ 04, ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTantargy }
|
||||
};
|
||||
|
||||
public static Dictionary<int, string> ExportHeaderList => new Dictionary<int, string>(ImportHeaderList);
|
||||
|
||||
public TanuloErtekelesMondatbankImportCo ImportCo
|
||||
{
|
||||
get => (TanuloErtekelesMondatbankImportCo)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 TanuloErtekelesMondatbankImportExportHelper(IConnectionType connectionType) : base(connectionType)
|
||||
{
|
||||
_importObjectCacheKey = $"{nameof(TanuloErtekelesMondatbankImportCo)}_{IntezmenyId}_{FelhasznaloId}_ImportObjectCacheKey";
|
||||
}
|
||||
|
||||
#endregion Constructors
|
||||
|
||||
public void SetImportCo(List<List<string>> importData, int importMuvelet)
|
||||
{
|
||||
TanuloErtekelesMondatbankImportCo importCo = GetImportCoFromImportData(importData);
|
||||
importCo.ImportMuvelet = importMuvelet;
|
||||
|
||||
SetNemImportalhatoSorokByValidation(importCo);
|
||||
|
||||
SetOperationAndNemImportalhatoSorokByOperation(importCo);
|
||||
|
||||
var mainImportJsonItemList = new List<TanuloErtekelesMondatbankImportJsonItemCo>(importCo.MainImportItemList.Select(x => new TanuloErtekelesMondatbankImportJsonItemCo(x, TanevId, IntezmenyId, FelhasznaloId)));
|
||||
importCo.MainImportJsonItemList = mainImportJsonItemList;
|
||||
|
||||
ImportCo = importCo;
|
||||
}
|
||||
|
||||
private static void SetNemImportalhatoSorokByValidation(TanuloErtekelesMondatbankImportCo importCo)
|
||||
{
|
||||
Dictionary<int, List<ValidationResult>> validationResultDictionary = importCo.Validate();
|
||||
|
||||
//NOTE: Azokat a sorokat, amelyek hibásak beletesszük a NemImportalhatoItemList-be!
|
||||
foreach (TanuloErtekelesMondatbankImportItemCo 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(TanuloErtekelesMondatbankImportCo 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.TanuloErtekelesMondatbankCoList);
|
||||
foreach (TanuloErtekelesMondatbankImportItemCo 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, akkor Insert, mert töröljük a korábbi elemeket (importált és nem importált) és újra be kell szúrni!
|
||||
if (importMuvelet == (int)ImportMuveletEnum.DeleteAndInsert)
|
||||
{
|
||||
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 TanuloErtekelesMondatbankImportCo GetImportCoFromImportData(List<List<string>> importData)
|
||||
{
|
||||
var importCo = new TanuloErtekelesMondatbankImportCo
|
||||
{
|
||||
TanuloErtekelesMondatbankCoList = new TanuloErtekelesMondatbankHelper(ConnectionType).GetTanuloErtekelesMondatbankCoList()
|
||||
};
|
||||
|
||||
int lineNumber = 1;
|
||||
foreach (List<string> importDataRow in importData.Skip(1))
|
||||
{
|
||||
var importItemCo = new TanuloErtekelesMondatbankImportItemCo
|
||||
{
|
||||
LineNumber = lineNumber,
|
||||
|
||||
RovidNevImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameRovidNev)],
|
||||
SzovegImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameSzoveg)],
|
||||
TanuloErtekelesTipusImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTanuloErtekelesTipus)],
|
||||
EvfolyamTipusImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameEvfolyamTipus)],
|
||||
TantargyImportData = importDataRow[ImportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTantargy)],
|
||||
};
|
||||
|
||||
// NOTE: Az értékelés típus felhasználó által bővíthető, ezért a DB-ből kell lekérdeznünk az értékeket.
|
||||
KeyValuePair<int, string> ertekelesTipus = EnumExtensions.GetAdatszotarDictElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.ErtekelesTipus).SingleOrDefault(x => x.Value == importItemCo.TanuloErtekelesTipusNev);
|
||||
importItemCo.TanuloErtekelesTipusId = !ertekelesTipus.Equals(default(KeyValuePair<int, string>)) ? ertekelesTipus.Key : (int?)null;
|
||||
|
||||
importItemCo.EvfolyamTipusId = EnumExtensions.EnumToDictionary<EvfolyamTipusEnum>(TanevId).SingleOrDefault(x => x.Value == importItemCo.EvfolyamTipusNev).Key.ToNullableInt();
|
||||
|
||||
var tantargyCoList = new TantargyHelper(ConnectionType).GetTantargyCoList();
|
||||
var tantargyNevToCompare = importItemCo.TantargyNev?.ToComparableString();
|
||||
var tantargy = tantargyCoList.SingleOrDefault(x => x.NevComparableString == tantargyNevToCompare);
|
||||
importItemCo.TantargyId = tantargy?.Id;
|
||||
|
||||
if (tantargyNevToCompare == TanuloErtekelesResource.Magatartas.ToComparableString())
|
||||
{
|
||||
importItemCo.TipusId = (int)ErtMondatbankTipusEnum.Magatartas;
|
||||
}
|
||||
else if (tantargyNevToCompare == TanuloErtekelesResource.Szorgalom.ToComparableString())
|
||||
{
|
||||
importItemCo.TipusId = (int)ErtMondatbankTipusEnum.Szorgalom;
|
||||
}
|
||||
else
|
||||
{
|
||||
importItemCo.TipusId = (int)ErtMondatbankTipusEnum.Tantargy;
|
||||
}
|
||||
|
||||
string md5HashInput =
|
||||
importItemCo.RovidNev?.ToComparableString() +
|
||||
importItemCo.Szoveg?.ToComparableString() +
|
||||
importItemCo.TanuloErtekelesTipusNev?.ToComparableString() +
|
||||
importItemCo.EvfolyamTipusNev?.ToComparableString() +
|
||||
importItemCo.TantargyNev?.ToComparableString();
|
||||
importItemCo.CompareHash = ImportExportHelper.GetMd5Hash(md5HashInput);
|
||||
|
||||
importCo.MainImportItemList.Add(importItemCo);
|
||||
|
||||
lineNumber++;
|
||||
}
|
||||
|
||||
return importCo;
|
||||
}
|
||||
|
||||
public MemoryStream GetTemplate(bool isSzakkepzo = false, bool isFromSzervezet = false)
|
||||
{
|
||||
var dropDownColumnSourceDictionary = GetDefaultDropDownColumnSourceDictionary(isSzakkepzo: isSzakkepzo, isFromSzervezet: isFromSzervezet);
|
||||
|
||||
MemoryStream memoryStream = ImportExportHelper.GetTemplate(ImportExportTanuloErtekelesMondatbankResource.ImportDefaultSheetName, ImportHeaderList, dropDownColumnSourceDictionary);
|
||||
|
||||
return memoryStream;
|
||||
}
|
||||
|
||||
public MemoryStream GetExport(bool isSzakkepzo = false)
|
||||
{
|
||||
var dropDownColumnSourceDictionary = GetDefaultDropDownColumnSourceDictionary(isSzakkepzo: isSzakkepzo);
|
||||
|
||||
List<TanuloErtekelesMondatbankItemCo> coList = new TanuloErtekelesMondatbankHelper(ConnectionType).GetTanuloErtekelesMondatbankCoList();
|
||||
using (var workbook = new Workbook())
|
||||
{
|
||||
var worksheet = ImportExportHelper.GetWorksheetsWithDropDownFormula(workbook, ImportExportTanuloErtekelesMondatbankResource.ImportDefaultSheetName, ExportHeaderList, dropDownColumnSourceDictionary);
|
||||
|
||||
var columnToWrapIndexList = new List<int>();
|
||||
int rowNumber = 1;
|
||||
foreach (TanuloErtekelesMondatbankItemCo co in coList.OrderBy(d => d.RovidNev).ThenBy(d => d.Szoveg))
|
||||
{
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameRovidNev)].Value = co.RovidNev;
|
||||
|
||||
int szovegCellColumnIndex = ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameSzoveg);
|
||||
Cell szovegCell = worksheet.Cells[rowNumber, szovegCellColumnIndex];
|
||||
szovegCell.HtmlString = co.Szoveg;
|
||||
szovegCell.SetTextWrap();
|
||||
columnToWrapIndexList.Add(szovegCellColumnIndex);
|
||||
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTanuloErtekelesTipus)].Value = co.TanuloErtekelesTipusNev;
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameEvfolyamTipus)].Value = co.EvfolyamTipusNev;
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTantargy)].Value = co.TantargyNev;
|
||||
|
||||
rowNumber++;
|
||||
}
|
||||
|
||||
var sheetCodeNameAndColumnsToWrapIndexDictionary = new Dictionary<string, List<int>>
|
||||
{
|
||||
{ workbook.Worksheets[0].CodeName, columnToWrapIndexList }
|
||||
};
|
||||
MemoryStream memoryStream = SimpleExportLogic.GetWorkbookMemoryStream(workbook, sheetCodeNameAndColumnsToWrapIndexDictionary);
|
||||
return memoryStream;
|
||||
}
|
||||
}
|
||||
|
||||
public MemoryStream GetNemImportalhatoSorokExport()
|
||||
{
|
||||
using (var workbook = new Workbook())
|
||||
{
|
||||
var worksheet = ImportExportHelper.GetWorksheetsWithDropDownFormula(workbook, ImportExportTanuloErtekelesMondatbankResource.ImportDefaultSheetName, ImportHeaderList);
|
||||
|
||||
var columnToWrapIndexList = new List<int>();
|
||||
int rowNumber = 1;
|
||||
foreach (TanuloErtekelesMondatbankImportItemCo co in ImportCo.NemImportalhatoItemList)
|
||||
{
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameRovidNev)].Value = co.RovidNev;
|
||||
|
||||
int szovegCellColumnIndex = ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameSzoveg);
|
||||
Cell szovegCell = worksheet.Cells[rowNumber, szovegCellColumnIndex];
|
||||
szovegCell.Value = co.Szoveg;
|
||||
szovegCell.SetTextWrap();
|
||||
columnToWrapIndexList.Add(szovegCellColumnIndex);
|
||||
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTanuloErtekelesTipus)].Value = co.TanuloErtekelesTipusNev;
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameEvfolyamTipus)].Value = co.EvfolyamTipusNev;
|
||||
worksheet.Cells[rowNumber, ExportHeaderList.GetKeyByUniqueValue(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTantargy)].Value = co.TantargyNev;
|
||||
|
||||
int errorCellColumnIndex = ImportHeaderList.Count;
|
||||
Cell errorCell = worksheet.Cells[rowNumber, ImportHeaderList.Count];
|
||||
errorCell.Value = string.Join(Environment.NewLine, co.ErrorList);
|
||||
errorCell.SetTextWrap();
|
||||
columnToWrapIndexList.Add(errorCellColumnIndex);
|
||||
|
||||
rowNumber++;
|
||||
}
|
||||
|
||||
var sheetCodeNameAndColumnsToWrapIndexDictionary = new Dictionary<string, List<int>>
|
||||
{
|
||||
{ workbook.Worksheets[0].CodeName, columnToWrapIndexList }
|
||||
};
|
||||
MemoryStream memoryStream = SimpleExportLogic.GetWorkbookMemoryStream(workbook, sheetCodeNameAndColumnsToWrapIndexDictionary);
|
||||
return memoryStream;
|
||||
}
|
||||
}
|
||||
|
||||
private Dictionary<string, ImportItemCompareCo> GetCompareHashImportItemCompareCoDictionary(List<TanuloErtekelesMondatbankItemCo> coList)
|
||||
{
|
||||
var compareHashImportItemCompareCoDictionary = new Dictionary<string, ImportItemCompareCo>();
|
||||
foreach (TanuloErtekelesMondatbankItemCo co in coList)
|
||||
{
|
||||
string md5HashInput =
|
||||
co.RovidNevComparableString +
|
||||
co.SzovegComparableString +
|
||||
co.TanuloErtekelesTipusNevComparableString +
|
||||
co.EvfolyamTipusNevComparableString +
|
||||
co.TantargyNevComparableString;
|
||||
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(bool isSzakkepzo = false, bool isFromSzervezet = false)
|
||||
{
|
||||
//NOTE: Create dropdown lists
|
||||
var logicalColumnDictionary = new Dictionary<string, IList<string>>();
|
||||
var dropDownColumnSourceDictionary = new Dictionary<string, IList<string>>(logicalColumnDictionary);
|
||||
|
||||
Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
var helper = new ImportExportHelper(new DalHandlerConnectionType(ConnectionType, dalHandler));
|
||||
|
||||
dropDownColumnSourceDictionary.Add(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTanuloErtekelesTipus, helper.GetTanuloErtekelesTipusList());
|
||||
dropDownColumnSourceDictionary.Add(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameEvfolyamTipus, helper.GetEvfolyamTipusList());
|
||||
dropDownColumnSourceDictionary.Add(ImportExportTanuloErtekelesMondatbankResource.ImportHeaderNameTantargy, helper.GetTantargyList(true, isFromSzervezet: isFromSzervezet, isSzakkepzo: isSzakkepzo));
|
||||
});
|
||||
|
||||
return dropDownColumnSourceDictionary;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue