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,27 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class AmiBesorolhatoTanulokList : Dictionary<int, TanuloListItem>
{
public List<OsztalybaSorolasDDLItem> ConvertToDDLItemList()
{
List<OsztalybaSorolasDDLItem> Result = new List<OsztalybaSorolasDDLItem>();
foreach (var item in this)
{
Result.Add(new OsztalybaSorolasDDLItem()
{
Value = item.Key.ToString(),
Text = item.Value.Nev,
NevElotagNelkul = item.Value.NevElotagNelkul,
BesorolasDatum = item.Value.BesorolasDatum,
KisorolasDatum = item.Value.KisorolasDatum,
Aktiv = item.Value.Aktiv,
SzulDatum = item.Value.SzuletesiDatum,
Neme = item.Value.Neme
});
}
return Result;
}
}
}

View file

@ -0,0 +1,27 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class BeNemSoroltTanulokList : Dictionary<int, TanuloListItem>
{
public List<OsztalybaSorolasDDLItem> ConvertToDDLItemList()
{
List<OsztalybaSorolasDDLItem> Result = new List<OsztalybaSorolasDDLItem>();
foreach (var item in this)
{
Result.Add(new OsztalybaSorolasDDLItem()
{
Value = item.Key.ToString(),
Text = item.Value.Nev,
NevElotagNelkul = item.Value.NevElotagNelkul,
BesorolasDatum = item.Value.BesorolasDatum,
KisorolasDatum = item.Value.KisorolasDatum,
Aktiv = item.Value.Aktiv,
SzulDatum = item.Value.SzuletesiDatum,
Neme = item.Value.Neme
});
}
return Result;
}
}
}

View file

@ -0,0 +1,97 @@
using System;
using System.Collections.Generic;
using System.Linq;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public static class BesorolasDateRangeUtil
{
public static BesorolasOverlapResult CalculateMaxOverlap(DateTime besorolasKezdete, DateTime besorolasVege, IEnumerable<BesorolasDateRange> besorolasok)
{
var maxOverlapCount = 0;
DateTime? maxOverlapBeginDate = null;
int? maxOverlapOsztalyId = null;
var dateList = CreateDateList(besorolasKezdete, besorolasVege);
foreach (var date in dateList)
{
var overlappedRanges = GetOverlappedRanges(date, besorolasok);
var overlapCount = overlappedRanges.Count();
if (overlapCount > maxOverlapCount)
{
maxOverlapCount = overlapCount;
maxOverlapBeginDate = date;
var overlappedBesorolas = overlappedRanges.FirstOrDefault(x => x.OsztalyCsoportId.HasValue);
if (overlappedBesorolas != null)
{
maxOverlapOsztalyId = overlappedBesorolas.OsztalyCsoportId.Value;
}
}
}
return new BesorolasOverlapResult(maxOverlapCount, maxOverlapBeginDate, maxOverlapOsztalyId);
}
public static BesorolasOverlapResult CalculateMinOverlap(DateTime besorolasKezdete, DateTime besorolasVege, IEnumerable<BesorolasDateRange> besorolasok)
{
var minOverlapCount = int.MaxValue;
DateTime? minOverlapBeginDate = null;
var dateList = CreateDateList(besorolasKezdete, besorolasVege);
foreach (var date in dateList)
{
var overlappedRanges = GetOverlappedRanges(date, besorolasok);
var overlapCount = overlappedRanges.Count();
if (overlapCount < minOverlapCount)
{
minOverlapCount = overlapCount;
minOverlapBeginDate = date;
}
}
return new BesorolasOverlapResult(minOverlapCount, minOverlapBeginDate);
}
private static IEnumerable<DateTime> CreateDateList(DateTime begin, DateTime end)
{
return Enumerable.Range(0, end.Subtract(begin).Days).Select(d => begin.AddDays(d));
}
private static IEnumerable<BesorolasDateRange> GetOverlappedRanges(DateTime examinedDate, IEnumerable<BesorolasDateRange> ranges)
{
// NOTE: Ha egyszer a besorolás jobbról is zárt lesz, akkor az End-nél egyenlőséget is kell vizsgálni.
return ranges.Where(r => r.Begin <= examinedDate && r.End > examinedDate);
}
}
public class BesorolasDateRange
{
public DateTime Begin { get; set; }
public DateTime End { get; set; }
public int? OsztalyCsoportId { get; set; }
}
public class BesorolasOverlapResult
{
public int OverlapCount { get; private set; }
public DateTime? OverlapBeginDate { get; private set; }
public int? MaxOverlapOsztalyId { get; private set; }
public BesorolasOverlapResult(int overlapCount, DateTime? overlapBeginDate)
{
OverlapCount = overlapCount;
OverlapBeginDate = overlapBeginDate;
}
public BesorolasOverlapResult(int overlapCount, DateTime? overlapBeginDate, int? maxOverlapOsztalyId)
{
OverlapCount = overlapCount;
OverlapBeginDate = overlapBeginDate;
MaxOverlapOsztalyId = maxOverlapOsztalyId;
}
}
}

View file

@ -0,0 +1,14 @@
using System;
using Kreta.Enums.ManualEnums;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class CsoportBesorolasModositasValidacioItemCo : TanuloCsoportSorolasValidacioItemCo
{
public CsoportBesorolasModositasValidacioHibaEnum Oka { get; set; }
public DateTime? Datum { get; set; }
public int? Darab { get; set; }
}
}

View file

@ -0,0 +1,20 @@
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class CsoportListItem
{
public int Id { get; set; }
public string Nev { get; set; }
public int? OsztalybontasId { get; set; }
public string OsztalyNev { get; set; }
public OsztalybaSorolasDDLItem ConvertToDDLItem()
{
return new OsztalybaSorolasDDLItem()
{
Text = Nev,
Value = Id.ToString(),
FilterId = OsztalybontasId,
Group = ""
};
}
}
}

