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> GetImportDataFromExcel(Stream uploadedFile, Dictionary expectedImportHeaderList, out List errorResult) { errorResult = new List(); 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>(); var excelWorksheet = excelPackage.Workbook.Worksheets.First(); var startExcelCellAddress = excelWorksheet.Dimension.Start; var endExcelCellAddress = excelWorksheet.Dimension.End; var lastExpectedImportColumnIndex = expectedImportHeaderList.Count; var excelHeaderList = new Dictionary(); 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(); 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( string worksheetName, List simpleExportColumnCos, List 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> { { workbook.Worksheets[0].CodeName, new List { simpleExportColumnCos.Count } } }; var memoryStream = SimpleExportLogic.GetWorkbookMemoryStream(workbook, sheetCodeNameAndColumnsToWrapIndexDictionary); return memoryStream; } } private static void NemImportalhatoSorokExportEgyediHibaOszlop(Worksheet worksheet, List simpleExportColumnCos, List 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 headerNameDictionary, Dictionary> dropDownColumnSourceDictionary = null) { var simpleExportColumnCos = SimpleExportLogic.GetSimpleExportColumnCos(headerNameDictionary, dropDownColumnSourceDictionary); return SimpleExportLogic.GetTemplate(worksheetName, simpleExportColumnCos); } public static Worksheet GetWorksheetsWithDropDownFormula(Workbook workbook, string worksheetName, Dictionary headerNameDictionary, Dictionary> 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 GetOsztalyCsoportList() { var result = new OsztalyCsoportHelper(ConnectionType).GetOsztalyCsoportCoList() .OrderByDescending(x => x.IsOsztaly) .ThenBy(x => x.Nev) .Select(x => x.Nev) .ToList(); return result; } public IList GetOsztalyList() { var result = new OsztalyHelper(ConnectionType).GetOsztalyCoList().Select(x => x.Nev).OrderBy(o => o).ToList(); return result; } public IList GetCsoportList() { var result = new CsoportHelper(ConnectionType).GetCsoportCoList().Select(x => x.Nev).OrderBy(o => o).ToList(); return result; } public IList 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 GetTantargyList(bool isExtended = false, bool isFromSzervezet = false, bool isSzakkepzo = false) { List result; if (isExtended) { var list = new List { 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 GetTantargyListBySzervezet(bool isFromSzervezet = false, bool isSzakkepzo = false) { List 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 GetTanuloErtekelesTipusList() { var list = new List { 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 GetEvfolyamTipusList() { var list = new List { 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 GetTanarList(bool isSzuletesiIdovel = false) { List result; var tanarCoList = new AlkalmazottHelper(ConnectionType).GetAlkalmazottCoList(); if (isSzuletesiIdovel) { var tanarNevList = new List(); //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 GetTanarListBySzervezet(bool isSzuletesiIdovel = false, int? szervezetTipus = null, int? szervezetId = null) { List result; var tanarCoList = new AlkalmazottHelper(ConnectionType).GetAlkalmazottCoListBySzervezet(szervezetTipus, szervezetId); if (isSzuletesiIdovel) { var tanarNevList = new List(); //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 GetTanuloList() { var result = new TanuloHelper(ConnectionType).GetTanuloCoList().Select(x => x.FelhasznaloNyomtatasiNev).Distinct().OrderBy(o => o).ToList(); return result; } public IList 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 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 GetHetiRendTipusList() { var hetiRendDictionaryItemList = ((int)GeneratedAdatszotarTipusEnum.HetiRendTipus).GetItemsByType(TanevId); var result = hetiRendDictionaryItemList.OrderBy(o => o.Order).Select(x => x.Name).ToList(); return result; } public IList GetHetNapjaTipusList() { var result = CommonUtils.OrderedHetNapjaTipusEnumList.Select(x => x.GetDisplayName(TanevId)).ToList(); return result; } public IList GetTeremList() { var result = new TeremHelper(ConnectionType).GetTeremCoList().Select(x => x.Nev).OrderBy(o => o).ToList(); return result; } public IList 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 GetMukodesiHelyList(DataSet feladatellatasiHelyDataSet) { var result = (from DataRow dataRow in feladatellatasiHelyDataSet.Tables[0].Rows select SDAConvert.ToString(dataRow["MukodesiHelyNev"])).ToList(); return result; } public IList 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 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 } }