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 belepesDatumList = new List(); List lista = new List(); List datumLista = new List(); foreach (DataRow row in ds.Tables[0].Rows) { DateTime tanuloBelepesDatum = row.Field("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("TanuloId"); string tanuloNev = row.Field("TanuloNev"); DateTime tanuloBelepesDatum = row.Field("BelepesDatum"); DateTime? tanuloKilepesDatum = row.Field("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 { // 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 belepesDatumList = new List(); List lista = new List(); List datumLista = new List(); foreach (DataRow row in ds.Tables[0].Rows) { DateTime tanuloBelepesDatum = row.Field("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("TanuloId"); string tanuloNev = row.Field("TanuloNev"); DateTime tanuloBelepesDatum = row.Field("BelepesDatum"); DateTime? tanuloKilepesDatum = row.Field("KilepesDatum"); var tanuloOsztalyai = row.Field("TanuloOsztalyai")?.TrimStart(); var isDualisCsoportbanTanuloKepzohelyEsAdoszamNelkul = row.Field("CsoportSzervezetId").HasValue && string.IsNullOrEmpty(row.Field("DualisKepzohelyNeve")) && string.IsNullOrEmpty(row.Field("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 { // 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; } } }