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(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(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(IntezmenyConfigModulEnum.UzenetModul, IntezmenyConfigTipusEnum.Url)), OpenInNewWindow = true, Name = TanarDashBoardResource.Uzenetek, Headers = new List { TanarDashBoardResource.Datum, TanarDashBoardResource.Felado, TanarDashBoardResource.Targy, }, Rows = new List() }; if (!string.IsNullOrWhiteSpace(uzenetek)) { var uzenetList = TryDeserialize>(uzenetek) ?? new List(); var rows = new List(); foreach (var uzenet in uzenetList) { var row = new TanarDashboardTableRowModel { Columns = new List { 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(IntezmenyConfigModulEnum.Eugyintezes, IntezmenyConfigTipusEnum.Url)), OpenInNewWindow = true, Name = TanarDashBoardResource.EUgyintezes, Headers = new List { TanarDashBoardResource.Nev, TanarDashBoardResource.Osztaly, TanarDashBoardResource.Ugytipus, TanarDashBoardResource.BekuldesIdopontja, }, Rows = new List() }; if (!string.IsNullOrWhiteSpace(ugyek)) { var ugyList = TryDeserialize>(ugyek) ?? new List(); var rows = new List(); foreach (var ugy in ugyList) { var row = new TanarDashboardTableRowModel { Columns = new List { 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 { TanarDashBoardResource.Datum, TanarDashBoardResource.Oraszam, TanarDashBoardResource.Osztalycsoport, TanarDashBoardResource.Tantargy, }, Rows = new List() }; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { var rows = new List(); foreach (DataRow dr in ds.Tables[0].Rows) { var row = new TanarDashboardTableRowModel { Columns = new List { 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 { { "csakAHelyettesiteseim", true }, { "helyettesitettOraimIs", false }, { "jovobeniOrakMegjelenitese", true }, }), Name = TanarDashBoardResource.KiirtHelyettesitesek, Headers = new List { TanarDashBoardResource.Datum, TanarDashBoardResource.Oraszam, TanarDashBoardResource.Osztalycsoport, TanarDashBoardResource.Tantargy, }, Rows = new List() }; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { var rows = new List(); foreach (DataRow dr in ds.Tables[0].Rows) { var row = new TanarDashboardTableRowModel { Columns = new List { 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 { TanarDashBoardResource.MulasztasDatuma, TanarDashBoardResource.MulasztasNapja, TanarDashBoardResource.MulasztasokSzama, }, Rows = new List() }; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { var rows = new List(); foreach (DataRow dr in ds.Tables[0].Rows) { var row = new TanarDashboardTableRowModel { Columns = new List { 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 { { "csakBukasraAllok", true }, }), Name = TanarDashBoardResource.BukasraAlloTanulok, Headers = new List { TanarDashBoardResource.Nev, TanarDashBoardResource.Osztaly, TanarDashBoardResource.TantargyakSzama, }, Rows = new List() }; if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { var rows = new List(); foreach (DataRow dr in ds.Tables[0].Rows) { var row = new TanarDashboardTableRowModel { Columns = new List { SDAConvert.ToString(dr["Nev"]), SDAConvert.ToString(dr["Osztaly"]), SDAConvert.ToString(dr["TantargyakSzama"]) } }; rows.Add(row); } result.Rows = rows; } return result; } private List ConvertDashBoardUzenetek(DataSet ds) { var result = new List(); 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 parameters = null) { var dictionary = new Dictionary { { "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(Func action) { try { return action(); } catch (Exception ex) { SDAServer.Instance.Logger.ExceptionThrown(ex); } return default; } private T TryDeserialize(string json) { return ExceptionLogger(() => JsonConvert.DeserializeObject(json)); } } }