kreta/Kreta.BusinessLogic/Helpers/ItmAdatszolgaltatasHelper.cs
2024-03-13 00:33:46 +01:00

193 lines
7.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using Aspose.Cells;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Core.Exceptions;
using Kreta.DataAccessManual;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Helpers
{
public class ItmAdatszolgaltatasHelper : LogicBase
{
public ItmAdatszolgaltatasHelper(IConnectionType connectionType) : base(connectionType)
{
}
public List<MemoryStream> IntezmenyAdatok()
{
var fenntartoNev = IntezmenyFenntarto();
var itmAdatok = GetItmAdatok();
if (itmAdatok.Tables.Count == 0 || itmAdatok.Tables[0].Rows.Count == 0)
{
throw new BlException(AdatszolgaltatasokResource.ItmAdatszolgaltatasNincsenekSzakkepesitesiAdatok);
}
var splittedMergedDataSet = SplitDataSet(MergeDataSet(fenntartoNev, AdatszolgaltatasokResource.ItmAdatszolgaltatasKepzesKezdete2122Osz, itmAdatok));
return splittedMergedDataSet.Select(x => FillTemplate(x)).ToList();
}
private List<DataSet> SplitDataSet(DataSet itmAdatok, int darabMeret = 100)
{
var dataSetList = new List<DataSet>();
var szelet = Math.Ceiling(itmAdatok.Tables[0].Rows.Count / (double)darabMeret);
if (szelet == 1)
{
dataSetList.Add(itmAdatok);
}
else
{
for (int i = 0; i < szelet; i++)
{
var dataSet = itmAdatok.Clone();
var kiNemSzedettDarabszam = itmAdatok.Tables[0].Rows.Count - (darabMeret * i);
var kiszedhetoDarabszam = darabMeret > kiNemSzedettDarabszam ? kiNemSzedettDarabszam : darabMeret;
for (int j = 0; j < kiszedhetoDarabszam; j++)
{
var kiszedesiPozicio = j + (i * darabMeret);
dataSet.Tables[0].ImportRow(itmAdatok.Tables[0].Rows[kiszedesiPozicio]);
}
dataSetList.Add(dataSet);
}
}
return dataSetList;
}
private DataSet MergeDataSet(string fenntartoNev, string kepzesKedete, DataSet itmAdatok)
{
var mergedDataSet = itmAdatok.Copy();
var kedvezmenyezettNeveOszlop = mergedDataSet.Tables[0].Columns.Add(AdatszolgaltatasokResource.ItmAdatszolgaltatasKedvezmenyezettNeveExcelAzonosito, typeof(string));
kedvezmenyezettNeveOszlop.SetOrdinal(0);
var kepzesKedeteOszlop = mergedDataSet.Tables[0].Columns.Add(AdatszolgaltatasokResource.ItmAdatszolgaltatasKepzesKezdeteExcelAzonosito, typeof(string));
kepzesKedeteOszlop.SetOrdinal(2);
foreach (DataRow item in mergedDataSet.Tables[0].Rows)
{
item.SetField<string>(AdatszolgaltatasokResource.ItmAdatszolgaltatasKedvezmenyezettNeveExcelAzonosito, fenntartoNev);
item.SetField<string>(AdatszolgaltatasokResource.ItmAdatszolgaltatasKepzesKezdeteExcelAzonosito, kepzesKedete);
}
return mergedDataSet;
}
private MemoryStream FillTemplate(DataSet mergedDataSet)
{
using (MemoryStream memoryStreamToOpen = new MemoryStream())
{
using (FileStream fstream = new FileStream(HttpContext.Current.Server.MapPath(AdatszolgaltatasokResource.ItmAdatszolgaltatasFelnottOktatásUtvonalTemplateExcelUtvonal), FileMode.Open, FileAccess.Read))
{
try
{
fstream.CopyTo(memoryStreamToOpen);
}
catch (Exception)
{
fstream.Close();
throw;
}
}
Workbook workbook = new Workbook(memoryStreamToOpen);
Worksheet alapadatFul = workbook.Worksheets[AdatszolgaltatasokResource.ItmAdatszolgaltatasKitoltendoExcelSheetNeve];
var currentRow = 3;
foreach (DataRow item in mergedDataSet.Tables[0].Rows)
{
alapadatFul.Cells.ImportDataRow(item, currentRow++, 2);
}
workbook.CalculateFormula();
var memoryStreamToSave = new MemoryStream();
workbook.Save(memoryStreamToSave, SaveFormat.Xlsx);
memoryStreamToSave.Position = 0;
return memoryStreamToSave;
}
}
private DataSet GetItmAdatok()
{
return Dal.CustomConnection.Run(ConnectionType, h =>
{
var dal = h.IntezmenyDal();
return dal.GetIntezmenyItmAdatszolgaltatasAdatok(IntezmenyId, TanevId);
});
}
private string IntezmenyFenntarto()
{
using (FileStream fstream = new FileStream(HttpContext.Current.Server.MapPath(AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaImportExcelUtvonal), FileMode.Open, FileAccess.Read))
{
try
{
Workbook workbook = new Workbook(fstream);
Worksheet intezmenyLap = workbook.Worksheets[0];
DataTable intezmenyDataTable = intezmenyLap.Cells.ExportDataTable(0, 4, intezmenyLap.Cells.MaxDataRow, 2, true);
Worksheet fenntartoLap = workbook.Worksheets[2];
DataTable fenntartoDataTable = fenntartoLap.Cells.ExportDataTable(0, 0, fenntartoLap.Cells.MaxDataRow, 3, true);
ValidateDataTable(intezmenyDataTable, new List<string>() { AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelFenntarto, AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelIntezmenyAzonosito });
ValidateDataTable(fenntartoDataTable, new List<string>() { AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelAzonosito, AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelRovidnev });
var intezmenyDataRow = (from DataRow dr in intezmenyDataTable.Rows where dr.Field<string>(AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelIntezmenyAzonosito).ReplaceMultipleSpacesAndTrim() == IntezmenyAzonosito select dr).FirstOrDefault();
if (intezmenyDataRow == null)
{
throw new BlException(string.Format(AdatszolgaltatasokResource.ItmAdatszolgaltatasIsmeretlenIntezmenyAzonosito, IntezmenyAzonosito));
}
var fenntartoId = intezmenyDataRow.Field<double>(AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelFenntarto);
var fenntartoDataRow = (from DataRow dr in fenntartoDataTable.Rows where dr.Field<double>(AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelAzonosito) == fenntartoId select dr).FirstOrDefault();
if (fenntartoDataRow == null)
{
throw new BlException(string.Format(AdatszolgaltatasokResource.ItmAdatszolgaltatasIsmeretlenFenntartoAzonosito, fenntartoId));
}
var fenntartoNev = fenntartoDataRow.Field<string>(AdatszolgaltatasokResource.ItmAdatszolgaltatasIntezmenyListaExcelRovidnev).ReplaceMultipleSpacesAndTrim();
return fenntartoNev;
}
catch (Exception)
{
fstream.Close();
throw;
}
}
}
private void ValidateDataTable(DataTable dataTable, List<string> columnName)
{
columnName.ForEach(x =>
{
if (!dataTable.Columns.Contains(x))
{
throw new Exception();
}
});
}
}
}