init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
407
Kreta.BusinessLogic/Helpers/ImportExport/ImportExportHelper.cs
Normal file
407
Kreta.BusinessLogic/Helpers/ImportExport/ImportExportHelper.cs
Normal file
|
@ -0,0 +1,407 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using Aspose.Cells;
|
||||
using Kreta.BusinessLogic.Classes;
|
||||
using Kreta.BusinessLogic.HelperClasses;
|
||||
using Kreta.BusinessLogic.HelperClasses.ImportCo;
|
||||
using Kreta.BusinessLogic.Logic;
|
||||
using Kreta.BusinessLogic.Utils;
|
||||
using Kreta.Core;
|
||||
using Kreta.Core.ConnectionType;
|
||||
using Kreta.DataAccessManual;
|
||||
using Kreta.DataAccessManual.Util;
|
||||
using Kreta.Enums;
|
||||
using Kreta.Enums.ManualEnums.ImportExport;
|
||||
using Kreta.Framework.Util;
|
||||
using Kreta.Resources;
|
||||
using Newtonsoft.Json;
|
||||
using OfficeOpenXml;
|
||||
|
||||
namespace Kreta.BusinessLogic.Helpers.ImportExport
|
||||
{
|
||||
public class ImportExportHelper : LogicBase
|
||||
{
|
||||
public ImportExportHelper(IConnectionType connectionType) : base(connectionType) { }
|
||||
|
||||
public static List<List<string>> GetImportDataFromExcel(Stream uploadedFile, Dictionary<int, string> expectedImportHeaderList, out List<string> errorResult)
|
||||
{
|
||||
errorResult = new List<string>();
|
||||
if (uploadedFile is FileStream fileStream)
|
||||
{
|
||||
var fileInfo = new FileInfo(fileStream.Name);
|
||||
if (fileInfo.Extension != ".xlsx")
|
||||
{
|
||||
errorResult.Add(ErrorResource.CsakXlsxKiterjesztesuExcelFiletLehetImportalni);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
using (var excelPackage = new ExcelPackage(uploadedFile))
|
||||
{
|
||||
var importData = new List<List<string>>();
|
||||
|
||||
var excelWorksheet = excelPackage.Workbook.Worksheets.First();
|
||||
var startExcelCellAddress = excelWorksheet.Dimension.Start;
|
||||
var endExcelCellAddress = excelWorksheet.Dimension.End;
|
||||
var lastExpectedImportColumnIndex = expectedImportHeaderList.Count;
|
||||
|
||||
var excelHeaderList = new Dictionary<int, string>();
|
||||
for (var columnIndex = startExcelCellAddress.Column; columnIndex <= lastExpectedImportColumnIndex; columnIndex++)
|
||||
{
|
||||
var value = excelWorksheet.Cells[1, columnIndex].Text.ReplaceMultipleSpacesAndTrim();
|
||||
excelHeaderList.Add(columnIndex, value);
|
||||
}
|
||||
|
||||
for (var expectedImportHeaderColumnIndex = 0; expectedImportHeaderColumnIndex < lastExpectedImportColumnIndex; expectedImportHeaderColumnIndex++)
|
||||
{
|
||||
var excelHeaderColumnIndex = expectedImportHeaderColumnIndex + 1;
|
||||
if (!expectedImportHeaderList[expectedImportHeaderColumnIndex].Equals(excelHeaderList[excelHeaderColumnIndex]))
|
||||
{
|
||||
errorResult.Add(string.Format(ErrorResource.RosszImportHeader, excelHeaderColumnIndex, excelHeaderList[excelHeaderColumnIndex], expectedImportHeaderList[expectedImportHeaderColumnIndex]));
|
||||
}
|
||||
}
|
||||
|
||||
if (errorResult.Count > 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var rowIndex = startExcelCellAddress.Row; rowIndex <= endExcelCellAddress.Row; rowIndex++)
|
||||
{
|
||||
var currentRowDataList = new List<string>();
|
||||
for (var columnIndex = startExcelCellAddress.Column; columnIndex <= lastExpectedImportColumnIndex; columnIndex++)
|
||||
{
|
||||
var value = excelWorksheet.Cells[rowIndex, columnIndex].Text.ReplaceMultipleSpacesAndTrim();
|
||||
currentRowDataList.Add(value);
|
||||
}
|
||||
|
||||
importData.Add(currentRowDataList);
|
||||
}
|
||||
|
||||
//NOTE: Kitöröljük azokat a sorokat, ahol minden cella üres.
|
||||
importData.RemoveAll(x => x.All(string.IsNullOrWhiteSpace));
|
||||
|
||||
return importData;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetMd5Hash(string input)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(input))
|
||||
{
|
||||
return Constants.General.ImportMD5InvalidInput;
|
||||
}
|
||||
|
||||
using (HashAlgorithm hashAlgorithm = MD5.Create())
|
||||
{
|
||||
var inputArray = hashAlgorithm.ComputeHash(Encoding.UTF8.GetBytes(input));
|
||||
var stringBuilder = new StringBuilder();
|
||||
foreach (var item in inputArray)
|
||||
{
|
||||
stringBuilder.Append(item.ToString("x2"));
|
||||
}
|
||||
|
||||
var result = stringBuilder.ToString();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public void Import(object importJsonObject, int importMuvelet, bool isSubTable = false, bool isTorlesCsakImportalt = true)
|
||||
{
|
||||
var importJson = JsonConvert.SerializeObject(importJsonObject);
|
||||
var isTorles = importMuvelet == (int)ImportMuveletEnum.DeleteAndInsert;
|
||||
Dal.CustomConnection.Run(ConnectionType, dalHandler => dalHandler.ImportExportDal().Import(IntezmenyId, TanevId, FelhasznaloId, importJson, isTorles, isSubTable, isTorlesCsakImportalt));
|
||||
}
|
||||
|
||||
public static MemoryStream NemImportalhatoSorokExport<T>(
|
||||
string worksheetName,
|
||||
List<SimpleExportColumnCo> simpleExportColumnCos,
|
||||
List<T> coList, int tanevId) where T : BaseImportItemCo
|
||||
{
|
||||
using (var workbook = new Workbook())
|
||||
{
|
||||
var worksheet = SimpleExportLogic.GetWorksheet(workbook, worksheetName, simpleExportColumnCos);
|
||||
worksheet.FillWithData(coList, simpleExportColumnCos, tanevId);
|
||||
|
||||
NemImportalhatoSorokExportEgyediHibaOszlop(worksheet, simpleExportColumnCos, coList);
|
||||
|
||||
var sheetCodeNameAndColumnsToWrapIndexDictionary = new Dictionary<string, List<int>>
|
||||
{
|
||||
{ workbook.Worksheets[0].CodeName, new List<int> { simpleExportColumnCos.Count } }
|
||||
};
|
||||
var memoryStream = SimpleExportLogic.GetWorkbookMemoryStream(workbook, sheetCodeNameAndColumnsToWrapIndexDictionary);
|
||||
return memoryStream;
|
||||
}
|
||||
}
|
||||
|
||||
private static void NemImportalhatoSorokExportEgyediHibaOszlop<T>(Worksheet worksheet, List<SimpleExportColumnCo> simpleExportColumnCos, List<T> coList) where T : BaseImportItemCo
|
||||
{
|
||||
var errorHeaderColumn = simpleExportColumnCos.Count;
|
||||
|
||||
var errorHeaderCell = worksheet.Cells[0, errorHeaderColumn];
|
||||
errorHeaderCell.Value = ImportExportCommonResource.ImportalastMeghiusitoOk;
|
||||
|
||||
var rowNumber = 1;
|
||||
foreach (var errorList in coList.Select(x => x.ErrorList))
|
||||
{
|
||||
var errorCell = worksheet.Cells[rowNumber, errorHeaderColumn];
|
||||
errorCell.Value = string.Join(Environment.NewLine, errorList);
|
||||
errorCell.SetTextWrap();
|
||||
|
||||
rowNumber++;
|
||||
}
|
||||
|
||||
worksheet.EgyediSzovegesOszlopFormazas(errorHeaderColumn);
|
||||
}
|
||||
|
||||
public static MemoryStream GetTemplate(string worksheetName, Dictionary<int, string> headerNameDictionary, Dictionary<string, IList<string>> dropDownColumnSourceDictionary = null)
|
||||
{
|
||||
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(headerNameDictionary, dropDownColumnSourceDictionary);
|
||||
return SimpleExportLogic.GetTemplate(worksheetName, simpleExportColumnCos);
|
||||
}
|
||||
|
||||
public static Worksheet GetWorksheetsWithDropDownFormula(Workbook workbook, string worksheetName, Dictionary<int, string> headerNameDictionary, Dictionary<string, IList<string>> dropDownColumnSourceDictionary = null)
|
||||
{
|
||||
var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(headerNameDictionary, dropDownColumnSourceDictionary);
|
||||
var worksheet = SimpleExportLogic.GetWorksheet(workbook, worksheetName, simpleExportColumnCos);
|
||||
return worksheet;
|
||||
}
|
||||
|
||||
#region Az excel-ekben megjelenő dropdownlist-ek kiválasztható elemei
|
||||
|
||||
public IList<string> GetOsztalyCsoportList()
|
||||
{
|
||||
var result = new OsztalyCsoportHelper(ConnectionType).GetOsztalyCsoportCoList()
|
||||
.OrderByDescending(x => x.IsOsztaly)
|
||||
.ThenBy(x => x.Nev)
|
||||
.Select(x => x.Nev)
|
||||
.ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetOsztalyList()
|
||||
{
|
||||
var result = new OsztalyHelper(ConnectionType).GetOsztalyCoList().Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetCsoportList()
|
||||
{
|
||||
var result = new CsoportHelper(ConnectionType).GetCsoportCoList().Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetCsoportListBySzervezet(int? szervezetTipus = null, int? szervezetId = null)
|
||||
{
|
||||
var result = new CsoportHelper(ConnectionType).GetCsoportListBySzervezet(szervezetTipus, szervezetId).Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTantargyList(bool isExtended = false, bool isFromSzervezet = false, bool isSzakkepzo = false)
|
||||
{
|
||||
List<string> result;
|
||||
if (isExtended)
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
CommonResource.Mind,
|
||||
TanuloErtekelesResource.Magatartas,
|
||||
TanuloErtekelesResource.Szorgalom
|
||||
};
|
||||
result = list.Union(new TantargyHelper(ConnectionType).GetTantargyCoList().Select(x => x.Nev).OrderBy(o => o)).ToList();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
result = new TantargyHelper(ConnectionType).GetTantargyCoList().Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
}
|
||||
|
||||
if (!isFromSzervezet)
|
||||
result.RemoveAll(x=> x.Contains(TantargyResource.DualisKepzes));
|
||||
|
||||
if (!isSzakkepzo)
|
||||
result.RemoveAll(x => x.Contains(TantargyResource.ApaczaiKonzultacio));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTantargyListBySzervezet(bool isFromSzervezet = false, bool isSzakkepzo = false)
|
||||
{
|
||||
List<string> result;
|
||||
result = new TantargyHelper(ConnectionType).GetTantargyCoList().Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
|
||||
if (!isSzakkepzo)
|
||||
{
|
||||
result.RemoveAll(x => x.Contains(TantargyResource.ApaczaiKonzultacio));
|
||||
}
|
||||
|
||||
if (!isFromSzervezet)
|
||||
{
|
||||
result.RemoveAll(x => x.Contains(TantargyResource.DualisKepzes));
|
||||
}
|
||||
else
|
||||
{
|
||||
result = result.Where(x => x.Contains(TantargyResource.DualisKepzes)).ToList();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public IList<string> GetTanuloErtekelesTipusList()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
CommonResource.Mind
|
||||
};
|
||||
|
||||
return Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
var connectionType = new DalHandlerConnectionType(ConnectionType, dalHandler);
|
||||
|
||||
return list.Union(EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.ErtekelesTipus)).ToList();
|
||||
});
|
||||
}
|
||||
|
||||
public IList<string> GetEvfolyamTipusList()
|
||||
{
|
||||
var list = new List<string>
|
||||
{
|
||||
CommonResource.Mind
|
||||
};
|
||||
|
||||
return Dal.CustomConnection.Run(ConnectionType, dalHandler =>
|
||||
{
|
||||
var connectionType = new DalHandlerConnectionType(ConnectionType, dalHandler);
|
||||
|
||||
return list.Union(EnumExtensions.GetAdatszotarElemekForTipus(TanevId, GeneratedAdatszotarTipusEnum.EvfolyamTipus)).ToList();
|
||||
});
|
||||
}
|
||||
|
||||
public IList<string> GetTanarList(bool isSzuletesiIdovel = false)
|
||||
{
|
||||
List<string> result;
|
||||
var tanarCoList = new AlkalmazottHelper(ConnectionType).GetAlkalmazottCoList();
|
||||
if (isSzuletesiIdovel)
|
||||
{
|
||||
var tanarNevList = new List<string>();
|
||||
//NOTE: Erre azért van szükség, ha több egyforma nevű tanár szerepel az adatbázisban, akkor zárójelben mögé tesszük a születési dátumát, hogy meg tudjuk őket különböztetni!
|
||||
foreach (var item in tanarCoList)
|
||||
{
|
||||
var tanarNev = item.FelhasznaloNyomtatasiNev;
|
||||
if (tanarCoList.Count(x => x.FelhasznaloNyomtatasiNevComparableString == item.FelhasznaloNyomtatasiNevComparableString) > 1)
|
||||
{
|
||||
tanarNev += $" ({item.FelhasznaloSzuletesiIdo.ToString(Core.Constants.ToStringPattern.HungarianDate)})";
|
||||
}
|
||||
|
||||
tanarNevList.Add(tanarNev);
|
||||
}
|
||||
|
||||
result = tanarNevList.Distinct().OrderBy(o => o).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = tanarCoList.Select(x => x.FelhasznaloNyomtatasiNev).Distinct().OrderBy(o => o).ToList();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTanarListBySzervezet(bool isSzuletesiIdovel = false, int? szervezetTipus = null, int? szervezetId = null)
|
||||
{
|
||||
List<string> result;
|
||||
var tanarCoList = new AlkalmazottHelper(ConnectionType).GetAlkalmazottCoListBySzervezet(szervezetTipus, szervezetId);
|
||||
if (isSzuletesiIdovel)
|
||||
{
|
||||
var tanarNevList = new List<string>();
|
||||
//NOTE: Erre azért van szükség, ha több egyforma nevű tanár szerepel az adatbázisban, akkor zárójelben mögé tesszük a születési dátumát, hogy meg tudjuk őket különböztetni!
|
||||
foreach (var item in tanarCoList)
|
||||
{
|
||||
var tanarNev = item.FelhasznaloNyomtatasiNev;
|
||||
if (tanarCoList.Count(x => x.FelhasznaloNyomtatasiNevComparableString == item.FelhasznaloNyomtatasiNevComparableString) > 1)
|
||||
{
|
||||
tanarNev += $" ({item.FelhasznaloSzuletesiIdo.ToString(Core.Constants.ToStringPattern.HungarianDate)})";
|
||||
}
|
||||
|
||||
tanarNevList.Add(tanarNev);
|
||||
}
|
||||
|
||||
result = tanarNevList.Distinct().OrderBy(o => o).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = tanarCoList.Select(x => x.FelhasznaloNyomtatasiNev).Distinct().OrderBy(o => o).ToList();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTanuloList()
|
||||
{
|
||||
var result = new TanuloHelper(ConnectionType).GetTanuloCoList().Select(x => x.FelhasznaloNyomtatasiNev).Distinct().OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTanuloNevOktAzonSzulDatumList()
|
||||
{
|
||||
var result = new TanuloHelper(ConnectionType).GetTanuloCoList().Select(x => $"{x.FelhasznaloNyomtatasiNev};{x.FelhasznaloSzuletesiIdo.ToString(Constants.ToStringPattern.HungarianDateWithSuffix)};{x.FelhasznaloOktatasiAzonosito}").Distinct().OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetGondviseloList()
|
||||
{
|
||||
var result = new GondviseloHelper(ConnectionType).GetGondviseloCoList().Select(x => Extensions.NameExtensions.GetNevSorrendben("F", x.Elotag, x.VezetekNev, x.KeresztNev)).Distinct().OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetHetiRendTipusList()
|
||||
{
|
||||
var hetiRendDictionaryItemList = ((int)GeneratedAdatszotarTipusEnum.HetiRendTipus).GetItemsByType(TanevId);
|
||||
var result = hetiRendDictionaryItemList.OrderBy(o => o.Order).Select(x => x.Name).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetHetNapjaTipusList()
|
||||
{
|
||||
var result = CommonUtils.OrderedHetNapjaTipusEnumList.Select(x => x.GetDisplayName(TanevId)).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTeremList()
|
||||
{
|
||||
var result = new TeremHelper(ConnectionType).GetTeremCoList().Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetTeremListBySzervezet(int? szervezetTipus = null, int? szervezetId = null)
|
||||
{
|
||||
var result = new TeremHelper(ConnectionType).GetTeremCoListBySzervezet(szervezetTipus, szervezetId).Select(x => x.Nev).OrderBy(o => o).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetMukodesiHelyList(DataSet feladatellatasiHelyDataSet)
|
||||
{
|
||||
var result = (from DataRow dataRow in feladatellatasiHelyDataSet.Tables[0].Rows select SDAConvert.ToString(dataRow["MukodesiHelyNev"])).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetFeladatellatasiHelyList(DataSet feladatellatasiHelyDataSet)
|
||||
{
|
||||
var result = (from DataRow dataRow in feladatellatasiHelyDataSet.Tables[0].Rows select $"{SDAConvert.ToString(dataRow["MukodesiHelyNev"])} - {SDAConvert.ToString(dataRow["OktatasiNevelesiFeladatTipusId_DNAME"])}").ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IList<string> GetEllatottKoznevelesiFeladatList(DataSet feladatellatasiHelyDataSet)
|
||||
{
|
||||
var result = (from DataRow dataRow in feladatellatasiHelyDataSet.Tables[0].Rows select SDAConvert.ToString(dataRow["OktatasiNevelesiFeladatTipusId_DNAME"])).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion Az excel-ekben megjelenő dropdownlist-ek kiválasztható elemei
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue