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

226 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.BusinessLogic.Interfaces;
using Kreta.BusinessLogic.Security;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Framework;
using Kreta.Resources;
using Kreta.Web.Areas.Orarend.Models;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.TabStrip;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
using Newtonsoft.Json;
namespace Kreta.Web.Areas.Orarend.Controllers
{
[MvcRoleClaimsAuthorize(true)]
[MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
[MvcRolePackageAuthorize(KretaClaimPackages.Ellenorzo.ClaimValue)]
public class InformaciokOrarendController : Controller
{
private readonly IFileServiceHelper fileServiceHelper;
private IKretaAuthorization Authorization { get; }
public InformaciokOrarendController(IKretaAuthorization authorization, IFileServiceHelper fileServiceHelper)
{
Authorization = authorization ?? throw new ArgumentNullException(nameof(authorization));
this.fileServiceHelper = fileServiceHelper ?? throw new ArgumentNullException(nameof(fileServiceHelper));
}
[MvcRolePackageAuthorize(KretaClaimPackages.Ellenorzo.ClaimValue, KretaClaimPackages.CsokkentettGondviselo.ClaimValue)]
public ActionResult Index()
{
var model = new InformaciokOrarendModel();
var helper = new OrarendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var hetesekHelper = new HetesekHelper(ConnectionTypeExtensions.GetSessionConnectionType());
model.HetirendJson = helper.GetHetirendek();
model.NaptariHetekHetirendJson = helper.GetNaptariHetekHetirendek();
var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType());
if (ClaimData.IsTanuloOrGondviselo && systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.hetesek_megjelenitese_az_elektronikus_ellenorzoben))
{
List<int> osztalyCsoportIdList = new TanuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetTanuloOsztalyIdList(ClaimData.FelhasznaloId);
var hetHelper = new NaptariHetHelper(ConnectionTypeExtensions.GetSessionConnectionType());
model.AktualisHetSorszam = hetHelper.GetNaptariHetSorszamByDate(DateTime.Now);
if (osztalyCsoportIdList.Any())
{
var tanulok = hetesekHelper.GetHetesSzovegHetsorszammal(osztalyCsoportIdList);
var serializerSettings = new JsonSerializerSettings();
serializerSettings.StringEscapeHandling = StringEscapeHandling.EscapeNonAscii;
model.HetesekJson = JsonConvert.SerializeObject(tanulok, serializerSettings);
model.HetesekJson = model.HetesekJson.Replace("\x7F", "\\u007f");
}
}
var co = helper.GetCalendarMinMax();
model.CalendarMinTime = co.CalendarMin;
model.CalendarMaxTime = co.CalendarMax;
model.IsOraTemaTooltip = systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Tanora_Tema_Az_Ellenorzoben);
return View("Index", model);
}
[HttpPost]
public ActionResult GetOrarendEvent(int eventId, bool isTanitasiOra_BOOL, DateTime haziFeladatRogzitesDatuma, int? tanuloId = null, string megoldva = null)
{
CalendarModel calendar = new CalendarModel();
calendar.EventId = eventId;
calendar.OraType = isTanitasiOra_BOOL ? CalendarOraTypeEnum.TanitasiOra : CalendarOraTypeEnum.OrarendiOra;
calendar.Start = haziFeladatRogzitesDatuma;
return OrarendEvent(calendar, tanuloId, megoldva);
}
public ActionResult OrarendEvent(CalendarModel calendarModel, int? tanuloId = null, string megoldva = null)
{
if (calendarModel.OraType == CalendarOraTypeEnum.TanevRendjeEsemeny ||
calendarModel.OraType == CalendarOraTypeEnum.UresOra)
{
return null;
}
var model = new InformaciokOra();
var pm = new PopUpModel(model, "OraAdatok_Info");
model.TabList = GetDetailTabs(calendarModel, tanuloId, megoldva);
pm = pm.AddCancelBtn(pm, "InformaciokOrarend.detailOraInfoCancel");
return PartialView(Constants.General.PopupView, pm);
}
public List<TabStripItemModel> GetDetailTabs(CalendarModel calendarModel, int? tanuloId = null, string megoldva = null)
{
List<TabStripItemModel> list = new List<TabStripItemModel>();
list.Add(new TabStripItemModel()
{
ItemId = "1",
ItemName = StringResourcesUtil.GetString(3331) /*Óra adatai*/,
Area = "Orarend",
Controller = "InformaciokOrarend",
Action = "GetOraAdatok",
RouteParameters = new Dictionary<string, string>() {
{ "Id", calendarModel.EventId.ToString() },
{ "EventType", ((int)calendarModel.OraType).ToString() },
{ "Date" , calendarModel.Start.Date.ToString() }
}
});
var routeParameters = new Dictionary<string, string>() {
{ "Id", calendarModel.EventId.ToString() },
{ "EventType", ((int)calendarModel.OraType).ToString() },
{ "Date" , calendarModel.Start.Date.ToString() }
};
if (tanuloId != null)
routeParameters.Add("TanuloId", tanuloId.ToString());
if (!string.IsNullOrWhiteSpace(megoldva))
routeParameters.Add("Megoldva", megoldva.ToString());
list.Add(new TabStripItemModel()
{
ItemId = "2",
ItemName = OrarendResource.HaziFeladat,
Area = "Orarend",
Controller = "InformaciokOrarend",
Action = "GetHaziFeladat_Tab",
RouteParameters = routeParameters
});
return list;
}
public ActionResult GetHaziFeladat_Tab(int id, CalendarOraTypeEnum eventType, DateTime date, int? tanuloId = null, string megoldva = null)
{
if (!Authorization.IsValidEvent(id, eventType, date))
{
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.NincsJogaAzOldalMegtekintesehez);
}
var model = GetHaziFeladatok(id, eventType, date);
return PartialView("TanuloHaziFeladat_Tab", model);
}
public ActionResult GetOraAdatok(int id, CalendarOraTypeEnum eventType, DateTime date)
{
if (!Authorization.IsValidEvent(id, eventType, date))
{
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.NincsJogaAzOldalMegtekintesehez);
}
var model = GetOraAdatai(id, eventType, date);
return PartialView("Info_TanuloOraAdatok_Tab", model);
}
private InformaciokOraAdatai GetOraAdatai(int eventId, CalendarOraTypeEnum eventType, DateTime date)
{
int? orarendiOraId = null;
int? tanitasiOraId = null;
var model = new InformaciokOraAdatai();
model.IsTanora = eventType == CalendarOraTypeEnum.TanitasiOra;
if (model.IsTanora)
{
tanitasiOraId = eventId;
MulasztasHelper h = new MulasztasHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var mulasztas = h.GetTanuloTanoraiMulasztasa(ClaimData.FelhasznaloId, tanitasiOraId.Value);
model.MulasztasText = string.IsNullOrWhiteSpace(mulasztas) ? "-" : mulasztas;
}
else
{
orarendiOraId = eventId;
}
var helper = new TanuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var adatok = helper.GetTanuloOraAdatai(orarendiOraId, tanitasiOraId, date);
var openBoardHelper = new OpenBoardHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType(), fileServiceHelper);
// Helyettesítés csak akkor látható tanulónál, ha be van kapcsolva a rendszerbeállításokba, vagy már naplózott az óra.
var isHelyettesitesLathato = new SystemSettingsHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.helyettesites_lathatosaga_az_ellenorzoben);
model.IsHelyettesitoTanarLathato = isHelyettesitesLathato || model.IsTanora;
model.Targy = adatok.Targy;
model.HelyettesitoTanar = adatok.HelyettesitoTanar;
model.Megtartott = adatok.Megtartott;
model.OsztalyNev = adatok.OsztalyNev;
model.Tanar = adatok.Tanar;
model.Tema = adatok.Tema;
model.Terem = adatok.Terem;
model.Oraszam = adatok.Oraszam;
model.Datum = date.ToShortDateString();
model.SzamonkeresMegnevezes = adatok.SzamonkeresMegnevezes;
model.SzamonkeresMod = adatok.SzamonkeresMod;
model.OraTartam = string.Format("{0} - {1}", adatok.OraKezdet, adatok.OraVege);
model.OpenBoardFiles = openBoardHelper.GetFeltoltottFajlokToTanuloOraAdat(date, orarendiOraId, tanitasiOraId);
return model;
}
private TanuloHaziFeladatTabModel GetHaziFeladatok(int eventId, CalendarOraTypeEnum oraType, DateTime date)
{
try
{
return new TanuloHaziFeladatTabModel(new DktFeladatHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetHaziFeladatTabCo(eventId, oraType, date, ClaimData.IsTanuloOrGondviselo));
}
catch (Exception e)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.HibaTortentAMuveletSoran) { UnHandledException = e };
}
}
}
}