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

185 lines
8.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.HelperClasses.ImportCo;
using Kreta.BusinessLogic.Helpers.ImportExport;
using Kreta.Core.ConnectionType;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Interfaces;
using Kreta.DataAccessManual.ParameterClasses;
using Kreta.DataAccessManual.Util;
using Kreta.Enums.ManualEnums;
using Kreta.Enums.ManualEnums.ImportExport;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Helpers
{
public class OrarendTorleseHelper : LogicBase
{
public OrarendTorleseHelper(IConnectionType connectionType) : base(connectionType)
{
}
public List<(string Text, string Value)> GetFeladatellatasiHelyek(bool isKellOcsDarabszam = false)
{
var ret = new List<(string Text, string Value)>();
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.FeladatEllatasiHelyDal();
var ds = dal.GetFeladatEllatasiHelyekForkDropDown(TanevId);
ret.AddRange(ds.Tables[0].AsEnumerable().OrderBy(x => x.Field<int>("MukodesiHelyID")).ThenBy(x => x.Field<int>("OktNevFel")).Select(x => (Text: x.Field<string>("Nev"), Value: x.Field<int>("ID").ToString())));
if (isKellOcsDarabszam)
{
for (int i = 0; i < ret.Count; i++)
{
var felhely = ret[i];
var ocsRows = dal.GetFeladatellatasiHelyOsztalycsoportjai(int.Parse(felhely.Value), TanevId).Tables[0].AsEnumerable();
int osztalySzam = ocsRows.Count(x => x.Field<string>("Tipus") == "Osztály");
int csoportSzam = ocsRows.Count(x => x.Field<string>("Tipus") == "Csoport");
felhely.Text += $" (Osztályok száma: {osztalySzam}, Csoportok száma: {csoportSzam})";
ret[i] = felhely;
}
}
});
return ret;
}
public (DateTime EvKezdoNapja, DateTime EvUtolsoNapja) GetMinMaxDatumValaszto()
{
var tanevInfo = new TanevHelper(ConnectionType).GetTanevInfo();
return (EvKezdoNapja: tanevInfo.KezdoNap, EvUtolsoNapja: tanevInfo.UtolsoNap);
}
public List<(string Text, string Value)> GetNezetTipusok()
{
return Enum.GetValues(typeof(OrarendekTorleseNezetTipusEnum)).OfType<OrarendekTorleseNezetTipusEnum>().Select(x => (Text: x.GetDisplayName(TanevId), Value: x.ToString())).ToList();
}
public List<(string FileName, MemoryStream FileStream)> OrarendekTorlese(OrarendekTorleseCo orarendekTorleseCo)
{
return Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var orarendiOraDal = h.OrarendiOra();
var orarendekTorlesePco = orarendekTorleseCo.ConvertToPco(TanevId, FelhasznaloId);
var exportok = GetExportok(h, orarendekTorlesePco);
orarendiOraDal.OrarendekTorlese(orarendekTorlesePco);
return exportok;
});
}
private List<(string FileName, MemoryStream FileStream)> GetExportok(IDalHandler dalHandler, OrarendekTorlesePco orarendekTorlesePco)
{
var orarendiOraDal = dalHandler.OrarendiOra();
var importExportDal = dalHandler.ImportExportDal();
var exportAdatokDs = orarendiOraDal.GetExportAdatokForOrarendekTorlese(orarendekTorlesePco);
var orarendExportAdatokDs = importExportDal.GetOrarendExcelExportData(TanevId, orarendekTorlesePco.IntervallumKezdete, orarendekTorlesePco.IntervallumVege, isOraErvenyessegiIdovel: true, isIdoszakonKivuliElemekMegjelenitese: true);
var results = new List<(string FileName, MemoryStream FileStream)>();
var orarendImportExportHelper = new OrarendImportExportHelper(new DalHandlerConnectionType(ConnectionType, dalHandler));
var exportAdatok = exportAdatokDs.Tables[0].AsEnumerable().Select(r => new OrarendekTorleseExportAdatokCo
{
Id = r.Field<int>("Id"),
ErvenyessegKezdete = r.Field<DateTime>("ErvenyessegKezdete"),
ErvenyessegVege = r.Field<DateTime>("ErvenyessegVege"),
IsNapirend = r.Field<bool>("IsNapirend")
}).ToList();
var existsTanora = exportAdatok.Any(a => !a.IsNapirend);
var existsNapirendiOra = exportAdatok.Any(a => a.IsNapirend);
var orarendExportList = GetOrarendExportList(orarendekTorlesePco.NezetTipus, existsTanora, existsNapirendiOra);
foreach (var (FileName, OrarendExportSettings) in orarendExportList)
{
var exportDataSet = CreateExportDataSet(exportAdatok, orarendExportAdatokDs, OrarendExportSettings.IsNapirendImport);
var workbookMemoryStream = orarendImportExportHelper.GetWorkbook(OrarendExportSettings, exportDataSet);
results.Add((FileName, workbookMemoryStream));
}
return results;
}
private IEnumerable<(string FileName, OrarendImportFileUploadCo OrarendExportSettings)> GetOrarendExportList(OrarendekTorleseNezetTipusEnum nezetTipus, bool existsTanora, bool existsNapirendiOra)
{
var results = new List<(string FileName, OrarendImportFileUploadCo OrarendExportSettings)>();
if (existsTanora && nezetTipus != OrarendekTorleseNezetTipusEnum.Napirend)
{
results.Add((ImportExportOrarendResource.ExportFileName,
new OrarendImportFileUploadCo
{
OrarendImportTipus = (int)OrarendImportTipusEnum.Import,
IsNapirendImport = false,
WorksheetName = ImportExportOrarendResource.ImportDefaultSheetNameOrarend,
ExcelHeaderList = OrarendImportExportHelper.ImportHeaderList
}));
results.Add((ImportExportOrarendResource.ExportFileNameErvenyessegiIdovel,
new OrarendImportFileUploadCo
{
OrarendImportTipus = (int)OrarendImportTipusEnum.ErvenyessegiIdovelImport,
IsNapirendImport = false,
WorksheetName = ImportExportOrarendResource.ImportDefaultSheetNameOrarendErvenyessegiIdovel,
ExcelHeaderList = OrarendImportExportHelper.ImportHeaderListOraErvenyessegiIdovel
}));
}
if (existsNapirendiOra && nezetTipus != OrarendekTorleseNezetTipusEnum.Tanora)
{
results.Add((ImportExportOrarendResource.ExportFileNameNapirend,
new OrarendImportFileUploadCo
{
OrarendImportTipus = (int)OrarendImportTipusEnum.Import,
IsNapirendImport = true,
WorksheetName = ImportExportOrarendResource.ImportDefaultSheetNameNapirend,
ExcelHeaderList = OrarendImportExportHelper.ImportHeaderListNapirend
}));
results.Add((ImportExportOrarendResource.ExportFileNameNapirendErvenyessegiIdovel,
new OrarendImportFileUploadCo
{
OrarendImportTipus = (int)OrarendImportTipusEnum.ErvenyessegiIdovelImport,
IsNapirendImport = true,
WorksheetName = ImportExportOrarendResource.ImportDefaultSheetNameNapirendErvenyessegiIdovel,
ExcelHeaderList = OrarendImportExportHelper.ImportHeaderListNapirendOraErvenyessegiIdovel
}));
}
return results;
}
private DataSet CreateExportDataSet(List<OrarendekTorleseExportAdatokCo> exportAdatok, DataSet orarendExportAdatokDs, bool isNapirend)
{
var filteredExportAdatok = exportAdatok.Where(a => isNapirend ? a.IsNapirend : !a.IsNapirend);
var exportDs = orarendExportAdatokDs.Copy();
foreach (DataRow dataRow in exportDs.Tables[0].Rows)
{
var orarendiOraId = dataRow.Field<int>("Id");
var exportAdat = filteredExportAdatok.FirstOrDefault(a => a.Id == orarendiOraId);
if (exportAdat != null)
{
dataRow.SetField("OraErvenyessegKezdete", exportAdat.ErvenyessegKezdete);
dataRow.SetField("OraErvenyessegVege", exportAdat.ErvenyessegVege);
}
else
{
dataRow.Delete();
}
}
exportDs.AcceptChanges();
return exportDs;
}
}
}