View file

@ -0,0 +1,30 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class CsoportTanuloiList : Dictionary<int, TanuloListItem>
{
public int Id { get; set; }
public int? OsztalybontasId { get; set; }
public List<OsztalybaSorolasDDLItem> ConvertToDDLItemList()
{
List<OsztalybaSorolasDDLItem> Result = new List<OsztalybaSorolasDDLItem>();
foreach (var item in this)
{
Result.Add(new OsztalybaSorolasDDLItem()
{
Value = item.Key.ToString(),
Text = item.Value.Nev,
NevElotagNelkul = item.Value.NevElotagNelkul,
FilterId = OsztalybontasId,
BesorolasDatum = item.Value.BesorolasDatum,
KisorolasDatum = item.Value.KisorolasDatum,
Aktiv = item.Value.Aktiv,
SzulDatum = item.Value.SzuletesiDatum
});
}
return Result;
}
}
}

View file

@ -0,0 +1,25 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class KiiratkoztatottTanulokList : Dictionary<int, TanuloListItem>
{
public List<OsztalybaSorolasDDLItem> ConvertToDDLItemList()
{
List<OsztalybaSorolasDDLItem> Result = new List<OsztalybaSorolasDDLItem>();
foreach (var item in this)
{
Result.Add(new OsztalybaSorolasDDLItem()
{
Value = item.Key.ToString(),
Text = item.Value.Nev,
NevElotagNelkul = item.Value.NevElotagNelkul,
KisorolasDatum = item.Value.KisorolasDatum,
Aktiv = item.Value.Aktiv,
SzulDatum = item.Value.SzuletesiDatum
});
}
return Result;
}
}
}

View file

@ -0,0 +1,26 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class NebulokList : Dictionary<int, TanuloListItem>
{
public List<OsztalybaSorolasDDLItem> ConvertToDDLItemList()
{
var result = new List<OsztalybaSorolasDDLItem>();
foreach (var item in this)
{
result.Add(new OsztalybaSorolasDDLItem()
{
Value = item.Key.ToString(),
Text = item.Value.Nev,
BesorolasDatum = item.Value.BesorolasDatum,
KisorolasDatum = item.Value.KisorolasDatum,
Aktiv = item.Value.Aktiv,
SzulDatum = item.Value.SzuletesiDatum
});
}
return result;
}
}
}

View file

@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class OsztalyCsoportList : Dictionary<int, OsztalyCsoportListItem>
{
}
}

View file

@ -0,0 +1,9 @@
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class OsztalyCsoportListItem
{
public int Id { get; set; }
public string Nev { get; set; }
}
}

View file

@ -0,0 +1,39 @@
using System;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class OsztalyListItem
{
public int Id { get; set; }
public string Nev { get; set; }
public OsztalybaSorolasDDLItem ConvertToDDLItem()
{
return new OsztalybaSorolasDDLItem()
{
Text = Nev,
Value = Id.ToString(),
FilterId = null,
Group = ""
};
}
}
public class OsztalybaSorolasDDLItem
{
public int? FilterId { get; set; }
public string Value { get; set; }
public string Text { get; set; }
public string Group { get; set; }
public DateTime? BesorolasDatum { get; set; }
public DateTime? KisorolasDatum { get; set; }
public bool Aktiv { get; set; }
public DateTime SzulDatum { get; set; }
public string Neme { get; set; }
public string Osztalya { get; set; }
public string Vegzaradek { get; set; }
public string NevElotagNelkul { get; set; }
public int JogviszonyCount { get; set; }
public int JogviszonyId { get; set; }
}
}

View file

@ -0,0 +1,31 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class OsztalyTanuloiList : Dictionary<int, TanuloListItem>
{
public int Id { get; set; }
public List<OsztalybaSorolasDDLItem> ConvertToDDLItemList()
{
List<OsztalybaSorolasDDLItem> Result = new List<OsztalybaSorolasDDLItem>();
foreach (var item in this)
{
Result.Add(new OsztalybaSorolasDDLItem()
{
Value = item.Key.ToString(),
Text = item.Value.Nev,
NevElotagNelkul = item.Value.NevElotagNelkul,
BesorolasDatum = item.Value.BesorolasDatum,
KisorolasDatum = item.Value.KisorolasDatum,
Aktiv = item.Value.Aktiv,
SzulDatum = item.Value.SzuletesiDatum,
Neme = item.Value.Neme,
Vegzaradek = item.Value.Vegzaradek,
JogviszonyCount = item.Value.JogviszonyCount,
JogviszonyId = item.Value.JogviszonyId
});
}
return Result;
}
}
}

View file

@ -0,0 +1,18 @@
using System;
using Kreta.Enums.ManualEnums;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class OsztalybaSorolasModositasValidacioItemCo : TanuloCsoportSorolasValidacioItemCo
{
public OsztalybaSorolasModositasValidacioHibaEnum Oka { get; set; }
public int? OsztalyId { get; set; }
public int? OsztalybontottCsoportId { get; set; }
public int Darab { get; set; }
public DateTime? Datum { get; set; }
}
}

View file

@ -0,0 +1,12 @@
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class OsztalybaSororlasItem
{
public int Id { get; set; }
public int? Fromid { get; set; }
public bool IsVanMentettVegzaradek { get; set; }
public bool IsKellFeluletenMegadottZaradekRogzitese { get; set; }
public int? JogviszonyCount { get; set; }
public string JogviszonyIds { get; set; }
}
}

View file

