kreta/Kreta.BusinessLogic/Logic/Mulasztas/MulasztasLogic.cs
2024-03-13 00:33:46 +01:00

185 lines
9.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.Core.ConnectionType;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Enums.ManualEnums.SystemSettings;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Logic.Mulasztas
{
public class MulasztasLogic
{
private readonly IConnectionType ConnectionType;
public MulasztasLogic(IConnectionType connectionType)
{
ConnectionType = connectionType;
}
public DataSet GetMulasztasok(int osztalycsoportId, int tanoraId, DateTime oraKezdete, DateTime oraVege, int targyId, int tanarId, bool hianyzokAutoKitoltes, SzervezetTipusEnum? szervezetTipus = null)
{
var systemHelper = new SystemSettingsHelper(ConnectionType);
var tantargyHelper = new TantargyHelper(ConnectionType);
var tanevHelper = new TanevHelper(ConnectionType);
var osztalyCsoportHelper = new OsztalyCsoportHelper(ConnectionType);
var magantanuloMulasztasKezeles = (SystemSettingMagantanuloMulasztas)systemHelper.GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.Magantanulo_oralatogatas_aloli_mentessegenek_kezelese);
var parhuzamosOraKezeles = systemHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.A_foglalkozasok_mulasztasi_adatai_megadasanal_a_parhuzamos_orakkal_valo_utkozes_vizsgalata);
var csakMegtartott = systemHelper.GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.Naplozaskor_mulasztas_szazalek_szamitas) == 1 ? 0 : 1;
var alapertelmezettMulasztasTipus = (MulasztasTipusEnum)systemHelper.GetSystemSettingValue<int>(RendszerBeallitasTipusEnum.alapertelmezett_statusz_naplozasok_eseteben);
if (osztalyCsoportHelper.GetCsoportTipusByOsztalyCsoportId(osztalycsoportId) == CsoportTipusEnum.apaczai_mentorcsoport)
{
alapertelmezettMulasztasTipus = MulasztasTipusEnum.ures;
}
var tanevCo = tanevHelper.GetTanevInfo();
var isGyakorlatiTantargy = tantargyHelper.IsGyakorlatiTantargy(targyId);
var parhuzamosOranNaplozottak = new MulasztasHelper(ConnectionType).ListParhuzamosOranNaplozottMulasztasTanuloId(oraKezdete, oraVege, tanoraId);
var elozoOranhianyzottTanulok = hianyzokAutoKitoltes ? new TanuloHelper(ConnectionType).GetElozoOranHianyzottTanulok(oraKezdete, osztalycsoportId) : null;
var tantargybolElozoOranHianyzottTanulok = new OrarendiOraHelper(ConnectionType).GetElozoOranHianyzottTanulo(targyId, osztalycsoportId, oraKezdete);
var ds = osztalyCsoportHelper.GetMulasztasEsFelmentesOsztalyCsoportTanuloi(osztalycsoportId, tanoraId, targyId, tanarId, oraKezdete.Date, csakMegtartott, tanevCo, alapertelmezettMulasztasTipus);
ds.Tables[0].Columns.Add("elozoOranHianyzott", typeof(bool));
foreach (DataRow row in ds.Tables[0].Rows)
{
SetAmiTooltipsAndInfos(row);
CheckMagantanuloFelmentes(row, magantanuloMulasztasKezeles, isGyakorlatiTantargy, oraKezdete);
SetParhuzamosOraFelmentett(row, parhuzamosOraKezeles, parhuzamosOranNaplozottak);
if ((row["MulasztasId"] == DBNull.Value) && hianyzokAutoKitoltes)
{ SetMulasztasHianyzasFromLastLesson(row, elozoOranhianyzottTanulok); }
SetMulasztasIgazolas(row);
SetMulasztasEloreRogzitettIgazolas(row, tanoraId);
SetElozoOranHianyzottTanulo(row, tantargybolElozoOranHianyzottTanulok);
SetMulasztasTipusUresOraMentesseg(row, oraKezdete, tanoraId);
}
return ds;
}
private void CheckMagantanuloFelmentes(DataRow row, SystemSettingMagantanuloMulasztas magantanuloMulasztasKezeles, bool isGyakorlatiTantargy, DateTime oraKezdete)
{
var magantanulosagKezdete = SDAConvert.ToDateTime(row["MagantanulosagKezdete"]);
var magantanulosagVege = SDAConvert.ToDateTime(row["MagantanulosagVege"]);
if (SDAConvert.ToBoolean(row["IsMagantanulo_BOOL"]) && (magantanulosagKezdete.HasValue == false || magantanulosagKezdete.Value.Date <= oraKezdete.Date) && (!magantanulosagVege.HasValue || magantanulosagVege >= oraKezdete.Date))
{
if (SDAConvert.ToBoolean(row["OraMentesseg_BOOL"]) || (magantanuloMulasztasKezeles != SystemSettingMagantanuloMulasztas.KotelezoMegjelenie && (magantanuloMulasztasKezeles != SystemSettingMagantanuloMulasztas.CsakGyakorlaton || !isGyakorlatiTantargy)))
{
row["OraMentesseg"] = "T";
row["OraMentesseg_BOOL"] = true;
row["Oka"] = row["Oka"] + " " + OrarendResource.Magantanulo;
}
else
{
row["OraMentesseg"] = "F";
row["OraMentesseg_BOOL"] = false;
}
}
}
private void SetParhuzamosOraFelmentett(DataRow row, bool parhuzamosOraKezeles, List<int> parhuzamosOranNaplozottak)
{
if (!parhuzamosOraKezeles)
return;
if (parhuzamosOranNaplozottak.Count > 0 && parhuzamosOranNaplozottak.Contains(SDAConvert.ToInt32(row["ID"])))
{
row["OraMentesseg"] = "T";
row["OraMentesseg_BOOL"] = true;
row["Oka"] = row["Oka"] + " " + OrarendResource.ParhuzamosOranMarNaploztak;
}
}
private void SetMulasztasHianyzasFromLastLesson(DataRow row, List<int> elozoOranhianyzottTanulok)
{
if (elozoOranhianyzottTanulok?.Count > 0)
{
if (elozoOranhianyzottTanulok.Contains(SDAConvert.ToInt32(row["ID"])))
{
row["MulasztasTipus"] = (int)MulasztasTipusEnum.hianyzas;
row["MulasztasTipus_DNAME"] = MulasztasTipusEnum.hianyzas.GetDisplayName(ConnectionType.TanevId);
}
}
}
private void SetMulasztasIgazolas(DataRow row)
{
var igazoltMulasztas = SDAConvert.ToBooleanFromTF(row["Igazolt"], NullValue: false);
if (igazoltMulasztas)
{
row["Oka"] = row["Oka"] + " " + OrarendResource.ATanulonakVanRogzitveIgazolasa;
}
}
private void SetElozoOranHianyzottTanulo(DataRow row, List<int> tantargybolElozoOranHianyzottTanulok)
{
if (tantargybolElozoOranHianyzottTanulok.Any())
{
if (tantargybolElozoOranHianyzottTanulok.Contains(row.Field<int>("ID")))
{
row["elozoOranHianyzott"] = true;
}
else
{
row["elozoOranHianyzott"] = false;
}
}
}
private void SetMulasztasEloreRogzitettIgazolas(DataRow row, int tanoraId)
{
if (tanoraId < 0)
{
if (row["RogzitettIgazolas"].ToString() == "T" && string.IsNullOrWhiteSpace(SDAConvert.ToString(row["MulasztasId"])))
{
row["MulasztasTipus"] = (int)MulasztasTipusEnum.hianyzas;
row["MulasztasTipus_DNAME"] = MulasztasTipusEnum.hianyzas.GetDisplayName(ConnectionType.TanevId);
}
}
}
private void SetMulasztasTipusUresOraMentesseg(DataRow row, DateTime oraKezdete, int tanoraId)
{
// csak nem naplózott óráknál kell
if (tanoraId < 0)
{
var magantanulosagKezdete = SDAConvert.ToDateTime(row["MagantanulosagKezdete"]);
var magantanulosagVege = SDAConvert.ToDateTime(row["MagantanulosagVege"]);
if (SDAConvert.ToBoolean(row["OraMentesseg_BOOL"]) ||
(SDAConvert.ToBoolean(row["IsMagantanulo_BOOL"]) && (magantanulosagKezdete.HasValue == false || magantanulosagKezdete.Value.Date <= oraKezdete.Date) && (!magantanulosagVege.HasValue || magantanulosagVege >= oraKezdete.Date)))
{
row["MulasztasTipus"] = (int)MulasztasTipusEnum.ures;
row["MulasztasTipus_DNAME"] = MulasztasTipusEnum.ures.GetDisplayName(ConnectionType.TanevId);
}
}
}
private void SetAmiTooltipsAndInfos(DataRow row)
{
if (!string.IsNullOrWhiteSpace(row.Field<string>("EvfolyamId_DNAME")))
{
row["TanuloNev"] = row.Field<string>("TanuloNev").Substring(0, row.Field<string>("TanuloNev").Length - 1) +
" - " +
row.Field<string>("EvfolyamId_DNAME") + ", " +
row.Field<string>("AmiTagozatId_DNAME") + ")";
}
if (string.IsNullOrWhiteSpace(row.Field<string>("AmiFotargyId_DNAME")))
{ row["AmiFotargyId_DNAME"] = "-"; }
if (string.IsNullOrWhiteSpace(row.Field<string>("AmiTagozatId_DNAME")))
{ row["AmiTagozatId_DNAME"] = "-"; }
if (string.IsNullOrWhiteSpace(row.Field<string>("AmiTantargyKotelezosegId_DNAME")))
{ row["AmiTantargyKotelezosegId_DNAME"] = "-"; }
if (string.IsNullOrWhiteSpace(row.Field<string>("EvfolyamId_DNAME")))
{ row["EvfolyamId_DNAME"] = "-"; }
}
}
}