429 lines
22 KiB
C#
429 lines
22 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using Kreta.BusinessLogic.Helpers;
|
|
using Kreta.Enums;
|
|
using Kreta.Resources;
|
|
using Kreta.Web.Areas.OsztalyCsoport.ModelInterface;
|
|
using Kreta.Web.Areas.OsztalyCsoport.Models;
|
|
using Kreta.Web.Helpers;
|
|
using Kreta.Web.Security;
|
|
|
|
namespace Kreta.Web.Areas.OsztalyCsoport.Logic
|
|
{
|
|
public class TanuloBesorolasLogic
|
|
{
|
|
public static TanuloSorolasModel GenerateTanuloSorolasModel(DataSet ds)
|
|
{
|
|
List<DateTime> belepesDatumList = new List<DateTime>();
|
|
List<TanuloSorolasItemModel> lista = new List<TanuloSorolasItemModel>();
|
|
List<TanuloSorolasDateModel> datumLista = new List<TanuloSorolasDateModel>();
|
|
|
|
foreach (DataRow row in ds.Tables[0].Rows)
|
|
{
|
|
DateTime tanuloBelepesDatum = row.Field<DateTime>("BelepesDatum");
|
|
belepesDatumList.Add(tanuloBelepesDatum);
|
|
}
|
|
|
|
if (belepesDatumList.Count > 0)
|
|
{
|
|
DateTime? legelsoBelepesDatuma = belepesDatumList.OrderBy(x => x).FirstOrDefault();
|
|
TimeSpan ts = DateTime.Now - legelsoBelepesDatuma.Value;
|
|
|
|
if (ts.Days < 6)
|
|
{
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = legelsoBelepesDatuma.Value, ColNumber = 5 });
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = DateTime.Now, ColNumber = 1 });
|
|
}
|
|
else
|
|
{
|
|
int day = ts.Days / 6;
|
|
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = legelsoBelepesDatuma.Value, ColNumber = 1 });
|
|
for (int i = 1; i < 5; i++)
|
|
{
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = legelsoBelepesDatuma.Value.AddDays(day * i), ColNumber = 1 });
|
|
}
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = DateTime.Now, ColNumber = 1 });
|
|
}
|
|
|
|
foreach (DataRow row in ds.Tables[0].Rows)
|
|
{
|
|
int tanuloId = row.Field<int>("TanuloId");
|
|
string tanuloNev = row.Field<string>("TanuloNev");
|
|
DateTime tanuloBelepesDatum = row.Field<DateTime>("BelepesDatum");
|
|
DateTime? tanuloKilepesDatum = row.Field<DateTime?>("KilepesDatum");
|
|
|
|
TanuloSorolasItemModel aktualisTanulo = lista.FirstOrDefault(i => i.Id == tanuloId);
|
|
if (aktualisTanulo != null)
|
|
{
|
|
aktualisTanulo.Intervallumok.Add(new TanuloSorolasDivModel
|
|
{
|
|
StartDate = aktualisTanulo.Intervallumok.Last().EndDate,
|
|
EndDate = tanuloBelepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = true
|
|
});
|
|
aktualisTanulo.Intervallumok.Add(new TanuloSorolasDivModel
|
|
{
|
|
StartDate = tanuloBelepesDatum,
|
|
EndDate = tanuloKilepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = false
|
|
});
|
|
}
|
|
else
|
|
{
|
|
lista.Add(new TanuloSorolasItemModel()
|
|
{
|
|
Id = tanuloId,
|
|
Nev = tanuloNev,
|
|
Intervallumok = new List<TanuloSorolasDivModel>
|
|
{
|
|
// Az első (üres) div tulajdonságai
|
|
new TanuloSorolasDivModel
|
|
{
|
|
StartDate = legelsoBelepesDatuma,
|
|
EndDate = tanuloBelepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = true
|
|
},
|
|
// Az adattal rendelkező div tulajdonságai
|
|
new TanuloSorolasDivModel
|
|
{
|
|
StartDate = tanuloBelepesDatum,
|
|
EndDate = tanuloKilepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = false
|
|
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
foreach (TanuloSorolasItemModel tanulo in lista)
|
|
{
|
|
// Az utolsó (üres) div tulajdonságai
|
|
tanulo.Intervallumok.Add(new TanuloSorolasDivModel
|
|
{
|
|
StartDate = tanulo.Intervallumok.Last().EndDate,
|
|
EndDate = DateTime.Now,
|
|
WidthPercent = 0,
|
|
Blank = true
|
|
});
|
|
foreach (TanuloSorolasDivModel div in tanulo.Intervallumok)
|
|
{
|
|
if (div.StartDate.HasValue && div.EndDate.HasValue)
|
|
{
|
|
TimeSpan difference = div.EndDate.Value - div.StartDate.Value;
|
|
div.WidthPercent = (int)(((double)difference.Days / (double)ts.Days) * 100);
|
|
}
|
|
if (div.StartDate.HasValue && div.EndDate == null)
|
|
{
|
|
div.WidthPercent = 100 - tanulo.Intervallumok.Sum(i => i.WidthPercent);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return new TanuloSorolasModel { Lista = lista, DatumLista = datumLista };
|
|
}
|
|
|
|
public static TanuloSorolasModel GenerateTanuloSorolasModelCsoportOsztaly(DataSet ds, bool isCsoportView)
|
|
{
|
|
List<DateTime> belepesDatumList = new List<DateTime>();
|
|
List<TanuloSorolasItemModel> lista = new List<TanuloSorolasItemModel>();
|
|
List<TanuloSorolasDateModel> datumLista = new List<TanuloSorolasDateModel>();
|
|
|
|
foreach (DataRow row in ds.Tables[0].Rows)
|
|
{
|
|
DateTime tanuloBelepesDatum = row.Field<DateTime>("BelepesDatum");
|
|
belepesDatumList.Add(tanuloBelepesDatum);
|
|
}
|
|
|
|
if (belepesDatumList.Count > 0)
|
|
{
|
|
DateTime legelsoBelepesDatuma = belepesDatumList.Min();
|
|
DateTime utolsoBelepesDatuma = belepesDatumList.Max();
|
|
DateTime vegertek = utolsoBelepesDatuma > DateTime.Now ? utolsoBelepesDatuma.AddDays(1) : DateTime.Now;
|
|
TimeSpan ts = vegertek - legelsoBelepesDatuma;
|
|
|
|
if (ts.Days < 3)
|
|
{
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = legelsoBelepesDatuma, ColNumber = 5 });
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = vegertek, ColNumber = 1 });
|
|
}
|
|
else
|
|
{
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = legelsoBelepesDatuma, ColNumber = 2 });
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = legelsoBelepesDatuma.AddDays(ts.Days / 2), ColNumber = 2 });
|
|
datumLista.Add(new TanuloSorolasDateModel() { Date = vegertek, ColNumber = 2 });
|
|
}
|
|
|
|
foreach (DataRow row in ds.Tables[0].Rows)
|
|
{
|
|
int tanuloId = row.Field<int>("TanuloId");
|
|
string tanuloNev = row.Field<string>("TanuloNev");
|
|
DateTime tanuloBelepesDatum = row.Field<DateTime>("BelepesDatum");
|
|
DateTime? tanuloKilepesDatum = row.Field<DateTime?>("KilepesDatum");
|
|
var tanuloOsztalyai = row.Field<string>("TanuloOsztalyai")?.TrimStart();
|
|
|
|
var isDualisCsoportbanTanuloKepzohelyEsAdoszamNelkul = row.Field<int?>("CsoportSzervezetId").HasValue
|
|
&& string.IsNullOrEmpty(row.Field<string>("DualisKepzohelyNeve"))
|
|
&& string.IsNullOrEmpty(row.Field<string>("DualisKepzohelyAdoszama"));
|
|
|
|
TanuloSorolasItemModel aktualisTanulo = lista.FirstOrDefault(i => i.Id == tanuloId);
|
|
if (aktualisTanulo != null)
|
|
{
|
|
aktualisTanulo.Intervallumok.Add(new TanuloSorolasDivModel
|
|
{
|
|
StartDate = aktualisTanulo.Intervallumok.Last().EndDate,
|
|
EndDate = tanuloBelepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = true
|
|
});
|
|
aktualisTanulo.Intervallumok.Add(new TanuloSorolasDivModel
|
|
{
|
|
StartDate = tanuloBelepesDatum,
|
|
EndDate = tanuloKilepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = false
|
|
});
|
|
}
|
|
else
|
|
{
|
|
var tanuloSorolasNev = tanuloNev + (isCsoportView ? $" ({tanuloOsztalyai})" : string.Empty);
|
|
lista.Add(new TanuloSorolasItemModel()
|
|
{
|
|
Id = tanuloId,
|
|
Nev = tanuloSorolasNev,
|
|
IsDualisCsoportbanTanuloKepzohelyEsAdoszamNelkul = isDualisCsoportbanTanuloKepzohelyEsAdoszamNelkul,
|
|
|
|
Intervallumok = new List<TanuloSorolasDivModel>
|
|
{
|
|
// Az első (üres) div tulajdonságai
|
|
new TanuloSorolasDivModel
|
|
{
|
|
StartDate = legelsoBelepesDatuma,
|
|
EndDate = tanuloBelepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = true
|
|
},
|
|
// Az adattal rendelkező div tulajdonságai
|
|
new TanuloSorolasDivModel
|
|
{
|
|
StartDate = tanuloBelepesDatum,
|
|
EndDate = tanuloKilepesDatum,
|
|
WidthPercent = 0,
|
|
Blank = false
|
|
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
foreach (TanuloSorolasItemModel tanulo in lista)
|
|
{
|
|
// Az utolsó (üres) div tulajdonságai
|
|
tanulo.Intervallumok.Add(new TanuloSorolasDivModel
|
|
{
|
|
StartDate = tanulo.Intervallumok.Last().EndDate,
|
|
EndDate = vegertek,
|
|
WidthPercent = 0,
|
|
Blank = true
|
|
});
|
|
foreach (TanuloSorolasDivModel div in tanulo.Intervallumok)
|
|
{
|
|
if (div.StartDate.HasValue && div.EndDate.HasValue)
|
|
{
|
|
TimeSpan difference = (div.EndDate.Value > vegertek ? vegertek : div.EndDate.Value) - div.StartDate.Value;
|
|
if (difference.Ticks < 0)
|
|
{
|
|
difference = TimeSpan.Zero;
|
|
}
|
|
div.WidthPercent = (int)Math.Round((double)difference.Days / (double)ts.Days * 100);
|
|
}
|
|
if (div.StartDate.HasValue && div.EndDate == null)
|
|
{
|
|
div.WidthPercent = 100 - tanulo.Intervallumok.Sum(i => i.WidthPercent);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return new TanuloSorolasModel { Lista = lista, DatumLista = datumLista };
|
|
}
|
|
|
|
public static System.Web.Http.ModelBinding.ModelStateDictionary CustomValidation(System.Web.Http.ModelBinding.ModelStateDictionary ms, IBesorolasModValidationModel model, bool isOsztaly)
|
|
{
|
|
const string AlapadatModel = nameof(AlapadatModel);
|
|
|
|
if (model.BelepesDatum.HasValue && model.KilepesDatum.HasValue && model.BelepesDatum > model.KilepesDatum)
|
|
{
|
|
ms.AddModelError($"{AlapadatModel}.{nameof(model.KilepesDatum)}", OsztalyCsoportResource.KisorolasDatum);
|
|
}
|
|
|
|
if (model.TanuloCsoportId.HasValue)
|
|
{
|
|
var tHelper = new TanuloHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType());
|
|
var tanuloCsoportCo = tHelper.GetTanuloCsoportById(model.TanuloCsoportId.Value);
|
|
|
|
var osztalyCsoportbaSorolasHelper = new OsztalyCsoportbaSorolasHelper(ConnectionTypeExtensions.GetSessionConnectionType(), ClaimData.IsSzakkepzoIntezmeny, ClaimData.IsSelectedTanev21_22OrLater, ClaimData.AktivTanevID, ClaimData.KovTanevID);
|
|
|
|
DateTime? kilepesDatumValidalashoz = model.KilepesDatum;
|
|
|
|
if (tanuloCsoportCo.KilepDatum.HasValue && !model.KilepesDatum.HasValue)
|
|
{
|
|
var tanevCo = new TanevHelper(ConnectionTypeExtensions.GetActiveSessionConnectionType()).GetTanevInfo();
|
|
kilepesDatumValidalashoz = tanevCo.UtolsoNap;
|
|
}
|
|
|
|
if (model.BelepesDatum != tanuloCsoportCo.BelepDatum)
|
|
{
|
|
if (isOsztaly)
|
|
{
|
|
if (!osztalyCsoportbaSorolasHelper.CheckOsztalyBesorolasKezdetModositas(tanuloCsoportCo.ID.Value, model.BelepesDatum.Value, out var errorMessages))
|
|
{
|
|
errorMessages.ForEach(e => ms.AddModelError($"{AlapadatModel}.{nameof(model.BelepesDatum)}", e));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!osztalyCsoportbaSorolasHelper.CheckCsoportBesorolasKezdetModositas(tanuloCsoportCo.ID.Value, model.BelepesDatum.Value, out var errorMessages))
|
|
{
|
|
errorMessages.ForEach(e => ms.AddModelError($"{AlapadatModel}.{nameof(model.BelepesDatum)}", e));
|
|
}
|
|
}
|
|
}
|
|
|
|
if (kilepesDatumValidalashoz != tanuloCsoportCo.KilepDatum)
|
|
{
|
|
if (isOsztaly)
|
|
{
|
|
if (!osztalyCsoportbaSorolasHelper.CheckOsztalyBesorolasVegeModositas(tanuloCsoportCo.ID.Value, kilepesDatumValidalashoz.Value, out var errorMessages))
|
|
{
|
|
errorMessages.ForEach(e => ms.AddModelError($"{AlapadatModel}.{nameof(model.KilepesDatum)}", e));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!osztalyCsoportbaSorolasHelper.CheckCsoportBesorolasVegeModositas(tanuloCsoportCo.ID.Value, kilepesDatumValidalashoz.Value, out var errorMessages))
|
|
{
|
|
errorMessages.ForEach(e => ms.AddModelError($"{AlapadatModel}.{nameof(model.KilepesDatum)}", e));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ms;
|
|
}
|
|
|
|
public static bool TobbesModBelepesDatumValidationIsOk(System.Web.Http.ModelBinding.ModelStateDictionary ms, IBesorolasTobbesModValidationModel model)
|
|
{
|
|
return !model.BelepesDatum.HasValue || !model.KilepesDatumHelperForValidation.HasValue || model.BelepesDatum <= model.KilepesDatumHelperForValidation;
|
|
}
|
|
|
|
public static void ValidateJegyzekAdatok(BesorolasModAlapadatBaseModel model, System.Web.Http.ModelBinding.ModelStateDictionary modelState)
|
|
{
|
|
const string AlapadatModel = nameof(AlapadatModel);
|
|
|
|
if ((model.IsNKTSzakkepzeses || model.IsSzakkepzeses) && model.TanuloId.HasValue && ClaimData.IsSelectedTanev21_22OrLater)
|
|
{
|
|
var isUjSzktBlokk =
|
|
model.AgazatUjSzktTipusId.HasValue && model.AgazatUjSzktTipusId != (int)AgazatUjSzktTipusEnum.na ||
|
|
model.SzakmaTipusId.HasValue && model.SzakmaTipusId != (int)SzakmaTipusEnum.na ||
|
|
model.SzakmairanyTipusId.HasValue && model.SzakmairanyTipusId != (int)SzakmairanyTipusEnum.na ? 1 : 0;
|
|
var isNktBlokk =
|
|
model.TanulmanyiTeruletNktTipusId.HasValue && model.TanulmanyiTeruletNktTipusId != (int)TanulmanyiTeruletNktTipusEnum.na ||
|
|
model.SzakkepesitesNktTipusId.HasValue && model.SzakkepesitesNktTipusId != (int)SzakkepesitesNktTipusEnum.na ||
|
|
model.SzakiranyNktTipusId.HasValue && model.SzakiranyNktTipusId != (int)SzakiranyNktTipusEnum.na ? 1 : 0;
|
|
var isRegiSzktBlokk =
|
|
model.SzakmacsoportId.HasValue && model.SzakmacsoportId != (int)SzakmacsoportTipusEnum.Na ||
|
|
model.AgazatId.HasValue && model.AgazatId != (int)AgazatTipusEnum.Na ||
|
|
model.SzakkepesitesId.HasValue && model.SzakkepesitesId != (int)SzakkepesitesTipusEnum.Na ||
|
|
model.ReszSzakkepesitesId.HasValue && model.ReszSzakkepesitesId != (int)ReszszakkepesitesTipusEnum.Na ? 1 : 0;
|
|
|
|
var isUjSzktReszszakmakBlokk = model.AgazatReszSzakmaTipusId != (int)AgazatReszSzakmaTipusEnum.na
|
|
|| model.ReszSzakmaTipusId != (int)ReszSzakmaTipusEnum.na ||
|
|
model.SzakmaReszSzakmaTipusId != (int)SzakmaReszSzakmaTipusEnum.na ? 1 : 0;
|
|
|
|
if ((isUjSzktBlokk + isNktBlokk + isRegiSzktBlokk + isUjSzktReszszakmakBlokk) > 1)
|
|
{
|
|
if (!model.IsUjSzktBlokkAlkalmaz
|
|
&& !model.IsNktBlokkAlkalmaz
|
|
&& !model.IsRegiSzktBlokkAlkalmaz
|
|
&& !model.IsUjSzktReszSzakmakBlokkAlkalmaz)
|
|
{
|
|
if (isUjSzktBlokk == 1)
|
|
{
|
|
modelState.AddModelError($"{nameof(AlapadatModel)}.{nameof(model.IsUjSzktBlokkAlkalmaz)}", ErrorResource.JegyzekAdatok1BlokkEngedelyezett);
|
|
}
|
|
else if (isNktBlokk == 1)
|
|
{
|
|
modelState.AddModelError($"{nameof(AlapadatModel)}.{nameof(model.IsNktBlokkAlkalmaz)}", ErrorResource.JegyzekAdatok1BlokkEngedelyezett);
|
|
}
|
|
else if (isRegiSzktBlokk == 1)
|
|
{
|
|
modelState.AddModelError($"{nameof(AlapadatModel)}.{nameof(model.IsRegiSzktBlokkAlkalmaz)}", ErrorResource.JegyzekAdatok1BlokkEngedelyezett);
|
|
}
|
|
else if (isUjSzktReszszakmakBlokk == 1)
|
|
{
|
|
modelState.AddModelError($"{nameof(AlapadatModel)}.{nameof(model.IsUjSzktReszSzakmakBlokkAlkalmaz)}", ErrorResource.JegyzekAdatok1BlokkEngedelyezett);
|
|
}
|
|
}
|
|
else if (model.IsUjSzktBlokkAlkalmaz)
|
|
{
|
|
SetNktBlokkNa(model);
|
|
SetRegiSzktBlokkNa(model);
|
|
SetUjSzktReszszakmakBlokkNa(model);
|
|
}
|
|
else if (model.IsNktBlokkAlkalmaz)
|
|
{
|
|
SetUjSzktBlokkNa(model);
|
|
SetRegiSzktBlokkNa(model);
|
|
SetUjSzktReszszakmakBlokkNa(model);
|
|
}
|
|
else if (model.IsRegiSzktBlokkAlkalmaz)
|
|
{
|
|
SetNktBlokkNa(model);
|
|
SetUjSzktBlokkNa(model);
|
|
SetUjSzktReszszakmakBlokkNa(model);
|
|
}
|
|
else if (model.IsUjSzktReszSzakmakBlokkAlkalmaz)
|
|
{
|
|
SetNktBlokkNa(model);
|
|
SetRegiSzktBlokkNa(model);
|
|
SetUjSzktBlokkNa(model);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void SetUjSzktBlokkNa(BesorolasModAlapadatBaseModel tanuloTanugyAdatok)
|
|
{
|
|
tanuloTanugyAdatok.AgazatUjSzktTipusId = (int)AgazatUjSzktTipusEnum.na;
|
|
tanuloTanugyAdatok.SzakmaTipusId = (int)SzakmaTipusEnum.na;
|
|
tanuloTanugyAdatok.SzakmairanyTipusId = (int)SzakmairanyTipusEnum.na;
|
|
}
|
|
private static void SetNktBlokkNa(BesorolasModAlapadatBaseModel tanuloTanugyAdatok)
|
|
{
|
|
tanuloTanugyAdatok.TanulmanyiTeruletNktTipusId = (int)TanulmanyiTeruletNktTipusEnum.na;
|
|
tanuloTanugyAdatok.SzakkepesitesNktTipusId = (int)SzakkepesitesNktTipusEnum.na;
|
|
tanuloTanugyAdatok.SzakiranyNktTipusId = (int)SzakiranyNktTipusEnum.na;
|
|
}
|
|
private static void SetRegiSzktBlokkNa(BesorolasModAlapadatBaseModel tanuloTanugyAdatok)
|
|
{
|
|
tanuloTanugyAdatok.SzakmacsoportId = (int)SzakmacsoportTipusEnum.Na;
|
|
tanuloTanugyAdatok.AgazatId = (int)AgazatTipusEnum.Na;
|
|
tanuloTanugyAdatok.SzakkepesitesId = (int)SzakkepesitesTipusEnum.Na;
|
|
tanuloTanugyAdatok.ReszSzakkepesitesId = (int)ReszszakkepesitesTipusEnum.Na;
|
|
}
|
|
private static void SetUjSzktReszszakmakBlokkNa(BesorolasModAlapadatBaseModel tanuloTanugyAdatok)
|
|
{
|
|
tanuloTanugyAdatok.SzakmaReszSzakmaTipusId = (int)SzakmaReszSzakmaTipusEnum.na;
|
|
tanuloTanugyAdatok.ReszSzakmaTipusId = (int)ReszSzakmaTipusEnum.na;
|
|
tanuloTanugyAdatok.AgazatReszSzakmaTipusId = (int)AgazatReszSzakmaTipusEnum.na;
|
|
}
|
|
}
|
|
}
|