@ -0,0 +1,527 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Interfaces;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Core.Exceptions;
using Kreta.DataAccessManual.Interfaces;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Resources;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
internal class SorolasValidate
{
internal static void ValidateModel(IOsztalyCsoportbaSorolas model, bool datum = true, bool fromDdl = true, bool toDdl = true)
{
List<string> errormessages = new List<string>();
if (toDdl && !model.ToDDL.HasValue)
{
errormessages.Add(BesorolasResource.CelPanelKitolteseKotelezo);
}
if (fromDdl && !model.FromDDL.HasValue)
{
errormessages.Add(BesorolasResource.ForrasPanelKitolteseKotelezo);
}
if (datum && !model.Datum.HasValue)
{
errormessages.Add(ErrorResource.DatumMegadasaKotelezo);
}
if (model.Zaradek == null)
{
model.Zaradek = new SorolasZaradek();
}
if (model.Zaradek.IsZaradekKotelezo
&& model.ToElements.Any(x => !x.IsVanMentettVegzaradek)
&& (model.Zaradek.ZaradekSzovegList == null || !model.Zaradek.ZaradekSzovegList.Any(x => x.NyelvId == (int)AnyanyelvEnum.magyar && !string.IsNullOrWhiteSpace(x.Szoveg))))
{
errormessages.Add(OsztalyCsoportResource.ZaradekSzovegeKotelezo);
}
if (model.ToElements.Any(x => x.JogviszonyCount > 0 && (string.IsNullOrWhiteSpace(x.JogviszonyIds) || x.JogviszonyIds == "0")))
{
errormessages.Add(OsztalyCsoportResource.Legalabb1JogviszonyValasztasaKotelezo);
}
if (!model.Zaradek.KeltezesDatuma.HasValue && model.Zaradek.IsZaradekKotelezo)
{
errormessages.Add(OsztalyCsoportResource.KeltezesDatumaKotelezo);
}
if (string.IsNullOrWhiteSpace(model.Zaradek.KeltezesHelye) && model.Zaradek.IsZaradekKotelezo)
{
errormessages.Add(OsztalyCsoportResource.KeltezesHelyeKotelezo);
}
if (errormessages.Count > 0)
{
throw new BlException(string.Join(Constants.General.Sortores, errormessages));
}
}
internal static void SzervezetValidateModel(IConnectionType connectionType, int tanevId, IOsztalyCsoportbaSorolas model)
{
var errormessages = new List<string>();
var osztalyCsoportHelper = new OsztalyCsoportHelper(connectionType);
var tanulokSzakmajegyzekek = osztalyCsoportHelper.GetTanulokSzakmajegyzeke(tanevId, model.ToElements.Select(x => x.Id).ToList(), model.Datum ?? DateTime.Now);
var tanuloSzakmaNelkulList = new List<string>();
foreach (var szakmajegyzek in tanulokSzakmajegyzekek)
{
if (szakmajegyzek.SzakmaTipusId == null || szakmajegyzek.SzakmaTipusId == (int)SzakmaTipusEnum.na)
{
tanuloSzakmaNelkulList.Add(szakmajegyzek.NevElotagNelkul);
}
}
if(tanuloSzakmaNelkulList.Any())
{
errormessages.Add($"{string.Join(", ", tanuloSzakmaNelkulList.ToArray())} {OsztalyCsoportResource.TanuloSzakmaAdatNincsBeallitvaDualisCsoport}");
}
var csoportSzakmajegyzekek = osztalyCsoportHelper.GetCsoportTanuloinakSzakmajegyzeke(model.ToDDL.Value, model.Datum ?? DateTime.Now);
var groupoltTanulokSzakmajegyzekek = tanulokSzakmajegyzekek.GroupBy(t => new
{
SzakmaTipusId = t.SzakmaTipusId,
SzakmairanyTipusId = t.SzakmairanyTipusId
}).ToList();
if (groupoltTanulokSzakmajegyzekek.Count > 1 && csoportSzakmajegyzekek.Count == 0)
{
errormessages.Add(OsztalyCsoportResource.TanulokNemEgyezoSzakmaSzakmairany);
}
if (csoportSzakmajegyzekek.Count == 1)
{
var tanulokNemEgyezoSzakmaSzakmairany = tanulokSzakmajegyzekek.Where(x => !x.SzakmaTipusId.HasValue
|| !csoportSzakmajegyzekek.First().SzakmaTipusId.HasValue || x.SzakmaTipusId != csoportSzakmajegyzekek.First().SzakmaTipusId
|| !(x.SzakmairanyTipusId == csoportSzakmajegyzekek.First().SzakmairanyTipusId)).ToList();
if (tanulokNemEgyezoSzakmaSzakmairany.Count > 0)
{
var csoportSzakmajegyzeke = csoportSzakmajegyzekek[0].SzakmaTipusId.GetDisplayName<SzakmaTipusEnum>(tanevId) +
(!csoportSzakmajegyzekek[0].SzakmairanyTipusId.HasValue ? "" : "/" + csoportSzakmajegyzekek[0].SzakmairanyTipusId.GetDisplayName<SzakmaTipusEnum>(tanevId));
errormessages.Add(string.Format(OsztalyCsoportResource.TanulokSzakmaSzakmairanyNemEgyezikACsoportSzakmaSzakmairanyal, string.Join(", ", tanulokNemEgyezoSzakmaSzakmairany.Select(x => x.NevElotagNelkul).ToList()), csoportSzakmajegyzeke));
}
}
if (errormessages.Count > 0)
{
throw new BlException(string.Join(Constants.General.Sortores, errormessages));
}
}
internal static void IsDatumInTanev(IConnectionType connectionType, DateTime date)
{
var tanevHelper = new TanevHelper(connectionType);
var data = tanevHelper.GetTanevInfo();
if (date < data.KezdoNap || date > data.UtolsoNap)
{
throw new BlException(string.Format(OsztalyCsoportResource.SorolasDatumTanevbeKellEssen, data.KezdoNap.ToString("yyyy.MM.dd."), data.UtolsoNap.ToString("yyyy.MM.dd.")));
}
}
private readonly int _tanevId;
private readonly IDalHandler _dalHandler;
private readonly DateTime _actualDate;
private readonly DateTime _tanevUtolsoNap;
private readonly List<int> _tanuloIds;
private readonly OktNevelesiKategoriaEnum? _kategoriaTipus;
private List<TanuloOsztalya> _tanulokOsztalyai;
private List<TanuloOsztalya> _tanulokElozoTanevOsztalyai;
private TanulokList _tanuloAdatok;
private OsztalyCsoportList _osztalyCsoportAdatok;
private List<TanuloOsztalyCsoport> _tanuloOsztalyCSoport;
private readonly int _jogviszonyLimit;
private IEnumerable<TanuloOsztalya> TanulokOsztalyai
{
get
{
if (_tanulokOsztalyai != null)
{
return _tanulokOsztalyai;
}
_tanulokOsztalyai = GetTanulokOsztalyai();
return _tanulokOsztalyai;
}
}
private IEnumerable<TanuloOsztalya> TanulokElozoTanevOsztalyai(int aktivTanevId)
{
if (_tanulokElozoTanevOsztalyai != null)
{
return _tanulokElozoTanevOsztalyai;
}
_tanulokElozoTanevOsztalyai = GetTanulokElozoTanevOsztalyai(aktivTanevId);
return _tanulokElozoTanevOsztalyai;
}
private IEnumerable<TanuloOsztalya> TanulokOsztalyaiDate
{
get
{
return TanulokOsztalyai.Where(i => i.Belepes <= _actualDate.Date && (!i.Kilepes.HasValue || i.Kilepes.Value > _actualDate.Date)).ToList();
}
}
private IEnumerable<TanuloOsztalya> TanulokOsztalyaiFuture
{
get
{
return TanulokOsztalyai.Where(i => i.Belepes > _actualDate.Date).ToList();
}
}
private IEnumerable<TanuloOsztalyCsoport> TanuloOsztalyCSoport
{
get
{
if (_tanuloOsztalyCSoport != null)
{
return _tanuloOsztalyCSoport;
}
_tanuloOsztalyCSoport = TanulokOsztalyCsoportjai();
return _tanuloOsztalyCSoport;
}
}
private IEnumerable<TanuloOsztalyCsoport> TanuloOsztalyCSoportDate
{
get
{
return TanuloOsztalyCSoport.Where(i => i.Belepes <= _actualDate.Date && (!i.Kilepes.HasValue || i.Kilepes.Value > _actualDate.Date)).ToList();
}
}
private IEnumerable<TanuloOsztalyCsoport> TanuloOsztalyCSoportFuture
{
get
{
return TanuloOsztalyCSoport.Where(i => i.Belepes > _actualDate.Date).ToList();
}
}
internal TanulokList TanuloAdatok
{
get
{
if (_tanuloAdatok != null)
{
return _tanuloAdatok;
}
_tanuloAdatok = GetTanulokAdatai();
return _tanuloAdatok;
}
}
internal OsztalyCsoportList OsztalyCsoportAdatok
{
get
{
if (_osztalyCsoportAdatok != null)
{
return _osztalyCsoportAdatok;
}
_osztalyCsoportAdatok = GetOsztalyCsoportAdatok();
return _osztalyCsoportAdatok;
}
}
internal TanuloOsztalyCsoport GetOsztalyCsoportTanuloCsoportAdatok(int osztalyCsoportId, int tanuloId)
{
var tcss = TanuloOsztalyCSoport.Where(x => (x.TanuloId == tanuloId) && (x.OsztalyCsoportId == osztalyCsoportId)).ToList();
if (tcss.Count > 0)
{
var first = tcss.OrderByDescending(x => x.Belepes).First();
if (!first.Kilepes.HasValue)
{
first.Kilepes = GetTanevUtolsoNap();
}
return first;
}
return null;
}
internal SorolasValidate(DateTime date, List<int> tanuloIds, int tanevId, OktNevelesiKategoriaEnum? kategoriaTipus, IDalHandler dalHandler)
{
_actualDate = date;
_tanuloIds = tanuloIds.Distinct().ToList();
_tanevId = tanevId;
_dalHandler = dalHandler;
_kategoriaTipus = kategoriaTipus;
_jogviszonyLimit = dalHandler.TanuloCsoport().GetJogviszonyLimit(tanevId, kategoriaTipus ?? OktNevelesiKategoriaEnum.NevelesOktatas);
_tanevUtolsoNap = GetTanevUtolsoNap();
}
internal bool NemTagjaAzOsztalynakABeallitottDatumIdejen(int tanuloId)
{
return !TanulokOsztalyaiDate.Any(t => t.TanuloId == tanuloId);
}
internal bool TanuloNemTagjaOCsADatumAlatt(int tanuloId, int ocsId)
{
return !TanuloOsztalyCSoportDate.Any(t => t.TanuloId == tanuloId && t.OsztalyCsoportId == ocsId);
}
internal bool JogviszonyLimitTullepes(int tanuloId)
{
var aktualisOsztalyok = TanulokOsztalyaiDate.Count(t => t.TanuloId == tanuloId);
var jovobeliOsztalyok = TanulokOsztalyaiFuture.Count(t => t.TanuloId == tanuloId);
return (aktualisOsztalyok + jovobeliOsztalyok) >= _jogviszonyLimit;
}
internal bool JogviszonyLimitTullepes(int tanuloId, out DateTime? limitBesorolasDatum, out int? limitBesorolasOsztalyId)
{
var besorolasok = CreateOsztalyBesorolasDateRangeList(tanuloId, withCurrentOne: true);
var overlapResult = BesorolasDateRangeUtil.CalculateMaxOverlap(_actualDate, _tanevUtolsoNap, besorolasok);
limitBesorolasDatum = overlapResult.OverlapBeginDate;
limitBesorolasOsztalyId = overlapResult.MaxOverlapOsztalyId;
return overlapResult.OverlapCount > _jogviszonyLimit;
}
internal bool BesorolasJavitasValidate(int tanuloId, DateTime startDate, out DateTime? limitBesorolasDatum, out int? limitBesorolasOsztalyId)
{
var besorolasok = CreateOsztalyBesorolasDateRangeList(tanuloId, withCurrentOne: false);
var overlapResult = BesorolasDateRangeUtil.CalculateMaxOverlap(startDate, _tanevUtolsoNap, besorolasok);
limitBesorolasDatum = overlapResult.OverlapBeginDate;
limitBesorolasOsztalyId = overlapResult.MaxOverlapOsztalyId;
return overlapResult.OverlapCount > _jogviszonyLimit;
}
internal bool TanuloMarOsztalyCsoportTagja(int tanuloId, int ocsId)
{
return TanuloOsztalyCSoportDate.Any(a => a.TanuloId == tanuloId && a.OsztalyCsoportId == ocsId);
}
internal bool TanuloOsztalyCsoportTagjaLesz(int tanuloId, int ocsId)
{
return TanuloOsztalyCSoportFuture.Any(a => a.TanuloId == tanuloId && a.OsztalyCsoportId == ocsId);
}
internal bool MarKiLettAzOsztalybolSorolva(int aktivTanevId, int tanuloId, int ocsId, DateTime kilepesDatuma)
{
return TanulokElozoTanevOsztalyai(aktivTanevId).Any(a => a.TanuloId == tanuloId && a.OsztalyId == ocsId && a.Kilepes != null && a.Kilepes > kilepesDatuma);
}
internal int GetTanuloCsoportId(int csoportId, int tanuloId)
{
var tanuloCSoport = TanuloOsztalyCSoportDate.SingleOrDefault(a => a.TanuloId == tanuloId && a.OsztalyCsoportId == csoportId);
if (tanuloCSoport != null)
{
return tanuloCSoport.Id;
}
return 0;
}
internal ValidMethode TanuloMarLetezikKovTanevben(int tanuloId, int kovTanevId)
{
var tanulo = _dalHandler.Tanulo().Get(tanuloId);
var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : _dalHandler.TanuloCsoport().CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, kovTanevId);
if (newTanuloId.IsEntityId())
{
return new ValidMethode
{
IsValid = false,
Message = string.Format(BesorolasResource.TanuloMarLetezikKovetkezoTanevbenOktatasiAzonosito, tanulo.OktatasiAzonosito),
};
}
newTanuloId = _dalHandler.TanuloCsoport().Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, kovTanevId, tanulo.Elotag);
if (newTanuloId.IsEntityId())
{
return new ValidMethode
{
IsValid = false,
Message = string.Format(BesorolasResource.TanuloMarLetezikKovetkezoTanevben4TAdatok, tanulo.NyomtatasiNev),
};
}
return new ValidMethode
{
IsValid = true,
};
}
internal bool TanuloNemTagjaEgyetlenOsztalynakSem(int tanuloId, out DateTime? osztalyNelkulBeginDate)
{
var besorolasok = CreateOsztalyBesorolasDateRangeList(tanuloId, withCurrentOne: false);
var overlapResult = BesorolasDateRangeUtil.CalculateMinOverlap(_actualDate, _tanevUtolsoNap, besorolasok);
osztalyNelkulBeginDate = overlapResult.OverlapBeginDate;
return overlapResult.OverlapCount == 0;
}
internal bool TanuloMarTagjaCsoportnak(int tanuloId, int csoportId)
{
var tanuloCsoportjai = TanuloOsztalyCSoport.Where(tcs => tcs.TanuloId == tanuloId && tcs.OsztalyCsoportId == csoportId
&& ((tcs.Belepes <= _actualDate && (!tcs.Kilepes.HasValue || tcs.Kilepes.Value > _actualDate)) || tcs.Belepes > _actualDate));
return tanuloCsoportjai.Any();
}
internal bool TanuloNemTagjaAzOsztalybontottOsztalynak(int tanuloId, int osztalybontasId, out DateTime? nemTagjaOsztalynakBeginDate)
{
var besorolasok = CreateOsztalyBesorolasDateRangeList(tanuloId, withCurrentOne: false, examinedOsztalyId: osztalybontasId);
var overlapResult = BesorolasDateRangeUtil.CalculateMinOverlap(_actualDate, _tanevUtolsoNap, besorolasok);
nemTagjaOsztalynakBeginDate = overlapResult.OverlapBeginDate;
return overlapResult.OverlapCount == 0;
}
internal bool OsztalyokSzamaLimitTullepes(int tanuloId, OktNevelesiKategoriaEnum feladatKategoria)
{
var limit = _dalHandler.TanuloCsoport().GetJogviszonyLimit(_tanevId, feladatKategoria);
var tanulo = _dalHandler.Tanulo().Get(tanuloId);
var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : _dalHandler.TanuloCsoport().CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, _tanevId);
if (newTanuloId <= 0)
{
newTanuloId = _dalHandler.TanuloCsoport().Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, _tanevId, tanulo.Elotag);
}
var osztalyBesorolasainakSzama = _dalHandler.TanuloCsoport().GetTanuloOsztalybaSorolasainakSzama(newTanuloId, _tanevId, feladatKategoria);
var result = osztalyBesorolasainakSzama >= limit;
return result;
}
internal bool TanuloMarTagjaMentorcsoportnak(int tanuloId)
{
var tanulo = _dalHandler.Tanulo().Get(tanuloId);
return tanulo.OsztalyCsoport.Any(x =>
{
if (((x.BelepesDatum <= _actualDate && (!x.KilepesDatum.HasValue || x.KilepesDatum.Value > _actualDate)) || x.BelepesDatum > _actualDate)
&& _dalHandler.OsztalyCsoport().GetIsCsoport(x.OsztalyCsoportId))
{
return _dalHandler.Csoport().Get(x.OsztalyCsoportId).Tipusa == (int)CsoportTipusEnum.apaczai_mentorcsoport;
}
return false;
});
}
private TanulokList GetTanulokAdatai()
{
DataSet ds = _dalHandler.TanuloCsoport().GetTanulokAdatai(_tanuloIds);
var result = new TanulokList();
foreach (DataRow row in ds.Tables[0].Rows)
{
result.Add(row.Field<int>("ID"), new TanuloListItem()
{
Nev = row.Field<string>("Nev"),
SzuletesiDatum = row.Field<DateTime>("SzulDatum")
});
}
return result;
}
private OsztalyCsoportList GetOsztalyCsoportAdatok()
{
var result = new OsztalyCsoportList();
var ds = _dalHandler.OsztalyCsoport().GetOsztalyCsoportDataSet(_tanevId, (int?)_kategoriaTipus);
foreach (DataRow row in ds.Tables[0].AsEnumerable())
{
result.Add(row.Field<int>("ID"), new OsztalyCsoportListItem
{
Id = row.Field<int>("Id"),
Nev = row.Field<string>("Nev")
});
}
return result;
}
private List<TanuloOsztalya> GetTanulokOsztalyai()
{
var ds = _dalHandler.TanuloCsoport().FilterTanuloIsInClass(_tanevId, _tanuloIds, _kategoriaTipus);
return (from row in ds.Tables[0].AsEnumerable()
select new TanuloOsztalya
{
TanuloId = row.Field<int>("ID"),
OsztalyId = row.Field<int>("OsztalyID"),
Kilepes = row.Field<DateTime?>("KilepesDatum"),
Belepes = row.Field<DateTime>("BelepesDatum")
}).ToList();
}
private List<TanuloOsztalya> GetTanulokElozoTanevOsztalyai(int aktTanevId)
{
var ds = _dalHandler.TanuloCsoport().FilterTanuloIsInClass(aktTanevId, _tanuloIds, _kategoriaTipus);
return (from row in ds.Tables[0].AsEnumerable()
select new TanuloOsztalya
{
TanuloId = row.Field<int>("ID"),
OsztalyId = row.Field<int>("OsztalyID"),
Kilepes = row.Field<DateTime?>("KilepesDatum"),
Belepes = row.Field<DateTime>("BelepesDatum")
}).ToList();
}
private List<TanuloOsztalyCsoport> TanulokOsztalyCsoportjai()
{
var ds = _dalHandler.TanuloCsoport().GetTanulokOsztalyCSoport(_tanevId, _tanuloIds, _kategoriaTipus);
return (from row in ds.Tables[0].AsEnumerable()
select new TanuloOsztalyCsoport
{
TanuloId = row.Field<int>("TanuloId"),
OsztalyCsoportId = row.Field<int>("OsztalyCsoportId"),
Id = row.Field<int>("ID"),
Kilepes = row.Field<DateTime?>("KilepesDatum"),
Belepes = row.Field<DateTime>("BelepesDatum")
}).ToList();
}
private DateTime GetTanevUtolsoNap()
{
var tanev = _dalHandler.TanevDal().Get(_tanevId);
if (!tanev.UtolsoNap.HasValue)
{
throw new ArgumentNullException();
}
return tanev.UtolsoNap.Value;
}
private IEnumerable<BesorolasDateRange> CreateOsztalyBesorolasDateRangeList(int tanuloId, bool withCurrentOne, int? examinedOsztalyId = null)
{
var result = new List<BesorolasDateRange>();
if (withCurrentOne)
{
result.Add(new BesorolasDateRange
{
Begin = _actualDate,
End = _tanevUtolsoNap,
});
}
var tanuloOsztalyai = TanulokOsztalyaiDate.Where(t => t.TanuloId == tanuloId).Concat(TanulokOsztalyaiFuture.Where(t => t.TanuloId == tanuloId));
if (examinedOsztalyId.HasValue)
{
tanuloOsztalyai = tanuloOsztalyai.Where(o => o.OsztalyId == examinedOsztalyId);
}
result.AddRange(tanuloOsztalyai.Select(o => new BesorolasDateRange
{
Begin = o.Belepes,
End = o.Kilepes ?? _tanevUtolsoNap,
OsztalyCsoportId = o.OsztalyId
}));
return result;
}
}
}

