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

474 lines
23 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.BusinessLogic.Security;
using Kreta.BusinessLogic.Utils;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Enums.ManualEnums.SystemSettings;
using Kreta.Framework.Util;
using Kreta.KretaServer.SystemSettings;
using Kreta.Resources;
using Kreta.Web.Areas.Adminisztracio.Models;
using Kreta.Web.Areas.TanuloErtekeles.Models.TanuloErtekeles;
using Kreta.Web.Classes;
using Kreta.Web.Helpers;
using Kreta.Web.Helpers.Error;
using Kreta.Web.Models.EditorTemplates;
using Kreta.Web.Security;
using Kreta.Web.Utils;
namespace Kreta.Web.Areas.TanuloErtekeles.Controllers
{
[MvcRoleClaimsAuthorize(true)]
[MvcRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue)]
public class ErtekelesController : BaseTanuloErtekelesController
{
#region Properties
public static string StartPopupFormName => "ErtekelesStartPopupForm";
public static string StartPopupId => "ErtekelesStartPopupWindow";
public static string EditPopupFormName => "ErtekelesEditPopupForm";
public static string EditPopupId => "ErtekelesEditPopupWindow";
public static string FotargyAltargyGridName => "FotargyAltargyGrid";
#endregion Properties
private IKretaAuthorization Authorization { get; }
public ErtekelesController(IKretaAuthorization authorization)
{
Authorization = authorization;
}
public ActionResult IndexEvkozi()
{
ErtekelesListModel model = GetErtekelesListModel((int)ErtekelesTipusEnum.evkozi_jegy_ertekeles);
return View("Index", model);
}
public ActionResult IndexFelevi()
{
ErtekelesListModel model = GetErtekelesListModel((int)ErtekelesTipusEnum.felevi_jegy_ertekeles);
return View("Index", model);
}
public ActionResult IndexEvvegi()
{
ErtekelesListModel model = GetErtekelesListModel((int)ErtekelesTipusEnum.evvegi_jegy_ertekeles);
return View("Index", model);
}
public ActionResult IndexEgyeb()
{
ErtekelesListModel model = GetErtekelesListModel();
return View("Index", model);
}
public ActionResult ErtekelesGridDetail(ErtekelesDetailModel model)
{
model.NamePrefix = "Ertekeles";
var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
bool hasFotargyAltargy = helper.HasTantargyFotargyAltargy(model.TantargyId);
model.HasFotargyAltargy = hasFotargyAltargy;
return PartialView("GridDetail", model);
}
[MvcRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)]
public ActionResult NaplozasErtekelesGridDetail(ErtekelesDetailModel model)
{
model.NamePrefix = "NaplozasErtekeles";
var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
bool hasFotargyAltargy = helper.HasTantargyFotargyAltargy(model.TantargyId);
model.HasFotargyAltargy = hasFotargyAltargy;
return PartialView("GridDetail", model);
}
internal ErtekelesListModel NaplozasPartialViewModel()
{
return GetErtekelesListModel((int)ErtekelesTipusEnum.evkozi_jegy_ertekeles);
}
public ActionResult OpenStartPopup(int? tipusId)
{
var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
DataSet ertekelesFoglalkozasData = helper.GetErtekelesFoglalkozasData();
DataSet ertekelesFotargyiFoglalkozasData = helper.GetErtekelesFotargyiFoglalkozasData();
var foglalkozasList = GetFoglalkozasList(ertekelesFoglalkozasData);
var fotargyiFoglalkozasList = GetFoglalkozasList(ertekelesFotargyiFoglalkozasData);
var ertekelesFoglalkozasItemList = GetErtekelesFoglalkozasList(ertekelesFoglalkozasData);
var ertekelesFotargyiFoglalkozasItemList = GetErtekelesFoglalkozasList(ertekelesFotargyiFoglalkozasData);
var keresoAdatTipus = GetKeresoAdatTipus();
var model = new ErtekelesStartPopupModel
{
ErtekelesKeresoAdatTipus = keresoAdatTipus,
ErtekelesKeresoSzuro = (int)ErtekelesKeresoSzuroEnum.Ttf,
TipusId = tipusId,
ErtekelesKeresoSzuroList = GetErtekelesKeresoSzuroList(keresoAdatTipus, ertekelesFotargyiFoglalkozasItemList.Any()),
TipusList = GetTipusList(),
FoglalkozasList = foglalkozasList,
ErtekelesFoglalkozasItemModelList = ertekelesFoglalkozasItemList,
FotargyiFoglalkozasList = fotargyiFoglalkozasList,
ErtekelesFotargyiFoglalkozasItemModelList = ertekelesFotargyiFoglalkozasItemList,
OsztalyCsoportList = GetOsztalyCsoportList(),
OsztalyCsoportListByFelhasznaloId = GetOsztalyCsoportListByFelhasznaloId(),
TantargyList = GetTantargyList()
};
return PartialView("Start_Popup", model);
}
[MvcRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)]
public ActionResult OpenEditPopup(int id)
{
if (!Authorization.IsValidErtekeles(id))
{
throw new StatusError(HttpStatusCode.Forbidden, ErrorResource.NincsJogaAzOldalMegtekintesehez);
}
var connectionType = ConnectionTypeExtensions.GetSessionConnectionType();
var helper = new TanuloErtekelesHelper(connectionType);
TanuloErtekelesCo tanuloErtekelesCo = helper.GetTanuloErtekelesCoById(id);
var naplozarasDatum = new OrarendHelper(connectionType).GetNaplozarasDate(startDate: null);
var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var ertekelesEditModel = new ErtekelesEditModel
{
IdEdit = tanuloErtekelesCo.Id.Value,
TanuloIdEdit = tanuloErtekelesCo.TanuloId,
DatumMinValueEdit = naplozarasDatum,
OsztalyCsoportIdEdit = tanuloErtekelesCo.OsztalyCsoportId,
ErtekeloNyomtatasiNevEdit = tanuloErtekelesCo.ErtekeloNyomtatasiNev,
DatumEdit = tanuloErtekelesCo.Datum,
TipusIdEdit = tanuloErtekelesCo.TipusId,
TipusList = GetTipusList(),
OsztalyzatList = GetOsztalyzatList(true),
TantargyIdEdit = tanuloErtekelesCo.TantargyId,
ErtekelesModIdEdit = tanuloErtekelesCo.ErtekelesModId,
ErtekelesTemaEdit = tanuloErtekelesCo.ErtekelesTema,
ErtekelesTemaNemetEdit = tanuloErtekelesCo.ErtekelesTemaNemet,
ErtekelesTemaHorvatEdit = tanuloErtekelesCo.ErtekelesTemaHorvat,
ErtekelesTemaRomanEdit = tanuloErtekelesCo.ErtekelesTemaRoman,
ErtekelesTemaSzerbEdit = tanuloErtekelesCo.ErtekelesTemaSzerb,
ErtekelesOsztalyzatIdEdit = tanuloErtekelesCo.ErtekelesOsztalyzatId,
ErtekelesSzovegEdit = tanuloErtekelesCo.ErtekelesSzovegFormazott,
ErtekelesSzovegNemetEdit = tanuloErtekelesCo.ErtekelesSzovegFormazottNemet,
ErtekelesSzovegHorvatEdit = tanuloErtekelesCo.ErtekelesSzovegFormazottHorvat,
ErtekelesSzovegRomanEdit = tanuloErtekelesCo.ErtekelesSzovegFormazottRoman,
ErtekelesSzovegSzerbEdit = tanuloErtekelesCo.ErtekelesSzovegFormazottSzerb,
ErtekelesSzovegRovidNevEdit = tanuloErtekelesCo.ErtekelesSzovegRovidNev,
ErtekelesSzazalekEdit = tanuloErtekelesCo.ErtekelesSzazalek,
ErtekelesModList = GetErtekelesModList(),
NemzetiDokumentumNyelvek = systemSettingsHelper.GetSystemSettingValue<List<int>>(RendszerBeallitasTipusEnum.Nemzeti_Nyelvi_Dokumentum_Nyelvek)
};
var popUpModel = new PopUpModel(ertekelesEditModel, "Edit_Popup");
popUpModel.AddBtn(popUpModel, "ErtekelesPopupCancelButton", CommonResource.Megse, "ErtekelesHelper.editCancel", "BtnCancel");
popUpModel.AddBtn(popUpModel, "ErtekelesPopupSaveButton", CommonResource.Mentes, "ErtekelesHelper.editSave", "BtnOk");
popUpModel.AddBtn(popUpModel, "ErtekelesPopupDeleteButton", CommonResource.Torles, "ErtekelesHelper.editDeleteConfirmWindow", "BtnDelete");
return PartialView(Constants.General.PopupView, popUpModel);
}
public ActionResult OpenMondatbankSelectPopup(TanuloErtekelesMondatbankItemSelectModel model)
{
var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType());
model.NemzetiDokumentumNyelvek = systemSettingsHelper.GetSystemSettingValue<List<int>>(RendszerBeallitasTipusEnum.Nemzeti_Nyelvi_Dokumentum_Nyelvek);
int? evfolyamTipusId = null;
if (model.MondatbankSelectPopupOsztalyCsoportId.IsEntityId())
{
evfolyamTipusId = new OsztalyCsoportHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetOsztalyCsoportEvfolyamTipusId(model.MondatbankSelectPopupOsztalyCsoportId.Value);
}
var helper = new TanuloErtekelesMondatbankHelper(ConnectionTypeExtensions.GetSessionConnectionType())
{
GridParameters = new GridParameters
{
OrderBy = "RovidNev ASC"
}
};
DataSet dataSet = helper.GetMondatbankSelectListData(model.MondatbankSelectPopupTanuloErtekelesTipusId, model.MondatbankSelectPopupTipusId, model.MondatbankSelectPopupTantargyId, evfolyamTipusId);
List<DataRow> mondatbankItemRows = dataSet.Tables[0].Rows.Cast<DataRow>().ToList();
model.MondatbankItemSelectList = GetMondatbankItemSelectList(mondatbankItemRows);
model.MondatbankItemList = GetMondatbankItemList(mondatbankItemRows);
var popUpModel = new PopUpModel(model, "MondatbankItem_Select_Popup");
popUpModel.AddBtn(popUpModel, "ErtekelesMondatbankSelectPopupCancelButton", CommonResource.Megse, "ErtekelesHelper.mondatbankSelectPopupCancel", "BtnCancel");
popUpModel.AddBtn(popUpModel, "ErtekelesMondatbankSelectPopupSelectButton", CommonResource.Kivalasztas, "ErtekelesHelper.mondatbankSelectPopupSelect", "BtnOk");
return PartialView(Constants.General.PopupView, popUpModel);
}
[MvcRolePackageAuthorize(KretaClaimPackages.Tanar.ClaimValue, KretaClaimPackages.Osztalyfonok.ClaimValue, KretaClaimPackages.SzuperOsztalyfonok.ClaimValue, KretaClaimPackages.Naplo.ClaimValue)]
public string GetAtlag(int osztalyCsoportId, int tantargyId, DateTime? datum)
{
var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
var result = helper.GetAtlag(osztalyCsoportId, tantargyId, ProfileUtils.AtlagMegjelenitesTipusa, ProfileUtils.AtlagbaBeleszamitoOsztalyTipusa, datum);
return result;
}
private ErtekelesListModel GetErtekelesListModel(int? tipusId = null)
{
var connectionType = ConnectionTypeExtensions.GetSessionConnectionType();
var systemSettingsHelper = new SystemSettingsHelper(connectionType);
List<int> ertekeleseknelMegjelenoSpecialisGombokLathatosagaList = systemSettingsHelper.GetSystemSettingValue<List<int>>(RendszerBeallitasTipusEnum.Ertekeleseknel_Megjeleno_Specialis_Gombok_Lathatosaga);
var helper = new TanuloErtekelesHelper(ConnectionTypeExtensions.GetSessionConnectionType());
List<ErtekelesFoglalkozasItemModel> ertekelesFoglalkozasItemList = GetErtekelesFoglalkozasList(helper.GetErtekelesFoglalkozasData());
List<ErtekelesFoglalkozasItemModel> ertekelesFotargyiFoglalkozasItemList = GetErtekelesFoglalkozasList(helper.GetErtekelesFotargyiFoglalkozasData());
bool isJegyekAtlagaMegjelenik = SystemSettingsManager.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Ertekelesnel_a_naplojegyek_atlaga_megjelenik, ClaimData.IntezmenyAzonosito, ClaimData.SelectedTanevID.Value);
var ertekelesZarasDatuma = new OrarendHelper(connectionType).GetErtekelesZarasDatuma();
var lezartOsztalyokEsBontottCsoportjaik = new NaplozarasLogic(connectionType).GetLezartOsztalyokEsBontottCsoportjaik();
var model = new ErtekelesListModel
{
NamePrefix = "Ertekeles",
TipusId = tipusId,
Datum = DateTime.Today,
DatumMinValue = ertekelesZarasDatuma,
OsztalyCsoportId = null,
OsztalyzatList = GetOsztalyzatWithSpecialisList(ertekeleseknelMegjelenoSpecialisGombokLathatosagaList),
MentesitettOsztalyzatList = GetMentesitettOsztalyzatWithSpecialisList(ertekeleseknelMegjelenoSpecialisGombokLathatosagaList),
TipusList = GetTipusList(),
OsztalyCsoportList = GetOsztalyCsoportList(),
OsztalyCsoportListByFelhasznaloId = GetOsztalyCsoportListByFelhasznaloId(),
IsNaploErtekeles = false,
ErtekelesModId = null,
ErtekelesTema = null,
ErtekelesTemaText = null,
TemaList = new List<SelectListItem>(),
IsJegyekAtlagaMegjelenik = isJegyekAtlagaMegjelenik,
FoglalkozasId = null,
TantargyId = null,
ErtekelesKeresoAdatTipus = GetKeresoAdatTipus(),
ErtekelesModList = GetErtekelesModList(),
ErtekelesFoglalkozasItemModelList = ertekelesFoglalkozasItemList,
ErtekelesFotargyiFoglalkozasItemModelList = ertekelesFotargyiFoglalkozasItemList,
EgyszerAdhatoErtekelesTipusIds = EnumExtensions.GetErtekelesTipusDictionaryItems(ClaimData.SelectedTanevID.Value, true).Select(x => x.Id).ToList(),
NemzetiDokumentumNyelvek = systemSettingsHelper.GetSystemSettingValue<List<int>>(RendszerBeallitasTipusEnum.Nemzeti_Nyelvi_Dokumentum_Nyelvek),
LezartOsztalyCsoportok = lezartOsztalyokEsBontottCsoportjaik,
};
return model;
}
private static int GetKeresoAdatTipus()
{
int ertekelesKeresoAdatTipus;
if (ClaimData.IsSzuperOsztalyfonok)
{
ertekelesKeresoAdatTipus = (int)SystemSettingsErtekelesKeresesSzuroEnum.Mindenki;
}
else
{
var systemSettingsHelper = new SystemSettingsHelper(ConnectionTypeExtensions.GetSessionConnectionType());
ertekelesKeresoAdatTipus = (int)systemSettingsHelper.GetSystemSettingValue<SystemSettingsErtekelesKeresesSzuroEnum>(RendszerBeallitasTipusEnum.Ertekelesek_oldalon_levo_keresok_alapertelemezett_feltoltese_ezek_alapjan);
}
return ertekelesKeresoAdatTipus;
}
private static List<SelectListItem> GetFoglalkozasList(DataSet ertekelesFogalkozasData)
{
var result = new List<SelectListItem>();
foreach (DataRow row in ertekelesFogalkozasData.Tables[0].Rows)
{
result.Add(new SelectListItem
{
Value = SDAConvert.ToInt32(row["ID"]).ToString(),
Text = SDAConvert.ToString(row["Nev"])
});
}
return result;
}
private static List<ErtekelesFoglalkozasItemModel> GetErtekelesFoglalkozasList(DataSet dataSet)
{
var itemList = new List<ErtekelesFoglalkozasItemModel>();
foreach (DataRow row in dataSet.Tables[0].Rows)
{
itemList.Add(new ErtekelesFoglalkozasItemModel
{
FoglalkozasId = SDAConvert.ToNullableInt32(row["ID"]),
OsztalyCsoportId = SDAConvert.ToNullableInt32(row["OsztalyCsoportId"]),
TantargyId = SDAConvert.ToNullableInt32(row["TantargyId"])
});
}
return itemList;
}
private List<SelectListItem> GetErtekelesKeresoSzuroList(int ertekelesKeresoAdatTipus, bool showFotargyi)
{
var removeTipusList = new List<string>();
if (ertekelesKeresoAdatTipus == (int)SystemSettingsErtekelesKeresesSzuroEnum.Mindenki && ClaimData.IsOnlyTanar)
{
removeTipusList.Add(((int)ErtekelesKeresoSzuroEnum.Osztalyfonok).ToString());
}
else if (ertekelesKeresoAdatTipus == (int)SystemSettingsErtekelesKeresesSzuroEnum.Osztalyfonok)
{
removeTipusList.Add(((int)ErtekelesKeresoSzuroEnum.Mindenki).ToString());
if (ClaimData.IsOnlyTanar)
{
removeTipusList.Add(((int)ErtekelesKeresoSzuroEnum.Osztalyfonok).ToString());
}
}
else if (ertekelesKeresoAdatTipus == (int)SystemSettingsErtekelesKeresesSzuroEnum.TTF)
{
removeTipusList.Add(((int)ErtekelesKeresoSzuroEnum.Mindenki).ToString());
removeTipusList.Add(((int)ErtekelesKeresoSzuroEnum.Osztalyfonok).ToString());
}
if (!showFotargyi)
{
removeTipusList.Add(((int)ErtekelesKeresoSzuroEnum.Fotargyi).ToString());
}
var result = FrameworkEnumExtensions.EnumToListManual<ErtekelesKeresoSzuroEnum>().ToSelectListItemList(removeTipusList);
return result;
}
private List<SelectListItem> GetTipusList()
{
return ((int)GeneratedAdatszotarTipusEnum.ErtekelesTipus).GetItemsByType(ClaimData.SelectedTanevID.Value, true).ToSelectItemList();
}
private List<SelectListItem> GetErtekelesModList()
{
return ((int)GeneratedAdatszotarTipusEnum.ErtekelesMod).GetItemsByType(ClaimData.SelectedTanevID.Value, true).ToSelectItemList();
}
private static List<SelectListItem> GetTantargyList()
{
bool isFromSzervezet = false;
List<SelectListItem> selectListItemList = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetTantargyakForComboBox(isSzakkepzo: ClaimData.IsSzakkepzoIntezmeny, isFromSzervezet: isFromSzervezet);
return selectListItemList.OrderBy(x => x.Text).ToList();
}
private List<ExtendedSelectListItem> GetOsztalyzatWithSpecialisList(List<int> ertekeleseknelMegjelenoSpecialisGombokLathatosagaList)
{
List<SelectListItem> selectListItemList = GetOsztalyzatList(true);
List<ExtendedSelectListItem> extendedSelectListItemList = selectListItemList.Select(x => new ExtendedSelectListItem(x)
{
Tooltip = int.Parse(x.Value).GetDisplayName<OsztalyzatTipusEnum>(ClaimData.SelectedTanevID.Value)
}).ToList();
var nemIrtValue = (int)SpecialisErtekelesOsztalyzatEnum.NemIrt;
if (ertekeleseknelMegjelenoSpecialisGombokLathatosagaList.Contains(nemIrtValue))
{
extendedSelectListItemList.Add(new ExtendedSelectListItem
{
Value = nemIrtValue.ToString(),
Text = TanuloErtekelesResource.NemIrtRovidNev,
Tooltip = TanuloErtekelesResource.NemIrt
});
}
var dicseretValue = (int)SpecialisErtekelesOsztalyzatEnum.Dicseret;
if (ertekeleseknelMegjelenoSpecialisGombokLathatosagaList.Contains(dicseretValue))
{
extendedSelectListItemList.Add(new ExtendedSelectListItem
{
Value = dicseretValue.ToString(),
Text = TanuloErtekelesResource.DicseretRovidNev,
Tooltip = TanuloErtekelesResource.Dicseret
});
}
var kitunoValue = (int)SpecialisErtekelesOsztalyzatEnum.Kituno;
if (ertekeleseknelMegjelenoSpecialisGombokLathatosagaList.Contains(kitunoValue))
{
extendedSelectListItemList.Add(new ExtendedSelectListItem
{
Value = kitunoValue.ToString(),
Text = TanuloErtekelesResource.KitunoRovidNev,
Tooltip = TanuloErtekelesResource.Kituno
});
}
var mentesitveValue = (int)SpecialisErtekelesOsztalyzatEnum.Mentesitve;
if (ertekeleseknelMegjelenoSpecialisGombokLathatosagaList.Contains(mentesitveValue))
{
extendedSelectListItemList.Add(new ExtendedSelectListItem
{
Value = mentesitveValue.ToString(),
Text = TanuloErtekelesResource.MentesitveRovidNev,
Tooltip = TanuloErtekelesResource.Mentesitve
});
}
return extendedSelectListItemList;
}
private List<ExtendedSelectListItem> GetMentesitettOsztalyzatWithSpecialisList(List<int> ertekeleseknelMegjelenoSpecialisGombokLathatosagaList)
{
var extendedSelectListItemList = new List<ExtendedSelectListItem>();
var mentesitveValue = (int)SpecialisErtekelesOsztalyzatEnum.Mentesitve;
if (ertekeleseknelMegjelenoSpecialisGombokLathatosagaList.Contains(mentesitveValue))
{
extendedSelectListItemList = new List<ExtendedSelectListItem>
{
new ExtendedSelectListItem
{
Value = mentesitveValue.ToString(),
Text = TanuloErtekelesResource.MentesitveRovidNev,
Tooltip = TanuloErtekelesResource.Mentesitve
}
};
}
return extendedSelectListItemList;
}
public JsonResult GetErtekelesKorlatozasok(int tantargyId)
{
var (isOsztalyzattalErtekelheto, isSzovegesenErtekelheto, isSzazalekosanErtekelheto) = new TantargyHelper(ConnectionTypeExtensions.GetSessionConnectionType()).GetErtekelesKorlatozasok(tantargyId);
return Json(new { isOsztalyzattalErtekelheto, isSzazalekosanErtekelheto, isSzovegesenErtekelheto }, JsonRequestBehavior.AllowGet);
}
}
}