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

280 lines
11 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.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<int>("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<int>("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<int>("TanuloId");
var queryR = from f in dsTanulok.Tables[0].AsEnumerable()
where f.Field<int>("C_TANULOID") == tanuloId
&& f.Field<DateTime>("C_BELEPESDATUM") <= item.Field<DateTime>("Kezdete")
&& (f.Field<DateTime?>("C_KILEPESDATUM") is null || f.Field<DateTime?>("C_KILEPESDATUM") >= item.Field<DateTime>("Vege"))
select
f.Field<string>("C_NEV");
if (queryR.Any())
{
item["OsztalyCsoport"] = string.Join(", ", queryR);
}
}
}
public List<IgazolasItemCo> GetIgazolasCoList(IgazolasokListajaSearchCO searchModel)
{
var igazolasok = new List<IgazolasItemCo>();
var ds = GetIgazolasokListajaGrid(searchModel);
foreach (DataRow dataRow in ds.Tables[0].Rows)
{
var itemCo = new IgazolasItemCo(dataRow);
igazolasok.Add(itemCo);
}
return igazolasok;
}
}
}