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.Logic; using Kreta.Core.ConnectionType; using Kreta.DataAccessManual; using Kreta.Enums; using Kreta.Resources; using OfficeOpenXml; namespace Kreta.BusinessLogic.Helpers { public class IgazolasHelper : LogicBase { public IgazolasHelper(IConnectionType connectionType) : base(connectionType) { } public IgazolasCO GetIgazolasCoById(int id) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); var entity = igazolasDal.Get(id); return new IgazolasCO(entity); }); } public IgazolasCO GetIgazolasInfo(int id) { return Dal.CustomConnection.Run(ConnectionType, h => { var iDal = h.IgazolasDal(); var tDal = h.TanuloCsoport(); var igazolasInfok = iDal.GetIgazolasInfo(id); var tanuloIdList = igazolasInfok.Tables[0].AsEnumerable().Select(d => d.Field("TanuloId")).Distinct(); var dsTanulok = tDal.GetTanulokOsztalyai(tanuloIdList.ToList()); MergeOsztalyokColumnIntoIgazolasok(igazolasInfok, dsTanulok); var igazolasCo = new IgazolasCO(); if (igazolasInfok.Tables.Count > 0 && igazolasInfok.Tables[0].Rows.Count > 0) { var row = igazolasInfok.Tables[0].Rows[0]; igazolasCo.ID = SDAConvert.ToInt32(row["ID"]); igazolasCo.TanuloId = SDAConvert.ToInt32(row["TanuloId"]); igazolasCo.TanuloNev = row["Nev"].ToString(); //igazolasCo.OsztCsop = SDAConvert.ToInt32(row["OsztalyCsoportId"]); igazolasCo.OsztCsopNev = row["OsztalyCsoport"].ToString(); igazolasCo.ErvKezdete = SDAConvert.ToDateTime(row["Kezdete"]).Value; igazolasCo.ErvVege = SDAConvert.ToDateTime(row["Vege"]).Value; igazolasCo.IgazolasTipus = SDAConvert.ToInt32(row["IgazolasTipusa"]); igazolasCo.Megjegyzes = row["Megjegyzes"].ToString(); igazolasCo.RogzDatum = SDAConvert.ToDateTime(row["RogzitesDatuma"]).Value; igazolasCo.RogzitoNev = row["Rogzito"].ToString(); } return igazolasCo; }); } public DataSet GetIgazolasByTanuloId(int tanuloId) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); return igazolasDal.GetIgazolasDataSet(tanuloId); }); } public DataSet GetInformaciokIgazolasGrid(IgazolasSearchCo co) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); return igazolasDal.GetIgazolasSearchDataSet(co.ConvertToPco()); }); } public void SaveOrUpdateIgazolas(IgazolasCO co) { Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); var igazolas = igazolasDal.Get(); if (co.ID.HasValue && co.ID.Value > 0) { igazolas = igazolasDal.Get(co.ID.Value); } igazolas.IgazolasTipusa = co.IgazolasTipus ?? 0; igazolas.Kezdete = co.ErvKezdete; igazolas.Vege = co.ErvVege; igazolas.Megjegyzes = co.Megjegyzes; igazolas.TanuloId = co.TanuloId; igazolas.RogzitoId = co.RogzitoId; igazolas.RogzitesDatuma = co.RogzDatum; if (!string.IsNullOrWhiteSpace(co.Ugyiratszam)) { igazolas.Ugyiratszam = co.Ugyiratszam; } igazolas.TanevId = TanevId; igazolas.IntezmenyId = IntezmenyId; if(co.SzervezetId.HasValue) { igazolas.SzervezetId = co.SzervezetId.Value; } if (igazolas.ID > 0) { igazolasDal.Update(igazolas); } else { igazolasDal.Insert(igazolas); } }); } public void DeleteIgazolasById(int igazolasId) { Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); igazolasDal.Delete(igazolasId); }); } public DataSet GetOsztalyCsoportIgazolasok(int id, OktNevelesiKategoriaEnum? kategoria) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); return igazolasDal.GetOsztalyCsoportIgazolasok(id, kategoria); }); } public DataSet GetOsztalyCsoportIgazolasokForValidate(DataTable igazolasDT) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); return igazolasDal.GetOsztalyCsoportIgazolasokForValidate(igazolasDT); }); } public DataSet IgazolasKereses(int? osztCsopID, int? szervezetTipusId = null) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); return igazolasDal.IgazolasKereses(osztCsopID, null, szervezetTipusId: szervezetTipusId); }); } public DataSet IgazolasDetailKereses(int tanuloID, int? szervezetTipusId = null) { return Dal.CustomConnection.Run(ConnectionType, helper => { var igazolasDal = helper.IgazolasDal(GridParameters); return igazolasDal.IgazolasDetailKereses(tanuloID, szervezetTipusId); }); } public DataSet GetIgazolasokListajaGrid(IgazolasokListajaSearchCO co) { return Dal.CustomConnection.Run(ConnectionType, h => { var iDal = h.IgazolasDal(GridParameters); var tDal = h.TanuloCsoport(); var dsIgazolasok = iDal.GetIgazolasokListajaGrid(co.ConvertToPCO(), null); var tanuloIdList = dsIgazolasok.Tables[0].AsEnumerable().Select(d => d.Field("TanuloId")).Distinct(); var dsTanulok = tDal.GetTanulokOsztalyai(tanuloIdList.ToList()); MergeOsztalyokColumnIntoIgazolasok(dsIgazolasok, dsTanulok); return dsIgazolasok; }); } public MemoryStream GetInformaciokIgazolasExcelExport(IgazolasSearchCo igazolasSearchCo) { var igazolasokListajaCO = new IgazolasokListajaSearchCO() { IgazolasKezdteteSearch = igazolasSearchCo.IgazolasKezdeteSearch, IgazolasVegeSearch = igazolasSearchCo.IgazolasVegeSearch, IgazolasTipusaSearch = igazolasSearchCo.IgazolasTipusaSearch, TanuloId = igazolasSearchCo.TanuloId, FeladatEllatasiHelyId = igazolasSearchCo.FeladatEllatasiHelyId }; return Dal.CustomConnection.Run(ConnectionType, h => { var igazolasDal = h.IgazolasDal(GridParameters); var dsIgazolasok = igazolasDal.GetIgazolasExcelExport(igazolasokListajaCO.ConvertToPCO()); var dataTable = dsIgazolasok.Tables[0]; (string fromColumn, string toColumn, Type type)[] exportColumns = new (string, string, Type)[] { ("Kezdete", HianyzasResource.ErvenyessegKezdete, typeof(DateTime)), ("Vege", HianyzasResource.ErvenyessegVege, typeof(DateTime)), ("IgazolasTipusa_DNAME", HianyzasResource.IgazolasTipusa, typeof(string)), ("Megjegyzes", HianyzasResource.Megjegyzes, typeof(string)), }; ExportLogic.MapDataTable(dataTable, exportColumns, true); ExportLogic.TryCreateHeaderIfNotExist(dataTable); var stream = new MemoryStream(); using (var excel = new ExcelPackage(stream)) { var workSheet = excel.Workbook.Worksheets.Add(IgazolasResource.IgazolasExport); workSheet.Cells[1, 1].LoadFromDataTable(dataTable, true); ExportLogic.FormatDateFields(exportColumns, workSheet); ExportLogic.SetHeaderStyles(workSheet.Cells[1, 1, 1, dataTable.Columns.Count]); workSheet.Cells.AutoFitColumns(); excel.Save(); } stream.Position = 0; return stream; }); } private static void MergeOsztalyokColumnIntoIgazolasok(DataSet dsIgazolasok, DataSet dsTanulok) { // Az igazolasok listája alapesetben nem tartalmazza a tanuló osztály rekordját // Az igazolások soraiban a tanuló osztályainak befrissítése ("többosztály" kezelése): dsIgazolasok.Tables[0].Columns.Add("OsztalyCsoport"); foreach (DataRow item in dsIgazolasok.Tables[0].Rows) { var tanuloId = item.Field("TanuloId"); var queryR = from f in dsTanulok.Tables[0].AsEnumerable() where f.Field("C_TANULOID") == tanuloId && f.Field("C_BELEPESDATUM") <= item.Field("Kezdete") && (f.Field("C_KILEPESDATUM") is null || f.Field("C_KILEPESDATUM") >= item.Field("Vege")) select f.Field("C_NEV"); if (queryR.Any()) { item["OsztalyCsoport"] = string.Join(", ", queryR); } } } public List GetIgazolasCoList(IgazolasokListajaSearchCO searchModel) { var igazolasok = new List(); var ds = GetIgazolasokListajaGrid(searchModel); foreach (DataRow dataRow in ds.Tables[0].Rows) { var itemCo = new IgazolasItemCo(dataRow); igazolasok.Add(itemCo); } return igazolasok; } } }