View file

@ -0,0 +1,171 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Kreta.BusinessLogic.Classes;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Helpers.SystemSettings;
using Kreta.Core;
using Kreta.Core.ConnectionType;
using Kreta.Enums;
using Kreta.Resources;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class SorolasZaradek
{
public int? Id { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.Bizonyitvany), ResourceType = typeof(OsztalyCsoportResource))]
public bool IsBizonyitvanybanMegjelenik { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.Bizonyitvanyban), ResourceType = typeof(OsztalyCsoportResource))]
public string IsBizonyitvanMegjelenesString => IsBizonyitvanybanMegjelenik ? CommonResource.Igen : CommonResource.Nem;
[Display(Name = nameof(OsztalyCsoportResource.Vegzaradek), ResourceType = typeof(OsztalyCsoportResource))]
public bool IsKiVagyAtsorolasiZaradek { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.Vegzaradek), ResourceType = typeof(OsztalyCsoportResource))]
public string IsVegzaradekString => IsKiVagyAtsorolasiZaradek ? CommonResource.Igen : CommonResource.Nem;
[Display(Name = nameof(OsztalyCsoportResource.Naplo), ResourceType = typeof(OsztalyCsoportResource))]
public bool IsOsztalynaplobanMegjelenik { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.Naploban), ResourceType = typeof(OsztalyCsoportResource))]
public string IsNaploMegjelenesString => IsOsztalynaplobanMegjelenik ? CommonResource.Igen : CommonResource.Nem;
[Display(Name = nameof(OsztalyCsoportResource.Torzslap), ResourceType = typeof(OsztalyCsoportResource))]
public bool IsTorzslaponMegjelenik { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.Torzslapon), ResourceType = typeof(OsztalyCsoportResource))]
public string IsTorzslapMegjelenesString => IsTorzslaponMegjelenik ? CommonResource.Igen : CommonResource.Nem;
[Display(Name = nameof(OsztalyCsoportResource.KeltezesDatuma), ResourceType = typeof(OsztalyCsoportResource))]
[KretaDateRange(ErrorMessageResourceName = nameof(OsztalyCsoportResource.KeltezesDatumaNemLehetKorabbiMint_1900), ErrorMessageResourceType = typeof(OsztalyCsoportResource))]
public DateTime? KeltezesDatuma { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.KeltezesDatuma), ResourceType = typeof(OsztalyCsoportResource))]
public string KeltezesDatumaShortDateString => KeltezesDatuma.ToShortDateString();
[Display(Name = nameof(OsztalyCsoportResource.KeltezesHelye), ResourceType = typeof(OsztalyCsoportResource))]
[StringLength(maximumLength: 255, ErrorMessageResourceName = nameof(OsztalyCsoportResource.KeltezesHelyeMax255Karakter), ErrorMessageResourceType = typeof(OsztalyCsoportResource))]
public string KeltezesHelye { get; set; }
public DateTime RogzitesDatuma { get; set; }
public DateTime UtolsoModositasDatuma { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.RogzitesDatum), ResourceType = typeof(OsztalyCsoportResource))]
public string RogzitesDatumaStr => RogzitesDatuma.ToString(Constants.ToStringPattern.HungarianDate);
[Display(Name = nameof(OsztalyCsoportResource.UtolsoModositasDatum), ResourceType = typeof(OsztalyCsoportResource))]
public string UtolsoModositasDatumaStr => UtolsoModositasDatuma.ToString(Constants.ToStringPattern.HungarianDate);
public int RogzitoId { get; set; }
public int UtolsoModositoId { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.UtolsoModositoNev), ResourceType = typeof(OsztalyCsoportResource))]
public string UtolsoModositoNev { get; set; }
[Display(Name = nameof(OsztalyCsoportResource.RogzitoNev), ResourceType = typeof(OsztalyCsoportResource))]
public string RogzitoNev { get; set; }
public int? TanuloCsoportId { get; set; }
public List<ZaradekNyelvItem> ZaradekSzovegList { get; set; }
public string ZaradekUrl { get; set; }
public string ZaradekPlaceholder { get; set; }
public bool IsOfoRogzithetEvkoziZaradekot { get; set; }
public bool IsOfoRogzithetKiVagyAtsorolasiZaradekot { get; set; }
public bool IsOsztalyfonok { get; set; }
public bool IsAdministrator { get; set; }
public bool IsZaradekKotelezo { get; set; }
private List<int> _nemzetiDokumentumNyelvek;
public bool IsTorolheto { get; set; }
public SorolasZaradek() { ZaradekSzovegList = new List<ZaradekNyelvItem>(); }
public SorolasZaradek(IConnectionType connectionType, bool pIsKiVagyAtsorolasiZaradek, string pZaradekUrl)
{
SetBaseData(connectionType, pIsKiVagyAtsorolasiZaradek, pZaradekUrl, null);
}
public SorolasZaradek(IConnectionType connectionType, bool pIsKiVagyAtsorolasiZaradek)
{
SetBaseData(connectionType, pIsKiVagyAtsorolasiZaradek, null, null);
}
public SorolasZaradek(IConnectionType connectionType, ZaradekCo zaradekCo)
{
SetBaseData(connectionType, zaradekCo.IsKiVagyAtsorolasiZaradek, null, null);
Id = zaradekCo.Id;
IsBizonyitvanybanMegjelenik = zaradekCo.IsBizonyitvanybanMegjelenik;
IsOsztalynaplobanMegjelenik = zaradekCo.IsOsztalynaplobanMegjelenik;
IsTorzslaponMegjelenik = zaradekCo.IsTorzslaponMegjelenik;
KeltezesDatuma = zaradekCo.KeltezesDatuma.Value;
KeltezesHelye = zaradekCo.KeltezesHelye;
TanuloCsoportId = zaradekCo.TanuloCsoportId;
UtolsoModositasDatuma = zaradekCo.UtolsoModositasDatuma;
UtolsoModositoId = zaradekCo.UtolsoModositoId;
UtolsoModositoNev = zaradekCo.UtolsoModositoNev;
RogzitoNev = zaradekCo.RogzitoNev;
RogzitesDatuma = zaradekCo.RogzitesDatuma;
_nemzetiDokumentumNyelvek.Add((int)AnyanyelvEnum.magyar);
IsTorolheto = !zaradekCo.IsKiVagyAtsorolasiZaradek || new ZaradekHelper(connectionType).IsKiVagyAtsorolasiZaradekTorolheto(zaradekCo.TanuloCsoportId.Value, zaradekCo.Id.Value);
foreach (var nemzetiDokumentumNyelv in _nemzetiDokumentumNyelvek)
{
ZaradekSzovegList.Single(x => x.NyelvId == nemzetiDokumentumNyelv).Szoveg = zaradekCo.ZaradekSzovegList.SingleOrDefault(x => x.NyelvId == nemzetiDokumentumNyelv)?.Szoveg ?? string.Empty;
}
}
public ZaradekCo ConvertToCo()
{
var co = new ZaradekCo
{
Id = Id,
TanuloCsoportId = TanuloCsoportId,
IsBizonyitvanybanMegjelenik = IsBizonyitvanybanMegjelenik,
IsKiVagyAtsorolasiZaradek = IsKiVagyAtsorolasiZaradek,
IsOsztalynaplobanMegjelenik = IsOsztalynaplobanMegjelenik,
IsTorzslaponMegjelenik = IsTorzslaponMegjelenik,
KeltezesDatuma = KeltezesDatuma,
KeltezesHelye = KeltezesHelye,
RogzitoId = RogzitoId,
UtolsoModositoId = UtolsoModositoId,
ZaradekSzovegList = this.ZaradekSzovegList.Where(x => !string.IsNullOrWhiteSpace(x.Szoveg)).Select(x => new ZaradekNyelvCo { NyelvId = x.NyelvId, Szoveg = x.Szoveg.Trim() }).ToList()
};
return co;
}
private void SetBaseData(IConnectionType connectionType, bool isKiVagyAtsorolasiZaradek, string zaradekUrl, string zaradekPlaceholder)
{
var systemSettingsHelper = new SystemSettingsHelper(connectionType);
_nemzetiDokumentumNyelvek = systemSettingsHelper.GetSystemSettingValue<List<int>>(RendszerBeallitasTipusEnum.Nemzeti_Nyelvi_Dokumentum_Nyelvek);
ZaradekSzovegList = new List<ZaradekNyelvItem> { new ZaradekNyelvItem { NyelvId = (int)AnyanyelvEnum.magyar, Szoveg = string.Empty } };
ZaradekSzovegList.AddRange(_nemzetiDokumentumNyelvek.ConvertAll(zaradekNyelv => new ZaradekNyelvItem { NyelvId = zaradekNyelv, Szoveg = string.Empty }));
IsOfoRogzithetEvkoziZaradekot = systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Osztalyfonok_megtekintheti_modosithatja_osztalyaba_jaro_tanulok_zaradekat);
IsOfoRogzithetKiVagyAtsorolasiZaradekot = systemSettingsHelper.GetSystemSettingValue<bool>(RendszerBeallitasTipusEnum.Osztalyfonok_kiegeszitheti_osztalyaba_jaro_tanulok_ki_vagy_atsorolsasi_zaradekat);
ZaradekUrl = zaradekUrl;
ZaradekPlaceholder = zaradekPlaceholder ?? OsztalyCsoportResource.ValasszaKiAZaradekot;
IsKiVagyAtsorolasiZaradek = isKiVagyAtsorolasiZaradek;
IsZaradekKotelezo = isKiVagyAtsorolasiZaradek;
KeltezesDatuma = DateTime.Now.Date;
KeltezesHelye = new IntezmenyHelper(connectionType).GetIntezmenyiAdatok().Varos;
}
}
}

