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("MukodesiHelyID")).ThenBy(x => x.Field("OktNevFel")).Select(x => (Text: x.Field("Nev"), Value: x.Field("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("Tipus") == "Osztály"); int csoportSzam = ocsRows.Count(x => x.Field("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().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("Id"), ErvenyessegKezdete = r.Field("ErvenyessegKezdete"), ErvenyessegVege = r.Field("ErvenyessegVege"), IsNapirend = r.Field("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 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("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; } } }