407 lines
17 KiB
C#
407 lines
17 KiB
C#
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
|
|
}
|
|
}
|