kreta/KretaWeb/Areas/Tanar/Controllers/TanarDashboardController.cs
2024-03-13 00:33:46 +01:00

474 lines
19 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using System.Web.Routing;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.Client.Eugyintezes;
using Kreta.Client.Eugyintezes.Configuration;
using Kreta.Core;
using Kreta.Core.FeatureToggle;
using Kreta.Enums.ManualEnums;
using Kreta.Framework;
using Kreta.Resources;
using Kreta.Web.Areas.Tanar.Models;
using Kreta.Web.Configuration;
using Kreta.Web.Helpers;
using Kreta.Web.Security;
using Newtonsoft.Json;
namespace Kreta.Web.Areas.Tanar.Controllers
{
[MvcRoleClaimsAuthorize(true)]
[MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
[MvcRolePackageAuthorize(KretaClaimPackages.Naplo.ClaimValue)]
public class TanarDashboardController : Controller
{
private IEugyintezesClientConfiguration EugyintezesClientConfiguration { get; }
private IIdpConfiguration IdpConfiguration { get; }
private IFeatureContext FeatureContext { get; }
private const int ElemekAListaban = 8;
public TanarDashboardController(IEugyintezesClientConfiguration eugyintezesClientConfiguration, IIdpConfiguration idpConfiguration, IFeatureContext featureContext)
{
EugyintezesClientConfiguration = eugyintezesClientConfiguration ?? throw new ArgumentNullException(nameof(eugyintezesClientConfiguration));
IdpConfiguration = idpConfiguration ?? throw new ArgumentNullException(nameof(idpConfiguration));
FeatureContext = featureContext ?? throw new ArgumentNullException(nameof(idpConfiguration));
}
public ActionResult Index()
{
string shortMainVersion = KretaVersion.Instance.ShortMainVersion;
string nextUpdateDateTimeText = new AdminHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetKovTelepitesDatum().ToString("yyyy.MM.dd. HH:mm");
ViewBag.ShortMainVersion = shortMainVersion;
ViewBag.NextUpdateDateTimeText = nextUpdateDateTimeText;
var model = GetTanarDashboard();
return View("Index", model);
}
public ActionResult DownloadCovidFertozott()
{
MemoryStream stream = new AdminHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetCovidFertozottekExcel(ClaimData.FelhasznaloId);
var result = new FileStreamResult(stream, Core.Constants.ContentTypes.Xlsx) { FileDownloadName = string.Format(RendszerErtesitesResource.CovidFertozottekExcelName, DateTime.Now.ToString("yyyyMMddHHmm")) };
return result;
}
private TanarDashboardModel GetTanarDashboard()
{
var model = new TanarDashboardModel();
DataSet beNemIrtOrakDS = null;
DataSet kiirtHelyettesitesekDS = null;
DataSet mulasztasokDS = null;
DataSet bukasraAlloTanulokDS = null;
DataSet dashBoardUzenetekDS = null;
string uzenetek = null;
string ugyek = null;
bool vanCovidFertozott = false;
var isSzuperOsztalyFonok = AuthorizeHelper.CheckPackageAccess(new string[] { KretaClaimPackages.SzuperOsztalyfonok.ClaimValue });
var isTanarTTFfelVagySzuperOsztalyFonok = isSzuperOsztalyFonok || AuthorizeHelper.CheckPackageAccess(new string[] { KretaClaimPackages.Tanar.ClaimValue });
ViewData["IsTanarTTFfelVagySzuperOsztalyFonok"] = isTanarTTFfelVagySzuperOsztalyFonok;
var osztalyFonokVagyCsoportVezeto = new[]
{
KretaClaimPackages.SzuperOsztalyfonok.ClaimValue,
KretaClaimPackages.Osztalyfonok.ClaimValue,
KretaClaimPackages.CsoportVezeto.ClaimValue,
KretaClaimPackages.Evfolyamfelelos.ClaimValue,
};
var isOsztalyFonokVagyCsoportVezeto = AuthorizeHelper.CheckPackageAccess(osztalyFonokVagyCsoportVezeto);
ViewData["IsOsztalyFonokVagyCsoportVezeto"] = isOsztalyFonokVagyCsoportVezeto;
if (isTanarTTFfelVagySzuperOsztalyFonok)
{
var helper = new TanarHelper(ConnectionTypeExtensions.GetSessionConnectionType());
beNemIrtOrakDS = helper.GetUtolsoBeNemIrtOrak(ClaimData.IntezmenyId, ClaimData.FelhasznaloId, ElemekAListaban);
kiirtHelyettesitesekDS = helper.GetKiirtHelyettesitesek(ClaimData.IntezmenyId, ClaimData.FelhasznaloId, ElemekAListaban);
dashBoardUzenetekDS = helper.GetTanarDashboardUzenet(ClaimData.FelhasznaloId);
vanCovidFertozott = helper.GetCovidFertozottek(ClaimData.FelhasznaloId).Tables[0].Rows.Count > 0;
if (isOsztalyFonokVagyCsoportVezeto)
{
mulasztasokDS = helper.GetMulasztasokSzama(ClaimData.FelhasznaloId, isSzuperOsztalyFonok, ElemekAListaban);
bukasraAlloTanulokDS = helper.GetBukasokSzama(ClaimData.FelhasznaloId, ElemekAListaban);
}
EugyintezesClient eUgyClient = new EugyintezesClient(EugyintezesClientConfiguration);
var icHelper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType());
var uzenetModulFeatureEnabled = icHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.UzenetModul, IntezmenyConfigTipusEnum.IsEnabled);
var uzenetekEnabled = uzenetModulFeatureEnabled; //&& ClaimData.IsAktivUzenetekMenu;
ViewData["UzenetekEnabled"] = uzenetekEnabled;
if (uzenetekEnabled)
{
uzenetek = ExceptionLogger(() => eUgyClient.GetUzenetek(ClaimData.IntezmenyAzonosito, ClaimData.FelhasznaloIdpEgyediAzonosito, ElemekAListaban));
}
var eugyintezesFeatureEnabled = icHelper.GetIntezmenyConfig<bool>(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.IsEnabled);
var ugyekEnabled = eugyintezesFeatureEnabled && isOsztalyFonokVagyCsoportVezeto;
ViewData["UgyekEnabled"] = ugyekEnabled;
if (ugyekEnabled)
{
ugyek = ExceptionLogger(() => eUgyClient.GetUgyek(ClaimData.IntezmenyAzonosito, ClaimData.FelhasznaloIdpEgyediAzonosito, ElemekAListaban));
}
}
model.BeNemIrtOrak = ConvertBeNemIrtOrak(beNemIrtOrakDS);
model.KiirtHelyettesitesek = ConvertKiirtHelyettesitesek(kiirtHelyettesitesekDS);
model.Uzenetek = ConvertUzenetek(uzenetek);
model.Ugyek = ConvertUgyek(ugyek);
model.Mulasztasok = ConvertMulasztasok(mulasztasokDS);
model.BukasraAlloTanulok = ConvertBukasraAlloTanulok(bukasraAlloTanulokDS);
model.DashBoardUzenetek = ConvertDashBoardUzenetek(dashBoardUzenetekDS);
model.VanCovidFertozott = vanCovidFertozott;
return model;
}
private TanarDashboardTableModel ConvertUzenetek(string uzenetek)
{
var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType());
var result = new TanarDashboardTableModel
{
Url = GetEugyUrl(helper.GetIntezmenyConfig<string>(IntezmenyConfigModulEnum.UzenetModul, IntezmenyConfigTipusEnum.Url)),
OpenInNewWindow = true,
Name = TanarDashBoardResource.Uzenetek,
Headers = new List<string>
{
TanarDashBoardResource.Datum,
TanarDashBoardResource.Felado,
TanarDashBoardResource.Targy,
},
Rows = new List<TanarDashboardTableRowModel>()
};
if (!string.IsNullOrWhiteSpace(uzenetek))
{
var uzenetList = TryDeserialize<List<Uzenet>>(uzenetek) ?? new List<Uzenet>();
var rows = new List<TanarDashboardTableRowModel>();
foreach (var uzenet in uzenetList)
{
var row = new TanarDashboardTableRowModel
{
Columns = new List<string>
{
SDAFormat.GetShortDateFormat(uzenet.BeerkezesIdopontja),
uzenet.FeladoNev,
uzenet.Targy,
}
};
rows.Add(row);
}
result.Rows = rows;
}
return result;
}
private TanarDashboardTableModel ConvertUgyek(string ugyek)
{
var helper = new IntezmenyConfigHelper(ConnectionTypeExtensions.GetSystemConnectionType());
var result = new TanarDashboardTableModel
{
Url = GetEugyUrl(helper.GetIntezmenyConfig<string>(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.Url)),
OpenInNewWindow = true,
Name = TanarDashBoardResource.EUgyintezes,
Headers = new List<string>
{
TanarDashBoardResource.Nev,
TanarDashBoardResource.Osztaly,
TanarDashBoardResource.Ugytipus,
TanarDashBoardResource.BekuldesIdopontja,
},
Rows = new List<TanarDashboardTableRowModel>()
};
if (!string.IsNullOrWhiteSpace(ugyek))
{
var ugyList = TryDeserialize<List<Ugy>>(ugyek) ?? new List<Ugy>();
var rows = new List<TanarDashboardTableRowModel>();
foreach (var ugy in ugyList)
{
var row = new TanarDashboardTableRowModel
{
Columns = new List<string>
{
ugy.TanuloNev,
ugy.TanuloOsztaly,
ugy.UgyTipusKod,
SDAFormat.GetShortDateFormat(ugy.BekuldesIdopontja),
}
};
rows.Add(row);
}
result.Rows = rows;
}
return result;
}
private TanarDashboardTableModel ConvertBeNemIrtOrak(DataSet ds)
{
var result = new TanarDashboardTableModel
{
Url = GetUrl(Constants.Areas.Tanar, Constants.Controllers.NemNaplozottTanorak, "Index"),
Name = TanarDashBoardResource.BeNemIrtOrak,
Headers = new List<string>
{
TanarDashBoardResource.Datum,
TanarDashBoardResource.Oraszam,
TanarDashBoardResource.Osztalycsoport,
TanarDashBoardResource.Tantargy,
},
Rows = new List<TanarDashboardTableRowModel>()
};
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var rows = new List<TanarDashboardTableRowModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
var row = new TanarDashboardTableRowModel
{
Columns = new List<string>
{
SDAFormat.GetShortDateFormat(dr["Datum"]),
SDAConvert.ToString(dr["Oraszam"]),
SDAConvert.ToString(dr["OsztalyCsoport"]),
SDAConvert.ToString(dr["Tantargy"])
}
};
rows.Add(row);
}
result.Rows = rows;
}
return result;
}
private TanarDashboardTableModel ConvertKiirtHelyettesitesek(DataSet ds)
{
var result = new TanarDashboardTableModel
{
Url = GetUrl(Constants.Areas.Tanar, Constants.Controllers.NemNaplozottTanorak, "Index", new Dictionary<string, object>
{
{ "csakAHelyettesiteseim", true },
{ "helyettesitettOraimIs", false },
{ "jovobeniOrakMegjelenitese", true },
}),
Name = TanarDashBoardResource.KiirtHelyettesitesek,
Headers = new List<string>
{
TanarDashBoardResource.Datum,
TanarDashBoardResource.Oraszam,
TanarDashBoardResource.Osztalycsoport,
TanarDashBoardResource.Tantargy,
},
Rows = new List<TanarDashboardTableRowModel>()
};
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var rows = new List<TanarDashboardTableRowModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
var row = new TanarDashboardTableRowModel
{
Columns = new List<string>
{
SDAFormat.GetShortDateFormat(dr["Datum"]),
SDAConvert.ToString(dr["Oraszam"]),
SDAConvert.ToString(dr["OsztalyCsoport"]),
SDAConvert.ToString(dr["Tantargy"])
}
};
rows.Add(row);
}
result.Rows = rows;
}
return result;
}
private TanarDashboardTableModel ConvertMulasztasok(DataSet ds)
{
var result = new TanarDashboardTableModel
{
Url = GetUrl(Constants.Areas.Hianyzas, Constants.Controllers.Mulasztasok, "Index"),
Name = TanarDashBoardResource.Mulasztasok,
Headers = new List<string>
{
TanarDashBoardResource.MulasztasDatuma,
TanarDashBoardResource.MulasztasNapja,
TanarDashBoardResource.MulasztasokSzama,
},
Rows = new List<TanarDashboardTableRowModel>()
};
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var rows = new List<TanarDashboardTableRowModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
var row = new TanarDashboardTableRowModel
{
Columns = new List<string>
{
SDAFormat.GetShortDateFormat(dr["MulasztasDatuma"]),
SDAConvert.ToString(dr["MulasztasNapja"]),
SDAConvert.ToString(dr["MulasztasokSzama"])
}
};
rows.Add(row);
}
result.Rows = rows;
}
return result;
}
private TanarDashboardTableModel ConvertBukasraAlloTanulok(DataSet ds)
{
var result = new TanarDashboardTableModel
{
Url = GetUrl(Constants.Areas.Tanulo, Constants.Controllers.TanarTanitottTanulok, "Index", new Dictionary<string, object>
{
{ "csakBukasraAllok", true },
}),
Name = TanarDashBoardResource.BukasraAlloTanulok,
Headers = new List<string>
{
TanarDashBoardResource.Nev,
TanarDashBoardResource.Osztaly,
TanarDashBoardResource.TantargyakSzama,
},
Rows = new List<TanarDashboardTableRowModel>()
};
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var rows = new List<TanarDashboardTableRowModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
var row = new TanarDashboardTableRowModel
{
Columns = new List<string>
{
SDAConvert.ToString(dr["Nev"]),
SDAConvert.ToString(dr["Osztaly"]),
SDAConvert.ToString(dr["TantargyakSzama"])
}
};
rows.Add(row);
}
result.Rows = rows;
}
return result;
}
private List<TanarDashboardItemModel> ConvertDashBoardUzenetek(DataSet ds)
{
var result = new List<TanarDashboardItemModel>();
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow row in ds.Tables[0].Rows)
{
var item = new TanarDashboardItemModel
{
Name = SDAConvert.ToString(row["C_CIM"]),
Content = SDAConvert.ToString(row["C_TARTALOM"]),
Type = (AdminDashboardTipusEnum)SDAConvert.ToInt32(row["C_DASHBOARDUZENETKATEGORIAID"]),
Sorrend = SDAConvert.ToInt32(row["SORREND"]),
EgyediAzonosito = SDAConvert.ToString(row["C_EGYEDIAZONOSITO"])
};
result.Add(item);
}
}
return result.OrderBy(o => o.Sorrend).ToList();
}
private string GetUrl(string area, string controller, string action, Dictionary<string, object> parameters = null)
{
var dictionary = new Dictionary<string, object> { { "Area", area } };
if (parameters != null)
{
dictionary = dictionary.Concat(parameters).ToDictionary(x => x.Key, x => x.Value);
}
var routeValues = new RouteValueDictionary(dictionary);
return UrlHelper.GenerateUrl(null, action, controller, routeValues, RouteTable.Routes, HttpContext.Request.RequestContext, false);
}
private string GetEugyUrl(string url)
{
return Kreta.Web.Classes.Utils.GetAuthenticationTokenRedirectUrl(url, IdpConfiguration.AuthenticationTokenKey);
}
private T ExceptionLogger<T>(Func<T> action)
{
try
{
return action();
}
catch (Exception ex)
{
SDAServer.Instance.Logger.ExceptionThrown(ex);
}
return default;
}
private T TryDeserialize<T>(string json)
{
return ExceptionLogger(() => JsonConvert.DeserializeObject<T>(json));
}
}
}