This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View 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
}
}