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

395 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Extensions;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.BusinessLogic.Interfaces;
using Kreta.BusinessLogic.Logic.Naplozas;
using Kreta.BusinessLogic.Logic.Naplozas.Elokeszites;
using Kreta.BusinessLogic.Logic.Naplozas.Validacio;
using Kreta.BusinessLogic.Security;
using Kreta.Core.Exceptions;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
using Kreta.Web.Areas.Feljegyzes.Models;
using Kreta.Web.Areas.Orarend.Models;
using Kreta.Web.Areas.TanuloErtekeles.Controllers;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Helpers.TabStrip;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
using Kreta.Web.Utils;
namespace Kreta.Web.Areas.Orarend.Controllers
{
[MvcRoleClaimsAuthorize(true)]
[MvcRolePackageDenyAuthorize(KretaClaimPackages.IsOnlyAlkalmozott.ClaimValue)]
[MvcRolePackageAuthorize(KretaClaimPackages.Naplo.ClaimValue)]
public class TanariOrarendController : BaseTanariOrarendController
{
private IKretaAuthorization Authorization { get; }
private readonly IFileServiceHelper fileServiceHelper;
public TanariOrarendController(IKretaAuthorization authorization, IFileServiceHelper fileServiceHelper) : base(authorization, fileServiceHelper)
{
Authorization = authorization;
this.fileServiceHelper = fileServiceHelper ?? throw new ArgumentNullException(nameof(fileServiceHelper));
}
public ActionResult Index()
{
var dualisOktato = Authorization.IsValidDualisOktato();
var model = new TanariOrarendModel();
model.SzervezetTipusId = dualisOktato ? (int)SzervezetTipusEnum.Dualis : (int?)null;
var orarendHelper = new OrarendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var tanevHelper = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var naplozarasLogic = new NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType());
var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType());
model.IsNemKellNemKotott = dualisOktato || systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.kotott_munkaido_nevelesseloktatassal_le_nem_kotott_resz_kezelesenek_tiltasa);
var fogadooraMegjelenik = !dualisOktato && systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Fogadoorak_megjelenitese) && !ClaimData.FelhasznaloSzerepCsomagok.Contains(KretaClaimPackages.IsDualisKepzohelyiOktato.ClaimValue);
model.HetirendJson = orarendHelper.GetHetirendek();
model.NaptariHetekHetirendJson = orarendHelper.GetNaptariHetekHetirendek(dualisOktato);
model.LezartOsztalyokEsOsztalybontottCsoportokIdList = naplozarasLogic.GetLezartOsztalyokEsBontottCsoportjaik();
model.FelhasznalodTanarId = ClaimData.FelhasznaloId;
model.TanevUtolsoTanitasiNap = dualisOktato ? tanevHelper.GetTanevInfo().UtolsoNap.AddDays(1) : tanevHelper.GetTanevInfo().UtolsoTanitasiNap.AddDays(1);
model.RendkivuliTanitasiNapok = !dualisOktato ? tanevHelper.GetTanevRendkivuliNapok() : new List<DateTime>();
model.IsShowRogzitottOrak = !dualisOktato && systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.kotott_munkaido_megjelenitese);
#region Calendar megjelenítés
var co = orarendHelper.GetCalendarMinMax();
model.CalendarMinTime = dualisOktato ? new TimeSpan(0, 0, 0) : co.CalendarMin.Subtract(new TimeSpan(0, 15, 0)); // "15 perccel legyen előbb"
model.CalendarMaxTime = dualisOktato ? new TimeSpan(23, 59, 59) : co.CalendarMax.Add(new TimeSpan(0, 15, 0)); // "15 perccel legyen később"
//var csengetesiRendOrakHelper = new CsengetesiRendOrakHelper();
//DataSet ds = csengetesiRendOrakHelper.GetCsengetesiOrakKezdVeg();
model.CsengetesiRendMinTime = new TimeSpan();
model.CsengetesiRendMaxTime = new TimeSpan(0, 25, 0);
#endregion Calendar megjelenítés
model.ShowKerdoivPopup = new KerdoivHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetShowKerdoivPopup(ClaimData.IsAlkalmazottPedagogus);
model.TabList = GetTanariOrarendTabs(fogadooraMegjelenik, dualisOktato);
ViewBag.nemKotottMunkaidoStart = systemSettingsHelper.GetSystemSettingValue<TimeSpan>(RendszerBeallitasTipusEnum.Nem_kotott_munkaido_megjelenesenek_kezdoidopontja).RoundDownToNearestTargetMinute(15).ToString();
ViewBag.nemKotottMunkaidoEnd = systemSettingsHelper.GetSystemSettingValue<string>(RendszerBeallitasTipusEnum.Nem_kotott_munkaido_megjelenesenek_zaroidopontja);
ViewBag.napirendStart = dualisOktato ? model.CalendarMinTime.ToString() : systemSettingsHelper.GetSystemSettingValue<TimeSpan>(RendszerBeallitasTipusEnum.Az_elektronikus_naplo_megjelenesenek_kezdoidopontja).RoundDownToNearestTargetMinute(15).ToString();
ViewBag.napirendEnd = dualisOktato ? model.CalendarMaxTime.ToString() : systemSettingsHelper.GetSystemSettingValue<string>(RendszerBeallitasTipusEnum.Az_elektronikus_naplo_megjelenesenek_zaroidopontja);
ViewBag.fogadooraStart = systemSettingsHelper.GetSystemSettingValue<TimeSpan>(RendszerBeallitasTipusEnum.Fogado_Ora_Kezdoidopontja).RoundDownToNearestTargetMinute(15).ToString();
ViewBag.fogadooraEnd = systemSettingsHelper.GetSystemSettingValue<string>(RendszerBeallitasTipusEnum.Fogado_Ora_Zaroidopontja);
return View("Index", model);
}
public ActionResult TanorakOrarendEvent(TanoraIdBeallitasModel model)
{
return base.TanorakOrarendEvent(model);
}
public ActionResult OpenNewFoglalkozasokOraPopUp(TanoraIdBeallitasModel model)
{
return OpenNewFoglalkozasokOraPopUp(model, false);
}
public ActionResult GetWizardElovalaszto(DateTime? datum = null)
{
return GetWizardElovalaszto(datum, false);
}
public ActionResult GetWizardHelyettesitesElovalaszto(DateTime? datum = null, int hiba = -1)
{
return GetWizardHelyettesitesElovalaszto(datum, hiba, false);
}
public ActionResult GetWizardOrarendioraValaszto(string startDate, string endDate, string hanyadikora, string helyettesitoId, bool isNapirend = false, bool isEgyediHelyettesites = false)
{
return GetWizardOrarendioraValaszto(startDate, endDate, hanyadikora, helyettesitoId, isNapirend, isEgyediHelyettesites, false);
}
public ActionResult GetWizardHelyettesites()
{
return GetWizardHelyettesites(false);
}
public ActionResult GetWizardOraosszevonasHelyettesites()
{
return GetWizardOraosszevonasHelyettesites(false);
}
public ActionResult GetWizardFoglalkozas(int foglalkozasFilterId, bool isNapirend = false, DateTime? datum = null, int? hanyadikOra = null)
{
return GetWizardFoglalkozas(foglalkozasFilterId, isNapirend, datum, hanyadikOra, false);
}
public ActionResult GetWizardEgyedi(int foglalkozasFilterId, DateTime datum, bool isNapirend = false, int? hanyadikOra = null)
{
return GetWizardEgyedi(foglalkozasFilterId, datum, isNapirend, hanyadikOra, false);
}
public ActionResult OpenNewNemKotottMunkaidoPopUp(CalendarModel model)
{
var nkmm = new NemKotottMunkaidoModel()
{
Datum = model.Start.ToLocalTime().Date,
Kezdet = model.Start.ToLocalTime(),
Veg = model.End.ToLocalTime(),
TanarId = ClaimData.FelhasznaloId,
isMegtartott = true,
HetirendId = 1554 /*Minden héten*/
};
var pm = new PopUpModel(nkmm, "NemKotottMunkaido_Bevitel");
pm = pm.AddBtn(pm, "newNemKotottMunkaidoCancel", AdminisztracioResource.Megsem, "NemKotottMunkaido.newNemKotottMunkaidoCancel");
if (new NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType()).IsNaplozhatZarastolFuggetlenul(nkmm.Kezdet.Value, null))
{
pm = pm.AddBtn(pm, "newNemKotottMunkaidoSave", 3804 /*Naplózás*/, "NemKotottMunkaido.newNemKotottMunkaidoSave");
}
return PartialView(Constants.General.PopupView, pm);
}
public ActionResult OpenModNemKotottMunkaidoPopUp(CalendarModel model)
{
if (!Authorization.IsValidNemKotottMunkaido(model.EventId))
{
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.NincsJogaAzOldalMegtekintesehez);
}
var nkmm = GetModNemKotottMunkaidoModel(model);
var pm = new PopUpModel(nkmm, "NemKotottMunkaido_Bevitel");
pm = pm.AddBtn(pm, "modNemKotottMunkaidoCancel", AdminisztracioResource.Megsem, "NemKotottMunkaido.modNemKotottMunkaidoCancel");
var isNaplozhatZarastolFuggetlenul = new NaplozarasLogic(ConnectionTypeExtensions.GetSessionConnectionType()).IsNaplozhatZarastolFuggetlenul(nkmm.Datum.Value, null);
if (!nkmm.isReadonly)
{
if (nkmm.isTanarAltalTorolt)
{
if (isNaplozhatZarastolFuggetlenul)
{
if (nkmm.isMegtartott)
{
pm = pm.AddBtn(pm, "modNemKotottMunkaidoMegtartottDelete", 5221 /*Naplózás törlése*/, "NemKotottMunkaido.modNemKotottMunkaidoDelete");
}
else
{
pm = pm.AddBtn(pm, "modNemKotottMunkaidoTanarAltalToroltOraDelete", 5221 /*Naplózás törlése*/, "NemKotottMunkaido.modNemKotottMunkaidoTanarAltalDelete");
}
}
}
else
{
if (isNaplozhatZarastolFuggetlenul)
{
if (nkmm.isMegtartott)
{
pm = pm.AddBtn(pm, "modNemKotottMunkaidoMegtartottDelete", 5221 /*Naplózás törlése*/, "NemKotottMunkaido.modNemKotottMunkaidoDelete");
pm = pm.AddBtn(pm, "modNemKotottMunkaidoSave", 3765 /*Naplózás változtatásainak mentése*/, "NemKotottMunkaido.modNemKotottMunkaidoSaveDay");
}
else
{
nkmm.NaplozottMegjegyzes = nkmm.Megjegyzes;
pm = pm.AddBtn(pm, "modNemKotottMunkaidoSave", 3804 /*Naplózás*/, "NemKotottMunkaido.modNemKotottMunkaidoSaveDay");
if (nkmm.isAdminRogzitette)
{
pm = pm.AddBtn(pm, "modNemKotottMunkaidoTanarAltalDelete", 117 /*Törlés*/, "NemKotottMunkaido.modNemKotottMunkaidoTanarAltalDelete");
}
else
{
pm = pm.AddBtn(pm, "modNemKotottMunkaidoDelete", 117 /*Törlés*/, "NemKotottMunkaido.globalNemKotottMunkaidoDelete");
}
}
}
}
}
return PartialView(Constants.General.PopupView, pm);
}
private ActionResult TanoraMuveletek(NaplozasElokeszitesModel model, TanoraMuveletek muveletPram)
{
return base.TanoraMuveletek(model, muveletPram, (int?)null);
}
public DateTime GetTanevUtolsoNapja() => new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevInfo().UtolsoTanitasiNap;
public ActionResult OpenNewFogadooraPopUp(CalendarModel model)
{
var fm = SetNewFogadooraDefaultData(model);
var pm = new PopUpModel(fm, "Fogadoora_Bevitel");
pm = pm.AddBtn(pm, "newFogadooraCancel", AdminisztracioResource.Megsem, "FogadooraHelper.newFogadooraCancel");
pm = pm.AddBtn(pm, "newFogadooraSave", CommonResource.Mentes, "FogadooraHelper.fogadooraSave");
return PartialView(Constants.General.PopupView, pm);
}
private FogadooraModel SetNewFogadooraDefaultData(CalendarModel cm)
{
var tanevCo = new TanevHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTanevInfo();
var isNemKellNemKotott = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.kotott_munkaido_nevelesseloktatassal_le_nem_kotott_resz_kezelesenek_tiltasa);
return new FogadooraModel
{
FogadoOraKezdete = cm.Start.ToLocalTime(),
FogadoOraVege = cm.End.ToLocalTime(),
FogadoOraDatuma = cm.Start.ToLocalTime().Date,
EgysegnyiIdopontok = 15,
IsNemKotottMunkaido = !isNemKellNemKotott,
JelentkezesekKezelese = true,
IsFaliujsagonMegjelenjen = true,
FaliujsagErvenyessegKezdete = DateTime.Today,
FaliujsagErvenyessegVege = cm.Start.ToLocalTime().AddDays(1),
RendszeresFogadooraElsoDatuma = cm.Start.ToLocalTime().Date,
RendszeresFogadooraUtolsoDatuma = tanevCo.UtolsoTanitasiNap.Date,
IsCalendar = true,
IsRendszeressegModosithato = true,
IsIdosavraOsztas = true,
FogadooraEgyebGyakorisagDefaultDate = cm.Start.ToLocalTime(),
TanevUtolsoNapja = GetTanevUtolsoNapja(),
IsNemKellNemKotott = isNemKellNemKotott,
};
}
public ActionResult OpenModFogadooraPopUpByCalendarModel(CalendarModel model) => OpenModFogadooraPopUpDetails(model.EventId, true);
public ActionResult OpenModFogadooraPopUpByFogadooraId(int id) => OpenModFogadooraPopUpDetails(id);
public ActionResult OpenModFogadooraPopUpDetails(int fogadooraId, bool isCalendar = false)
{
var fm = new FogadooraModel();
var helper = new FogadooraHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var fogadooraCo = helper.GetFogadooraById(fogadooraId);
fm.Id = fogadooraCo.Id;
fm.FogadoOraDatuma = fogadooraCo.FogadoOraKezdete.Date;
fm.FogadoOraKezdete = fogadooraCo.FogadoOraKezdete;
fm.FogadoOraVege = fogadooraCo.FogadoOraVege;
fm.Rendszeresseg = fogadooraCo.Rendszeresseg;
fm.TeremId = fogadooraCo.TeremId;
fm.JelentkezesekKezelese = (int)FogadooraTipusEnum.Jelentkezheto == fogadooraCo.FogadooraTipusEnumId || (int)FogadooraTipusEnum.JelentkezhetoDarabolt == fogadooraCo.FogadooraTipusEnumId;
fm.IsIdosavraOsztas = fogadooraCo.IsIdosavraOsztas;
fm.EgysegnyiIdopontok = fogadooraCo.EgysegnyiIdopontok;
fm.SelectedOsztalyCsoportIdList = fogadooraCo.SelectedOsztalyCsoportIdList;
fm.RendszeresFogadooraElsoDatuma = fogadooraCo.FogadoOraKezdete;
fm.RendszeresFogadooraUtolsoDatuma = fogadooraCo.FogadoOraVege;
fm.IsEgyAlkalomModosul = false;
fm.IsCalendar = isCalendar;
fm.IsFaliujsagonMegjelenjen = fogadooraCo.IsFaliujsagonMegjelenjen;
fm.IsRendszeressegModosithato = false;
fm.FaliujsagErvenyessegKezdete = fogadooraCo.FaliujsagErvenyessegKezdete;
fm.FaliujsagErvenyessegVege = fogadooraCo.FaliujsagErvenyessegVege;
fm.JelentkezesHatarideje = fogadooraCo.JelentkezesHatarideje;
var isModosithatoFogadoora = fm.FogadoOraKezdete > DateTime.Now;
fm.TanevUtolsoNapja = GetTanevUtolsoNapja();
var jelentkezettGvDs = helper.GetJelentkezettGondviseloCntByFogadooraId(fogadooraId);
if (jelentkezettGvDs.Tables[0].Rows.Count > 0)
{
fm.VanGvJelentkezes = true;
}
if (!isModosithatoFogadoora)
{
fm.TeremNev = new TeremHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTeremNev(fogadooraCo.TeremId);
}
var rendszeressegDictionary = EnumExtensions.EnumToDictionary<FogadooraRendszeressegEnum>(ClaimData.SelectedTanevID.Value);
fm.RendszeressegText = rendszeressegDictionary.First(x => x.Key == fogadooraCo.Rendszeresseg.ToString()).Value;
var pm = new PopUpModel(fm, isModosithatoFogadoora ? "Fogadoora_Bevitel" : "~/Areas/Orarend/Views/TanariOrarend/Fogadoora_Details.cshtml");
var tanevrendHelper = new TanevrendHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var isDateHasTanevrend = tanevrendHelper.HasTanevRendjeEsemeny(fm.FogadoOraKezdete.Date, null);
if (!isDateHasTanevrend)
{
//itt vizsgálni egy alkalom-e, ha igen, akkor ezek nem kellenek
if (fm.Rendszeresseg == (int)FogadooraRendszeressegEnum.EgyAlkalom)
{
if (isModosithatoFogadoora)
{
pm = pm.AddBtn(pm, "newFogadooraCancel", AdminisztracioResource.Megsem, "FogadooraHelper.modFogadooraCancel");
pm = pm.AddBtn(pm, "newFogadooraSave", CommonResource.Mentes, "FogadooraHelper.ModEgyFogadoora");
pm = pm.AddBtn(pm, "modFogadooraDeleteDay", FogadooraResource.EgyFogadooraTorlese, "FogadooraHelper.DeleteEgyFogadooraa", "pull-left");
}
}
else
{
if (isModosithatoFogadoora)
{
pm = pm.AddBtn(pm, "newFogadooraCancel", AdminisztracioResource.Megsem, "FogadooraHelper.modFogadooraCancel");
pm = pm.AddBtn(pm, "modFogadooraDeleteDay", FogadooraResource.EgyFogadooraTorlese, "FogadooraHelper.DeleteEgyFogadooraa", "pull-left");
pm = pm.AddBtn(pm, "modFogadooraDeleteFrom", OrarendResource.DeleteFrom, "FogadooraHelper.DeleteEttolANaptol", "pull-left");
pm = pm.AddBtn(pm, "modFogadooraDeleteTo", OrarendResource.DeleteTo, "FogadooraHelper.DeleteEddigANapig", "pull-left");
pm = pm.AddBtn(pm, "modFogadooraDelete", FogadooraResource.FogadooraTorleseTeljesTanevbol, "FogadooraHelper.DeleteTeljes", "pull-left");
pm = pm.AddBtn(pm, "modFogadooraSaveDay", FogadooraResource.EgyFogadooraModositas, "FogadooraHelper.ModEgyFogadoora", true, "pull-left");
pm = pm.AddBtn(pm, "modFogadooraSaveFrom", OrarendResource.ModSaveFrom, "FogadooraHelper.ModEttolANaptol", "pull-left", true);
pm = pm.AddBtn(pm, "modFogadooraSaveTo", OrarendResource.ModSaveTo, "FogadooraHelper.ModEddigANapig", "pull-left", true);
pm = pm.AddBtn(pm, "modFogadooraSave", OrarendResource.ModAllSave, "FogadooraHelper.ModTeljes", "pull-left", true);
}
}
}
return PartialView(Constants.General.PopupView, pm);
}
[HttpPost]
public ActionResult UploadCsatolmany(HttpPostedFileBase csatolmany, int hfId)
{
try
{
byte[] content;
using (var inputStream = csatolmany.InputStream)
{
var memoryStream = inputStream as MemoryStream;
if (memoryStream == null)
{
memoryStream = new MemoryStream();
inputStream.CopyTo(memoryStream);
}
content = memoryStream.ToArray();
}
var helper = new DktFileHelper(ConnectionTypeExtensions.GetSessionConnectionType(), fileServiceHelper);
var csatolmanyId = helper.UploadCsatolmany(csatolmany.FileName, content, csatolmany.ContentType, hfId, ClaimData.IntezmenyGuid.Value);
return Json(csatolmanyId);
}
catch (Exception ex)
{
throw new StatusError(HttpStatusCode.BadRequest, ErrorResource.FajlFeltolteseSikertelen) { UnHandledException = ex };
}
}
private NemKotottMunkaidoModel GetModNemKotottMunkaidoModel(CalendarModel model)
{
var helper = new NemKotottMunkaidoHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
var co = helper.GetNemKotottMunkaidoById(model.EventId);
return Logic.NemKotottMunkaidoLogic.ConvertModelFromCo(co);
}
}
}