View file

@ -0,0 +1,11 @@
using System;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class TanuloCsoportSorolasValidacioItemCo
{
public DateTime? TanuloCsoportBelepesDatum { get; set; }
public DateTime? TanuloCsoportKilepesDatum { get; set; }
}
}

View file

@ -0,0 +1,18 @@
using System;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class TanuloListItem
{
public string Nev { get; set; }
public string NevElotagNelkul { get; set; }
public DateTime SzuletesiDatum { get; set; }
public DateTime? BesorolasDatum { get; set; }
public DateTime? KisorolasDatum { get; set; }
public bool Aktiv { get; set; }
public string Neme { get; set; }
public string Vegzaradek { get; set; }
public int JogviszonyCount { get; set; }
public int JogviszonyId { get; set; }
}
}

View file

@ -0,0 +1,28 @@
using System;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class TanuloOsztalya
{
public int TanuloId { get; set; }
public int OsztalyId { get; set; }
public DateTime? Kilepes { get; set; }
public DateTime Belepes { get; set; }
}
public class TanuloOsztalyCsoport
{
public int Id { get; set; }
public int TanuloId { get; set; }
public int OsztalyCsoportId { get; set; }
public DateTime? Kilepes { get; set; }
public DateTime Belepes { get; set; }
}
public class ValidMethode
{
public bool IsValid;
public string Message;
}
}

View file

@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class TanulokList : Dictionary<int, TanuloListItem>
{
}
}

View file

@ -0,0 +1,18 @@
using Kreta.DataAccess.Interfaces;
namespace Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas
{
public class ZaradekNyelvItem : IZaradekNyelv
{
public int NyelvId { get; set; }
public string Szoveg { get; set; }
public int ZaradekId { get; set; }
public IZaradek Zaradek { get; set; }
public int IntezmenyId { get; set; }
public IIntezmeny Intezmeny { get; set; }
public int TanevId { get; set; }
public ITanev Tanev { get; set; }
public int ID { get; set; }
public bool Torolt { get; set; }
}
}