This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,257 @@
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web.Http.ModelBinding;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.HelperClasses;
using Kreta.Core;
using Kreta.Enums;
using Kreta.Resources;
using Kreta.Web.Security;
namespace Kreta.Web.Areas.TanuloErtekeles.Models
{
public class ErettsegiEredmenySaveModel
{
public string FormName { get; set; }
public List<ErettsegiEredmenySaveDetailModel> ErettsegiEredmenySaveDetailModelList { get; set; } = new List<ErettsegiEredmenySaveDetailModel>();
}
public class ErettsegiEredmenySaveDetailModel
{
public string Id { get; set; }
public int TanuloId { get; set; }
public int? ErettsegiTantargyId { get; set; }
public int? ErettsegiSzintId { get; set; }
public int? ErettsegiTipusId { get; set; }
public int? IrasbeliPontszam { get; set; }
public int? SzobeliPontszam { get; set; }
public int? GyakorlatiPontszam { get; set; }
public string Megjegyzes { get; set; }
public bool IsNew { get; set; }
public ModelStateDictionary Validate(ModelStateDictionary modelStateDictionary, string formName, DataSet erettsegiTantargyAdatok)
{
if (!ErettsegiTantargyId.IsEntityId())
{
modelStateDictionary.AddModelError(formName, string.Format(CommonResource.Required, $"\"{ErettsegiEredmenyekResource.Tantargy}\""));
}
else
{
//NOTE: Az IsEntityId vizsgálat miatt nem lehet null az ErettsegiTantargyId!
int erettsegiTantargyIdValue = ErettsegiTantargyId.Value;
var erettsegiTantargyNev = erettsegiTantargyIdValue.GetDisplayName<ErettsegiTantargyEnum>(ClaimData.SelectedTanevID.Value);
if (!ErettsegiSzintId.IsEntityId())
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationRequired, erettsegiTantargyNev, $"{ErettsegiEredmenyekResource.Szint}"));
}
else
{
//NOTE: Az IsEntityId vizsgálat miatt nem lehet null az ErettsegiSzintId!
int erettsegiSzintIdValue = ErettsegiSzintId.Value;
List<ErettsegiTantargyAdatokModel> erettsegiTantargyAdatokModel = erettsegiTantargyAdatok.Tables[0].AsEnumerable().Select(dataRow =>
new ErettsegiTantargyAdatokModel
{
ID = dataRow.Field<int>("ID"),
IsSzobeli = dataRow.Field<string>("IsSzobeli").ToBool(),
IsIrasbeli = dataRow.Field<string>("IsIrasbeli").ToBool(),
IsGyakorlati = dataRow.Field<string>("IsGyakorlati").ToBool(),
IsEmelt = dataRow.Field<int>("ErettsegiSzint") == (int)ErettsegiSzintEnum.EmeltSzint,
IrasbeliMaxPontszam = dataRow.Field<int>("IrasbeliMaxPontszam"),
GyakorlatiMaxPontszam = dataRow.Field<int>("GyakorlatiMaxpontszam"),
SzobeliMaxPontszam = dataRow.Field<int>("SzobeliMaxpontszam"),
OsszMaxPontszam = dataRow.Field<int>("OsszMaxpontszam")
}).Where(x => x.ID == erettsegiTantargyIdValue).ToList();
//NOTE: Megvizsgáljuk, hogy emelt szintű-e az érettségi.
if (erettsegiSzintIdValue == (int)ErettsegiSzintEnum.EmeltSzint)
{
//NOTE: Azért használunk SingleOrDefault-ot, mert csak és kizárólag egy darab emelt és/vagy közép szintű érettségi lehet az adott tantárgyból, ha több van, rossz adat van az adatbázisban és javítani kell.
var emeltErettsegiTantargyAdat = erettsegiTantargyAdatokModel.SingleOrDefault(x => x.IsEmelt);
ErettsegiSzintSzerintiValidacio(modelStateDictionary, formName, emeltErettsegiTantargyAdat, ErettsegiEredmenyekResource.Emelt, erettsegiTantargyNev);
}
//NOTE: Megvizsgáljuk, hogy közép szintű-e az érettségi.
if (erettsegiSzintIdValue == (int)ErettsegiSzintEnum.KozepSzint)
{
//NOTE: Azért használunk SingleOrDefault-ot, mert csak és kizárólag egy darab emelt és/vagy közép szintű érettségi lehet az adott tantárgyból, ha több van, rossz adat van az adatbázisban és javítani kell.
var kozepErettsegiTantargyAdat = erettsegiTantargyAdatokModel.SingleOrDefault(x => !x.IsEmelt);
//NOTE: Megvizsgáljuk, hogy matematika-e a tantárgy, ha igen, akkor azt közép szinten egyedileg kell validálni, ha nem, akkor normális validáció következik.
if (erettsegiTantargyIdValue != (int)ErettsegiTantargyEnum.matematika)
{
ErettsegiSzintSzerintiValidacio(modelStateDictionary, formName, kozepErettsegiTantargyAdat, ErettsegiEredmenyekResource.Kozep, erettsegiTantargyNev);
}
else
{
var matematikaOsszMaxPontszam = 0;
//NOTE: Mivel matematika tantárgyról van szó, ezért a kozepErettsegiTantargyAdat nem lehet null, mert kötelező, hogy legyen ilyen az adatbázisban!
PontszamValidation(modelStateDictionary, formName, IrasbeliPontszam, kozepErettsegiTantargyAdat.IrasbeliMaxPontszam, kozepErettsegiTantargyAdat.IsIrasbeli, ErettsegiEredmenyekResource.Irasbeli, erettsegiTantargyNev);
matematikaOsszMaxPontszam += kozepErettsegiTantargyAdat.IrasbeliMaxPontszam;
if (IrasbeliPontszam < 25)
{
var matematikaKozepSzobeliMaxPontszam = 50;
PontszamValidation(modelStateDictionary, formName, SzobeliPontszam, matematikaKozepSzobeliMaxPontszam, kozepErettsegiTantargyAdat.IsSzobeli, ErettsegiEredmenyekResource.Szobeli, erettsegiTantargyNev);
matematikaOsszMaxPontszam += matematikaKozepSzobeliMaxPontszam;
}
else
{
if (SzobeliPontszam.HasValue)
{
modelStateDictionary.AddModelError(formName, ErettsegiEredmenyekResource.ValidationMatematikaNemLehetTipusuErettsegiVizsgatTenni);
}
matematikaOsszMaxPontszam += kozepErettsegiTantargyAdat.SzobeliMaxPontszam;
}
if (GyakorlatiPontszam.HasValue)
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationNemLehetTipusuErettsegiVizsgatTenni, erettsegiTantargyNev, ErettsegiEredmenyekResource.Gyakorlati));
}
matematikaOsszMaxPontszam += kozepErettsegiTantargyAdat.GyakorlatiMaxPontszam;
var osszPontszam = 0;
osszPontszam += IrasbeliPontszam ?? 0;
osszPontszam += SzobeliPontszam ?? 0;
osszPontszam += GyakorlatiPontszam ?? 0;
//NOTE: Megvizsgáljuk, hogy nem adtak-e több pontot összesen, mint a lehetséges maximális.
if (matematikaOsszMaxPontszam < osszPontszam)
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationMaximumPontotLehetElerniOsszesenAzErettsegiVizsgan, erettsegiTantargyNev, matematikaOsszMaxPontszam));
}
}
}
}
if (!ErettsegiTipusId.IsEntityId())
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationRequired, erettsegiTantargyNev, $"{ErettsegiEredmenyekResource.Tipus}"));
}
}
return modelStateDictionary;
}
private void ErettsegiSzintSzerintiValidacio(ModelStateDictionary modelStateDictionary, string formName, ErettsegiTantargyAdatokModel erettsegiTantargyAdat, string erettsegiSzintNev, string erettsegiTantargyNev)
{
//NOTE: Ha igen, megvizsgáljuk, hogy lehet-e adott szintű(Közép/Emelt) érettségit tenni a tantárgyból, ha nem, validációs hibát dobunk.
if (erettsegiTantargyAdat == null)
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationNemLehetSzintuErettsegiVizsgatTenni, erettsegiTantargyNev, erettsegiSzintNev));
}
//NOTE: Ha igen, folytatjuk a további vizsgálatot.
else
{
PontszamValidation(modelStateDictionary, formName, IrasbeliPontszam, erettsegiTantargyAdat.IrasbeliMaxPontszam, erettsegiTantargyAdat.IsIrasbeli, ErettsegiEredmenyekResource.Irasbeli, erettsegiTantargyNev);
PontszamValidation(modelStateDictionary, formName, SzobeliPontszam, erettsegiTantargyAdat.SzobeliMaxPontszam, erettsegiTantargyAdat.IsSzobeli, ErettsegiEredmenyekResource.Szobeli, erettsegiTantargyNev);
PontszamValidation(modelStateDictionary, formName, GyakorlatiPontszam, erettsegiTantargyAdat.GyakorlatiMaxPontszam, erettsegiTantargyAdat.IsGyakorlati, ErettsegiEredmenyekResource.Gyakorlati, erettsegiTantargyNev);
var osszPontszam = 0;
osszPontszam += IrasbeliPontszam ?? 0;
osszPontszam += SzobeliPontszam ?? 0;
osszPontszam += GyakorlatiPontszam ?? 0;
//NOTE: Megvizsgáljuk, hogy nem adtak-e több pontot összesen, mint a lehetséges maximális.
if (erettsegiTantargyAdat.OsszMaxPontszam < osszPontszam)
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationMaximumPontotLehetElerniOsszesenAzErettsegiVizsgan, erettsegiTantargyNev, erettsegiTantargyAdat.OsszMaxPontszam));
}
}
}
private void PontszamValidation(ModelStateDictionary modelStateDictionary, string formName, int? pontszam, int maxPontszam, bool isErettsegiTantargyTipus, string tipusNev, string erettsegiTantargyNev)
{
//NOTE: Megvizsgáljuk, hogy adtak-e pontot az adott típusból(Írásbeli/Szóbeli/Gyakorlati)
if (pontszam.HasValue)
{
//NOTE: Ha adtak pontot, megvizsgáljuk, hogy az adott típusból(Írásbeli/Szóbeli/Gyakorlati), szabad-e pontot adni. Ha nem, validációs hibát dobunk.
if (!isErettsegiTantargyTipus)
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationNemLehetTipusuErettsegiVizsgatTenni, erettsegiTantargyNev, tipusNev));
}
//NOTE: Megvizsgáljuk, hogy nem adtak-e több pontot, mint az adott típusból(Írásbeli/Szóbeli/Gyakorlati) a lehetséges maximális.
else if (maxPontszam < pontszam.Value)
{
modelStateDictionary.AddModelError(formName, string.Format(ErettsegiEredmenyekResource.ValidationMaximumPontotLehetElerniTipusuErettsegiVizsgan, erettsegiTantargyNev, maxPontszam, tipusNev));
}
}
}
public ErettsegiEredmenyItemCo ConvertModelToCo(int intezmenyId, int tanevId)
{
ErettsegiEredmenyItemCo co = new ErettsegiEredmenyItemCo
{
IntezmenyId = intezmenyId,
TanevId = tanevId,
TanuloId = TanuloId
};
if (!IsNew)
{
co.Id = int.Parse(Id);
}
if (ErettsegiTantargyId.HasValue)
{
co.ErettsegiTantargyId = ErettsegiTantargyId.Value;
}
if (ErettsegiSzintId.HasValue)
{
co.ErettsegiSzintId = ErettsegiSzintId.Value;
}
if (ErettsegiTipusId.HasValue)
{
co.ErettsegiTipusId = ErettsegiTipusId.Value;
}
if (IrasbeliPontszam.HasValue)
{
co.IrasbeliPontszam = IrasbeliPontszam.Value;
}
if (SzobeliPontszam.HasValue)
{
co.SzobeliPontszam = SzobeliPontszam.Value;
}
if (GyakorlatiPontszam.HasValue)
{
co.GyakorlatiPontszam = GyakorlatiPontszam.Value;
}
co.Megjegyzes = Megjegyzes;
int osszPontszam = 0;
if (co.IrasbeliPontszam != null)
{
osszPontszam += co.IrasbeliPontszam.Value;
}
if (co.SzobeliPontszam != null)
{
osszPontszam += co.SzobeliPontszam.Value;
}
if (co.GyakorlatiPontszam != null)
{
osszPontszam += co.GyakorlatiPontszam.Value;
}
co.OsszPontszam = co.IrasbeliPontszam == null && co.SzobeliPontszam == null && co.GyakorlatiPontszam == null ? (int?)null : osszPontszam;
return co;
}
}
}