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(RendszerBeallitasTipusEnum.Magantanulo_oralatogatas_aloli_mentessegenek_kezelese); var parhuzamosOraKezeles = systemHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.A_foglalkozasok_mulasztasi_adatai_megadasanal_a_parhuzamos_orakkal_valo_utkozes_vizsgalata); var csakMegtartott = systemHelper.GetSystemSettingValue(RendszerBeallitasTipusEnum.Naplozaskor_mulasztas_szazalek_szamitas) == 1 ? 0 : 1; var alapertelmezettMulasztasTipus = (MulasztasTipusEnum)systemHelper.GetSystemSettingValue(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 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 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 tantargybolElozoOranHianyzottTanulok) { if (tantargybolElozoOranHianyzottTanulok.Any()) { if (tantargybolElozoOranHianyzottTanulok.Contains(row.Field("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("EvfolyamId_DNAME"))) { row["TanuloNev"] = row.Field("TanuloNev").Substring(0, row.Field("TanuloNev").Length - 1) + " - " + row.Field("EvfolyamId_DNAME") + ", " + row.Field("AmiTagozatId_DNAME") + ")"; } if (string.IsNullOrWhiteSpace(row.Field("AmiFotargyId_DNAME"))) { row["AmiFotargyId_DNAME"] = "-"; } if (string.IsNullOrWhiteSpace(row.Field("AmiTagozatId_DNAME"))) { row["AmiTagozatId_DNAME"] = "-"; } if (string.IsNullOrWhiteSpace(row.Field("AmiTantargyKotelezosegId_DNAME"))) { row["AmiTantargyKotelezosegId_DNAME"] = "-"; } if (string.IsNullOrWhiteSpace(row.Field("EvfolyamId_DNAME"))) { row["EvfolyamId_DNAME"] = "-"; } } } }