using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.BusinessLogic.HelperClasses.OsztalyCsoportbaSorolas; using Kreta.BusinessLogic.Helpers.SystemSettings; using Kreta.BusinessLogic.Interfaces; using Kreta.BusinessLogic.Logic.TanuloErtekeles; using Kreta.BusinessLogic.Utils; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.Core.Exceptions; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework; using Kreta.Framework.Caching; using Kreta.Framework.Util; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class OsztalyCsoportbaSorolasHelper : LogicBase { private readonly bool kovTanev = false; private readonly bool isSzakkepzoIntezmeny = false; private readonly bool isSelectedTanev21_22OrLater = false; private readonly int aktivTanevId = 0; private readonly int? kovTanevId = null; public OsztalyCsoportbaSorolasHelper(IConnectionType connectionType, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater, int? aktivTanevId, int? kovTanevId, bool kovTanev = false) : base(connectionType) { this.kovTanev = kovTanev; this.isSzakkepzoIntezmeny = isSzakkepzoIntezmeny; this.isSelectedTanev21_22OrLater = isSelectedTanev21_22OrLater; this.aktivTanevId = aktivTanevId.Value; this.kovTanevId = kovTanevId; } public static void SaveZaradek(IConnectionType connectionType, SorolasZaradek zaradek, int tanuloCsoportId, int? tanevId = null) { if (zaradek.ZaradekSzovegList != null && zaradek.ZaradekSzovegList.Any(x => x.NyelvId == (int)AnyanyelvEnum.magyar && !string.IsNullOrWhiteSpace(x.Szoveg?.Trim()))) { new ZaradekHelper(connectionType).SaveZaradek( new ZaradekCo { TanuloCsoportId = tanuloCsoportId, KeltezesDatuma = zaradek.KeltezesDatuma, KeltezesHelye = zaradek.KeltezesHelye, RogzitesDatuma = zaradek.RogzitesDatuma != DateTime.MinValue ? zaradek.RogzitesDatuma : SDAConvert.ToDateTime(zaradek.RogzitesDatumaStr).Value, RogzitoId = zaradek.RogzitoId, UtolsoModositasDatuma = zaradek.UtolsoModositasDatuma != DateTime.MinValue ? zaradek.UtolsoModositasDatuma : SDAConvert.ToDateTime(zaradek.UtolsoModositasDatumaStr).Value, UtolsoModositoId = zaradek.UtolsoModositoId, IsBizonyitvanybanMegjelenik = zaradek.IsBizonyitvanybanMegjelenik, IsKiVagyAtsorolasiZaradek = zaradek.IsKiVagyAtsorolasiZaradek, IsOsztalynaplobanMegjelenik = zaradek.IsOsztalynaplobanMegjelenik, IsTorzslaponMegjelenik = zaradek.IsTorzslaponMegjelenik, ZaradekSzovegList = zaradek.ZaradekSzovegList.Where(x => !string.IsNullOrWhiteSpace(x.Szoveg)).Select(x => new ZaradekNyelvCo { NyelvId = x.NyelvId, Szoveg = x.Szoveg.Trim() }).ToList() }, zaradek.IsOsztalyfonok, zaradek.IsAdministrator, tanevId ); } } public List Osztalyok(OktNevelesiKategoriaEnum? kategoriaTipus = null, bool osztalybaNemSoroltTanulok = false) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().Osztalyok(TanevId, kategoriaTipus)); var osztalyList = new List(); if (osztalybaNemSoroltTanulok) { var osztalybaBeNemSoroltTanulok = BesorolasResource.OsztalybaBeNemSoroltTanulok; var aktivTanevNev = new TanevHelper(ConnectionType).GetAktivTanevNev(); if (!string.IsNullOrWhiteSpace(aktivTanevNev)) { osztalybaBeNemSoroltTanulok += $" ({aktivTanevNev}-es tanév)"; } osztalyList.Add(new OsztalyListItem() { Id = Constants.General.OsztalybaNemSoroltTanulokValue, Nev = osztalybaBeNemSoroltTanulok }.ConvertToDDLItem()); } foreach (DataRow row in ds.Tables[0].Rows) { osztalyList.Add(new OsztalyListItem() { Id = row.Field("ID"), Nev = row.Field("Nev") }.ConvertToDDLItem()); } return osztalyList.ToList(); } public List Csoportok(OktNevelesiKategoriaEnum? kategoriaTipus = null, bool dualisKepzesIsEnabled = false, bool csakDualis = false, int? szervezetId = null) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().GetCsoportok(TanevId, kategoriaTipus, dualisKepzesIsEnabled, csakDualis, szervezetId)); var csoportList = new List(); foreach (DataRow row in ds.Tables[0].Rows) { csoportList.Add(new CsoportListItem { Id = row.Field("ID"), Nev = row.Field("Nev"), OsztalybontasId = szervezetId.IsEntityId() ? null : row.Field("OsztalyId"), OsztalyNev = row.Field("OsztalyNev") }.ConvertToDDLItem()); } return csoportList.ToList(); } public List OsztalyTanuloi(int osztalyId, DateTime? datum = null, bool pIsJogviszonyKezeles = false) { DateTime? tanevKezdoNapja = null; var ds = Dal.CustomConnection.Run(ConnectionType, h => { tanevKezdoNapja = h.TanevDal().Get(TanevId).KezdoNap; return h.TanuloCsoport().OsztalyTanuloi(TanevId, new List { osztalyId }, this.kovTanev, datum, pIsJogviszonyKezeles); }); var tanuloList = new OsztalyTanuloiList() { Id = osztalyId }; datum = datum ?? DateTime.Now.Date; if (this.kovTanev && (datum < tanevKezdoNapja)) { datum = tanevKezdoNapja; } foreach (DataRow row in ds.Tables[0].Rows) { var vegzaradekDbText = row.Field("KiVagyAtsorolasiZaradek"); var besorolasDatum = row.Field("BelepesDatum"); var kisorolasDatum = row.Field("KilepesDatum"); if (!datum.HasValue || (besorolasDatum <= datum.Value && (!kisorolasDatum.HasValue || kisorolasDatum.Value > datum.Value))) { tanuloList.Add(row.Field("ID"), new TanuloListItem() { Nev = row.Field("Nev"), NevElotagNelkul = row.Field("NevElotagNelkul"), BesorolasDatum = besorolasDatum, KisorolasDatum = kisorolasDatum, Aktiv = row.Field("Aktiv_BOOL"), SzuletesiDatum = row.Field("SzulDatum"), Neme = row.Field("Neme_DNAME"), Vegzaradek = string.IsNullOrWhiteSpace(vegzaradekDbText) ? null : vegzaradekDbText, JogviszonyCount = pIsJogviszonyKezeles && row.Field("JogviszonyCount").HasValue ? row.Field("JogviszonyCount") : 0, JogviszonyId = pIsJogviszonyKezeles && row.Field("JogviszonyId").HasValue ? row.Field("JogviszonyId") : 0 }); } } return tanuloList.ConvertToDDLItemList().OrderBy(x => x.NevElotagNelkul).ToList(); } public List CsoportTanuloi(int csoportId, bool isKovTanev = false, DateTime? datum = null) { var tanuloList = new CsoportTanuloiList() { Id = csoportId }; var ds = Dal.CustomConnection.Run(ConnectionType, h => { var csoport = h.Csoport().Get(csoportId); var tanev = h.TanevDal().Get(csoport.TanevId); DateTime lekerdezesDatum = datum ?? DateTime.Today; if (tanev.ElsoTanitasiNap > DateTime.Today) { lekerdezesDatum = tanev.ElsoTanitasiNap.Value; } if (tanev.UtolsoNap < DateTime.Today) { lekerdezesDatum = tanev.UtolsoNap.Value; } tanuloList.OsztalybontasId = csoport.OsztalyBontasId > 0 ? (int?)csoport.OsztalyBontasId : null; return h.TanuloCsoport().CsoportTanuloi(TanevId, csoportId, lekerdezesDatum, isKovTanev); }); foreach (DataRow row in ds.Tables[0].Rows) { tanuloList.Add(row.Field("ID"), new TanuloListItem() { Nev = row.Field("Nev"), NevElotagNelkul = row.Field("NevElotagNelkul"), BesorolasDatum = row.Field("BelepesDatum"), KisorolasDatum = row.Field("KilepesDatum"), Aktiv = row.Field("Aktiv_BOOL"), SzuletesiDatum = row.Field("SzulDatum"), Neme = row.Field("Neme_DNAME") }); } return tanuloList.ConvertToDDLItemList().OrderBy(x => x.NevElotagNelkul).ToList(); } public List OsztalybaNemSoroltTanulok(DateTime kisorolasDatum, bool isLeptetes = false, bool pIsJogviszonyKezeles = false) { var ds = Dal.CustomConnection.Run(ConnectionType, h => { return h.TanuloCsoport().GetOsztalybaNemSoroltTanulok(kisorolasDatum, TanevId, isLeptetes, pIsJogviszonyKezeles); }); var result = ds.Tables[0].AsEnumerable().Select(r => new OsztalybaSorolasDDLItem { Value = r.Field("Id").ToString(), Text = r.Field("Nev"), NevElotagNelkul = r.Field("Nev"), Aktiv = true, SzulDatum = r.Field("SzulDatum"), Neme = r.Field("Neme_DNAME"), JogviszonyCount = pIsJogviszonyKezeles && r.Field("JogviszonyCount").HasValue ? r.Field("JogviszonyCount") : 0, JogviszonyId = pIsJogviszonyKezeles && r.Field("JogviszonyId").HasValue ? r.Field("JogviszonyId") : 0 }).OrderBy(x => x.Text).ToList(); return result; } public List OsztalyNelkuliTanulok(OktNevelesiKategoriaEnum feladatKategoria) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().OsztalyNelkuliTanulok(TanevId, feladatKategoria)); var tanulokList = new BeNemSoroltTanulokList(); foreach (DataRow row in ds.Tables[0].Rows) { tanulokList.Add(row.Field("ID"), new TanuloListItem() { Nev = row.Field("Nev"), NevElotagNelkul = row.Field("NevElotagNelkul"), Aktiv = true, SzuletesiDatum = row.Field("SzulDatum"), Neme = row.Field("Neme_DNAME") }); } return tanulokList.ConvertToDDLItemList().OrderBy(x => x.NevElotagNelkul).ToList(); } public List DualisTanulok(DateTime pLekerdezesDatum, int? pSzervezetId) { if (!pSzervezetId.HasValue) { return new List(); } var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().GetDualisTanulok(TanevId, pLekerdezesDatum, pSzervezetId)); var tanulokList = new BeNemSoroltTanulokList(); foreach (DataRow row in ds.Tables[0].Rows) { tanulokList.Add(row.Field("ID"), new TanuloListItem() { Nev = row.Field("Nev"), NevElotagNelkul = row.Field("NevElotagNelkul"), Aktiv = true, SzuletesiDatum = row.Field("SzulDatum"), Neme = row.Field("Neme_DNAME") }); } return tanulokList.ConvertToDDLItemList().OrderBy(x => x.NevElotagNelkul).ToList(); } public List AmiAktivTanulok(bool isKovTanev) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().OsszesTanulo(TanevId, isKovTanev)); var tanulokList = new AmiBesorolhatoTanulokList(); foreach (DataRow row in ds.Tables[0].Rows) { tanulokList.Add(row.Field("ID"), new TanuloListItem() { Nev = row.Field("Nev"), NevElotagNelkul = row.Field("NevElotagNelkul"), Aktiv = true, SzuletesiDatum = row.Field("SzulDatum"), Neme = row.Field("Neme_DNAME") }); } return tanulokList.ConvertToDDLItemList().OrderBy(x => x.NevElotagNelkul).ToList(); } public List KiiratkoztatottTanulokAktivTanev(OktNevelesiKategoriaEnum feladatKategoria) { return KiiratkoztatottTanulokValasztottTanev(feladatKategoria, TanevId); } public List KiiratkoztatottTanulokValasztottTanev(OktNevelesiKategoriaEnum feladatKategoria, int? tanevId = null) { if (!tanevId.IsEntityId()) { return new List(); } var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().KiiratkoztatottTanulok(feladatKategoria, tanevId.Value)); var tanulokList = new KiiratkoztatottTanulokList(); foreach (DataRow row in ds.Tables[0].Rows) { tanulokList.Add(row.Field("ID"), new TanuloListItem() { Nev = row.Field("Nev"), NevElotagNelkul = row.Field("NevElotagNelkul"), KisorolasDatum = row.Field("KilepesDatum"), Aktiv = true, SzuletesiDatum = row.Field("SzulDatum"), Neme = row.Field("Neme_DNAME") }); } return tanulokList.ConvertToDDLItemList().OrderBy(x => x.NevElotagNelkul).ToList(); } public List KiiratkoztatottTanulokKovTanev(OktNevelesiKategoriaEnum feladatKategoria) { return KiiratkoztatottTanulokValasztottTanev(feladatKategoria, kovTanevId); } public List FelvettNebulok() { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().GetFelvettNebulok()); var nebuloList = new NebulokList(); var rows = ds?.Tables[0].Rows; if (rows != null) { foreach (DataRow row in rows) { nebuloList.Add(row.Field("Id"), new TanuloListItem() { Nev = $"{row.Field("Csaladnev")} {row.Field("Utonev")} ({row.Field("SzuletesiDatum"):yyyy.MM.dd})", Aktiv = true, SzuletesiDatum = row.Field("SzuletesiDatum") }); } } return nebuloList.ConvertToDDLItemList().OrderBy(x => x.Text).ToList(); } public List FelvettEsMegNemLetezoKovTanevesNebulok(bool useNemFelvettStatusz) { var ds = Dal.CustomConnection.Run(ConnectionType, h => h.TanuloCsoport().GetFelvettEsMegNemLetezoKovTanevesNebulok(useNemFelvettStatusz)); var nebuloList = new NebulokList(); var rows = ds?.Tables[0].Rows; if (rows != null) { foreach (DataRow row in rows) { nebuloList.Add(row.Field("Id"), new TanuloListItem() { Nev = $"{row.Field("Csaladnev")} {row.Field("Utonev")} ({row.Field("SzuletesiDatum"):yyyy.MM.dd})", Aktiv = true, SzuletesiDatum = row.Field("SzuletesiDatum") }); } } return nebuloList.ConvertToDDLItemList().OrderBy(x => x.Text).ToList(); } public List GetZaradekok() { List enumList = ((int)GeneratedAdatszotarTipusEnum.SorolasOkaTipus).GetItemsByType(TanevId, true); var result = new List(); foreach (var item in enumList) { result.Add(new OsztalybaSorolasDDLItem() { Value = item.Id.ToString(), Text = item.Name }); } return result.ToList(); } public List GetZaradekokNyelv(int nyelvId) { IDictionary enumList; var adatszotar = new AdatszotarHelper(ConnectionType); enumList = adatszotar.GetAdatszotarLathatoElemekNyelv(GeneratedAdatszotarTipusEnum.SorolasOkaTipus, nyelvId); var result = new List(); foreach (var item in enumList) { result.Add(new OsztalybaSorolasDDLItem() { Value = item.Key, Text = item.Value }); } return result.ToList(); } public void NebuloMentes(IOsztalyCsoportbaSorolas model, bool isSzirIntezmeny) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, handler => { if (kovTanev) { model.Datum = new TanevHelper(new DalHandlerConnectionType(ConnectionType, handler)).GetTanevInfo().KezdoNap; } return new NebuloBesorolasLogic(this, handler).Alapkepzes(model, isSzirIntezmeny); }); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void TanulokLetrehozasaBAINebulokbol(IOsztalyCsoportbaSorolas model, bool isSzirIntezmeny) { Dal.CustomConnection.Run(ConnectionType, handler => { if (kovTanev) { model.Datum = new TanevHelper(new DalHandlerConnectionType(ConnectionType, handler)).GetTanevInfo().KezdoNap; } new NebuloBesorolasLogic(this, handler).TanulokLetrehozasaNebulokbol(model, generateGondviseloBelepes: true, isSzirIntezmeny); }); } public List ConvertDDLItemToNormal(List list) { List result = new List(); foreach (var item in list) { result.Add(new OsztalybaSororlasItem() { Id = int.Parse(item.Value) }); } return result; } public (bool isError, string message, string osztallyalNemLefedettCsoportNevek) DeleteBesorolasValidate(int tanuloId, int osztalyId, bool needNemOsztalyBontottCsoportValidacio, int? tanuloCsoportId = null) { var isError = false; var csoportNevList = string.Empty; var message = Dal.CustomConnection.Run(ConnectionType, handler => { var osztalyCsoportDal = handler.OsztalyCsoport(); var osztalyCsoportIDs = osztalyCsoportDal.GetKapcsolodoOsztalyBontasokkal(osztalyId); var tanuloDal = handler.Tanulo(); var tanulo = tanuloDal.Get(tanuloId); Enum.TryParse(osztalyCsoportDal.GetOsztalyCsoportFeladatKategoria(osztalyId).ToString(), out OktNevelesiKategoriaEnum kategoria); var osztalyCsoportList = osztalyCsoportDal.GetOsztalyCsoportok(TanevId, (int)kategoria, false, tanuloIds: new List { tanuloId }).Tables[0].AsEnumerable().Select (x => new { TanuloCsoportId = x.Field("Id"), IsCsoport = x.Field("IsCsoport").Equals("T"), OsztalyCsoportId = x.Field("OsztalyCsoportId"), OsztalyBontas = x.Field("OsztalyBontas"), OsztalyCsoportNev = x.Field("Nev"), BesorolasDatuma = x.Field("ErvKezd"), KisorolasDatuma = x.Field("ErvVeg") }).ToList(); var osztalyList = osztalyCsoportList.Where(osztaly => !osztaly.IsCsoport && (osztaly.OsztalyCsoportId != osztalyId || (osztaly.OsztalyCsoportId == osztalyId && osztaly.TanuloCsoportId != tanuloCsoportId))).OrderBy(x => x.BesorolasDatuma).ToList(); var nemOsztalybontottCsoportList = osztalyCsoportList.Where(x => x.IsCsoport && string.IsNullOrWhiteSpace(x.OsztalyBontas)).ToList(); var osztallyalNemLefedettCsoportNevList = new List(); if (nemOsztalybontottCsoportList.Any()) { if (osztalyList.Any()) { var osztalyTagjaDictionary = new Dictionary(); var osztalyFirst = osztalyList[0]; DateTime kezdet = osztalyFirst.BesorolasDatuma; DateTime? veg = osztalyFirst.KisorolasDatuma; if (osztalyList.Count > 1) { for (int i = 1; i < osztalyList.Count; i++) { if (veg == null) { osztalyTagjaDictionary.Add(kezdet, veg); break; } if (osztalyList[i].BesorolasDatuma >= kezdet && osztalyList[i].KisorolasDatuma > veg) { if (osztalyList[i].BesorolasDatuma <= veg) { veg = osztalyList[i].KisorolasDatuma; } else { if (!osztalyTagjaDictionary.ContainsKey(kezdet)) { osztalyTagjaDictionary.Add(kezdet, veg); kezdet = osztalyList[i].BesorolasDatuma; veg = osztalyList[i].KisorolasDatuma; } } } } } else { osztalyTagjaDictionary.Add(kezdet, veg); } foreach (var csoport in nemOsztalybontottCsoportList) { if (!osztalyTagjaDictionary.Any(x => x.Key <= csoport.BesorolasDatuma && (x.Value >= csoport.KisorolasDatuma || x.Value == null))) { osztallyalNemLefedettCsoportNevList.Add(csoport.OsztalyCsoportNev); } } } else { osztallyalNemLefedettCsoportNevList.AddRange(nemOsztalybontottCsoportList.Select(x => x.OsztalyCsoportNev)); } } if (osztallyalNemLefedettCsoportNevList.Any() && needNemOsztalyBontottCsoportValidacio) { isError = true; csoportNevList = string.Join(",", osztallyalNemLefedettCsoportNevList); var errorMessage = $"{(kategoria == OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas ? ErrorResource.ANovendekNemTorolhetoAzOsztalybolMertTagjaEgyVagyTobbNemOsztalybontottCsoportnak : ErrorResource.ATanuloNemTorolhetoAzOsztalybolMertTagjaEgyVagyTobbNemOsztalybontottCsoportnak)}"; return $"{errorMessage} {csoportNevList}"; } // Ha van kapcsolodó osztálybontásból nem törölt értékelése if (tanulo.TanuloErtekeles.Any(x => !x.Torolt && osztalyCsoportIDs.Contains(x.OsztalyCsoportId))) { return kategoria == OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas ? ErrorResource.ANovendeknekVanMentettErtekelese : ErrorResource.ATanulonakVanMentettErtekelese; } // Ha csak ez az oszztálya van a mai napon az adott kategóriában, de van más csoportból nem törölt értékelése if (!tanuloDal.VanMasOsztalya(tanuloId, osztalyId, kategoria) && tanulo.TanuloErtekeles.Any(x => !x.Torolt && !osztalyCsoportIDs.Contains(x.OsztalyCsoportId))) { return kategoria == OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas ? ErrorResource.ANovendeknekVanMentettErtekelese : ErrorResource.ATanulonakVanMentettErtekelese; } return string.Empty; }); return (isError, message, csoportNevList); } public bool CheckOsztalyBesorolasDelete(int tanuloCsoportId, out List errorMessages) { errorMessages = new List(); var (validationErrors, osztalyCsoportAdatok, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); var tanevUtolsoNapja = h.TanevDal().Get(TanevId).UtolsoNap.Value; var osztalyCsoportDict = GetOsztalyCsoportDict(h); var errors = GetOsztalyBesorolasTorlesValidations(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, tanuloCsoportEntity.BelepesDatum.Value, tanuloCsoportEntity.KilepesDatum ?? tanevUtolsoNapja, (OktNevelesiKategoriaEnum)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId); return (errors, osztalyCsoportDict, tanuloCsoportEntity.Tanulo.NyomtatasiNev); }); errorMessages.AddRange(CreateErrorMessagesFromOsztalyBesorolasValidationErrors(validationErrors, osztalyCsoportAdatok, tanuloNev, isTorles: true)); return !errorMessages.Any(); } public bool CheckOsztalyBesorolasKezdetModositas(int tanuloCsoportId, DateTime changedBelepes, out List errorMessages) { errorMessages = new List(); var (validationErrors, osztalyCsoportAdatok, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); var osztalyCsoportDict = GetOsztalyCsoportDict(h); var (datumTol, datumIg, isKorabbraModositas) = GetBesorolasKezdetModositasIntervallum(tanuloCsoportEntity, changedBelepes); var errors = GetOsztalyBesorolasKezdetModositasValidations(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, datumTol, datumIg, (OktNevelesiKategoriaEnum)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId, isKorabbraModositas); return (errors, osztalyCsoportDict, tanuloCsoportEntity.Tanulo.NyomtatasiNev); }); errorMessages.AddRange(CreateErrorMessagesFromOsztalyBesorolasValidationErrors(validationErrors, osztalyCsoportAdatok, tanuloNev, isTorles: false)); return !errorMessages.Any(); } public bool CheckOsztalyBesorolasVegeModositas(int tanuloCsoportId, DateTime changedKilepes, out List errorMessages) { errorMessages = new List(); var (validationErrors, osztalyCsoportAdatok, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); var osztalyCsoportDict = GetOsztalyCsoportDict(h); if (tanuloCsoportEntity.BelepesDatum > changedKilepes) { var errors = new List { new OsztalybaSorolasModositasValidacioItemCo { Oka = OsztalybaSorolasModositasValidacioHibaEnum.KilepesDatumaElobbiMintABelepesDatuma, TanuloCsoportKilepesDatum = changedKilepes, TanuloCsoportBelepesDatum = tanuloCsoportEntity.BelepesDatum } }; return (errors, osztalyCsoportDict, tanuloCsoportEntity.Tanulo.NyomtatasiNev); } else { var (datumTol, datumIg, isKorabbraModositas) = GetBesorolasVegeModositasIntervallum(h, tanuloCsoportEntity, changedKilepes); var errors = GetOsztalyBesorolasVegeModositasValidations(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, datumTol, datumIg, (OktNevelesiKategoriaEnum)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId, isKorabbraModositas); return (errors, osztalyCsoportDict, tanuloCsoportEntity.Tanulo.NyomtatasiNev); } }); errorMessages.AddRange(CreateErrorMessagesFromOsztalyBesorolasValidationErrors(validationErrors, osztalyCsoportAdatok, tanuloNev, isTorles: false)); return !errorMessages.Any(); } public bool CheckCsoportBesorolasDelete(int tanuloCsoportId, out List errorMessages, bool? isFromSzervezet = false) { errorMessages = new List(); var (validationErrors, csoportNev, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); var tanevUtolsoNapja = h.TanevDal().Get(TanevId).UtolsoNap.Value; var errors = GetCsoportBesorolasModositasValidacio(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, tanuloCsoportEntity.BelepesDatum.Value, tanuloCsoportEntity.KilepesDatum ?? tanevUtolsoNapja, isFromSzervezet.HasValue && isFromSzervezet.Value ? (OktNevelesiKategoriaEnum?)null : (OktNevelesiKategoriaEnum)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId, isTorolhetosegVizsgalat: true); return (errors, tanuloCsoportEntity.OsztalyCsoport.Nev, tanuloCsoportEntity.Tanulo.NyomtatasiNev); }); errorMessages.AddRange(CreateErrorMessagesFromCsoportBesorolasValidationErrors(validationErrors, csoportNev, tanuloNev, isTorles: true)); return !errorMessages.Any(); } public bool CheckCsoportBesorolasKezdetModositas(int tanuloCsoportId, DateTime changedBelepes, out List errorMessages, bool? isFromSzervezet = null) { errorMessages = new List(); var (validationErrors, csoportNev, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); var (datumTol, datumIg, isKorabbraModositas) = GetBesorolasKezdetModositasIntervallum(tanuloCsoportEntity, changedBelepes); var errors = GetCsoportBesorolasModositasValidacio(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, datumTol, datumIg, isFromSzervezet.HasValue && isFromSzervezet.Value ? (OktNevelesiKategoriaEnum?)null : (OktNevelesiKategoriaEnum)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId, isTorolhetosegVizsgalat: !isKorabbraModositas); return (errors, tanuloCsoportEntity.OsztalyCsoport.Nev, tanuloCsoportEntity.Tanulo.NyomtatasiNev); }); errorMessages.AddRange(CreateErrorMessagesFromCsoportBesorolasValidationErrors(validationErrors, csoportNev, tanuloNev, isTorles: false)); return !errorMessages.Any(); } public bool CheckCsoportBesorolasVegeModositas(int tanuloCsoportId, DateTime changedKilepes, out List errorMessages) { errorMessages = new List(); var (validationErrors, csoportNev, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); if (tanuloCsoportEntity.BelepesDatum > changedKilepes) { var errors = new List { new CsoportBesorolasModositasValidacioItemCo { Oka = CsoportBesorolasModositasValidacioHibaEnum.KilepesDatumaElobbiMintABelepesDatuma, TanuloCsoportKilepesDatum = changedKilepes, TanuloCsoportBelepesDatum = tanuloCsoportEntity.BelepesDatum } }; return (errors, tanuloCsoportEntity.OsztalyCsoport.Nev, tanuloCsoportEntity.Tanulo.NyomtatasiNev); } else { var (datumTol, datumIg, isKorabbraModositas) = GetBesorolasVegeModositasIntervallum(h, tanuloCsoportEntity, changedKilepes); var errors = GetCsoportBesorolasModositasValidacio(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, datumTol, datumIg, (OktNevelesiKategoriaEnum?)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId, isTorolhetosegVizsgalat: isKorabbraModositas); return (errors, tanuloCsoportEntity.OsztalyCsoport.Nev, tanuloCsoportEntity.Tanulo.NyomtatasiNev); } }); errorMessages.AddRange(CreateErrorMessagesFromCsoportBesorolasValidationErrors(validationErrors, csoportNev, tanuloNev, isTorles: false)); return !errorMessages.Any(); } public bool CheckCsoportAtsorolas(int tanuloCsoportId, DateTime datumTol, out List errorMessages, bool? isFromSzervezet = null) { errorMessages = new List(); var (validationErrors, csoportNev, tanuloNev) = Dal.CustomConnection.Run(ConnectionType, h => { var tanuloCsoportEntity = h.TanuloCsoport().Get(tanuloCsoportId); var tanevUtolsoNapja = h.TanevDal().Get(TanevId).UtolsoNap.Value; var errors = GetCsoportBesorolasModositasValidacio(h, tanuloCsoportEntity.OsztalyCsoportId, tanuloCsoportEntity.TanuloId, datumTol, tanuloCsoportEntity.KilepesDatum ?? tanevUtolsoNapja, isFromSzervezet.HasValue && isFromSzervezet.Value ? (OktNevelesiKategoriaEnum?)null : (OktNevelesiKategoriaEnum)tanuloCsoportEntity.OsztalyCsoport.FeladatKategoriaId, isTorolhetosegVizsgalat: true); return (errors, string.Empty, tanuloCsoportEntity.Tanulo.NyomtatasiNev); }); errorMessages.AddRange(CreateErrorMessagesFromCsoportBesorolasValidationErrors(validationErrors, csoportNev, tanuloNev, isTorles: true)); return !errorMessages.Any(); } private Dictionary GetOsztalyCsoportDict(IDalHandler dalHandler) { var osztalyCsoportDataSet = dalHandler.OsztalyCsoport().GetOsztalyCsoportDataSet(TanevId); return osztalyCsoportDataSet.Tables[0].AsEnumerable().ToDictionary(r => r.Field("Id"), r => r.Field("Nev")); } private IEnumerable CreateErrorMessagesFromOsztalyBesorolasValidationErrors(List validationErrors, Dictionary osztalyCsoportAdatok, string tanuloNev, bool isTorles) { return validationErrors.Select(x => { switch (x.Oka) { case OsztalybaSorolasModositasValidacioHibaEnum.VanOsztalybontottCsoportBesorolasa: return string.Format(isTorles ? OsztalyCsoportResource.OsztalybaSorolasVanOsztalybontottCsoportTorlesHiba : OsztalyCsoportResource.OsztalybaSorolasVanOsztalybontottCsoportHiba, tanuloNev, x.Datum.Value.ToShortDateString(), osztalyCsoportAdatok[x.OsztalyId.Value], osztalyCsoportAdatok[x.OsztalybontottCsoportId.Value]); case OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul: return string.Format(isTorles ? OsztalyCsoportResource.OsztalybaSorolasVanCsoportBesorolasaOsztalybesorolasNelkulTorlesHiba : OsztalyCsoportResource.OsztalybaSorolasVanCsoportBesorolasaOsztalybesorolasNelkulHiba, tanuloNev, x.Datum.Value.ToShortDateString(), osztalyCsoportAdatok[x.OsztalyId.Value]); case OsztalybaSorolasModositasValidacioHibaEnum.VanAzOsztalyhozMulasztasRogzitve: return string.Format(isTorles ? OsztalyCsoportResource.OsztalybaSorolasVanAzOsztalyhozMulasztasRogzitveTorlesHiba : OsztalyCsoportResource.OsztalybaSorolasVanAzOsztalyhozMulasztasRogzitveHiba, tanuloNev, x.Darab, osztalyCsoportAdatok[x.OsztalyId.Value]); case OsztalybaSorolasModositasValidacioHibaEnum.VanAzOsztalyhozErtekelesRogzitve: return string.Format(isTorles ? OsztalyCsoportResource.OsztalybaSorolasVanAzOsztalyhozErtekelesRogzitveTorlesHiba : OsztalyCsoportResource.OsztalybaSorolasVanAzOsztalyhozErtekelesRogzitveHiba, tanuloNev, x.Darab, osztalyCsoportAdatok[x.OsztalyId.Value]); case OsztalybaSorolasModositasValidacioHibaEnum.VanFeljegyzesRogzitveATanulonak: return string.Format(isTorles ? OsztalyCsoportResource.OsztalybaSorolasVanFeljegyzesRogzitveATanulonakTorlesHiba : OsztalyCsoportResource.OsztalybaSorolasVanFeljegyzesRogzitveATanulonakHiba, tanuloNev, x.Darab); case OsztalybaSorolasModositasValidacioHibaEnum.VanIgazolasRogzitveATanulonak: return string.Format(isTorles ? OsztalyCsoportResource.OsztalybaSorolasVanIgazolasRogzitveATanulonakTorlesHiba : OsztalyCsoportResource.OsztalybaSorolasVanIgazolasRogzitveATanulonakHiba, tanuloNev, x.Darab); case OsztalybaSorolasModositasValidacioHibaEnum.ATanuloMarTagjaAzAdottOsztalynak: return string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloMarTagjaAzAdottOsztalynakHiba, tanuloNev, x.Datum.Value.ToShortDateString(), osztalyCsoportAdatok[x.OsztalyId.Value]); case OsztalybaSorolasModositasValidacioHibaEnum.ATanuloMarTagjaAMaxSzamuOsztalynak: return string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloMarTagjaAMaxSzamuOsztalynakHiba, tanuloNev, x.Datum.Value.ToShortDateString()); case OsztalybaSorolasModositasValidacioHibaEnum.KilepesDatumaElobbiMintABelepesDatuma: return string.Format(OsztalyCsoportResource.KilepesDatumaElobbiMintABelepesDatuma, tanuloNev, x.TanuloCsoportKilepesDatum.Value.ToShortDateString(), x.TanuloCsoportBelepesDatum.Value.ToShortDateString()); default: return string.Empty; } }); } private IEnumerable CreateErrorMessagesFromCsoportBesorolasValidationErrors(List validationErrors, string csoportNev, string tanuloNev, bool isTorles) { return validationErrors.Select(x => { switch (x.Oka) { case CsoportBesorolasModositasValidacioHibaEnum.TanuloMarTagjaAzAdottCsoportnak: return string.Format(OsztalyCsoportResource.CsoportbaSorolasTanuloMarTagjaAzAdottCsoportnakHiba, tanuloNev, x.Datum.Value.ToShortDateString(), csoportNev); case CsoportBesorolasModositasValidacioHibaEnum.TanuloNemTagjaEgyetlenOsztalynakSem: return string.Format(OsztalyCsoportResource.CsoportbaSorolasTanuloNemTagjaEgyetlenOsztalynakSemHiba, tanuloNev, x.Datum.Value.ToShortDateString()); case CsoportBesorolasModositasValidacioHibaEnum.TanuloNemTagjaAzOsztalybontottCsoportOsztalyanak: return string.Format(OsztalyCsoportResource.CsoportbaSorolasTanuloNemTagjaAzOsztalybontottCsoportOsztalyanakHiba, tanuloNev, x.Datum.Value.ToShortDateString(), csoportNev); case CsoportBesorolasModositasValidacioHibaEnum.VanACsoporthozMulasztasRogzitve: return string.Format(isTorles ? OsztalyCsoportResource.CsoportbaSorolasVanACsoporthozMulasztasRogzitveTorlesHiba : OsztalyCsoportResource.CsoportbaSorolasVanACsoporthozMulasztasRogzitveModositasHiba, tanuloNev, x.Darab, csoportNev); case CsoportBesorolasModositasValidacioHibaEnum.VanACsoporthozErtekelesRogzitve: return string.Format(isTorles ? OsztalyCsoportResource.CsoportbaSorolasVanACsoporthozErtekelesRogzitveTorlesHiba : OsztalyCsoportResource.CsoportbaSorolasVanACsoporthozErtekelesRogzitveModositasHiba, tanuloNev, x.Darab, csoportNev); case CsoportBesorolasModositasValidacioHibaEnum.KilepesDatumaElobbiMintABelepesDatuma: return string.Format(OsztalyCsoportResource.KilepesDatumaElobbiMintABelepesDatuma, tanuloNev, x.TanuloCsoportKilepesDatum.Value.ToShortDateString(), x.TanuloCsoportBelepesDatum.Value.ToShortDateString()); default: return string.Empty; } }); } private (DateTime datumTol, DateTime datumIg, bool isKorabbraModositas) GetBesorolasKezdetModositasIntervallum(ITanuloCsoport tanuloCsoport, DateTime changedDate) { DateTime datumTol, datumIg; var isKorabbraModositas = changedDate < tanuloCsoport.BelepesDatum.Value; if (isKorabbraModositas) { datumTol = changedDate; datumIg = tanuloCsoport.BelepesDatum.Value.AddDays(-1); } else { datumTol = tanuloCsoport.BelepesDatum.Value; datumIg = changedDate.AddDays(-1); } return (datumTol, datumIg, isKorabbraModositas); } private (DateTime datumTol, DateTime datumIg, bool isKorabbraModositas) GetBesorolasVegeModositasIntervallum(IDalHandler h, ITanuloCsoport tanuloCsoport, DateTime changedDate) { DateTime datumTol, datumIg; var tanevVege = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanevInfo().UtolsoNap; var isKorabbraModositas = changedDate < (tanuloCsoport.KilepesDatum ?? tanevVege); if (isKorabbraModositas) { datumTol = changedDate; datumIg = tanuloCsoport.KilepesDatum ?? tanevVege; } else { datumTol = (tanuloCsoport.KilepesDatum ?? tanevVege).AddDays(1); datumIg = changedDate; } return (datumTol, datumIg, isKorabbraModositas); } public void DeleteOsztalyBesorolas(int tanuloCsoportId, int osztalyId, int tanuloId) { Dal.CustomConnection.Run(ConnectionType, handler => { var osztalyCsoportDal = handler.OsztalyCsoport(); var tanuloCsoportDal = handler.TanuloCsoport(); var csoportDal = handler.Csoport(); var tanulo = handler.Tanulo().Get(tanuloId); var tanuloCsoport = tanuloCsoportDal.Get(tanuloCsoportId); var amiFoglalkozasok = tanuloCsoport.OsztalyCsoport.Foglalkozasok.SelectMany(x => x.FoglalkozasAmiTanulo).Where(x => x.TanuloId == tanuloId); var foglalkozasAmiTanuloDal = handler.FoglalkozasAmiTanuloDal(); foreach (var amiFoglalkozasokItem in amiFoglalkozasok) { foglalkozasAmiTanuloDal.Delete(amiFoglalkozasokItem); } tanuloCsoportDal.Delete(tanuloCsoport); foreach (var csoportBesorolas in tanulo.OsztalyCsoport.Where(tcs => osztalyCsoportDal.GetIsCsoport(tcs.OsztalyCsoportId) && !tcs.Torolt)) { var csoport = csoportDal.Get(csoportBesorolas.OsztalyCsoportId); if (csoport.OsztalyBontasId == osztalyId && (!tanuloCsoport.KilepesDatum.HasValue || csoportBesorolas.BelepesDatum < tanuloCsoport.KilepesDatum.Value) && (!csoportBesorolas.KilepesDatum.HasValue || tanuloCsoport.BelepesDatum < csoportBesorolas.KilepesDatum.Value)) { tanuloCsoportDal.Delete(csoportBesorolas); if (csoport.IsAutoEgyeniCsoport) { csoportDal.Delete(csoport, IntezmenyId, TanevId); } } } EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(new List { tanuloId }, null); }); } public void DeleteCsoportBesorolas(string tanulocsoportId) { Dal.CustomConnection.Run(ConnectionType, handler => { var tanuloCsoportDal = handler.TanuloCsoport(); var csoportDal = handler.Csoport(); var tancsopId = int.Parse(tanulocsoportId); var tanuloCsoport = tanuloCsoportDal.Get(tancsopId); var csoport = csoportDal.Get(tanuloCsoport.OsztalyCsoportId); tanuloCsoportDal.Delete(tancsopId); if (csoport.IsAutoEgyeniCsoport) { csoportDal.Delete(csoport, IntezmenyId, TanevId); } }); } public void OsztalybaSorolasElsoAlkalommal(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalybaSorolasElsoAlkalommalLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void OsztalyAtsorolas(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, (h) => new OsztalyAtsorolasLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void OsztalyLeptetes(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, (h) => new OsztalyLeptetesLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void OsztalybaSorolasJavitasa(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyBesorolasJavitasLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void OsztalyKisorolas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { if (model.Datum.HasValue && jogviszonyCo != null && (!jogviszonyCo.Vege.HasValue || jogviszonyCo.Vege.Value < model.Datum.Value)) { throw new BlException(OsztalyCsoportResource.JogviszonyVegeKisebbMintKisorolasDatum); } var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, (h) => new OsztalyKisorolaslLogic(this, h).Alapkepzes(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void VisszaIratkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyVisszairatkoztatasLogic(this, h).Alapkepzes(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void CsoportbaSorolas(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void CsoportbolKisorolas(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportKisorolaslLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void CsoportSorolasJavitas(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasJavitasLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void CsoportbaAtsorolas(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportAtsorolasLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void CsoportLeptetes(IOsztalyCsoportbaSorolas model) { var alapkepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportLeptetesLogic(this, h).Alapkepzes(model)); if (!string.IsNullOrWhiteSpace(alapkepzesTajekoztatoHibaUzenet)) { throw new BlException(alapkepzesTajekoztatoHibaUzenet); } } public void AmiOsztalybaSorolasElsoAlkalommal(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalybaSorolasElsoAlkalommalLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiOsztalybaSorolasJavitasa(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyBesorolasJavitasLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiOsztalyKisorolas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { if (model.Datum.HasValue && jogviszonyCo != null && (!jogviszonyCo.Vege.HasValue || jogviszonyCo.Vege.Value < model.Datum.Value)) { throw new BlException(OsztalyCsoportResource.JogviszonyVegeKisebbMintKisorolasDatum); } var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyKisorolaslLogic(this, h).Amikepzes(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiCsoportbaSorolas(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiCsoportbolKisorolas(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportKisorolaslLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiCsoportSorolasJavitas(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasJavitasLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiCsoportbaAtsorolas(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportAtsorolasLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiCsoportLeptetes(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportLeptetesLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void AmiOsztalyLeptetes(IOsztalyCsoportbaSorolas model) { var amiKepzesTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyLeptetesLogic(this, h).Amikepzes(model)); if (!string.IsNullOrWhiteSpace(amiKepzesTajekoztatoHibaUzenet)) { throw new BlException(amiKepzesTajekoztatoHibaUzenet); } } public void KollegiumOsztalybaSorolasElsoAlkalommal(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalybaSorolasElsoAlkalommalLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumOsztalyAtsorolas(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyAtsorolasLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumOsztalybaSorolasJavitasa(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyBesorolasJavitasLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumOsztalyKisorolas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { if (model.Datum.HasValue && jogviszonyCo != null && (!jogviszonyCo.Vege.HasValue || jogviszonyCo.Vege.Value < model.Datum.Value)) { throw new BlException(OsztalyCsoportResource.JogviszonyVegeKisebbMintKisorolasDatum); } var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyKisorolaslLogic(this, h).Kollegium(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumVisszaIratkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyVisszairatkoztatasLogic(this, h).Kollegium(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumCsoportbaSorolas(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumCsoportbolKisorolas(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportKisorolaslLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumCsoportSorolasJavitas(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasJavitasLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumCsoportbaAtsorolas(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportAtsorolasLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumCsoportLeptetes(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportLeptetesLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } public void KollegiumOsztalyLeptetes(IOsztalyCsoportbaSorolas model) { var kollegiumTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyLeptetesLogic(this, h).Kollegium(model)); if (!string.IsNullOrWhiteSpace(kollegiumTajekoztatoHibaUzenet)) { throw new BlException(kollegiumTajekoztatoHibaUzenet); } } internal List GetOsztalyBesorolasModositasValidacio(IDalHandler h, int fromOsztalyId, int toOsztalyId, int tanuloId, DateTime datumTol, DateTime datumIg, OktNevelesiKategoriaEnum feladatKategoria, bool isTorolhetosegVizsgalat, bool isCheckMaxOsztalyReturnKilepes) { var ds = h.OsztalyCsoport().GetOsztalyBesorolasModositasValidacio(TanevId, fromOsztalyId, toOsztalyId, tanuloId, datumTol, datumIg, feladatKategoria, isTorolhetosegVizsgalat, isCheckMaxOsztalyReturnKilepes); var errors = new List(); foreach (var row in ds.Tables[0].AsEnumerable()) { var error = new OsztalybaSorolasModositasValidacioItemCo { Oka = (OsztalybaSorolasModositasValidacioHibaEnum)SDAConvert.ToInt32(row["Oka"]), OsztalyId = SDAConvert.ToInt32(row["OsztalyId"]), OsztalybontottCsoportId = SDAConvert.ToInt32(row["OsztalybontottCsoportId"]), Darab = SDAConvert.ToInt32(row["Darab"]), Datum = SDAConvert.ToDateTime(row["Datum"]), }; errors.Add(error); } return errors; } private List GetOsztalyBesorolasTorlesValidations(IDalHandler h, int osztalyId, int tanuloId, DateTime datumTol, DateTime datumIg, OktNevelesiKategoriaEnum feladatKategoria) { return GetOsztalyBesorolasModositasValidacio(h, osztalyId, -1, tanuloId, datumTol, datumIg, feladatKategoria, isTorolhetosegVizsgalat: true, isCheckMaxOsztalyReturnKilepes: true) .Where(e => e.Oka != OsztalybaSorolasModositasValidacioHibaEnum.ATanuloMarTagjaAzAdottOsztalynak && e.Oka != OsztalybaSorolasModositasValidacioHibaEnum.ATanuloMarTagjaAMaxSzamuOsztalynak) .ToList(); } private List GetOsztalyBesorolasKezdetModositasValidations(IDalHandler h, int osztalyId, int tanuloId, DateTime datumTol, DateTime datumIg, OktNevelesiKategoriaEnum feladatKategoria, bool isKorabbra) { return GetOsztalyBesorolasModositasValidacio(h, osztalyId, osztalyId, tanuloId, datumTol, datumIg, feladatKategoria, isTorolhetosegVizsgalat: !isKorabbra, isCheckMaxOsztalyReturnKilepes: false); } private List GetOsztalyBesorolasVegeModositasValidations(IDalHandler h, int osztalyId, int tanuloId, DateTime datumTol, DateTime datumIg, OktNevelesiKategoriaEnum feladatKategoria, bool isKorabbra) { return GetOsztalyBesorolasModositasValidacio(h, osztalyId, osztalyId, tanuloId, datumTol, datumIg, feladatKategoria, isTorolhetosegVizsgalat: isKorabbra, isCheckMaxOsztalyReturnKilepes: true); } internal static void AddOsztalyBesorolasVegenekModositasaErrorMessages(SorolasValidate validate, List errormessage, int tanuloId, List messages) { errormessage.AddRange(messages.Select(x => { switch (x.Oka) { case OsztalybaSorolasModositasValidacioHibaEnum.VanOsztalybontottCsoportBesorolasa: return string.Format(OsztalyCsoportResource.OsztalybaSorolasVanOsztalybontottCsoportHiba, validate.TanuloAdatok[tanuloId].Nev, x.Datum.Value.ToString(Constants.ToStringPattern.HungarianDateWithSpaces), validate.OsztalyCsoportAdatok[x.OsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[x.OsztalybontottCsoportId.Value].Nev); case OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul: return string.Format(OsztalyCsoportResource.OsztalybaSorolasVanCsoportBesorolasaOsztalybesorolasNelkulHiba, validate.TanuloAdatok[tanuloId].Nev, x.Datum.Value.ToString(Constants.ToStringPattern.HungarianDateWithSpaces), validate.OsztalyCsoportAdatok[x.OsztalyId.Value].Nev); case OsztalybaSorolasModositasValidacioHibaEnum.VanAzOsztalyhozMulasztasRogzitve: return string.Format(OsztalyCsoportResource.OsztalybaSorolasVanAzOsztalyhozMulasztasRogzitveHiba, validate.TanuloAdatok[tanuloId].Nev, x.Darab, validate.OsztalyCsoportAdatok[x.OsztalyId.Value].Nev); case OsztalybaSorolasModositasValidacioHibaEnum.VanAzOsztalyhozErtekelesRogzitve: return string.Format(OsztalyCsoportResource.OsztalybaSorolasVanAzOsztalyhozErtekelesRogzitveHiba, validate.TanuloAdatok[tanuloId].Nev, x.Darab, validate.OsztalyCsoportAdatok[x.OsztalyId.Value].Nev); case OsztalybaSorolasModositasValidacioHibaEnum.VanFeljegyzesRogzitveATanulonak: return string.Format(OsztalyCsoportResource.OsztalybaSorolasVanFeljegyzesRogzitveATanulonakHiba, validate.TanuloAdatok[tanuloId].Nev, x.Darab); case OsztalybaSorolasModositasValidacioHibaEnum.VanIgazolasRogzitveATanulonak: return string.Format(OsztalyCsoportResource.OsztalybaSorolasVanIgazolasRogzitveATanulonakHiba, validate.TanuloAdatok[tanuloId].Nev, x.Darab); case OsztalybaSorolasModositasValidacioHibaEnum.ATanuloMarTagjaAzAdottOsztalynak: return string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloMarTagjaAzAdottOsztalynakHiba, validate.TanuloAdatok[tanuloId].Nev, x.Datum.Value.ToString(Constants.ToStringPattern.HungarianDateWithSpaces), validate.OsztalyCsoportAdatok[x.OsztalyId.Value].Nev); case OsztalybaSorolasModositasValidacioHibaEnum.ATanuloMarTagjaAMaxSzamuOsztalynak: return string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloMarTagjaAMaxSzamuOsztalynakHiba, validate.TanuloAdatok[tanuloId].Nev, x.Datum.Value.ToString(Constants.ToStringPattern.HungarianDateWithSpaces)); default: return string.Empty; } })); } public List GetCsoportBesorolasModositasValidacio(IDalHandler h, int csoportId, int tanuloId, DateTime datumTol, DateTime datumIg, OktNevelesiKategoriaEnum? feladatKategoria, bool isTorolhetosegVizsgalat) { var ds = h.OsztalyCsoport().GetCsoportBesorolasModositasValidacio(TanevId, csoportId, tanuloId, datumTol, datumIg, feladatKategoria, isTorolhetosegVizsgalat); var result = ds.Tables[0].AsEnumerable().Select(r => new CsoportBesorolasModositasValidacioItemCo { Oka = (CsoportBesorolasModositasValidacioHibaEnum)SDAConvert.ToInt32(r["Oka"]), Darab = SDAConvert.ToNullableInt32(r["Darab"]), Datum = SDAConvert.ToDateTime(r["Datum"]), }).ToList(); return result; } #region EGYMI public void EGYMIOsztalybaSorolasElsoAlkalommal(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalybaSorolasElsoAlkalommalLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMIOsztalyAtsorolas(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyAtsorolasLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMIOsztalybaSorolasJavitasa(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyBesorolasJavitasLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMIOsztalyKisorolas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { if (model.Datum.HasValue && jogviszonyCo != null && (!jogviszonyCo.Vege.HasValue || jogviszonyCo.Vege.Value < model.Datum.Value)) { throw new BlException(OsztalyCsoportResource.JogviszonyVegeKisebbMintKisorolasDatum); } var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyKisorolaslLogic(this, h).EGYMI(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMIVisszaIratkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyVisszairatkoztatasLogic(this, h).EGYMI(model, jogviszonyCo)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMICsoportbaSorolas(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMICsoportbolKisorolas(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportKisorolaslLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMICsoportSorolasJavitas(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportbaSorolasJavitasLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMICsoportbaAtsorolas(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportAtsorolasLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMICsoportLeptetes(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new CsoportLeptetesLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } public void EGYMIOsztalyLeptetes(IOsztalyCsoportbaSorolas model) { var egymiTajekoztatoHibaUzenet = Dal.CustomConnection.Run(ConnectionType, h => new OsztalyLeptetesLogic(this, h).EGYMI(model)); if (!string.IsNullOrWhiteSpace(egymiTajekoztatoHibaUzenet)) { throw new BlException(egymiTajekoztatoHibaUzenet); } } #endregion EGYMI private void VisszairatkozottTanuloJogviszonyMentes(List tanuloIds, IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszony, IDalHandler h, int? kovTanevId) { foreach (var item in tanuloIds) { jogviszony.TanuloId = item; new TanuloHelper(new DalHandlerConnectionType(ConnectionType, h)).SaveTanuloJogviszony(jogviszony, kovTanevId); } } private void KisoroltTanuloJogviszonyMegszuntetese(List jogviszonyIds, JogviszonyCo jogviszony, IDalHandler h, int? kovTanevId) { foreach (var item in jogviszonyIds) { jogviszony.ID = item; new TanuloHelper(new DalHandlerConnectionType(ConnectionType, h)).TanuloJogviszonyMegszuntetese(jogviszony, kovTanevId); } } private void EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(List tanuloIds, IOsztalyCsoportbaSorolas model) { foreach (var tanuloId in tanuloIds) { Dal.CustomConnection.Run(ConnectionType, h => { TanuloOsztalyBesorolasStatuszValtozasAdatCO tanuloOsztalyBesorolasStatuszValtozasAdatCO = new TanuloOsztalyBesorolasStatuszValtozasAdatCO(); var tanuloDal = h.Tanulo(); var tanulo = tanuloDal.Get(tanuloId); var osztalyDal = h.Osztaly(); tanuloOsztalyBesorolasStatuszValtozasAdatCO.KretaIntezmenyAzonosito = IntezmenyAzonosito; tanuloOsztalyBesorolasStatuszValtozasAdatCO.TanevKretaAzonosito = TanevId; tanuloOsztalyBesorolasStatuszValtozasAdatCO.TanuloOktatasiAzonosito = tanulo.OktatasiAzonosito; if (model != null && model.ToDDL.HasValue) { var osztaly = osztalyDal.Get(model.ToDDL.Value); tanuloOsztalyBesorolasStatuszValtozasAdatCO.OsztalyKretaAzonosito = osztaly.ID; tanuloOsztalyBesorolasStatuszValtozasAdatCO.OsztalyNeve = osztaly.Nev; } else { tanuloOsztalyBesorolasStatuszValtozasAdatCO.OsztalyKretaAzonosito = null; tanuloOsztalyBesorolasStatuszValtozasAdatCO.OsztalyNeve = null; } TanuloHelper.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(tanuloOsztalyBesorolasStatuszValtozasAdatCO, IntezmenyAzonosito); }); } } private void UpdateTanulokSzakkepzesesAdatok(List tanuloIds, int osztalyId, IDalHandler h, bool isNKT = true) { var helper = new FeladatEllatasiHelyHelper(new DalHandlerConnectionType(ConnectionType, h)); var osztalyJellemzoi = helper.GetOsztalyJellemzoi(osztalyId: osztalyId); var isSzakkepzesesUpdate = osztalyJellemzoi[OsztalyJellemzoEnum.IsSzakkepzeses]; var isNKTSzakkepzeses = osztalyJellemzoi[OsztalyJellemzoEnum.IsNKTSzakkepzeses] && isNKT; if ((isSzakkepzesesUpdate || isNKTSzakkepzeses) && tanuloIds.Any()) { var NKTesSZKTszakkepzesesAdatok = new OsztalyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetOsztalyNKTesSZKTSzakkepzesesAdatok(osztalyId); SetSzakkepzesesAdatokNaToNull(NKTesSZKTszakkepzesesAdatok); var dal = h.Tanulo(GridParameters); string tanulokString = string.Join(", ", tanuloIds); dal.UpdateTanulokNKTesSZKTSzakkepzesesAdatok(tanulokString, NKTesSZKTszakkepzesesAdatok.ConvertToPCO(), isSzakkepzesesUpdate, isNKTSzakkepzeses); } } private void SetSzakkepzesesAdatokNaToNull(SzakkepzesesAdatokCO szakkepzesesAdatok) { if (szakkepzesesAdatok.Szakmacsoport == (int)SzakmacsoportTipusEnum.Na) { szakkepzesesAdatok.Szakmacsoport = null; } if (szakkepzesesAdatok.Agazat == (int)AgazatTipusEnum.Na) { szakkepzesesAdatok.Agazat = null; } if (szakkepzesesAdatok.Szakkepesites == (int)SzakkepesitesTipusEnum.Na) { szakkepzesesAdatok.Szakkepesites = null; } if (szakkepzesesAdatok.Reszszakkepesites == (int)ReszszakkepesitesTipusEnum.Na) { szakkepzesesAdatok.Reszszakkepesites = null; } } private void UpdateTanulokSzakkepzoAdatok(List tanuloIds, int osztalyId, IDalHandler h) { var intezmenySzakkepzo = new IntezmenyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetIntezmenyiAdatok().IsSzakkepzoJuttatas; if (!intezmenySzakkepzo || !tanuloIds.Any()) { return; } var szakkepzoAdatok = new OsztalyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetOsztalySzakkepzoAdatok(osztalyId); var dal = h.JuttatasDAL(); var tanulokString = string.Join(", ", tanuloIds); dal.UpdateTanulokSzakkepzoAdatok(FelhasznaloId, tanulokString, szakkepzoAdatok.ConvertToPCO()); dal.UpdateTanulokSzakkepzesiJuttatasok(TanevId, FelhasznaloId, (int)JuttatasTipusEnum.szakkepzesi_juttatas, tanulokIdString: tanulokString); dal.UpdateTanulokSzakkepzesiJuttatasok(TanevId, FelhasznaloId, (int)JuttatasTipusEnum.apaczaiosztondij, tanulokIdString: tanulokString); } private void UpdateTanulokSzakkepzesiJuttatasok(List tanuloIds, IDalHandler h) { var intezmenySzakkepzo = new IntezmenyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetIntezmenyiAdatok().IsSzakkepzoJuttatas; if (!intezmenySzakkepzo || !tanuloIds.Any()) { return; } var dal = h.JuttatasDAL(); var tanulokString = string.Join(", ", tanuloIds); dal.UpdateTanulokSzakkepzesiJuttatasok(TanevId, FelhasznaloId, (int)JuttatasTipusEnum.szakkepzesi_juttatas, tanulokIdString: tanulokString); dal.UpdateTanulokSzakkepzesiJuttatasok(TanevId, FelhasznaloId, (int)JuttatasTipusEnum.apaczaiosztondij, tanulokIdString: tanulokString); } private bool TryGetCoport(int id, IDalHandler h, out ICsoport csoport) { try { csoport = h.Csoport().Get(id); return true; } catch (Framework.Entities.EntityNotFoundException) { csoport = null; return false; } } private bool TryGetOsztaly(int id, IDalHandler h, out IOsztaly osztaly) { try { osztaly = h.Osztaly().Get(id); return true; } catch (Framework.Entities.EntityNotFoundException) { osztaly = null; return false; } } private string GetErrorMessageForTanuloList(string errorMessage, List tanulok, string lastMessage = null) { var message = string.Empty; if (tanulok.Count > 0) { message += errorMessage; message += "
  • "; message += string.Join("
  • ", tanulok); message += "

"; if (!string.IsNullOrWhiteSpace(lastMessage)) { message += lastMessage; } } return message; } private string RemoveLastBrTag(string s) { var br = "
"; var index = s.LastIndexOf(br); if (index > -1 && s.Length - br.Length == index) { return s.Substring(0, index); } return s; } private void RemoveOsztalySzmkIfNeeded(IOsztaly osztaly, IEnumerable kisoroltTanuloIds) { Dal.CustomConnection.Run(ConnectionType, h => { var needUpdate = false; var tanuloDal = h.Tanulo(); var kisoroltTanulokGondviseloIds = tanuloDal.ListGondviseloByTanuloIds(kisoroltTanuloIds); if (kisoroltTanulokGondviseloIds.NotNullAndAny()) { if (osztaly.SZMKKepviseloId.IsEntityId() && kisoroltTanulokGondviseloIds.Contains(osztaly.SZMKKepviseloId)) { osztaly.SZMKKepviselo = null; needUpdate = true; } if (osztaly.SZMKKepviseloHelyettesId.IsEntityId() && kisoroltTanulokGondviseloIds.Contains(osztaly.SZMKKepviseloHelyettesId)) { osztaly.SZMKKepviseloHelyettes = null; needUpdate = true; } if (needUpdate) { var osztalyDal = h.Osztaly(); osztalyDal.FullUpdate(osztaly); } } }); } private class OsztalybaSorolasElsoAlkalommalLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ICsoportDal _csoportDal; private IOsztalyDal _osztalyDal; private ITanuloCsoportDal _tanuloCsoportDal; private TanuloTanugyiAdatokHelper _tanuloTanugyiAdatokHelper; private ICsoportDal CsoportDal => _csoportDal ?? (_csoportDal = h.Csoport()); private IOsztalyDal OsztalyDal => _osztalyDal ?? (_osztalyDal = h.Osztaly()); private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private TanuloTanugyiAdatokHelper TanuloTanugyiAdatok => _tanuloTanugyiAdatokHelper ?? (_tanuloTanugyiAdatokHelper = new TanuloTanugyiAdatokHelper(new DalHandlerConnectionType(parent.ConnectionType, h))); public OsztalybaSorolasElsoAlkalommalLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { if (parent.kovTanev) { model.Datum = new TanevHelper(parent.ConnectionType).GetTanevInfo().KezdoNap; } SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenBesoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in tanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } AlapkepzesOsztalybaSorolas(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenBesoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenBesoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenBesoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzoAdatok(sikeresenBesoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzesiJuttatasok(sikeresenBesoroltTanulok, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } public string Amikepzes(IOsztalyCsoportbaSorolas model) { if (parent.kovTanev) { model.Datum = new TanevHelper(parent.ConnectionType).GetTanevInfo().KezdoNap; } SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenBesoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas, h); var hasError = false; var tanuloBeVanSorolvaMegengedettSzamuOsztalyba = new List(); var tanuloMarOsztalyCsoportTagja = new List(); var tanuloOsztalyCsoportTagjaLesz = new List(); var tanuloEgyeniCsoportNevMarLetezik = new List(); try { var egyeniCsoportok = model.EgyeniCsoportAutoLetrehozas ? GetOsztalyEgyeniCSoportjai(osztaly.ID) : null; foreach (var tanuloId in tanuloIds) { if (validate.TanuloMarOsztalyCsoportTagja(tanuloId, osztaly.ID)) { hasError = true; tanuloMarOsztalyCsoportTagja.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloOsztalyCsoportTagjaLesz(tanuloId, osztaly.ID)) { hasError = true; tanuloOsztalyCsoportTagjaLesz.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out _)) { hasError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaMegengedettSzamuOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); tanuloBeVanSorolvaMegengedettSzamuOsztalyba.Add(hibaUzenet); continue; } AmiOsztalybaSorolas(tanuloId, validate.TanuloAdatok[tanuloId], model.ToDDL.Value, model.Datum.Value, model.Zaradek, model.EgyeniCsoportAutoLetrehozas, egyeniCsoportok); sikeresenBesoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenBesoroltTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloMarOsztalyCsoportTagja, tanuloMarOsztalyCsoportTagja); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloOsztalyCsoportTagjaLesz, tanuloOsztalyCsoportTagjaLesz); message += string.Join("
", tanuloBeVanSorolvaMegengedettSzamuOsztalyba); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Kollegium(IOsztalyCsoportbaSorolas model) { if (parent.kovTanev) { model.Datum = new TanevHelper(parent.ConnectionType).GetTanevInfo().KezdoNap; } SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenBesoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in tanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } KollegiumOsztalybaSorolas(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenBesoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenBesoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenBesoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } public string EGYMI(IOsztalyCsoportbaSorolas model) { if (parent.kovTanev) { model.Datum = new TanevHelper(parent.ConnectionType).GetTanevInfo().KezdoNap; } SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenBesoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in tanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } EGYMIOsztalybaSorolas(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenBesoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenBesoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenBesoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private void AlapkepzesOsztalybaSorolas(int tanuloId, int osztalyId, DateTime date, SorolasZaradek zaradek) { var osztaly = OsztalyDal.Get(osztalyId); var entity = TanuloCsoportDal.Get(); entity.TanuloId = tanuloId; entity.OsztalyCsoportId = osztalyId; entity.BelepesDatum = date; entity.BejegyzesIdopontja = DateTime.Now; entity.TanevId = osztaly.TanevId; entity.JogviszonyTipusID = osztaly.JogviszonyTipusId; TanuloCsoportDal.Insert(entity); SaveZaradek(parent.ConnectionType, zaradek, entity.ID); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(tanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); } private void AmiOsztalybaSorolas(int tanuloId, TanuloListItem tanulo, int osztalyId, DateTime date, SorolasZaradek zaradek, bool egyeniCsoportAutoLetrehozas, List<(int Id, int TanuloId, int EgyeniCsoportId)> osztalyEgyeniCsoportjai) { var osztaly = OsztalyDal.Get(osztalyId); var entity = TanuloCsoportDal.Get(); entity.TanuloId = tanuloId; entity.OsztalyCsoportId = osztalyId; entity.BelepesDatum = date; entity.BejegyzesIdopontja = DateTime.Now; entity.TanevId = osztaly.TanevId; TanuloCsoportDal.Insert(entity); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(tanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); SaveZaradek(parent.ConnectionType, zaradek, entity.ID); if (egyeniCsoportAutoLetrehozas) { EgyeniCSoportLetrehozas(tanuloId, tanulo.Nev, tanulo.SzuletesiDatum, date, osztaly, osztalyEgyeniCsoportjai); } } private void KollegiumOsztalybaSorolas(int tanuloId, int osztalyId, DateTime date, SorolasZaradek zaradek) { var osztaly = OsztalyDal.Get(osztalyId); var entity = TanuloCsoportDal.Get(); entity.TanuloId = tanuloId; entity.OsztalyCsoportId = osztalyId; entity.BelepesDatum = date; entity.BejegyzesIdopontja = DateTime.Now; entity.TanevId = osztaly.TanevId; TanuloCsoportDal.Insert(entity); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(tanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); SaveZaradek(parent.ConnectionType, zaradek, entity.ID); } private void EGYMIOsztalybaSorolas(int tanuloId, int osztalyId, DateTime date, SorolasZaradek zaradek) { var osztaly = OsztalyDal.Get(osztalyId); var entity = TanuloCsoportDal.Get(); entity.TanuloId = tanuloId; entity.OsztalyCsoportId = osztalyId; entity.BelepesDatum = date; entity.BejegyzesIdopontja = DateTime.Now; entity.TanevId = osztaly.TanevId; TanuloCsoportDal.Insert(entity); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(tanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); SaveZaradek(parent.ConnectionType, zaradek, entity.ID); } public void EgyeniCSoportLetrehozas(int tanuloId, string tanuloNev, DateTime tanuloSzuletesiDatum, DateTime date, IOsztaly osztaly, List<(int Id, int TanuloId, int EgyeniCsoportId)> osztalyEgyeniCsoportjai) { var (Id, TanuloId, EgyeniCsoportId) = osztalyEgyeniCsoportjai.SingleOrDefault(x => x.TanuloId == tanuloId); ICsoport egyeniCsoport; if (EgyeniCsoportId > 0) { egyeniCsoport = CsoportDal.Get(EgyeniCsoportId); egyeniCsoport.CsoportVezetoId = osztaly.OsztalyFonokId; egyeniCsoport.EvfolyamTipusa = osztaly.EvfolyamTipusa; egyeniCsoport.MuveszetiAgId = osztaly.MuveszetiAgId; egyeniCsoport.ZenemuveszetiAgTipusId = (int)ZenemuveszetiAgTipusEnum.Egyeni; egyeniCsoport.CsoportnaploMegnyitasa = date; CsoportDal.Update(egyeniCsoport); } else { egyeniCsoport = CsoportDal.Get(); egyeniCsoport.IsAutoEgyeniCsoport = true; egyeniCsoport.OsztalyBontasId = osztaly.ID; egyeniCsoport.Tipusa = (int)CsoportTipusEnum.AlapfMuvOktZenemuveszetiCsoportEgyeniFotanszak; egyeniCsoport.CsoportVezetoId = osztaly.OsztalyFonokId; egyeniCsoport.FeladatEllatasiHelyId = osztaly.FeladatEllatasiHelyId; egyeniCsoport.FeladatKategoriaId = osztaly.FeladatKategoriaId; egyeniCsoport.Nev = GetEgyeniCsoportNev(osztaly.Nev, tanuloNev, tanuloSzuletesiDatum); egyeniCsoport.EvfolyamTipusa = osztaly.EvfolyamTipusa; egyeniCsoport.MuveszetiAgId = osztaly.MuveszetiAgId; egyeniCsoport.ZenemuveszetiAgTipusId = (int)ZenemuveszetiAgTipusEnum.Egyeni; egyeniCsoport.TanevId = osztaly.TanevId; egyeniCsoport.AlTanevId = osztaly.TanevId; egyeniCsoport.TervezettLetszam = 1; egyeniCsoport.CsoportnaploMegnyitasa = date; CsoportDal.Insert(egyeniCsoport); } var egyeniCsopSor = TanuloCsoportDal.Get(); egyeniCsopSor.TanuloId = tanuloId; egyeniCsopSor.OsztalyCsoport = egyeniCsoport; egyeniCsopSor.BelepesDatum = date; egyeniCsopSor.BejegyzesIdopontja = DateTime.Now; egyeniCsopSor.TanevId = egyeniCsoport.TanevId; TanuloCsoportDal.Insert(egyeniCsopSor); } private string GetEgyeniCsoportNev(string osztalyNev, string tanuloNev, DateTime tanuloSzuletesiDatum) { string ujCsoportNev = $"{osztalyNev} - {tanuloNev}({tanuloSzuletesiDatum.ToShortDateString()})"; var list = new List<(int Id, string EgyeniCsoportNev)>(); foreach (DataRow row in TanuloCsoportDal.GetOsztalyCsoportokByNev(parent.TanevId, ujCsoportNev).Tables[0].Rows) { list.Add((SDAConvert.ToInt32(row["ID"]), SDAConvert.ToString(row["EgyeniCsoportNev"]) )); } List hasonloCsoportNevSorszamok = list .Where(x => x.EgyeniCsoportNev .Contains(ujCsoportNev + "(")) .Select(x => SDAConvert.ToInt32(x.EgyeniCsoportNev .Replace(ujCsoportNev, "") .Replace("(", "") .Replace(")", ""))).ToList(); int hasonloCsoportNevMaxSorszam = hasonloCsoportNevSorszamok.Any() ? hasonloCsoportNevSorszamok.Max() : 0; return list.Any() ? string.Format("{0}({1})", ujCsoportNev, hasonloCsoportNevMaxSorszam + 1) : ujCsoportNev; } public List<(int Id, int TanuloId, int EgyeniCsoportId)> GetOsztalyEgyeniCSoportjai(int osztalyId) { var list = new List<(int Id, int TanuloId, int EgyeniCsoportId)>(); foreach (DataRow row in TanuloCsoportDal.GetOsztalyEgyeniCsoportok(parent.TanevId, osztalyId).Tables[0].Rows) { list.Add((SDAConvert.ToInt32(row["ID"]), SDAConvert.ToInt32(row["TanuloId"]), SDAConvert.ToInt32(row["EgyeniCsoportId"]) )); } return list; } } private class OsztalyKisorolaslLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloDal _tanuloDal; private ICsoportDal _csoportDal; private ITanuloCsoportDal _tanuloCsoportDal; private ITanuloDal TanuloDal => _tanuloDal ?? (_tanuloDal = h.Tanulo()); private ICsoportDal CsoportDal => _csoportDal ?? (_csoportDal = h.Csoport()); private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); public OsztalyKisorolaslLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenKisoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: false); IOsztaly osztaly; if (model.FromDDL.HasValue && model.FromDDL.Value == 0) { foreach (var tanulo in tanuloIds) { if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } } return string.Empty; } if (!parent.TryGetOsztaly(model.FromDDL.Value, h, out osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var hasError = false; var tanuloNemTagjaOCsADatumAlatt = new List(); var tanulokRendelkeznekErtekelessel = new List(); var tanulokRendelkeznekMulasztassal = new List(); var tanuloTagjaNemBontottCsoportnakDeOsztalynakNem = new List(); try { var tanulokErtekelessel = GetTanulokErtekelessel(model, OktNevelesiKategoriaEnum.NevelesOktatas); var tanulokMulasztassal = GetTanulokMulasztassal(model, OktNevelesiKategoriaEnum.NevelesOktatas); foreach (var tanulo in tanuloIds) { if (validate.TanuloNemTagjaOCsADatumAlatt(tanulo, model.FromDDL.Value)) { hasError = true; tanuloNemTagjaOCsADatumAlatt.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokErtekelessel.Contains(tanulo)) { hasError = true; tanulokRendelkeznekErtekelessel.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokMulasztassal.Contains(tanulo)) { hasError = true; tanulokRendelkeznekMulasztassal.Add(validate.TanuloAdatok[tanulo].Nev); continue; } var (isError, message, osztallyalNemLefedettCsoportNevek) = parent.DeleteBesorolasValidate(tanulo, model.FromDDL.Value, false); if (isError) { hasError = true; tanuloTagjaNemBontottCsoportnakDeOsztalynakNem.Add($"{validate.TanuloAdatok[tanulo].Nev} ({osztallyalNemLefedettCsoportNevek})"); } var isKellFeluletenMegadottZaradekRogzitese = model.ToElements.Single(i => i.Id == tanulo).IsKellFeluletenMegadottZaradekRogzitese; AlapKepzesOsztalyKisorolas(tanulo, model.Datum.Value, model.Zaradek, isKellFeluletenMegadottZaradekRogzitese); if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } sikeresenKisoroltTanulok.Add(tanulo); } parent.RemoveOsztalySzmkIfNeeded(osztaly, sikeresenKisoroltTanulok); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenKisoroltTanulok, model); parent.UpdateTanulokSzakkepzesiJuttatasok(sikeresenKisoroltTanulok, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloNemTagjaOCsADatumAlatt, tanuloNemTagjaOCsADatumAlatt); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekErtekelessel, tanulokRendelkeznekErtekelessel, OsztalyCsoportResource.TanulokRendelkeznekErtekelesselLastMessage); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekMulasztassal, tanulokRendelkeznekMulasztassal, OsztalyCsoportResource.TanulokRendelkeznekMulasztassalLastMessage); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.ATanuloNemTorolhetoAzOsztalybolMertTagjaEgyVagyTobbNemOsztalybontottCsoportnak, tanuloTagjaNemBontottCsoportnakDeOsztalynakNem); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private List GetTanulokErtekelessel(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum feladatKategoriaId) { List tanulokErtekelessel = new List(); TanuloErtekelesListPco tanuloErtekelesListPco = new TanuloErtekelesListPco() { TanevId = parent.TanevId, OsztalyCsoportId = model.FromDDL.Value, FeladatKategoriaId = (int)feladatKategoriaId, EgyszerAdhatoTanuloErtekelesTipusIdList = EnumExtensions.GetErtekelesTipusDictionaryItems(parent.TanevId, true).Select(x => x.Id).ToList(), IsKellKapcsolodoCsoportok = true }; DataSet tanulokErtekelesselDataSet = h.TanuloErtekelesDal().GetTanuloErtekelesListDataSet(tanuloErtekelesListPco); List osztalyTanuloi = parent.OsztalyTanuloi(model.FromDDL.Value, model.Datum); var osztalyTanuloiDict = osztalyTanuloi.GroupBy(t => int.Parse(t.Value)).Select(t => new { Id = t.Key, Besorolasok = t.Select(d => d.BesorolasDatum).ToList(), AmiOsztalyokSzama = feladatKategoriaId == OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas ? (int?)(new TanuloHelper(parent.ConnectionType).GetTanuloAmiOsztalyainakSzama(t.Key, model.Datum)) : null }).ToDictionary(t => t.Id); foreach (DataRow ertekeles in tanulokErtekelesselDataSet.Tables[0].Rows) { var tanuloId = ertekeles.Field("TanuloId"); var ertekelesDatuma = ertekeles.Field("Datum"); if (osztalyTanuloiDict.TryGetValue(tanuloId, out var tanulo) && tanulo.Besorolasok.Count == 1) { var besorolasDatuma = tanulo.Besorolasok.Single(); if (besorolasDatuma.HasValue) { var osztalybontasId = ertekeles.Field("OsztalybontasId"); var osztalyCsoportId = ertekeles.Field("OsztalyCsoportId"); if (CheckTanuloErtekelesVizsgalatAmiOsztalyokEseten(feladatKategoriaId, tanulo.AmiOsztalyokSzama, osztalybontasId, osztalyCsoportId, model.FromDDL.Value)) { var kisorolasDatuma = model.Datum; if (ertekelesDatuma >= kisorolasDatuma) { tanulokErtekelessel.Add(tanuloId); } } } } continue; } return tanulokErtekelessel.Distinct().ToList(); } private bool CheckTanuloErtekelesVizsgalatAmiOsztalyokEseten(OktNevelesiKategoriaEnum feladatKategoriaId, int? tanuloAmiOsztalyainakSzama, int? ertekelesOsztalybontasId, int ertekelesOsztalyCsoportId, int osztalyCsoportId) { // Ha nem AMI, vagy 1 osztályba jár, akkor muszáj vizsgálni az értékelést. if (feladatKategoriaId != OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas || tanuloAmiOsztalyainakSzama == 1) { return true; } // Ha AMI és több osztály osztályba is jár, akkor csak azokat az értékeléseket kell vizsgálni, // amit az adott osztályba, illetve az osztálybontott csoportokon belül szerzett. if (ertekelesOsztalyCsoportId == osztalyCsoportId || ertekelesOsztalybontasId == osztalyCsoportId) { return true; } return false; } private List GetTanulokMulasztassal(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum feladatKategoriaId) { List tanulokMulasztassal = new List(); MulasztasKeresesePCO mulasztasKeresesePCO = new MulasztasKeresesePCO() { TanevId = parent.TanevId, OsztCsop = model.FromDDL.Value, FeladatKategoriaId = (int)feladatKategoriaId, IsKellKapcsolodoCsoportok = true }; DataSet tanulokMulasztassalDataSet = h.MulasztasDal().GetMulasztasDataSet(mulasztasKeresesePCO); List osztalyTanuloi = parent.OsztalyTanuloi(model.FromDDL.Value, model.Datum); foreach (DataRow mulasztas in tanulokMulasztassalDataSet.Tables[0].Rows) { var tanuloId = mulasztas.Field("TanuloId"); var mulasztasDatuma = mulasztas.Field("Datum"); var tanuloBesorolasDS = osztalyTanuloi.Where(t => int.Parse(t.Value) == tanuloId).Select(b => b.BesorolasDatum).ToList(); if (tanuloBesorolasDS.Count == 1) { var besorolasDatuma = tanuloBesorolasDS[0]; var kisorolasDatuma = model.Datum; if (!besorolasDatuma.HasValue) { continue; } if (mulasztasDatuma >= kisorolasDatuma) { tanulokMulasztassal.Add(tanuloId); } } continue; } return tanulokMulasztassal.Distinct().ToList(); } public string Amikepzes(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: false); List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); if (model.FromDDL.HasValue && model.FromDDL.Value == 0) { foreach (var tanulo in tanuloIds) { if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } } return string.Empty; } if (!parent.TryGetOsztaly(model.FromDDL.Value, h, out IOsztaly osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var sikeresenKisoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas, h); var hasError = false; var tanuloNemTagjaOCsADatumAlatt = new List(); var tanulokRendelkeznekErtekelessel = new List(); var tanulokRendelkeznekMulasztassal = new List(); var tanuloTagjaNemBontottCsoportnakDeOsztalynakNem = new List(); try { var tanulokErtekelessel = GetTanulokErtekelessel(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); var tanulokMulasztassal = GetTanulokMulasztassal(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); foreach (var tanulo in tanuloIds) { if (validate.TanuloNemTagjaOCsADatumAlatt(tanulo, model.FromDDL.Value)) { hasError = true; tanuloNemTagjaOCsADatumAlatt.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokErtekelessel.Contains(tanulo)) { hasError = true; tanulokRendelkeznekErtekelessel.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokMulasztassal.Contains(tanulo)) { hasError = true; tanulokRendelkeznekMulasztassal.Add(validate.TanuloAdatok[tanulo].Nev); continue; } var (isError, message, osztallyalNemLefedettCsoportNevek) = parent.DeleteBesorolasValidate(tanulo, model.FromDDL.Value, false); if (isError) { hasError = true; tanuloTagjaNemBontottCsoportnakDeOsztalynakNem.Add($"{validate.TanuloAdatok[tanulo].Nev} ({osztallyalNemLefedettCsoportNevek})"); } var isKellFeluletenMegadottZaradekRogzitese = model.ToElements.Single(i => i.Id == tanulo).IsKellFeluletenMegadottZaradekRogzitese; AmiOsztalyKisorolas(tanulo, osztaly, model.Datum.Value, model.Zaradek, isKellFeluletenMegadottZaradekRogzitese); if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } sikeresenKisoroltTanulok.Add(tanulo); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenKisoroltTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloNemTagjaOCsADatumAlatt, tanuloNemTagjaOCsADatumAlatt); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekErtekelessel, tanulokRendelkeznekErtekelessel); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekMulasztassal, tanulokRendelkeznekMulasztassal); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.ATanuloNemTorolhetoAzOsztalybolMertTagjaEgyVagyTobbNemOsztalybontottCsoportnak, tanuloTagjaNemBontottCsoportnakDeOsztalynakNem); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Kollegium(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: false); List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); if (model.FromDDL.HasValue && model.FromDDL.Value == 0) { foreach (var tanulo in tanuloIds) { if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } } return string.Empty; } if (!parent.TryGetOsztaly(model.FromDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var sikeresenKisoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); var hasError = false; var tanuloNemTagjaOCsADatumAlatt = new List(); var tanulokRendelkeznekErtekelessel = new List(); var tanulokRendelkeznekMulasztassal = new List(); var tanuloTagjaNemBontottCsoportnakDeOsztalynakNem = new List(); try { var tanulokErtekelessel = GetTanulokErtekelessel(model, OktNevelesiKategoriaEnum.Kollegium); var tanulokMulasztassal = GetTanulokMulasztassal(model, OktNevelesiKategoriaEnum.Kollegium); foreach (var tanulo in tanuloIds) { if (validate.TanuloNemTagjaOCsADatumAlatt(tanulo, model.FromDDL.Value)) { hasError = true; tanuloNemTagjaOCsADatumAlatt.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokErtekelessel.Contains(tanulo)) { hasError = true; tanulokRendelkeznekErtekelessel.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokMulasztassal.Contains(tanulo)) { hasError = true; tanulokRendelkeznekMulasztassal.Add(validate.TanuloAdatok[tanulo].Nev); continue; } var (isError, message, osztallyalNemLefedettCsoportNevek) = parent.DeleteBesorolasValidate(tanulo, model.FromDDL.Value, false); if (isError) { hasError = true; tanuloTagjaNemBontottCsoportnakDeOsztalynakNem.Add($"{validate.TanuloAdatok[tanulo].Nev} ({osztallyalNemLefedettCsoportNevek})"); } KollegiumOsztalyKisorolas(tanulo, model.Datum.Value, model.Zaradek); if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } sikeresenKisoroltTanulok.Add(tanulo); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenKisoroltTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloNemTagjaOCsADatumAlatt, tanuloNemTagjaOCsADatumAlatt); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekErtekelessel, tanulokRendelkeznekErtekelessel); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekMulasztassal, tanulokRendelkeznekMulasztassal); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.ATanuloNemTorolhetoAzOsztalybolMertTagjaEgyVagyTobbNemOsztalybontottCsoportnak, tanuloTagjaNemBontottCsoportnakDeOsztalynakNem); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string EGYMI(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo = null) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: false); List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); if (model.FromDDL.HasValue && model.FromDDL.Value == 0) { foreach (var tanulo in tanuloIds) { if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } } return string.Empty; } if (!parent.TryGetOsztaly(model.FromDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var sikeresenKisoroltTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); var hasError = false; var tanuloNemTagjaOCsADatumAlatt = new List(); var tanulokRendelkeznekErtekelessel = new List(); var tanulokRendelkeznekMulasztassal = new List(); var tanuloTagjaNemBontottCsoportnakDeOsztalynakNem = new List(); try { var tanulokErtekelessel = GetTanulokErtekelessel(model, OktNevelesiKategoriaEnum.EGYMI); var tanulokMulasztassal = GetTanulokMulasztassal(model, OktNevelesiKategoriaEnum.EGYMI); foreach (var tanulo in tanuloIds) { if (validate.TanuloNemTagjaOCsADatumAlatt(tanulo, model.FromDDL.Value)) { hasError = true; tanuloNemTagjaOCsADatumAlatt.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokErtekelessel.Contains(tanulo)) { hasError = true; tanulokRendelkeznekErtekelessel.Add(validate.TanuloAdatok[tanulo].Nev); continue; } if (tanulokMulasztassal.Contains(tanulo)) { hasError = true; tanulokRendelkeznekMulasztassal.Add(validate.TanuloAdatok[tanulo].Nev); continue; } var (isError, message, osztallyalNemLefedettCsoportNevek) = parent.DeleteBesorolasValidate(tanulo, model.FromDDL.Value, false); if (isError) { hasError = true; tanuloTagjaNemBontottCsoportnakDeOsztalynakNem.Add($"{validate.TanuloAdatok[tanulo].Nev} ({osztallyalNemLefedettCsoportNevek})"); } EGYMIOsztalyKisorolas(tanulo, model.Datum.Value, model.Zaradek); if (model.ToElements.Any(x => x.Id == tanulo && x.JogviszonyCount > 0)) { var JogviszontIds = model.ToElements.First(x => x.Id == tanulo && x.JogviszonyCount > 0).JogviszonyIds.Split(',').ToList().Select(y => Convert.ToInt32(y)).ToList(); parent.KisoroltTanuloJogviszonyMegszuntetese(JogviszontIds, jogviszonyCo, h, parent.kovTanevId); } sikeresenKisoroltTanulok.Add(tanulo); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenKisoroltTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloNemTagjaOCsADatumAlatt, tanuloNemTagjaOCsADatumAlatt); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekErtekelessel, tanulokRendelkeznekErtekelessel); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanulokRendelkeznekMulasztassal, tanulokRendelkeznekMulasztassal); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.ATanuloNemTorolhetoAzOsztalybolMertTagjaEgyVagyTobbNemOsztalybontottCsoportnak, tanuloTagjaNemBontottCsoportnakDeOsztalynakNem); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private void AlapKepzesOsztalyKisorolas(int tanuloId, DateTime date, SorolasZaradek zaradek, bool isKellFeluletenMegadottZaradekRogzitese) { var tanulo = TanuloDal.Get(tanuloId); try { var helper = new OsztalyCsoportHelper(parent.ConnectionType); foreach (var tcs in tanulo.OsztalyCsoport.Where(x => x.BelepesDatum <= date && (x.KilepesDatum == null || x.KilepesDatum > date) && !x.Torolt && x.OsztalyCsoport.FeladatKategoriaId == (int)OktNevelesiKategoriaEnum.NevelesOktatas)) { var isOsztaly = helper.GetIsOsztaly(tcs.OsztalyCsoportId); DeleteBesorolas(tcs, date, zaradek, (isKellFeluletenMegadottZaradekRogzitese && isOsztaly)); } } catch (BlException) { throw; } catch (Exception e) { try { throw new BlException($"{tanulo.NyomtatasiNev} {ErrorResource.KisorolasaKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } } } public void AmiOsztalyKisorolas(int tanuloId, IOsztaly osztaly, DateTime date, SorolasZaradek zaradek, bool isKellFeluletenMegadottZaradekRogzitese = true) { var tanulo = TanuloDal.Get(tanuloId); try { var helper = new OsztalyCsoportHelper(parent.ConnectionType); var list = new List<(int Id, string Nev, int TanuloCsoportId, int? CsoportId, int? OsztalybontasId, bool AutoEgyeni, DateTime? CsoportLetrehozasDatuma)>(); foreach (DataRow row in TanuloCsoportDal.GetTanuloOsztalyKapcsolatok(osztaly.TanevId, tanuloId, date, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas).Tables[0].Rows) { list.Add((SDAConvert.ToInt32(row["Id"]), SDAConvert.ToString(row["Nev"]), SDAConvert.ToInt32(row["TanuloCsoportId"]), SDAConvert.ToNullableInt32(row["CsoportId"]), SDAConvert.ToNullableInt32(row["OsztalybontasId"]), SDAConvert.ToBooleanFromTF(row["IsAutoEgyeni"]), SDAConvert.ToDateTime(row["CsoportLetrehozasDatuma"]) )); } if (list.Any(x => x.CsoportId == null && x.Id != osztaly.ID)) /*van másik osztálya*/ { DeleteBesorolas(list.Single(x => x.Id == osztaly.ID), date, zaradek, isKellFeluletenMegadottZaradekRogzitese); foreach (var item in list.Where(x => x.OsztalybontasId == osztaly.ID)) { DeleteBesorolas(item, date, zaradek, false); } } else { foreach (var item in list) { var isOsztaly = helper.GetIsOsztaly(item.Id); DeleteBesorolas(item, date, zaradek, (isKellFeluletenMegadottZaradekRogzitese && isOsztaly)); } } } catch (BlException) { throw; } catch (Exception e) { try { throw new BlException($"{tanulo.NyomtatasiNev} {ErrorResource.KisorolasaKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } } } private void KollegiumOsztalyKisorolas(int tanuloId, DateTime date, SorolasZaradek zaradek) { var tanulo = TanuloDal.Get(tanuloId); try { var helper = new OsztalyCsoportHelper(parent.ConnectionType); foreach (var tcs in tanulo.OsztalyCsoport.Where(x => x.BelepesDatum <= date && (x.KilepesDatum == null || x.KilepesDatum > date) && !x.Torolt && x.OsztalyCsoport.FeladatKategoriaId == (int)OktNevelesiKategoriaEnum.Kollegium)) { var isOsztaly = helper.GetIsOsztaly(tcs.OsztalyCsoportId); DeleteBesorolas(tcs, date, zaradek, isOsztaly); } } catch (BlException) { throw; } catch (Exception e) { try { throw new BlException($"{tanulo.NyomtatasiNev} {ErrorResource.KisorolasaKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } } } private void EGYMIOsztalyKisorolas(int tanuloId, DateTime date, SorolasZaradek zaradek) { var tanulo = TanuloDal.Get(tanuloId); try { var helper = new OsztalyCsoportHelper(parent.ConnectionType); foreach (var tcs in tanulo.OsztalyCsoport.Where(x => x.BelepesDatum <= date && (x.KilepesDatum == null || x.KilepesDatum > date) && !x.Torolt && x.OsztalyCsoport.FeladatKategoriaId == (int)OktNevelesiKategoriaEnum.EGYMI)) { var isOsztaly = helper.GetIsOsztaly(tcs.OsztalyCsoportId); DeleteBesorolas(tcs, date, zaradek, isOsztaly); } } catch (BlException) { throw; } catch (Exception e) { try { throw new BlException($"{tanulo.NyomtatasiNev} {ErrorResource.KisorolasaKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(ErrorResource.NemKezeltAdatbazisHibaTortent, e); } } } public void DeleteBesorolas(ITanuloCsoport item, DateTime date, SorolasZaradek zaradek, bool isZaradekMentes = true) { DeleteBesorolas(item, 0, false, null, date, zaradek, isZaradekMentes); } private void DeleteBesorolas(ITanuloCsoport item, int? csoportId, bool autoEgyeni, DateTime? csoportLetrehozasDatum, DateTime kilepesDatum, SorolasZaradek zaradek, bool isZaradekMentes = true) { if (item.BelepesDatum == kilepesDatum) { Dal.CustomConnection.Run(parent.ConnectionType, handler => { var amiFoglalkozasok = item.OsztalyCsoport.Foglalkozasok.SelectMany(x => x.FoglalkozasAmiTanulo).Where(x => x.TanuloId == item.TanuloId); var foglalkozasAmiTanuloDal = handler.FoglalkozasAmiTanuloDal(); foreach (var amiFoglalkozasokItem in amiFoglalkozasok) { foglalkozasAmiTanuloDal.Delete(amiFoglalkozasokItem); } }); TanuloCsoportDal.Delete(item, logikai: true); if (autoEgyeni && csoportLetrehozasDatum.HasValue && csoportLetrehozasDatum.Value.Date == kilepesDatum.Date) { CsoportDal.Delete(csoportId.Value, parent.IntezmenyId, parent.TanevId); } } else { item.KilepesDatum = kilepesDatum; item.KilepesRogzitesDatum = DateTime.Now; if (csoportId > 0 && autoEgyeni) { var csoport = CsoportDal.Get(csoportId.Value); csoport.CsoportnaploZarasa = kilepesDatum; CsoportDal.Update(csoport); } TanuloCsoportDal.Update(item); if (isZaradekMentes) { SaveZaradek(parent.ConnectionType, zaradek, item.ID); } } } private void DeleteBesorolas((int Id, string Nev, int TanuloCsoportId, int? CsoportId, int? OsztalybontasId, bool AutoEgyeni, DateTime? CsoportLetrehozasDatuma) item, DateTime date, SorolasZaradek zaradek, bool isZaradekMentes = true) { var tcs = TanuloCsoportDal.Get(item.TanuloCsoportId); DeleteBesorolas(tcs, item.CsoportId, item.AutoEgyeni, item.CsoportLetrehozasDatuma, date, zaradek, isZaradekMentes); } } private class OsztalyBesorolasJavitasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloDal _tanuloDal; private IOsztalyDal _osztalyDal; private ICsoportDal _csoportDal; private IOsztalyCsoportDal _osztalyCsoportDal; private ITanuloCsoportDal _tanuloCsoportDal; private TanuloTanugyiAdatokHelper _tanuloTanugyiAdatokHelper; private CsoportKisorolaslLogic _csoportKisorolaslLogic; private OsztalybaSorolasElsoAlkalommalLogic _osztalybaSorolasLogic; private ITanuloDal TanuloDal => _tanuloDal ?? (_tanuloDal = h.Tanulo()); private IOsztalyCsoportDal OsztalyCSoportDal => _osztalyCsoportDal ?? (_osztalyCsoportDal = h.OsztalyCsoport()); private IOsztalyDal OsztalyDal => _osztalyDal ?? (_osztalyDal = h.Osztaly()); private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private ICsoportDal CsoportDal => _csoportDal ?? (_csoportDal = h.Csoport()); private TanuloTanugyiAdatokHelper TanuloTanugyiAdatok => _tanuloTanugyiAdatokHelper ?? (_tanuloTanugyiAdatokHelper = new TanuloTanugyiAdatokHelper(new DalHandlerConnectionType(parent.ConnectionType, h))); private CsoportKisorolaslLogic CsoportKisorolasLogic => _csoportKisorolaslLogic ?? (_csoportKisorolaslLogic = new CsoportKisorolaslLogic(parent, h)); private OsztalybaSorolasElsoAlkalommalLogic OsztalybaSorolasLogic => _osztalybaSorolasLogic ?? (_osztalybaSorolasLogic = new OsztalybaSorolasElsoAlkalommalLogic(parent, h)); public OsztalyBesorolasJavitasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } if (model.FromDDL.Value == model.ToDDL.Value) { throw new BlException(OsztalyCsoportResource.ForrasCelOCsMegegyezik); } var datum = GetDatum(); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenAtsoroltTanulok = new List(); var errormessage = new List(); var hasError = false; try { var validate = new SorolasValidate(datum, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); foreach (var tanulo in model.ToElements) { var hasTanuloError = false; var fromOsztalyId = tanulo.Fromid.Value; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanulo.Id); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanulo.Id].Nev)); hasError |= true; continue; } var datumTol = tcsAdatok.Belepes; var datumIg = tcsAdatok.Kilepes.Value; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanulo.Id, datumTol, datumIg, OktNevelesiKategoriaEnum.NevelesOktatas, true, true); // NOTE: Turai Tamás kérésére téves besorolás javításakor a lenti hibától eltekintünk. messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanulo.Id, messages); } if (validate.BesorolasJavitasValidate(tanulo.Id, datumTol, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanulo.Id].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } AlapKepzesOsztalyBesorolasJavitas(tanulo.Id, tanulo.Fromid.Value, model.ToDDL.Value, tcsAdatok.Belepes, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresenAtsoroltTanulok.Add(tanulo.Id); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenAtsoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzoAdatok(sikeresenAtsoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzesiJuttatasok(sikeresenAtsoroltTanulok, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Amikepzes(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } if (model.FromDDL.Value == model.ToDDL.Value) { throw new BlException(OsztalyCsoportResource.ForrasCelOCsMegegyezik); } var datum = GetDatum(); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenAtsoroltTanulok = new List(); var errormessage = new List(); var hasError = false; try { var validate = new SorolasValidate(datum, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas, h); var egyeniCsoportok = OsztalybaSorolasLogic.GetOsztalyEgyeniCSoportjai(model.ToDDL.Value); foreach (var tanulo in model.ToElements) { var hasTanuloError = false; var fromOsztalyId = tanulo.Fromid.Value; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanulo.Id); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanulo.Id].Nev)); hasError |= true; continue; } var datumTol = tcsAdatok.Belepes; var datumIg = datum; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanulo.Id, datumTol, datumIg, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas, true, true); // NOTE: Turai Tamás kérésére téves besorolás javításakor a lenti hibától eltekintünk. messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanulo.Id, messages); } if (validate.BesorolasJavitasValidate(tanulo.Id, tcsAdatok.Belepes, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanulo.Id].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } AmiOsztalyBesorolasJavitas(tanulo.Id, tanulo.Fromid.Value, model.ToDDL.Value, tcsAdatok.Belepes, egyeniCsoportok, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresenAtsoroltTanulok.Add(tanulo.Id); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenAtsoroltTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Kollegium(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } if (model.FromDDL.Value == model.ToDDL.Value) { throw new BlException(OsztalyCsoportResource.ForrasCelOCsMegegyezik); } var datum = GetDatum(); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenAtsoroltTanulok = new List(); var errormessage = new List(); var hasError = false; try { var validate = new SorolasValidate(datum, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); foreach (var tanulo in model.ToElements) { var hasTanuloError = false; var fromOsztalyId = tanulo.Fromid.Value; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanulo.Id); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanulo.Id].Nev)); hasError |= true; continue; } var datumTol = tcsAdatok.Belepes; var datumIg = datum; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanulo.Id, datumTol, datumIg, OktNevelesiKategoriaEnum.Kollegium, true, true); // NOTE: Turai Tamás kérésére téves besorolás javításakor a lenti hibától eltekintünk. messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanulo.Id, messages); } if (validate.BesorolasJavitasValidate(tanulo.Id, datumTol, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanulo.Id].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } KollegiumOsztalyBesorolasJavitas(tanulo.Id, tanulo.Fromid.Value, model.ToDDL.Value, tcsAdatok.Belepes, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresenAtsoroltTanulok.Add(tanulo.Id); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenAtsoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string EGYMI(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } if (model.FromDDL.Value == model.ToDDL.Value) { throw new BlException(OsztalyCsoportResource.ForrasCelOCsMegegyezik); } var datum = GetDatum(); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenAtsoroltTanulok = new List(); var errormessage = new List(); var hasError = false; try { var validate = new SorolasValidate(datum, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); foreach (var tanulo in model.ToElements) { var hasTanuloError = false; var fromOsztalyId = tanulo.Fromid.Value; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanulo.Id); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanulo.Id].Nev)); hasError |= true; continue; } var datumTol = tcsAdatok.Belepes; var datumIg = datum; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanulo.Id, datumTol, datumIg, OktNevelesiKategoriaEnum.EGYMI, true, true); // NOTE: Turai Tamás kérésére téves besorolás javításakor a lenti hibától eltekintünk. messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanulo.Id, messages); } if (validate.BesorolasJavitasValidate(tanulo.Id, datumTol, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanulo.Id].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } EGYMIOsztalyBesorolasJavitas(tanulo.Id, tanulo.Fromid.Value, model.ToDDL.Value, tcsAdatok.Belepes, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresenAtsoroltTanulok.Add(tanulo.Id); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenAtsoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private void AlapKepzesOsztalyBesorolasJavitas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime date, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var toOsztaly = OsztalyDal.Get(toOsztalyId); TanuloCsoportDal.RemoveTanuloMulasztasByDate(tanuloId, fromOsztalyId, date); //Jelenlegi osztálya, ezt akarjuk javítani var tcsOld = tanulo.OsztalyCsoport.Single(x => x.OsztalyCsoportId == fromOsztalyId && x.BelepesDatum <= date && (x.KilepesDatum == null || x.KilepesDatum > date) && !x.Torolt); var tanuloElozoOsztalyKapcsolat = tanulo.OsztalyCsoport.Where(x => x.KilepesDatum == tcsOld.BelepesDatum.Value && OsztalyCSoportDal.IsOsztaly(x.OsztalyCsoportId, parent.TanevId) && !x.Torolt).ToList(); if (tanuloElozoOsztalyKapcsolat.Count > 0 && (tanuloElozoOsztalyKapcsolat.Single().OsztalyCsoportId == toOsztalyId)) { //Ha a tanulót nem is akarták átrakni, azaz visszakerül az előző osztályába, akkor a //rossz tanulócsoport rekordot töröljük (logikailag), az előző tanulócsoport kilépésdátumát pedig nullázzuk var tcsNew = tanuloElozoOsztalyKapcsolat.Single(); tcsNew.KilepesDatum = null; TanuloCsoportDal.Update(tcsNew); //tanugyi adatokat nem kell másolni, már van neki ehhez a kapcsolathoz CsoportKisorolasLogic.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, date); TanuloCsoportDal.Delete(tcsOld, logikai: true); //deleteket végig kell nétni } else { var tcsNew = TanuloCsoportDal.Get(); tcsNew.TanuloId = tanuloId; tcsNew.OsztalyCsoportId = toOsztalyId; tcsNew.BelepesDatum = tcsOld.BelepesDatum; tcsNew.BejegyzesIdopontja = tcsOld.BejegyzesIdopontja; tcsNew.TanevId = parent.TanevId; tcsNew.JogviszonyTipusID = toOsztaly.JogviszonyTipusId; TanuloCsoportDal.Delete(tcsOld, logikai: true); TanuloCsoportDal.Insert(tcsNew); CsoportKisorolasLogic.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, date); TanuloTanugyiAdatok.InsertTanugyiAdatForBesorolasJavitas(tcsOld.TanuloTanugyiAdatok, tcsNew.ID, toOsztaly, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); var fromOsztaly = OsztalyDal.Get(fromOsztalyId); if (fromOsztaly.SZMKKepviseloId != -1 && tcsOld.Tanulo.Gondviselo.Any(g => g.ID == fromOsztaly.SZMKKepviseloId)) { OsztalyDal.UpdateOsztalySZMKKepviseloIdToNull(tcsOld.OsztalyCsoportId, tcsOld.TanevId, tcsOld.IntezmenyId); } if (fromOsztaly.SZMKKepviseloHelyettesId != -1 && tcsOld.Tanulo.Gondviselo.Any(g => g.ID == fromOsztaly.SZMKKepviseloHelyettesId)) { OsztalyDal.UpdateOsztalySZMKKepviseloHelyettesIdToNull(tcsOld.OsztalyCsoportId, tcsOld.TanevId, tcsOld.IntezmenyId); } } } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException(string.Format("{0} {1}", tanulo.NyomtatasiNev, OsztalyCsoportResource.KisorolasKozbenHibaTortent /*átsorolása közben hiba történt*/), e); } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void AmiOsztalyBesorolasJavitas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime fromBelepesDatuma, List<(int Id, int TanuloId, int EgyeniCsoportId)> egyeniCsoportok, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var toOsztaly = OsztalyDal.Get(toOsztalyId); TanuloCsoportDal.RemoveTanuloMulasztasByDate(tanuloId, fromOsztalyId, fromBelepesDatuma); //Jelenlegi osztálya, ezt akarjuk javítani var javitandoTanuloCsoport = tanulo.OsztalyCsoport.Single(x => x.OsztalyCsoportId == fromOsztalyId && x.BelepesDatum <= fromBelepesDatuma && (x.KilepesDatum == null || x.KilepesDatum > fromBelepesDatuma) && !x.Torolt); var osztalybontottCsoportok = new List<(int Id, int CsoportId, bool AutoEgyeni, int CsoportTanuloSzam)>(); foreach (DataRow row in TanuloCsoportDal.GetTanuloOsztalyBontasosCsoportKapcsolatai(parent.TanevId, tanuloId, fromOsztalyId).Tables[0].Rows) { osztalybontottCsoportok.Add((SDAConvert.ToInt32(row["Id"]), SDAConvert.ToInt32(row["CsoportId"]), SDAConvert.ToBooleanFromTF(row["C_ISAUTOEGYENICSOPORT"]), SDAConvert.ToInt32(row["CsoportTanuloSzam"]) )); } var tcsNew = TanuloCsoportDal.Get(); tcsNew.TanuloId = tanuloId; tcsNew.OsztalyCsoportId = toOsztalyId; tcsNew.BelepesDatum = javitandoTanuloCsoport.BelepesDatum; tcsNew.BejegyzesIdopontja = javitandoTanuloCsoport.BejegyzesIdopontja; tcsNew.TanevId = parent.TanevId; if (osztalybontottCsoportok.Any(x => x.AutoEgyeni || x.CsoportTanuloSzam == 1) && toOsztaly.MuveszetiAgId == (int)MuveszetiAgEnum.ZenemuveszetiAg) { OsztalybaSorolasLogic.EgyeniCSoportLetrehozas(tanuloId, tanulo.NyomtatasiNev, tanulo.SzuletesiDatum, javitandoTanuloCsoport.BelepesDatum.Value, toOsztaly, egyeniCsoportok); } TanuloCsoportDal.Delete(javitandoTanuloCsoport, logikai: true); TanuloCsoportDal.Insert(tcsNew); TanuloTanugyiAdatok.InsertTanugyiAdatForBesorolasJavitas(javitandoTanuloCsoport.TanuloTanugyiAdatok, tcsNew.ID, toOsztaly, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); foreach (var (Id, CsoportId, AutoEgyeni, CsoportTanuloSzam) in osztalybontottCsoportok) { var tcs = TanuloCsoportDal.Get(Id); if (tcs.BelepesDatum == fromBelepesDatuma.Date) { TanuloCsoportDal.Delete(tcs, logikai: true); if (AutoEgyeni || CsoportTanuloSzam == 1) { CsoportDal.Delete(CsoportId, parent.IntezmenyId, parent.TanevId); } } else { tcs.KilepesDatum = fromBelepesDatuma; TanuloCsoportDal.Update(tcs); } } } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void KollegiumOsztalyBesorolasJavitas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime date, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var toOsztaly = OsztalyDal.Get(toOsztalyId); TanuloCsoportDal.RemoveTanuloMulasztasByDate(tanuloId, fromOsztalyId, date); //Jelenlegi osztálya, ezt akarjuk javítani var tcsOld = tanulo.OsztalyCsoport.Single(x => x.OsztalyCsoportId == fromOsztalyId && x.BelepesDatum <= date && (x.KilepesDatum == null || x.KilepesDatum > date) && !x.Torolt); var tanuloElozoOsztalyKapcsolat = tanulo.OsztalyCsoport.Where(x => x.KilepesDatum == tcsOld.BelepesDatum.Value && OsztalyCSoportDal.IsOsztaly(x.OsztalyCsoportId, parent.TanevId) && !x.Torolt).ToList(); if (tanuloElozoOsztalyKapcsolat.Count > 0 && (tanuloElozoOsztalyKapcsolat.Single().OsztalyCsoportId == toOsztalyId)) { //Ha a tanulót nem is akarták átrakni, azaz visszakerül az előző osztályába, akkor a //rossz tanulócsoport rekordot töröljük (logikailag), az előző tanulócsoport kilépésdátumát pedig nullázzuk var tcsNew = tanuloElozoOsztalyKapcsolat.Single(); tcsNew.KilepesDatum = null; TanuloCsoportDal.Update(tcsNew); //tanugyi adatokat nem kell másolni, már van neki ehhez a kapcsolathoz CsoportKisorolasLogic.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, date); TanuloCsoportDal.Delete(tcsOld, logikai: true); //deleteket végig kell nétni } else { var tcsNew = TanuloCsoportDal.Get(); tcsNew.TanuloId = tanuloId; tcsNew.OsztalyCsoportId = toOsztalyId; tcsNew.BelepesDatum = tcsOld.BelepesDatum; tcsNew.BejegyzesIdopontja = tcsOld.BejegyzesIdopontja; tcsNew.TanevId = parent.TanevId; TanuloCsoportDal.Delete(tcsOld, logikai: true); TanuloCsoportDal.Insert(tcsNew); CsoportKisorolasLogic.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, date); TanuloTanugyiAdatok.InsertTanugyiAdatForBesorolasJavitas(tcsOld.TanuloTanugyiAdatok, tcsNew.ID, toOsztaly, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException(string.Format("{0} {1}", tanulo.NyomtatasiNev, OsztalyCsoportResource.KisorolasKozbenHibaTortent/*átsorolása közben hiba történt*/), e); } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void EGYMIOsztalyBesorolasJavitas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime date, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var toOsztaly = OsztalyDal.Get(toOsztalyId); TanuloCsoportDal.RemoveTanuloMulasztasByDate(tanuloId, fromOsztalyId, date); //Jelenlegi osztálya, ezt akarjuk javítani var tcsOld = tanulo.OsztalyCsoport.Single(x => x.OsztalyCsoportId == fromOsztalyId && x.BelepesDatum <= date && (x.KilepesDatum == null || x.KilepesDatum > date) && !x.Torolt); var tanuloElozoOsztalyKapcsolat = tanulo.OsztalyCsoport.Where(x => x.KilepesDatum == tcsOld.BelepesDatum.Value && OsztalyCSoportDal.IsOsztaly(x.OsztalyCsoportId, parent.TanevId) && !x.Torolt).ToList(); if (tanuloElozoOsztalyKapcsolat.Count > 0 && (tanuloElozoOsztalyKapcsolat.Single().OsztalyCsoportId == toOsztalyId)) { //Ha a tanulót nem is akarták átrakni, azaz visszakerül az előző osztályába, akkor a //rossz tanulócsoport rekordot töröljük (logikailag), az előző tanulócsoport kilépésdátumát pedig nullázzuk var tcsNew = tanuloElozoOsztalyKapcsolat.Single(); tcsNew.KilepesDatum = null; TanuloCsoportDal.Update(tcsNew); //tanugyi adatokat nem kell másolni, már van neki ehhez a kapcsolathoz CsoportKisorolasLogic.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, date); TanuloCsoportDal.Delete(tcsOld, logikai: true); //deleteket végig kell nétni } else { var tcsNew = TanuloCsoportDal.Get(); tcsNew.TanuloId = tanuloId; tcsNew.OsztalyCsoportId = toOsztalyId; tcsNew.BelepesDatum = tcsOld.BelepesDatum; tcsNew.BejegyzesIdopontja = tcsOld.BejegyzesIdopontja; tcsNew.TanevId = parent.TanevId; TanuloCsoportDal.Delete(tcsOld, logikai: true); TanuloCsoportDal.Insert(tcsNew); var fromOsztaly = OsztalyDal.Get(fromOsztalyId); if (fromOsztaly.SZMKKepviseloId != -1 && tcsOld.Tanulo.Gondviselo.Any(g => g.ID == fromOsztaly.SZMKKepviseloId)) { OsztalyDal.UpdateOsztalySZMKKepviseloIdToNull(tcsOld.OsztalyCsoportId, tcsOld.TanevId, tcsOld.IntezmenyId); } if (fromOsztaly.SZMKKepviseloHelyettesId != -1 && tcsOld.Tanulo.Gondviselo.Any(g => g.ID == fromOsztaly.SZMKKepviseloHelyettesId)) { OsztalyDal.UpdateOsztalySZMKKepviseloHelyettesIdToNull(tcsOld.OsztalyCsoportId, tcsOld.TanevId, tcsOld.IntezmenyId); } CsoportKisorolasLogic.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, date); TanuloTanugyiAdatok.InsertTanugyiAdatForBesorolasJavitas(tcsOld.TanuloTanugyiAdatok, tcsNew.ID, toOsztaly, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException(string.Format("{0} {1}", tanulo.NyomtatasiNev, OsztalyCsoportResource.KisorolasKozbenHibaTortent/*átsorolása közben hiba történt*/), e); } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private DateTime GetDatum() { DateTime datum; if (parent.kovTanev) { var th = new TanevHelper(parent.ConnectionType); var kovTanevCo = th.GetTanevInfo(); datum = kovTanevCo.KezdoNap; } else { datum = DateTime.Now; } return datum; } } private class OsztalyAtsorolasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private readonly bool osszesCsoportbolKisorolas; private ITanuloDal _tanuloDal; private IOsztalyDal _osztalyDal; private ITanuloCsoportDal _tanuloCsoportDal; private TanuloHelper _tanuloHelper; private TanuloTanugyiAdatokHelper _tanuloTanugyiAdatokHelper; private CsoportKisorolaslLogic _csoportKisorolaslLogic; private OsztalyKisorolaslLogic _osztalyKisorolaslLogic; private ITanuloDal TanuloDal => _tanuloDal ?? (_tanuloDal = h.Tanulo()); private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private IOsztalyDal OsztalyDal => _osztalyDal ?? (_osztalyDal = h.Osztaly()); private TanuloHelper TanuloHelper => _tanuloHelper ?? (_tanuloHelper = new TanuloHelper(parent.ConnectionType)); private TanuloTanugyiAdatokHelper TanuloTanugyiAdatok => _tanuloTanugyiAdatokHelper ?? (_tanuloTanugyiAdatokHelper = new TanuloTanugyiAdatokHelper(new DalHandlerConnectionType(parent.ConnectionType, h))); private CsoportKisorolaslLogic CsoportKisorolasl => _csoportKisorolaslLogic ?? (_csoportKisorolaslLogic = new CsoportKisorolaslLogic(parent, h)); private OsztalyKisorolaslLogic OsztalyKisorolasl => _osztalyKisorolaslLogic ?? (_osztalyKisorolaslLogic = new OsztalyKisorolaslLogic(parent, h)); public OsztalyAtsorolasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; osszesCsoportbolKisorolas = new SystemSettingsHelper(new DalHandlerConnectionType(parent.ConnectionType, h)).GetSystemSettingValue(Enums.RendszerBeallitasTipusEnum.Tanulok_osztalyok_kozotti_atsorolasa_eseten_a_csoportbontasokon_kivuli_csoportokbol_valo_kilepteteset_is_automatikusan_elvegezze_a_program); } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var sikeresAtsoroltTanulok = new List(); var errormessage = new List(); var hasError = false; try { foreach (var tanuloId in tanuloIds) { var hasTanuloError = false; var fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; var isKellFeluletenMegadottZaradekRogzitese = model.ToElements.Single(i => i.Id == tanuloId).IsKellFeluletenMegadottZaradekRogzitese; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanuloId); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanuloId].Nev)); hasError |= true; continue; } var datumTol = model.Datum.Value.AddDays(1); var datumIg = tcsAdatok.Kilepes.Value; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanuloId, datumTol, datumIg, OktNevelesiKategoriaEnum.NevelesOktatas, true, true); // KRETA2-7433 messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanOsztalybontottCsoportBesorolasa && m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); datumTol = tcsAdatok.Kilepes.Value.AddDays(1); datumIg = model.Datum.Value; messages.AddRange(parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanuloId, datumTol, datumIg, OktNevelesiKategoriaEnum.NevelesOktatas, false, true)); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanuloId, messages); } if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } AlapKepzesOsztalyAtsorolas(tanuloId, fromOsztalyId, model.ToDDL.Value, model.Datum.Value, model.Zaradek, osszesCsoportbolKisorolas, isKellFeluletenMegadottZaradekRogzitese, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresAtsoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzoAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Kollegium(IOsztalyCsoportbaSorolas model) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresAtsoroltTanulok = new List(); var errormessage = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); var hasError = false; try { foreach (var tanuloId in tanuloIds) { var hasTanuloError = false; var fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanuloId); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanuloId].Nev)); hasError |= true; continue; } var datumTol = model.Datum.Value.AddDays(1); var datumIg = tcsAdatok.Kilepes.Value; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanuloId, datumTol, datumIg, OktNevelesiKategoriaEnum.Kollegium, true, true); // KRETA2-7433 messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanOsztalybontottCsoportBesorolasa && m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); datumTol = tcsAdatok.Kilepes.Value.AddDays(1); datumIg = model.Datum.Value; messages.AddRange(parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanuloId, datumTol, datumIg, OktNevelesiKategoriaEnum.Kollegium, false, true)); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanuloId, messages); } if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } KollegiumOsztalyAtsorolas(tanuloId, fromOsztalyId, model.ToDDL.Value, model.Datum.Value, model.Zaradek, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresAtsoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string EGYMI(IOsztalyCsoportbaSorolas model) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresAtsoroltTanulok = new List(); var errormessage = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); var hasError = false; try { foreach (var tanuloId in tanuloIds) { var hasTanuloError = false; var fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; var tcsAdatok = validate.GetOsztalyCsoportTanuloCsoportAdatok(fromOsztalyId, tanuloId); if (tcsAdatok == null) { errormessage.Add(string.Format(OsztalyCsoportResource.OsztalybaSorolasATanuloNemTagjaAzOsztalynak, validate.TanuloAdatok[tanuloId].Nev)); hasError |= true; continue; } var datumTol = model.Datum.Value.AddDays(1); var datumIg = tcsAdatok.Kilepes.Value; var messages = parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanuloId, datumTol, datumIg, OktNevelesiKategoriaEnum.EGYMI, true, true); // KRETA2-7433 messages = messages.Where(m => m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanOsztalybontottCsoportBesorolasa && m.Oka != OsztalybaSorolasModositasValidacioHibaEnum.VanCsoportBesorolasaOsztalybesorolasNelkul).ToList(); datumTol = tcsAdatok.Kilepes.Value.AddDays(1); datumIg = model.Datum.Value; messages.AddRange(parent.GetOsztalyBesorolasModositasValidacio(h, fromOsztalyId, model.ToDDL.Value, tanuloId, datumTol, datumIg, OktNevelesiKategoriaEnum.EGYMI, false, true)); if (messages.Count > 0) { hasTanuloError = true; AddOsztalyBesorolasVegenekModositasaErrorMessages(validate, errormessage, tanuloId, messages); } if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatum, out var limitBesorolasOsztalyId) && limitBesorolasOsztalyId != fromOsztalyId) { hasTanuloError = true; var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); errormessage.Add(hibaUzenet); } if (hasTanuloError) { hasError |= hasTanuloError; continue; } EGYMIOsztalyAtsorolas(tanuloId, fromOsztalyId, model.ToDDL.Value, model.Datum.Value, model.Zaradek, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresAtsoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private void AlapKepzesOsztalyAtsorolas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime belepesDatum, SorolasZaradek zaradek, bool kisorolasOsszeCsoprotbol, bool isKellFeluletenMegadottZaradekRogzitese, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var tanuloAktOsztaly = tanulo.OsztalyCsoport.First(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > belepesDatum) && !x.Torolt); tanuloAktOsztaly.TanuloTanugyiAdatok.NaploSorszam = null; tanuloAktOsztaly.TanuloTanugyiAdatok.TorzslapSzam = null; var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = tanulo.ID; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.JogviszonyTipusID = tanuloUjOsztalya.JogviszonyTipusId; tcsUj.TanevId = parent.TanevId; TanuloCsoportDal.Insert(tcsUj); OsztalyKisorolasl.DeleteBesorolas(tanuloAktOsztaly, belepesDatum, zaradek, isKellFeluletenMegadottZaradekRogzitese); if (osszesCsoportbolKisorolas) { CsoportKisorolasl.KisorolasOsszesCsoportbol(tanuloId, fromOsztalyId, belepesDatum); } else { CsoportKisorolasl.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, belepesDatum); } TanuloTanugyiAdatok.InsertTanugyiAdatForAtsorolas(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); if (tanulo.IsMulasztasMiattKizart) { tanulo.IsMulasztasMiattKizart = false; TanuloDal.Update(tanulo); } } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void KollegiumOsztalyAtsorolas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime belepesDatum, SorolasZaradek zaradek, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var tanuloAktOsztaly = tanulo.OsztalyCsoport.First(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > belepesDatum) && !x.Torolt); var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = tanulo.ID; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.TanevId = parent.TanevId; TanuloCsoportDal.Insert(tcsUj); SaveZaradek(parent.ConnectionType, zaradek, tcsUj.ID); OsztalyKisorolasl.DeleteBesorolas(tanuloAktOsztaly, belepesDatum, zaradek); if (osszesCsoportbolKisorolas) { CsoportKisorolasl.KisorolasOsszesCsoportbol(tanuloId, fromOsztalyId, belepesDatum); } else { CsoportKisorolasl.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, belepesDatum); } TanuloTanugyiAdatok.InsertTanugyiAdatForAtsorolas(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void EGYMIOsztalyAtsorolas(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime belepesDatum, SorolasZaradek zaradek, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var tanuloAktOsztaly = tanulo.OsztalyCsoport.First(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > belepesDatum) && !x.Torolt); var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = tanulo.ID; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.TanevId = parent.TanevId; TanuloCsoportDal.Insert(tcsUj); SaveZaradek(parent.ConnectionType, zaradek, tcsUj.ID); OsztalyKisorolasl.DeleteBesorolas(tanuloAktOsztaly, belepesDatum, zaradek); if (osszesCsoportbolKisorolas) { CsoportKisorolasl.KisorolasOsszesCsoportbol(tanuloId, fromOsztalyId, belepesDatum); } else { CsoportKisorolasl.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, belepesDatum); } TanuloTanugyiAdatok.InsertTanugyiAdatForAtsorolas(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } } private class OsztalyVisszairatkoztatasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloDal _tanuloDal; private IOsztalyDal _osztalyDal; private ITanuloCsoportDal _tanuloCsoportDal; private IFelhasznaloDal _felhasznaloDal; private TanuloTanugyiAdatokHelper _tanuloTanugyiAdatokHelper; private TanuloHelper _tanuloHelper; private ITanuloDal TanuloDal => _tanuloDal ?? (_tanuloDal = h.Tanulo()); private IOsztalyDal OsztalyDal => _osztalyDal ?? (_osztalyDal = h.Osztaly()); private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private IFelhasznaloDal FelhasznaloDal => _felhasznaloDal ?? (_felhasznaloDal = h.Felhasznalo()); private TanuloTanugyiAdatokHelper TanuloTanugyiAdatok => _tanuloTanugyiAdatokHelper ?? (_tanuloTanugyiAdatokHelper = new TanuloTanugyiAdatokHelper(new DalHandlerConnectionType(parent.ConnectionType, h))); private TanuloHelper TanuloHelper => _tanuloHelper ?? (_tanuloHelper = new TanuloHelper(parent.ConnectionType)); public OsztalyVisszairatkoztatasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { return !parent.kovTanev ? AlapAktTanevVisszairatkoztatas(model, jogviszonyCo) : AlapKovTanevVisszairatkoztatas(model, jogviszonyCo); } public string Kollegium(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { return !parent.kovTanev ? KollegiumAktTanevVisszairatkoztatas(model, jogviszonyCo) : KollegiumKovTanevVisszairatkoztatas(model, jogviszonyCo); } public string EGYMI(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { return !parent.kovTanev ? EGYMIAktTanevVisszairatkoztatas(model, jogviszonyCo) : EGYMIKovTanevVisszairatkoztatas(model, jogviszonyCo); } private string AlapAktTanevVisszairatkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenVisszairatkozottTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in tanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (!model.FromDDL.HasValue || model.FromDDL == parent.aktivTanevId) { AktTanevVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenVisszairatkozottTanulok.Add(tanuloId); } else { var aktTanevTanuloId = ElozoTanevekVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.FromDDL.Value, parent.TanevId, model.Datum.Value, model.Zaradek, ref validationErrorMessages); if (aktTanevTanuloId.IsEntityId()) { sikeresenVisszairatkozottTanulok.Add(aktTanevTanuloId.Value); } } } parent.VisszairatkozottTanuloJogviszonyMentes(sikeresenVisszairatkozottTanulok, model, jogviszonyCo, h, parent.kovTanevId); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenVisszairatkozottTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenVisszairatkozottTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzoAdatok(sikeresenVisszairatkozottTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzesiJuttatasok(sikeresenVisszairatkozottTanulok, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private string AlapKovTanevVisszairatkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); List aktualisTanuloIds = new List(); var sikeresenVisszairatkozottTanulok = new List(); foreach (var tanuloId in tanuloIds) { var tanuloEgyediAzonosito = FelhasznaloDal.GetFelhasznaloEgyediAzonosito(parent.IntezmenyId, tanuloId); var valosTanuloId = FelhasznaloDal.GetFelhasznaloByEgyediAzonositoAndTanev(tanuloEgyediAzonosito, parent.TanevId); aktualisTanuloIds.Add(valosTanuloId ?? tanuloId); } var validate = new SorolasValidate(model.Datum.Value, aktualisTanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in aktualisTanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (!model.FromDDL.HasValue || model.FromDDL == parent.kovTanevId) { KovTanevVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenVisszairatkozottTanulok.Add(tanuloId); } else { var aktTanevTanuloId = ElozoTanevekVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.FromDDL.Value, parent.TanevId, model.Datum.Value, model.Zaradek, ref validationErrorMessages); if (aktTanevTanuloId.IsEntityId()) { sikeresenVisszairatkozottTanulok.Add(aktTanevTanuloId.Value); } } } parent.VisszairatkozottTanuloJogviszonyMentes(sikeresenVisszairatkozottTanulok, model, jogviszonyCo, h, parent.kovTanevId); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenVisszairatkozottTanulok, model); parent.UpdateTanulokSzakkepzesiJuttatasok(sikeresenVisszairatkozottTanulok, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private string KollegiumAktTanevVisszairatkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenVisszairatkozottTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in tanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (!model.FromDDL.HasValue || model.FromDDL == parent.aktivTanevId) { AktTanevVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenVisszairatkozottTanulok.Add(tanuloId); } else { var aktTanevTanuloId = ElozoTanevekVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.FromDDL.Value, parent.TanevId, model.Datum.Value, model.Zaradek, ref validationErrorMessages); if (aktTanevTanuloId.IsEntityId()) { sikeresenVisszairatkozottTanulok.Add(aktTanevTanuloId.Value); } } } parent.VisszairatkozottTanuloJogviszonyMentes(sikeresenVisszairatkozottTanulok, model, jogviszonyCo, h, parent.kovTanevId); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenVisszairatkozottTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenVisszairatkozottTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private string KollegiumKovTanevVisszairatkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); List aktualisTanuloIds = new List(); var sikeresenVisszairatkozottTanulok = new List(); foreach (var tanuloId in tanuloIds) { var tanuloEgyediAzonosito = FelhasznaloDal.GetFelhasznaloEgyediAzonosito(parent.IntezmenyId, tanuloId); var valosTanuloId = FelhasznaloDal.GetFelhasznaloByEgyediAzonositoAndTanev(tanuloEgyediAzonosito, parent.TanevId); aktualisTanuloIds.Add(valosTanuloId ?? tanuloId); } var validate = new SorolasValidate(model.Datum.Value, aktualisTanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in aktualisTanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (!model.FromDDL.HasValue || model.FromDDL == parent.kovTanevId) { KovTanevVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenVisszairatkozottTanulok.Add(tanuloId); } else { var aktTanevTanuloId = ElozoTanevekVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.FromDDL.Value, parent.TanevId, model.Datum.Value, model.Zaradek, ref validationErrorMessages); if (aktTanevTanuloId.IsEntityId()) { sikeresenVisszairatkozottTanulok.Add(aktTanevTanuloId.Value); } } } parent.VisszairatkozottTanuloJogviszonyMentes(sikeresenVisszairatkozottTanulok, model, jogviszonyCo, h, parent.kovTanevId); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenVisszairatkozottTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private string EGYMIAktTanevVisszairatkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenVisszairatkozottTanulok = new List(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in tanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (!model.FromDDL.HasValue || model.FromDDL == parent.aktivTanevId) { AktTanevVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenVisszairatkozottTanulok.Add(tanuloId); } else { var aktTanevTanuloId = ElozoTanevekVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.FromDDL.Value, parent.TanevId, model.Datum.Value, model.Zaradek, ref validationErrorMessages); if (aktTanevTanuloId.IsEntityId()) { sikeresenVisszairatkozottTanulok.Add(aktTanevTanuloId.Value); } } } parent.VisszairatkozottTanuloJogviszonyMentes(sikeresenVisszairatkozottTanulok, model, jogviszonyCo, h, parent.kovTanevId); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenVisszairatkozottTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresenVisszairatkozottTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private string EGYMIKovTanevVisszairatkoztatas(IOsztalyCsoportbaSorolas model, JogviszonyCo jogviszonyCo) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, datum: true, fromDdl: true, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out _)) { throw new BlException(StringResourcesUtil.GetString(4028)); } List tanuloIds = model.ToElements.Select(i => i.Id).ToList(); List aktualisTanuloIds = new List(); var sikeresenVisszairatkozottTanulok = new List(); foreach (var tanuloId in tanuloIds) { var tanuloEgyediAzonosito = FelhasznaloDal.GetFelhasznaloEgyediAzonosito(parent.IntezmenyId, tanuloId); var valosTanuloId = FelhasznaloDal.GetFelhasznaloByEgyediAzonositoAndTanev(tanuloEgyediAzonosito, parent.TanevId); aktualisTanuloIds.Add(valosTanuloId ?? tanuloId); } var validate = new SorolasValidate(model.Datum.Value, aktualisTanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); var validationErrorMessages = new List(); try { foreach (var tanuloId in aktualisTanuloIds) { if (validate.JogviszonyLimitTullepes(tanuloId, out var limitBesorolasDatumKezdete, out var limitBesorolasOsztalyId)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloBeVanSorolvaOsztalyba, validate.TanuloAdatok[tanuloId].Nev, limitBesorolasDatumKezdete.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[limitBesorolasOsztalyId.Value].Nev, validate.OsztalyCsoportAdatok[model.ToDDL.Value].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (!model.FromDDL.HasValue || model.FromDDL == parent.kovTanevId) { KovTanevVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.Datum.Value, model.Zaradek); sikeresenVisszairatkozottTanulok.Add(tanuloId); } else { var aktTanevTanuloId = ElozoTanevekVisszairatkoztatasLogic(tanuloId, model.ToDDL.Value, model.FromDDL.Value, parent.TanevId, model.Datum.Value, model.Zaradek, ref validationErrorMessages); if (aktTanevTanuloId.IsEntityId()) { sikeresenVisszairatkozottTanulok.Add(aktTanevTanuloId.Value); } } } parent.VisszairatkozottTanuloJogviszonyMentes(sikeresenVisszairatkozottTanulok, model, jogviszonyCo, h, parent.kovTanevId); parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenVisszairatkozottTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private void AktTanevVisszairatkoztatasLogic(int tanuloId, int osztalyId, DateTime date, SorolasZaradek zaradek) { var osztaly = OsztalyDal.Get(osztalyId); var tanuloCsoportDal = TanuloCsoportDal; var ds = TanuloCsoportDal.GetTanuloByTanevAndOsztalyAndKiiratkoztatasDatum(parent.TanevId, tanuloId, osztalyId, date); int? tanulocsoportId = null; if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0 && ds.Tables[0].Rows[0]["ID"] != DBNull.Value && string.IsNullOrWhiteSpace(ds.Tables[0].Rows[0]["ID"].ToString()) == false) { tanulocsoportId = (int)ds.Tables[0].Rows[0]["ID"]; } var entity = tanulocsoportId.HasValue ? tanuloCsoportDal.Get(tanulocsoportId.Value) : tanuloCsoportDal.Get(); entity.BejegyzesIdopontja = DateTime.Now; entity.OsztalyCsoportId = osztalyId; entity.TanuloId = tanuloId; entity.TanevId = parent.TanevId; entity.JogviszonyTipusID = osztaly.JogviszonyTipusId; if (tanulocsoportId.HasValue) { entity.KilepesDatum = null; entity.KilepesRogzitesDatum = null; TanuloTanugyiAdatok.UpdateJegyzekAdatokForVisszairatkozas(entity.TanuloTanugyiAdatok, parent.isSelectedTanev21_22OrLater); tanuloCsoportDal.FullUpdate(entity); } else { entity.BelepesDatum = date; tanuloCsoportDal.Insert(entity); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(tanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); } SaveZaradek(parent.ConnectionType, zaradek, entity.ID); } private void KovTanevVisszairatkoztatasLogic(int tanuloId, int toOsztalyId, DateTime belepesDatum, SorolasZaradek zaradek) { var tanulo = TanuloDal.Get(tanuloId); var osztaly = OsztalyDal.Get(toOsztalyId); var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : TanuloCsoportDal.CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, parent.TanevId); if (!newTanuloId.IsEntityId()) { newTanuloId = TanuloCsoportDal.Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, parent.TanevId, tanulo.Elotag); if (!newTanuloId.IsEntityId()) { newTanuloId = TanuloHelper.CloneTanuloEntity(tanulo, parent.aktivTanevId, parent.kovTanevId.Value); } } var entity = TanuloCsoportDal.Get(); entity.TanuloId = newTanuloId; entity.OsztalyCsoportId = toOsztalyId; entity.BejegyzesIdopontja = DateTime.Now; entity.BelepesDatum = belepesDatum; entity.TanevId = parent.TanevId; TanuloCsoportDal.Insert(entity); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(newTanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); SaveZaradek(parent.ConnectionType, zaradek, entity.ID); } private int? ElozoTanevekVisszairatkoztatasLogic(int tanuloId, int osztalyId, int srcTanevId, int trgTanevId, DateTime date, SorolasZaradek zaradek, ref List validationErrorMessages) { var tanulo = TanuloDal.Get(tanuloId); var osztaly = OsztalyDal.Get(osztalyId); var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : TanuloCsoportDal.CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, parent.TanevId); if (!newTanuloId.IsEntityId()) { newTanuloId = TanuloCsoportDal.Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, parent.TanevId, tanulo.Elotag); if (!newTanuloId.IsEntityId()) { newTanuloId = TanuloHelper.CloneTanuloEntity(tanulo, srcTanevId: srcTanevId, trgTanevId: trgTanevId); var entity = TanuloCsoportDal.Get(); entity.TanuloId = newTanuloId; entity.OsztalyCsoportId = osztalyId; entity.BejegyzesIdopontja = DateTime.Now; entity.BelepesDatum = date; entity.TanevId = parent.TanevId; TanuloCsoportDal.Insert(entity); TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(newTanuloId, entity.ID, osztaly, parent.isSelectedTanev21_22OrLater); SaveZaradek(parent.ConnectionType, zaradek, entity.ID); return newTanuloId; } else { validationErrorMessages.Add(string.Format(OsztalyCsoportResource.A0NevuTanuloLetezikAktTanevben, tanulo.NyomtatasiNev)); return null; } } else { validationErrorMessages.Add(string.Format(OsztalyCsoportResource.A0NevuTanuloOktAzonLetezikAktTanevben, tanulo.NyomtatasiNev)); return null; } } } private class CsoportbaSorolasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloCsoportDal _tanuloCsoportDal; private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); public CsoportbaSorolasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolas(model, OktNevelesiKategoriaEnum.NevelesOktatas); } public string Amikepzes(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolas(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); } public string Kollegium(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolas(model, OktNevelesiKategoriaEnum.Kollegium); } public string EGYMI(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolas(model, OktNevelesiKategoriaEnum.EGYMI); } private string CsoportbaSorolas(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum kategoria) { var duplicatedTanulo = model.ToElements.GroupBy(x => x.Id).Where(x => x.Count() > 1); var sb = new StringBuilder(ErrorResource.AzAlabbiTanulokTobbszorSzerepelnek).Append("
    "); foreach (var tanuloID in duplicatedTanulo) { var name = h.Felhasznalo().Get(tanuloID.Key).NyomtatasiNev; sb.Append(Core.Constants.General.Sortores).Append("
  1. ").Append(name).Append("
  2. "); } if (duplicatedTanulo.Any()) { throw new BlException(sb.Append("
").ToString()); } if (parent.kovTanev) { model.Datum = new TanevHelper(parent.ConnectionType).GetTanevInfo().KezdoNap; } SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, fromDdl: !model.IsFromSzervezet); if (model.IsFromSzervezet) { SorolasValidate.SzervezetValidateModel(parent.ConnectionType, parent.TanevId, model); } if (!parent.TryGetCoport(model.ToDDL.Value, h, out var celCsoport)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } var validationErrorMessages = new List(); try { var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, model.IsFromSzervezet ? (OktNevelesiKategoriaEnum?)null : kategoria, h); foreach (var tanuloId in tanuloIds) { var nemBesorolhatoTanulo = false; if (validate.TanuloMarTagjaCsoportnak(tanuloId, celCsoport.ID)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloMarTagjaAzAdottCsoportnak, validate.TanuloAdatok[tanuloId].Nev, model.Datum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); nemBesorolhatoTanulo = true; } if (celCsoport.OsztalyBontasId.IsEntityId()) { if (validate.TanuloNemTagjaAzOsztalybontottOsztalynak(tanuloId, celCsoport.OsztalyBontasId, out var nemTagjaOsztalynakBeginDate)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloNemTagjaAzOsztalybontottOsztalynak, validate.TanuloAdatok[tanuloId].Nev, nemTagjaOsztalynakBeginDate.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.OsztalyBontasId].Nev, validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); nemBesorolhatoTanulo = true; } } else { if (validate.TanuloNemTagjaEgyetlenOsztalynakSem(tanuloId, out var osztalyNelkulBeginDate)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloNincsBesorolvaEgyetlenOsztalybaSem, validate.TanuloAdatok[tanuloId].Nev, osztalyNelkulBeginDate.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); nemBesorolhatoTanulo = true; } } if (kategoria == OktNevelesiKategoriaEnum.NevelesOktatas) { if (h.Csoport().Get(celCsoport.ID).Tipusa == (int)CsoportTipusEnum.apaczai_mentorcsoport && validate.TanuloMarTagjaMentorcsoportnak(tanuloId)) { var hibauzenet = string.Format(OsztalyCsoportResource.MarMasikMentorCsoportTagja, validate.TanuloAdatok[tanuloId].Nev); validationErrorMessages.Add(hibauzenet); nemBesorolhatoTanulo = true; } } if (nemBesorolhatoTanulo) { continue; } AlapKepzesCsoportbaSorolas(tanuloId, celCsoport.ID, model.Datum.Value, model.Zaradek); } } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } public void AlapKepzesCsoportbaSorolas(int tanuloId, int csoportId, DateTime date, SorolasZaradek zaradek = null) { var entity = TanuloCsoportDal.Get(); entity.TanuloId = tanuloId; entity.OsztalyCsoportId = csoportId; entity.BelepesDatum = date; entity.BejegyzesIdopontja = DateTime.Now; entity.TanevId = parent.TanevId; TanuloCsoportDal.Insert(entity); if (zaradek != null) { SaveZaradek(parent.ConnectionType, zaradek, entity.ID); } } } private class CsoportbaSorolasJavitasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloCsoportDal _tanuloCsoportDal; private CsoportbaSorolasLogic _csoportbaSorolasLogic; private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private CsoportbaSorolasLogic CsoportbaSorolasLogic => _csoportbaSorolasLogic ?? (_csoportbaSorolasLogic = new CsoportbaSorolasLogic(parent, h)); public CsoportbaSorolasJavitasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolasJavitas(model, OktNevelesiKategoriaEnum.NevelesOktatas); } public string Amikepzes(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolasJavitas(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); } public string Kollegium(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolasJavitas(model, OktNevelesiKategoriaEnum.Kollegium); } public string EGYMI(IOsztalyCsoportbaSorolas model) { return CsoportbaSorolasJavitas(model, OktNevelesiKategoriaEnum.EGYMI); } private string CsoportbaSorolasJavitas(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum kategoria) { SorolasValidate.ValidateModel(model, datum: false); if (model.IsFromSzervezet) { SorolasValidate.SzervezetValidateModel(parent.ConnectionType, parent.TanevId, model); } if (!parent.TryGetCoport(model.ToDDL.Value, h, out var celCsoport)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } var validationErrorMessages = new List(); try { var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var tanuloCsoportListByTanulos = GetTanuloCsoportByTanuloIds(tanuloIds, model.IsFromSzervezet ? (OktNevelesiKategoriaEnum?)null : kategoria); foreach (var tanuloId in tanuloIds) { var tanuloCsoport = tanuloCsoportListByTanulos.Single(t => t.OsztalyCsoportId == model.FromDDL.Value && t.TanuloId == tanuloId); if (!parent.CheckCsoportBesorolasDelete(tanuloCsoport.Id, out var errorMessages, model.IsFromSzervezet)) { validationErrorMessages.AddRange(errorMessages); continue; } var validate = new SorolasValidate(tanuloCsoport.Belepes, new List { tanuloId }, parent.TanevId, model.IsFromSzervezet ? (OktNevelesiKategoriaEnum?)null : kategoria, h); if (validate.TanuloMarTagjaCsoportnak(tanuloId, celCsoport.ID)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloMarTagjaAzAdottCsoportnak, validate.TanuloAdatok[tanuloId].Nev, tanuloCsoport.Belepes.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (celCsoport.OsztalyBontasId.IsEntityId()) { if (validate.TanuloNemTagjaAzOsztalybontottOsztalynak(tanuloId, celCsoport.OsztalyBontasId, out var nemTagjaOsztalynakBeginDate)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloNemTagjaAzOsztalybontottOsztalynak, validate.TanuloAdatok[tanuloId].Nev, nemTagjaOsztalynakBeginDate.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.OsztalyBontasId].Nev, validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); continue; } } else { if (validate.TanuloNemTagjaEgyetlenOsztalynakSem(tanuloId, out var osztalyNelkulBeginDate)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloNincsBesorolvaEgyetlenOsztalybaSem, validate.TanuloAdatok[tanuloId].Nev, osztalyNelkulBeginDate.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); continue; } } CsoportbaSorolasLogic.AlapKepzesCsoportbaSorolas(tanuloId, celCsoport.ID, tanuloCsoport.Belepes, model.Zaradek); CsoportbolTorles(tanuloCsoport.Id); } } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private IEnumerable GetTanuloCsoportByTanuloIds(IEnumerable tanuloIds, OktNevelesiKategoriaEnum? kategoriaTipus) { var ds = TanuloCsoportDal.GetTanuloOsztalyCsoport(parent.TanevId, tanuloIds, kategoriaTipus); return ds.Tables[0].AsEnumerable().Select(r => new TanuloOsztalyCsoport { Id = r.Field("ID"), OsztalyCsoportId = r.Field("OsztalyCsoportId"), TanuloId = r.Field("TanuloId"), Belepes = r.Field("BelepesDatum"), Kilepes = r.Field("KilepesDatum") }); } private void CsoportbolTorles(int tanuloCsoportId) { TanuloCsoportDal.Delete(tanuloCsoportId); } } private class CsoportAtsorolasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloCsoportDal _tanuloCsoportDal; private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); public CsoportAtsorolasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { return AktTanevAtsorolas(model, OktNevelesiKategoriaEnum.NevelesOktatas); } public string Amikepzes(IOsztalyCsoportbaSorolas model) { return AktTanevAtsorolas(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); } public string Kollegium(IOsztalyCsoportbaSorolas model) { return AktTanevAtsorolas(model, OktNevelesiKategoriaEnum.Kollegium); } public string EGYMI(IOsztalyCsoportbaSorolas model) { return AktTanevAtsorolas(model, OktNevelesiKategoriaEnum.EGYMI); } private string AktTanevAtsorolas(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum kategoria) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model); if (model.IsFromSzervezet) { SorolasValidate.SzervezetValidateModel(parent.ConnectionType, parent.TanevId, model); } if (!parent.TryGetCoport(model.ToDDL.Value, h, out var celCsoport)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } var validationErrorMessages = new List(); try { var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, model.IsFromSzervezet ? (OktNevelesiKategoriaEnum?)null : kategoria, h); foreach (var tanuloId in tanuloIds) { var forrasTanuloCsoportId = validate.GetTanuloCsoportId(model.FromDDL.Value, tanuloId); if (!parent.CheckCsoportAtsorolas(forrasTanuloCsoportId, model.Datum.Value, out var errorMessages, model.IsFromSzervezet)) { validationErrorMessages.AddRange(errorMessages); continue; } if (validate.TanuloMarTagjaCsoportnak(tanuloId, celCsoport.ID)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloMarTagjaAzAdottCsoportnak, validate.TanuloAdatok[tanuloId].Nev, model.Datum.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); continue; } if (celCsoport.OsztalyBontasId.IsEntityId()) { if (validate.TanuloNemTagjaAzOsztalybontottOsztalynak(tanuloId, celCsoport.OsztalyBontasId, out var nemTagjaOsztalynakBeginDate)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloNemTagjaAzOsztalybontottOsztalynak, validate.TanuloAdatok[tanuloId].Nev, nemTagjaOsztalynakBeginDate.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.OsztalyBontasId].Nev, validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); continue; } } else { if (validate.TanuloNemTagjaEgyetlenOsztalynakSem(tanuloId, out var osztalyNelkulBeginDate)) { var hibaUzenet = string.Format(OsztalyCsoportResource.TanuloNincsBesorolvaEgyetlenOsztalybaSem, validate.TanuloAdatok[tanuloId].Nev, osztalyNelkulBeginDate.Value.ToShortDateString(), validate.OsztalyCsoportAdatok[celCsoport.ID].Nev); validationErrorMessages.Add(hibaUzenet); continue; } } var isKellFeluletenMegadottZaradekRogzitese = model.ToElements.Single(i => i.Id == tanuloId).IsKellFeluletenMegadottZaradekRogzitese; AlapAktTanevAtsorolasLogic(tanuloId, forrasTanuloCsoportId, celCsoport.ID, model.Datum.Value, model.Zaradek, isKellFeluletenMegadottZaradekRogzitese); } } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (validationErrorMessages.Any()) { var message = string.Join("
", validationErrorMessages); return message; } else { return string.Empty; } } private void AlapAktTanevAtsorolasLogic(int tanuloId, int forrasTanuloCsoportId, int celCsoportId, DateTime date, SorolasZaradek zaradek, bool isKellFeluletenMegadottZaradekRogzitese) { var kisorolt = TanuloCsoportDal.Get(forrasTanuloCsoportId); var kilepesDatuma = date; if (kisorolt.BelepesDatum.HasValue && kisorolt.BelepesDatum.Value.Date.Equals(kilepesDatuma.Date)) { TanuloCsoportDal.Delete(kisorolt, logikai: true); } else { kisorolt.KilepesDatum = kilepesDatuma; kisorolt.KilepesRogzitesDatum = DateTime.Now; TanuloCsoportDal.Update(kisorolt); if (isKellFeluletenMegadottZaradekRogzitese) { SaveZaradek(parent.ConnectionType, zaradek, kisorolt.ID); } } var besorolt = TanuloCsoportDal.Get(); besorolt.TanuloId = tanuloId; besorolt.OsztalyCsoportId = celCsoportId; besorolt.BelepesDatum = date; besorolt.BejegyzesIdopontja = DateTime.Now; besorolt.TanevId = parent.TanevId; TanuloCsoportDal.Insert(besorolt); } } private class CsoportKisorolaslLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloCsoportDal _tanuloCsoportDal; private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); public CsoportKisorolaslLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { return CsoportKisorolas(model, OktNevelesiKategoriaEnum.NevelesOktatas); } public string Amikepzes(IOsztalyCsoportbaSorolas model) { return CsoportKisorolas(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); } public string Kollegium(IOsztalyCsoportbaSorolas model) { return CsoportKisorolas(model, OktNevelesiKategoriaEnum.Kollegium); } public string EGYMI(IOsztalyCsoportbaSorolas model) { return CsoportKisorolas(model, OktNevelesiKategoriaEnum.EGYMI); } private string CsoportKisorolas(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum kategoria) { SorolasValidate.IsDatumInTanev(parent.ConnectionType, model.Datum.Value); SorolasValidate.ValidateModel(model, toDdl: false); var errormessage = new List(); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var hasError = false; var nemTagjaAzOsztalynakABeallitottDatumIdejen = new List(); var tanuloNemTagjaOCsADatumAlatt = new List(); var nemAForrasCsoportTagjaAMegadottIdopontban = new List(); try { var validate = new SorolasValidate(model.Datum.Value, tanuloIds, parent.TanevId, model.IsFromSzervezet ? (OktNevelesiKategoriaEnum?)null : kategoria, h); DateTime? kilepesDatumValidalashoz = model.Datum; foreach (var item in model.ToElements) { if (!item.Fromid.HasValue || !parent.TryGetCoport(item.Fromid.Value, h, out var forrasCsoport)) { hasError = true; errormessage.Add(StringResourcesUtil.GetString(4046));/*A forrás csoport nem létezik.*/ continue; } if (validate.NemTagjaAzOsztalynakABeallitottDatumIdejen(item.Id)) { hasError = true; nemTagjaAzOsztalynakABeallitottDatumIdejen.Add(validate.TanuloAdatok[item.Id].Nev); continue; } if (validate.TanuloNemTagjaOCsADatumAlatt(item.Id, forrasCsoport.ID)) { hasError = true; tanuloNemTagjaOCsADatumAlatt.Add(validate.TanuloAdatok[item.Id].Nev); continue; } var forrasTanuloCsoport = validate.GetOsztalyCsoportTanuloCsoportAdatok(forrasCsoport.ID, item.Id); if (forrasTanuloCsoport == null) { hasError = true; nemAForrasCsoportTagjaAMegadottIdopontban.Add(validate.TanuloAdatok[item.Id].Nev); continue; } if (forrasTanuloCsoport.Kilepes.HasValue && !model.Datum.HasValue) { var tanevCo = new TanevHelper(parent.ConnectionType).GetTanevInfo(); kilepesDatumValidalashoz = tanevCo.UtolsoNap; } if (!parent.CheckCsoportBesorolasVegeModositas(forrasTanuloCsoport.Id, kilepesDatumValidalashoz.Value, out var errorMessages)) { errormessage.AddRange(errorMessages); hasError = true; continue; } AlapkepzesCsoportbolKisorolas(forrasTanuloCsoport.Id, model.Datum.Value, model.Zaradek, item.IsKellFeluletenMegadottZaradekRogzitese); } } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.NemTagjaAzOsztalynakABeallitottDatumIdejen, nemTagjaAzOsztalynakABeallitottDatumIdejen); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloNemTagjaOCsADatumAlatt, tanuloNemTagjaOCsADatumAlatt); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.NemAForrasCsoportTagjaAMegadottIdopontban, nemAForrasCsoportTagjaAMegadottIdopontban); message += string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public void AlapkepzesCsoportbolKisorolas(int tanuloCsoportId, DateTime date, SorolasZaradek zaradek, bool isKellFeluletenMegadottZaradekRogzitese = true, int? tanevId = null) { var entity = TanuloCsoportDal.Get(tanuloCsoportId); if (entity.BelepesDatum.HasValue && entity.BelepesDatum.Value.Date.Equals(date.Date)) { TanuloCsoportDal.Delete(entity); } else { entity.KilepesDatum = date; entity.KilepesRogzitesDatum = DateTime.Now; TanuloCsoportDal.Update(entity); if (isKellFeluletenMegadottZaradekRogzitese) { SaveZaradek(parent.ConnectionType, zaradek, entity.ID, tanevId); } } } public void KisorolasOsztalybontasosCsoportokbol(int tanuloId, int osztalyId, DateTime belepesDatuma) { var csoportKapcsolatok = TanuloCsoportDal.GetTanuloOsztalyBontasosCsoportKapcsolatai(parent.TanevId, tanuloId, osztalyId); foreach (DataRow row in csoportKapcsolatok.Tables[0].Rows) { var tcs = TanuloCsoportDal.Get(row.Field("ID")); if (tcs.BelepesDatum == belepesDatuma.Date) { TanuloCsoportDal.Delete(tcs); } else { if (tcs.KilepesDatum == null || tcs.KilepesDatum > belepesDatuma) { tcs.KilepesDatum = belepesDatuma; TanuloCsoportDal.Update(tcs); } } } } public void KisorolasOsszesCsoportbol(int tanuloId, int osztalyId, DateTime belepesDatuma) { var tanuloCsopList = TanuloCsoportDal.GetFeladatkategoriabaTartozoTanuloCsoportok(parent.TanevId, tanuloId, osztalyId); foreach (DataRow row in tanuloCsopList.Tables[0].Rows) { var tcs = TanuloCsoportDal.Get(row.Field("ID")); if (tcs.BelepesDatum == belepesDatuma.Date) { TanuloCsoportDal.Delete(tcs); } else { if (tcs.KilepesDatum == null || tcs.KilepesDatum > belepesDatuma) { tcs.KilepesDatum = belepesDatuma; TanuloCsoportDal.Update(tcs); } } } } } private class NebuloBesorolasLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloDal _tanuloDal; private INebuloDal _nebuloDal; private ICimDal _cimDal; private IGondviseloDal _gondviseloDal; private ITelefonDal _telefonDal; private IEmailDal _emailDal; private IFelhasznaloBelepesDal _felhasznaloBelepesDal; private ICimDal CimDal => _cimDal ?? (_cimDal = h.Cim()); private IGondviseloDal GondviseloDal => _gondviseloDal ?? (_gondviseloDal = h.Gondviselo()); private ITelefonDal TelefonDal => _telefonDal ?? (_telefonDal = h.Telefon()); private IEmailDal EmailDal => _emailDal ?? (_emailDal = h.Email()); private INebuloDal NebuloDal => _nebuloDal ?? (_nebuloDal = h.Nebulo()); private ITanuloDal TanuloDal => _tanuloDal ?? (_tanuloDal = h.Tanulo()); private IFelhasznaloBelepesDal FelhasznaloBelepesDal => _felhasznaloBelepesDal ?? (_felhasznaloBelepesDal = h.FelhasznaloBelepes()); public NebuloBesorolasLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model, bool isSzirIntezmeny) { var torlendoNebulokIdList = TanulokLetrehozasaNebulokbol(model, generateGondviseloBelepes: false, isSzirIntezmeny); var alapkepzesTajekoztatoHibaUzenet = new OsztalybaSorolasElsoAlkalommalLogic(parent, h).Alapkepzes(model); NebulokTorlese(torlendoNebulokIdList); return alapkepzesTajekoztatoHibaUzenet; } public List TanulokLetrehozasaNebulokbol(IOsztalyCsoportbaSorolas model, bool generateGondviseloBelepes, bool isSzirIntezmeny) { var torlendoNebulokIdList = new List(); foreach (var item in model.ToElements) { var nebulo = NebuloDal.Get(item.Id); var tanulo = TanuloDal.Get(); SetTanuloAlapadatok(model, nebulo, tanulo); torlendoNebulokIdList.Add(item.Id); item.Id = tanulo.ID; SetTanuloCim(nebulo, tanulo); if (!nebulo.TartozkodasiHelyAzonos) { SetTanuloTartozkodasiHely(nebulo, tanulo); } var gondviselo = GondviseloDal.Get(); SetTanuloGondviselo(gondviselo, nebulo, tanulo); var felhasznaloBelepesHelper = new FelhasznaloBelepesHelper(new DalHandlerConnectionType(parent.ConnectionType, h)); if (generateGondviseloBelepes) { var gondviseloIndex = 1; var gondviseloBelepesiNeve = CommonUtils.GenerateGondviseloBejelentkezesiNev(FelhasznaloBelepesDal, tanulo.OktatasiAzonosito, ref gondviseloIndex, parent.TanevId); if (!isSzirIntezmeny) { felhasznaloBelepesHelper.GrantLogin(tanulo.ID, gondviseloBelepesiNeve.Trim(), tanulo.SzuletesiDatum.ToString("yyyy-MM-dd"), gondviselo.ID, kotelezoValtoztatni: true); } } if (nebulo.KepviseloCimeAzonos) { SetTanuloGondviseloCimeAzonos(nebulo, tanulo, gondviselo); } else { SetTanuloGondviseloCime(nebulo, tanulo, gondviselo); } if (!string.IsNullOrWhiteSpace(nebulo.TKEmailCim)) { SetTanuloGondviseloEmail(nebulo, gondviselo, tanulo); } if (!string.IsNullOrWhiteSpace(nebulo.TKTelefon)) { SetTanuloGondviseloTelefon(nebulo, gondviselo, tanulo); } if (!string.IsNullOrWhiteSpace(nebulo.TKNeve2)) { var gondviselo2 = GondviseloDal.Get(); SetTanuloGondviselo2(gondviselo2, nebulo, tanulo); var gondviseloIndex = 2; var gondviseloBelepesiNeve = CommonUtils.GenerateGondviseloBejelentkezesiNev(FelhasznaloBelepesDal, tanulo.OktatasiAzonosito, ref gondviseloIndex, parent.TanevId); if (!isSzirIntezmeny) { felhasznaloBelepesHelper.GrantLogin(tanulo.ID, gondviseloBelepesiNeve.Trim(), tanulo.SzuletesiDatum.ToString("yyyy-MM-dd"), gondviselo2.ID, kotelezoValtoztatni: true); } if (nebulo.Kepviselo2CimeAzonos) { SetTanuloGondviselo2CimAzonos(nebulo, tanulo, gondviselo2); } else { SetTanuloGondviselo2Cim(nebulo, tanulo, gondviselo2); } if (!string.IsNullOrWhiteSpace(nebulo.TKEmailCim2)) { SetTanuloGondviselo2Email(nebulo, gondviselo2, tanulo); } if (!string.IsNullOrWhiteSpace(nebulo.TKTelefon2)) { SetTanuloGondviselo2Telefon(nebulo, gondviselo2, tanulo); } } } return torlendoNebulokIdList; } private void SetTanuloGondviselo2Telefon(INebulo nebulo, IGondviselo gondviselo2, ITanulo tanulo) { var gondviseloTelefon = TelefonDal.Get(); gondviseloTelefon.Alapertelmezett = true; gondviseloTelefon.TelefonSzam = nebulo.TKTelefon2; gondviseloTelefon.TelefonTipusa = (int)TelefonTipusEnum.Mobil; gondviseloTelefon.GondviseloId = gondviselo2.ID; gondviseloTelefon.FelhasznaloId = tanulo.ID; gondviseloTelefon.TanevId = tanulo.TanevId; TelefonDal.Insert(gondviseloTelefon); } private void SetTanuloGondviselo2Email(INebulo nebulo, IGondviselo gondviselo2, ITanulo tanulo) { var gondviseloEmail = EmailDal.Get(); gondviseloEmail.Alapertelmezett = true; gondviseloEmail.EmailCim = nebulo.TKEmailCim2; gondviseloEmail.EmailTipusa = (int)EmailTipusEnum.Hivatalos; gondviseloEmail.GondviseloId = gondviselo2.ID; gondviseloEmail.FelhasznaloId = tanulo.ID; gondviseloEmail.TanevId = tanulo.TanevId; EmailDal.Insert(gondviseloEmail); } private void SetTanuloGondviselo2Cim(INebulo nebulo, ITanulo tanulo, IGondviselo gondviselo2) { var gondviseloCim = CimDal.Get(); gondviseloCim.Ajto = nebulo.TKAjto2; gondviseloCim.CimTipusa = (int)CimTipusEnum.allando_lakcim; gondviseloCim.Emelet = nebulo.TKEmelet2; gondviseloCim.FelhasznaloId = tanulo.ID; gondviseloCim.GondviseloId = gondviselo2.ID; gondviseloCim.Hazszam = nebulo.TKHazszam2; gondviseloCim.IranyitoSzam = nebulo.TKIranyitoszam2; gondviseloCim.Kozterulet = nebulo.TKKozteruletNev2; gondviseloCim.KozteruletJellegeNev = nebulo.TKKozteruletJellegeNev2; gondviseloCim.Orszag = nebulo.TKOrszagTipusId2 ?? (int)OrszagTipusEnum.Magyarorszag; gondviseloCim.Varos = nebulo.TKHelysegNev2; gondviseloCim.TanevId = tanulo.TanevId; CimDal.Insert(gondviseloCim); } private void SetTanuloGondviselo2CimAzonos(INebulo nebulo, ITanulo tanulo, IGondviselo gondviselo2) { var gondviseloCim = CimDal.Get(); gondviseloCim.Ajto = nebulo.Ajto; gondviseloCim.CimTipusa = (int)CimTipusEnum.allando_lakcim; gondviseloCim.Emelet = nebulo.Emelet; gondviseloCim.FelhasznaloId = tanulo.ID; gondviseloCim.GondviseloId = gondviselo2.ID; gondviseloCim.Hazszam = nebulo.Hazszam; gondviseloCim.IranyitoSzam = nebulo.Iranyitoszam; gondviseloCim.Kozterulet = nebulo.KozteruletNev; gondviseloCim.KozteruletJellegeNev = nebulo.KozteruletJellegeNev; gondviseloCim.Orszag = nebulo.OrszagTipusId ?? (int)OrszagTipusEnum.Magyarorszag; gondviseloCim.Varos = nebulo.HelysegNev; gondviseloCim.TanevId = tanulo.TanevId; CimDal.Insert(gondviseloCim); } private void SetTanuloGondviselo2(IGondviselo gondviselo2, INebulo nebulo, ITanulo tanulo) { gondviselo2.Aktiv = true; gondviselo2.Nev = nebulo.TKNeve2; gondviselo2.RokonsagFoka = nebulo.TKRokonsagiFoka2 ?? (int)RokonsagiFokEnum.na; gondviselo2.TanuloId = tanulo.ID; gondviselo2.TanevId = tanulo.TanevId; GondviseloDal.Insert(gondviselo2); } private void SetTanuloGondviseloTelefon(INebulo nebulo, IGondviselo gondviselo, ITanulo tanulo) { var gondviseloTelefon = TelefonDal.Get(); gondviseloTelefon.Alapertelmezett = true; gondviseloTelefon.TelefonSzam = nebulo.TKTelefon; gondviseloTelefon.TelefonTipusa = (int)TelefonTipusEnum.Mobil; gondviseloTelefon.GondviseloId = gondviselo.ID; gondviseloTelefon.FelhasznaloId = tanulo.ID; gondviseloTelefon.TanevId = tanulo.TanevId; TelefonDal.Insert(gondviseloTelefon); } private void SetTanuloGondviseloEmail(INebulo nebulo, IGondviselo gondviselo, ITanulo tanulo) { var gondviseloEmail = EmailDal.Get(); gondviseloEmail.Alapertelmezett = true; gondviseloEmail.EmailCim = nebulo.TKEmailCim; gondviseloEmail.EmailTipusa = (int)EmailTipusEnum.Hivatalos; gondviseloEmail.GondviseloId = gondviselo.ID; gondviseloEmail.FelhasznaloId = tanulo.ID; gondviseloEmail.TanevId = tanulo.TanevId; EmailDal.Insert(gondviseloEmail); } private void SetTanuloGondviseloCime(INebulo nebulo, ITanulo tanulo, IGondviselo gondviselo) { var gondviseloCim = CimDal.Get(); gondviseloCim.Ajto = nebulo.TKAjto; gondviseloCim.CimTipusa = (int)CimTipusEnum.allando_lakcim; gondviseloCim.Emelet = nebulo.TKEmelet; gondviseloCim.FelhasznaloId = tanulo.ID; gondviseloCim.GondviseloId = gondviselo.ID; gondviseloCim.Hazszam = nebulo.TKHazszam; gondviseloCim.IranyitoSzam = nebulo.TKIranyitoszam; gondviseloCim.Kozterulet = nebulo.TKKozteruletNev; gondviseloCim.KozteruletJellegeNev = nebulo.TKKozteruletJellegeNev; gondviseloCim.Orszag = nebulo.TKOrszagTipusId ?? (int)OrszagTipusEnum.Magyarorszag; gondviseloCim.Varos = nebulo.TKHelysegNev; gondviseloCim.TanevId = tanulo.TanevId; CimDal.Insert(gondviseloCim); } private void SetTanuloGondviseloCimeAzonos(INebulo nebulo, ITanulo tanulo, IGondviselo gondviselo) { var gondviseloCim = CimDal.Get(); gondviseloCim.Ajto = nebulo.Ajto; gondviseloCim.CimTipusa = (int)CimTipusEnum.allando_lakcim; gondviseloCim.Emelet = nebulo.Emelet; gondviseloCim.FelhasznaloId = tanulo.ID; gondviseloCim.GondviseloId = gondviselo.ID; gondviseloCim.Hazszam = nebulo.Hazszam; gondviseloCim.IranyitoSzam = nebulo.Iranyitoszam; gondviseloCim.Kozterulet = nebulo.KozteruletNev; gondviseloCim.KozteruletJellegeNev = nebulo.KozteruletJellegeNev; gondviseloCim.Orszag = nebulo.OrszagTipusId ?? (int)OrszagTipusEnum.Magyarorszag; gondviseloCim.Varos = nebulo.HelysegNev; gondviseloCim.TanevId = tanulo.TanevId; CimDal.Insert(gondviseloCim); } private void SetTanuloGondviselo(IGondviselo gondviselo, INebulo nebulo, ITanulo tanulo) { gondviselo.Aktiv = true; gondviselo.Nev = nebulo.TKNeve; gondviselo.RokonsagFoka = nebulo.TKRokonsagiFoka ?? (int)RokonsagiFokEnum.na; gondviselo.TanuloId = tanulo.ID; gondviselo.TanevId = tanulo.TanevId; GondviseloDal.Insert(gondviselo); } private void SetTanuloTartozkodasiHely(INebulo nebulo, ITanulo tanulo) { var tanuloTartozkodasiHely = CimDal.Get(); tanuloTartozkodasiHely.Ajto = nebulo.THAjto; tanuloTartozkodasiHely.CimTipusa = (int)CimTipusEnum.tartozkodasi_hely; tanuloTartozkodasiHely.Emelet = nebulo.THEmelet; tanuloTartozkodasiHely.FelhasznaloId = tanulo.ID; tanuloTartozkodasiHely.Hazszam = nebulo.THHazszam; tanuloTartozkodasiHely.IranyitoSzam = nebulo.THIranyitoszam; tanuloTartozkodasiHely.Kozterulet = nebulo.THKozteruletNev; tanuloTartozkodasiHely.KozteruletJellegeNev = nebulo.THKozteruletJellegeNev; tanuloTartozkodasiHely.Orszag = nebulo.THOrszagTipusId ?? (int)OrszagTipusEnum.Magyarorszag; tanuloTartozkodasiHely.Varos = nebulo.THHelysegNev; tanuloTartozkodasiHely.TanevId = tanulo.TanevId; CimDal.Insert(tanuloTartozkodasiHely); } private void SetTanuloCim(INebulo nebulo, ITanulo tanulo) { var tanuloAllandoCim = CimDal.Get(); tanuloAllandoCim.Ajto = nebulo.Ajto; tanuloAllandoCim.CimTipusa = (int)CimTipusEnum.allando_lakcim; tanuloAllandoCim.Emelet = nebulo.Emelet; tanuloAllandoCim.FelhasznaloId = tanulo.ID; tanuloAllandoCim.Hazszam = nebulo.Hazszam; tanuloAllandoCim.IranyitoSzam = nebulo.Iranyitoszam; tanuloAllandoCim.Kozterulet = nebulo.KozteruletNev; tanuloAllandoCim.KozteruletJellegeNev = nebulo.KozteruletJellegeNev; tanuloAllandoCim.Orszag = nebulo.OrszagTipusId ?? (int)OrszagTipusEnum.Magyarorszag; tanuloAllandoCim.Varos = nebulo.HelysegNev; tanuloAllandoCim.TanevId = tanulo.TanevId; CimDal.Insert(tanuloAllandoCim); } private void SetTanuloAlapadatok(IOsztalyCsoportbaSorolas model, INebulo nebulo, ITanulo tanulo) { if (nebulo.Allampolgarsaga.HasValue) { tanulo.Allampolgarsaga = nebulo.Allampolgarsaga.Value; } tanulo.Allampolgarsaga2 = nebulo.Allampolgarsaga2; if (nebulo.Anyanyelve.HasValue) { tanulo.Anyanyelve = nebulo.Anyanyelve.Value; } tanulo.NevSorrend = false; tanulo.Elotag = Extensions.NameExtensions.CleanElotag(nebulo.Elotag); tanulo.Vezeteknev = nebulo.TanuloCsaladiNeve; tanulo.Utonev = nebulo.TanuloUtoneve; tanulo.NyomtatasiNev = Extensions.NameExtensions.GetNevSorrendben("F", tanulo.Elotag, tanulo.Vezeteknev, tanulo.Utonev); tanulo.KeresesiNev = CommonUtilsDal.KopaszNev(tanulo.NyomtatasiNev); tanulo.SzuletesiNevSorrend = false; tanulo.SzuletesiNevElotag = null; tanulo.SzuletesiVezeteknev = nebulo.SzuletesiCsaladiNeve; tanulo.SzuletesiUtonev = nebulo.SzuletesiUtoneve; tanulo.SzuletesiNev = Extensions.NameExtensions.GetNevSorrendben("F", tanulo.SzuletesiNevElotag, tanulo.SzuletesiVezeteknev, tanulo.SzuletesiUtonev); tanulo.AnyjaNeveSorrend = false; tanulo.AnyjaNeveElotag = null; tanulo.AnyjaVezetekneve = nebulo.EdesanyjaSzuletesiCsaladiNeve; tanulo.AnyjaUtoneve = nebulo.EdesanyjaSzuletesiUtoneve; var anyjaNeve = Extensions.NameExtensions.GetNevSorrendben("F", tanulo.AnyjaNeveElotag, tanulo.AnyjaVezetekneve, tanulo.AnyjaUtoneve); if (anyjaNeve.Length > 64) { tanulo.AnyjaNeve = anyjaNeve.Substring(0, 64); } else { tanulo.AnyjaNeve = anyjaNeve; } if (nebulo.Neme.HasValue) { tanulo.Neme = nebulo.Neme.Value; } tanulo.OktatasiAzonosito = nebulo.OktatasiAzonositoSzama; tanulo.SzuletesiHely = nebulo.SzuletesiHely; tanulo.SzuletesiDatum = nebulo.SzuletesiIdo; tanulo.SzuletesiOrszag = nebulo.SzuletesiOrszag; tanulo.BTMProblemas = nebulo.BTM ?? false; tanulo.BTMLetszamSuly = nebulo.BTMLetszamSuly ?? 1; tanulo.SajatosNevelesu = nebulo.SNI ?? false; tanulo.SNILetszamSuly = nebulo.SNILetszamSuly.HasValue ? Convert.ToInt32(nebulo.SNILetszamSuly) : 1; tanulo.Vezeteknev = nebulo.TanuloCsaladiNeve; tanulo.Utonev = nebulo.TanuloUtoneve; tanulo.TanevId = parent.TanevId; tanulo.IntezmenyId = parent.IntezmenyId; tanulo.FelvetelTaneveId = parent.TanevId; if (model.Datum.HasValue) { tanulo.NyilvantartasKezdete = model.Datum.Value; } tanulo.HatranyosHelyzetu = (int)HatranyosHelyzetTipusEnum.nem_hatranyos_helyzetu; tanulo.TestnevelesTipusa = (int)TestnevelesTipusEnum.normal_testneveles; TanuloDal.Insert(tanulo); } private void NebulokTorlese(List torlendoNebulokIdList) { foreach (var nebulo in torlendoNebulokIdList) { NebuloDal.Delete(nebulo); } } } private class OsztalyLeptetesLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloDal _tanuloDal; private IOsztalyDal _osztalyDal; private ITanuloCsoportDal _tanuloCsoportDal; private TanuloHelper _tanuloHelper; private TanuloTanugyiAdatokHelper _tanuloTanugyiAdatokHelper; private CsoportKisorolaslLogic _csoportKisorolaslLogic; private OsztalyKisorolaslLogic _osztalyKisorolaslLogic; private OsztalybaSorolasElsoAlkalommalLogic _osztalybaSorolasLogic; private ITanuloDal TanuloDal => _tanuloDal ?? (_tanuloDal = h.Tanulo()); private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private IOsztalyDal OsztalyDal => _osztalyDal ?? (_osztalyDal = h.Osztaly()); private TanuloHelper TanuloHelper => _tanuloHelper ?? (_tanuloHelper = new TanuloHelper(parent.ConnectionType)); private TanuloTanugyiAdatokHelper TanuloTanugyiAdatok => _tanuloTanugyiAdatokHelper ?? (_tanuloTanugyiAdatokHelper = new TanuloTanugyiAdatokHelper(new DalHandlerConnectionType(parent.ConnectionType, h))); private CsoportKisorolaslLogic CsoportKisorolasl => _csoportKisorolaslLogic ?? (_csoportKisorolaslLogic = new CsoportKisorolaslLogic(parent, h)); private OsztalyKisorolaslLogic OsztalyKisorolasl => _osztalyKisorolaslLogic ?? (_osztalyKisorolaslLogic = new OsztalyKisorolaslLogic(parent, h)); private OsztalybaSorolasElsoAlkalommalLogic OsztalybaSorolasLogic => _osztalybaSorolasLogic ?? (_osztalybaSorolasLogic = new OsztalybaSorolasElsoAlkalommalLogic(parent, h)); public OsztalyLeptetesLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); DateTime belepesDatuma; DateTime kilepesDatuma; var th = new TanevHelper(parent.ConnectionType); var kovTanevDatumok = th.GetTanevInfo(); belepesDatuma = kovTanevDatumok.KezdoNap; // A kilépés dátumának egy nappal előbbinek kell lenni, mint a belépésnek. kilepesDatuma = belepesDatuma.AddDays(-1); var validate = new SorolasValidate(belepesDatuma, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.NevelesOktatas, h); SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } var sikeresAtsoroltTanulok = new List(); var errormessage = new List(); var hasError = false; var marTagjaOsztalynak = new List(); var tanuloMarOsztalyCsoportTagja = new List(); var tanuloOsztalyCsoportTagjaLesz = new List(); var marKiLettAzOsztalybolSorolva = new List(); var osztalyokSzamaLimitTullepes = new List(); try { foreach (var tanuloId in tanuloIds) { int fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; var message = TanuloHelper.GetUtkozoOsztalyok(tanuloId, belepesDatuma, model.ToDDL.Value, OktNevelesiKategoriaEnum.NevelesOktatas, true, fromOsztalyId); if (!string.IsNullOrWhiteSpace(message)) { hasError = true; errormessage.Add(message); continue; } if (validate.OsztalyokSzamaLimitTullepes(tanuloId, OktNevelesiKategoriaEnum.NevelesOktatas)) { hasError = true; osztalyokSzamaLimitTullepes.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (!validate.NemTagjaAzOsztalynakABeallitottDatumIdejen(tanuloId)) { hasError = true; marTagjaOsztalynak.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloMarOsztalyCsoportTagja(tanuloId, osztaly.ID)) { hasError = true; tanuloMarOsztalyCsoportTagja.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloOsztalyCsoportTagjaLesz(tanuloId, osztaly.ID)) { hasError = true; tanuloOsztalyCsoportTagjaLesz.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.MarKiLettAzOsztalybolSorolva(parent.aktivTanevId, tanuloId, model.FromDDL.Value, kilepesDatuma)) { hasError = true; marKiLettAzOsztalybolSorolva.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } AlapKepzesOsztalyLeptetes(tanuloId, fromOsztalyId, model.ToDDL.Value, kilepesDatuma, belepesDatuma, model.Zaradek, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresAtsoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzoAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h); parent.UpdateTanulokSzakkepzesiJuttatasok(sikeresAtsoroltTanulok, h); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.MarTagjaOsztalynak, marTagjaOsztalynak); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloMarOsztalyCsoportTagja, tanuloMarOsztalyCsoportTagja); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloOsztalyCsoportTagjaLesz, tanuloOsztalyCsoportTagjaLesz); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.MarKiLettAzOsztalybolSorolva, marKiLettAzOsztalybolSorolva); message += parent.GetErrorMessageForTanuloList(ErrorResource.TanuloOsztalybasorolasainakSzamaMeghaladjaALimitet, osztalyokSzamaLimitTullepes); message += string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Amikepzes(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } DateTime belepesDatuma; DateTime kilepesDatuma; var th = new TanevHelper(parent.ConnectionType); var kovTanevDatumok = th.GetTanevInfo(); belepesDatuma = kovTanevDatumok.KezdoNap; // A kilépés dátumának egy nappal előbbinek kell lenni, mint a belépésnek. kilepesDatuma = belepesDatuma.AddDays(-1); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresenLeptetettTanulok = new List(); var validate = new SorolasValidate(belepesDatuma, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas, h); var hasError = false; var jogviszonyLimitTullepes = new List(); var tanuloMarOsztalyCsoportTagja = new List(); var tanuloOsztalyCsoportTagjaLesz = new List(); var errormessage = new List(); var osztalyokSzamaLimitTullepes = new List(); try { foreach (var tanuloId in tanuloIds) { int fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; if (validate.OsztalyokSzamaLimitTullepes(tanuloId, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas)) { hasError = true; osztalyokSzamaLimitTullepes.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.JogviszonyLimitTullepes(tanuloId)) { hasError = true; jogviszonyLimitTullepes.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloMarOsztalyCsoportTagja(tanuloId, osztaly.ID)) { hasError = true; tanuloMarOsztalyCsoportTagja.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloOsztalyCsoportTagjaLesz(tanuloId, osztaly.ID)) { hasError = true; tanuloOsztalyCsoportTagjaLesz.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } AmiKepzesOsztalyLeptetes(tanuloId, fromOsztalyId, model.ToDDL.Value, kilepesDatuma, belepesDatuma, model.Zaradek, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresenLeptetettTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresenLeptetettTanulok, model); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.JogviszonyLimitTullepes, jogviszonyLimitTullepes); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloMarOsztalyCsoportTagja, tanuloMarOsztalyCsoportTagja); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloOsztalyCsoportTagjaLesz, tanuloOsztalyCsoportTagjaLesz); message += parent.GetErrorMessageForTanuloList(ErrorResource.TanuloOsztalybasorolasainakSzamaMeghaladjaALimitet, osztalyokSzamaLimitTullepes); message += string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string Kollegium(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } DateTime belepesDatuma; DateTime kilepesDatuma; var th = new TanevHelper(parent.ConnectionType); var kovTanevDatumok = th.GetTanevInfo(); belepesDatuma = kovTanevDatumok.KezdoNap; // A kilépés dátumának egy nappal előbbinek kell lenni, mint a belépésnek. kilepesDatuma = belepesDatuma.AddDays(-1); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresAtsoroltTanulok = new List(); var errormessage = new List(); var validate = new SorolasValidate(belepesDatuma, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.Kollegium, h); var hasError = false; var marTagjaOsztalynak = new List(); var tanuloMarOsztalyCsoportTagja = new List(); var tanuloOsztalyCsoportTagjaLesz = new List(); var osztalyokSzamaLimitTullepes = new List(); try { foreach (var tanuloId in tanuloIds) { int fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; var message = TanuloHelper.GetUtkozoOsztalyok(tanuloId, belepesDatuma, model.ToDDL.Value, OktNevelesiKategoriaEnum.Kollegium, true, fromOsztalyId); if (!string.IsNullOrWhiteSpace(message)) { hasError = true; errormessage.Add(message); continue; } if (validate.OsztalyokSzamaLimitTullepes(tanuloId, OktNevelesiKategoriaEnum.Kollegium)) { hasError = true; osztalyokSzamaLimitTullepes.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (!validate.NemTagjaAzOsztalynakABeallitottDatumIdejen(tanuloId)) { hasError = true; marTagjaOsztalynak.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloMarOsztalyCsoportTagja(tanuloId, osztaly.ID)) { hasError = true; tanuloMarOsztalyCsoportTagja.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloOsztalyCsoportTagjaLesz(tanuloId, osztaly.ID)) { hasError = true; tanuloOsztalyCsoportTagjaLesz.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } KollegiumOsztalyLeptetes(tanuloId, fromOsztalyId, model.ToDDL.Value, kilepesDatuma, belepesDatuma, model.Zaradek, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresAtsoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.MarTagjaOsztalynak, marTagjaOsztalynak); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloMarOsztalyCsoportTagja, tanuloMarOsztalyCsoportTagja); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloOsztalyCsoportTagjaLesz, tanuloOsztalyCsoportTagjaLesz); message += parent.GetErrorMessageForTanuloList(ErrorResource.TanuloOsztalybasorolasainakSzamaMeghaladjaALimitet, osztalyokSzamaLimitTullepes); message += string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } public string EGYMI(IOsztalyCsoportbaSorolas model) { SorolasValidate.ValidateModel(model, datum: false, fromDdl: false, toDdl: true); if (!parent.TryGetOsztaly(model.ToDDL.Value, h, out var osztaly)) { throw new BlException(StringResourcesUtil.GetString(4028)); } DateTime belepesDatuma; DateTime kilepesDatuma; var th = new TanevHelper(parent.ConnectionType); var kovTanevDatumok = th.GetTanevInfo(); belepesDatuma = kovTanevDatumok.KezdoNap; // A kilépés dátumának egy nappal előbbinek kell lenni, mint a belépésnek. kilepesDatuma = belepesDatuma.AddDays(-1); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var sikeresAtsoroltTanulok = new List(); var errormessage = new List(); var validate = new SorolasValidate(belepesDatuma, tanuloIds, parent.TanevId, OktNevelesiKategoriaEnum.EGYMI, h); var hasError = false; var marTagjaOsztalynak = new List(); var tanuloMarOsztalyCsoportTagja = new List(); var tanuloOsztalyCsoportTagjaLesz = new List(); var osztalyokSzamaLimitTullepes = new List(); try { foreach (var tanuloId in tanuloIds) { int fromOsztalyId = model.ToElements.Single(i => i.Id == tanuloId).Fromid.Value; var message = TanuloHelper.GetUtkozoOsztalyok(tanuloId, belepesDatuma, model.ToDDL.Value, OktNevelesiKategoriaEnum.EGYMI, true, fromOsztalyId); if (!string.IsNullOrWhiteSpace(message)) { hasError = true; errormessage.Add(message); continue; } if (validate.OsztalyokSzamaLimitTullepes(tanuloId, OktNevelesiKategoriaEnum.EGYMI)) { hasError = true; osztalyokSzamaLimitTullepes.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (!validate.NemTagjaAzOsztalynakABeallitottDatumIdejen(tanuloId)) { hasError = true; marTagjaOsztalynak.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloMarOsztalyCsoportTagja(tanuloId, osztaly.ID)) { hasError = true; tanuloMarOsztalyCsoportTagja.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } if (validate.TanuloOsztalyCsoportTagjaLesz(tanuloId, osztaly.ID)) { hasError = true; tanuloOsztalyCsoportTagjaLesz.Add(validate.TanuloAdatok[tanuloId].Nev); continue; } EGYMIOsztalyLeptetes(tanuloId, fromOsztalyId, model.ToDDL.Value, kilepesDatuma, belepesDatuma, model.Zaradek, parent.isSzakkepzoIntezmeny, parent.isSelectedTanev21_22OrLater); sikeresAtsoroltTanulok.Add(tanuloId); } parent.EugyErtesitesTanuloOsztalyBesorolasStatuszValtozasrol(sikeresAtsoroltTanulok, model); parent.UpdateTanulokSzakkepzesesAdatok(sikeresAtsoroltTanulok, model.ToDDL.Value, h, false); } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.MarTagjaOsztalynak, marTagjaOsztalynak); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloMarOsztalyCsoportTagja, tanuloMarOsztalyCsoportTagja); message += parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloOsztalyCsoportTagjaLesz, tanuloOsztalyCsoportTagjaLesz); message += parent.GetErrorMessageForTanuloList(ErrorResource.TanuloOsztalybasorolasainakSzamaMeghaladjaALimitet, osztalyokSzamaLimitTullepes); message += string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private void AmiKepzesOsztalyLeptetes(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime kilepesDatum, DateTime belepesDatum, SorolasZaradek zaradek, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : TanuloCsoportDal.CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, parent.TanevId); if (newTanuloId <= 0) { newTanuloId = TanuloCsoportDal.Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, parent.TanevId, tanulo.Elotag); if (newTanuloId <= 0) { newTanuloId = TanuloHelper.CloneTanuloEntity(tanulo, parent.aktivTanevId, parent.kovTanevId.Value); } } var tanuloAktOsztaly = tanulo.OsztalyCsoport.First(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > kilepesDatum) && !x.Torolt); var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = newTanuloId; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.TanevId = parent.TanevId; TanuloCsoportDal.Insert(tcsUj); SaveZaradek(parent.ConnectionType, zaradek, tanuloAktOsztaly.ID, tanuloAktOsztaly.TanevId); var osztalybontottCsoportok = new List<(int Id, int CsoportId, bool AutoEgyeni, int CsoportTanuloSzam)>(); var egyeniCsoportok = OsztalybaSorolasLogic.GetOsztalyEgyeniCSoportjai(toOsztalyId); var rows = TanuloCsoportDal.GetTanuloOsztalyBontasosCsoportKapcsolatai(parent.aktivTanevId, tanuloId, fromOsztalyId).Tables[0].Rows; foreach (DataRow row in rows) { osztalybontottCsoportok.Add((SDAConvert.ToInt32(row["Id"]), SDAConvert.ToInt32(row["CsoportId"]), SDAConvert.ToBooleanFromTF(row["C_ISAUTOEGYENICSOPORT"]), SDAConvert.ToInt32(row["CsoportTanuloSzam"]) )); } if (tanuloUjOsztalya.MuveszetiAgId == (int)MuveszetiAgEnum.ZenemuveszetiAg && osztalybontottCsoportok.Any(x => x.AutoEgyeni || x.CsoportTanuloSzam == 1)) { OsztalybaSorolasLogic.EgyeniCSoportLetrehozas(newTanuloId, tanulo.NyomtatasiNev, tanulo.SzuletesiDatum, belepesDatum, tanuloUjOsztalya, egyeniCsoportok); } OsztalyKisorolasl.AmiOsztalyKisorolas(tanulo.ID, OsztalyDal.Get(tanuloAktOsztaly.OsztalyCsoportId), kilepesDatum, zaradek, false); TanuloTanugyiAdatok.InsertTanugyiAdatForLeptetes(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void AlapKepzesOsztalyLeptetes(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime kilepesDatum, DateTime belepesDatum, SorolasZaradek zaradek, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : TanuloCsoportDal.CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, parent.TanevId); if (newTanuloId <= 0) { newTanuloId = TanuloCsoportDal.Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, parent.TanevId, tanulo.Elotag); if (newTanuloId <= 0) { newTanuloId = TanuloHelper.CloneTanuloEntity(tanulo, parent.aktivTanevId, parent.kovTanevId.Value); } } var tanuloAktOsztaly = tanulo.OsztalyCsoport.FirstOrDefault(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > kilepesDatum) && !x.Torolt); var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = newTanuloId; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.JogviszonyTipusID = tanuloAktOsztaly?.JogviszonyTipusID; tcsUj.TanevId = parent.TanevId; TanuloCsoportDal.Insert(tcsUj); if (tanuloAktOsztaly != null) { tanuloAktOsztaly.KilepesDatum = kilepesDatum; tanuloAktOsztaly.KilepesRogzitesDatum = DateTime.Now; TanuloCsoportDal.Update(tanuloAktOsztaly); SaveZaradek(parent.ConnectionType, zaradek, tanuloAktOsztaly.ID, tanuloAktOsztaly.TanevId); CsoportKisorolasl.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, kilepesDatum); TanuloTanugyiAdatok.InsertTanugyiAdatForLeptetes(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } else { TanuloTanugyiAdatok.InsertTanugyiAdatFromTanulo(newTanuloId, tcsUj.ID, tanuloUjOsztalya, parent.isSelectedTanev21_22OrLater); } } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void KollegiumOsztalyLeptetes(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime kilepesDatum, DateTime belepesDatum, SorolasZaradek zaradek, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : TanuloCsoportDal.CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, parent.TanevId); if (newTanuloId <= 0) { newTanuloId = TanuloCsoportDal.Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, parent.TanevId, tanulo.Elotag); if (newTanuloId <= 0) { newTanuloId = TanuloHelper.CloneTanuloEntity(tanulo, parent.aktivTanevId, parent.kovTanevId.Value); } } var tanuloAktOsztaly = tanulo.OsztalyCsoport.First(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > kilepesDatum) && !x.Torolt); var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = newTanuloId; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.TanevId = parent.TanevId; tanuloAktOsztaly.KilepesDatum = kilepesDatum; tanuloAktOsztaly.KilepesRogzitesDatum = DateTime.Now; TanuloCsoportDal.Update(tanuloAktOsztaly); SaveZaradek(parent.ConnectionType, zaradek, tanuloAktOsztaly.ID, tanuloAktOsztaly.TanevId); TanuloCsoportDal.Insert(tcsUj); CsoportKisorolasl.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, kilepesDatum); TanuloTanugyiAdatok.InsertTanugyiAdatForLeptetes(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } private void EGYMIOsztalyLeptetes(int tanuloId, int fromOsztalyId, int toOsztalyId, DateTime kilepesDatum, DateTime belepesDatum, SorolasZaradek zaradek, bool isSzakkepzoIntezmeny, bool isSelectedTanev21_22OrLater) { try { var tanulo = TanuloDal.Get(tanuloId); var newTanuloId = string.IsNullOrEmpty(tanulo.OktatasiAzonosito) ? (int)default : TanuloCsoportDal.CheckOktatasiAzonosito(tanulo.OktatasiAzonosito, parent.TanevId); if (newTanuloId <= 0) { newTanuloId = TanuloCsoportDal.Check4TValidacio((int)Validation4TEnum.Tanulo, tanulo.Vezeteknev, tanulo.Utonev, tanulo.AnyjaNeve, tanulo.SzuletesiHely, tanulo.SzuletesiDatum, null, parent.TanevId, tanulo.Elotag); if (newTanuloId <= 0) { newTanuloId = TanuloHelper.CloneTanuloEntity(tanulo, parent.aktivTanevId, parent.kovTanevId.Value); } } var tanuloAktOsztaly = tanulo.OsztalyCsoport.First(x => x.OsztalyCsoportId == fromOsztalyId && (x.KilepesDatum == null || x.KilepesDatum > kilepesDatum) && !x.Torolt); var tanuloUjOsztalya = OsztalyDal.Get(toOsztalyId); var tcsUj = TanuloCsoportDal.Get(); tcsUj.TanuloId = newTanuloId; tcsUj.OsztalyCsoportId = toOsztalyId; tcsUj.BejegyzesIdopontja = DateTime.Now; tcsUj.BelepesDatum = belepesDatum; tcsUj.TanevId = parent.TanevId; tanuloAktOsztaly.KilepesDatum = kilepesDatum; tanuloAktOsztaly.KilepesRogzitesDatum = DateTime.Now; TanuloCsoportDal.Update(tanuloAktOsztaly); SaveZaradek(parent.ConnectionType, zaradek, tanuloAktOsztaly.ID, tanuloAktOsztaly.TanevId); TanuloCsoportDal.Insert(tcsUj); CsoportKisorolasl.KisorolasOsztalybontasosCsoportokbol(tanuloId, fromOsztalyId, kilepesDatum); TanuloTanugyiAdatok.InsertTanugyiAdatForLeptetes(tanuloAktOsztaly.TanuloTanugyiAdatok, tcsUj.ID, tanuloUjOsztalya, isSzakkepzoIntezmeny, isSelectedTanev21_22OrLater); } catch (BlException) { throw; } catch (Exception e) { try { var tanulo = h.Tanulo().Get(tanuloId); throw new BlException($"{tanulo.NyomtatasiNev} {OsztalyCsoportResource.KisorolasKozbenHibaTortent}", e); } catch (BlException) { throw; } catch { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } } } } private class CsoportLeptetesLogic { private readonly IDalHandler h; private readonly OsztalyCsoportbaSorolasHelper parent; private ITanuloCsoportDal _tanuloCsoportDal; private CsoportKisorolaslLogic _csoportKisorolaslLogic; private CsoportbaSorolasLogic _csoportbaSorolasLogic; private ITanuloCsoportDal TanuloCsoportDal => _tanuloCsoportDal ?? (_tanuloCsoportDal = h.TanuloCsoport()); private CsoportKisorolaslLogic CsoportKisorolasLogic => _csoportKisorolaslLogic ?? (_csoportKisorolaslLogic = new CsoportKisorolaslLogic(parent, h)); private CsoportbaSorolasLogic CsoportbaSorolasLogic => _csoportbaSorolasLogic ?? (_csoportbaSorolasLogic = new CsoportbaSorolasLogic(parent, h)); public CsoportLeptetesLogic(OsztalyCsoportbaSorolasHelper parent, IDalHandler h) { this.parent = parent; this.h = h; } public string Alapkepzes(IOsztalyCsoportbaSorolas model) { return CsoportLeptetes(model, OktNevelesiKategoriaEnum.NevelesOktatas); } public string Amikepzes(IOsztalyCsoportbaSorolas model) { return CsoportLeptetes(model, OktNevelesiKategoriaEnum.AlapfokuMuveszetoktatas); } public string Kollegium(IOsztalyCsoportbaSorolas model) { return CsoportLeptetes(model, OktNevelesiKategoriaEnum.Kollegium); } public string EGYMI(IOsztalyCsoportbaSorolas model) { return CsoportLeptetes(model, OktNevelesiKategoriaEnum.EGYMI); } public string CsoportLeptetes(IOsztalyCsoportbaSorolas model, OktNevelesiKategoriaEnum kategoria) { SorolasValidate.ValidateModel(model, datum: false); DateTime openDate; DateTime closeDate; var tanevHelper = new TanevHelper(parent.ConnectionType); openDate = tanevHelper.GetTanevInfo().KezdoNap; closeDate = tanevHelper.GetTanevInfo(parent.aktivTanevId).UtolsoNap; if (!parent.TryGetCoport(model.ToDDL.Value, h, out var celCsoport)) { throw new BlException(StringResourcesUtil.GetString(4020)/*A célcsoport nem létezik.*/); } var errormessage = new List(); var tanuloIds = model.ToElements.Select(i => i.Id).ToList(); var tanulos = GetKovTanevTanuloIds(tanuloIds); var aktTanevValidate = new SorolasValidate(closeDate, tanuloIds, parent.aktivTanevId, kategoria, h); var hasError = false; var tanuloNemSorolhatoMertNincsOsztalya = new List(); var nemTagjaAzOsztalynak = new List(); try { var helper = new TanuloHelper(parent.ConnectionType); foreach (var item in tanulos) { if (!item.KovTanuloId.HasValue) { hasError = true; tanuloNemSorolhatoMertNincsOsztalya.Add(item.KovTanuloNev); continue; } if (celCsoport.OsztalyBontasId != -1 && !item.KovOsztalyList.Any(x => x.Id == celCsoport.OsztalyBontasId)) { hasError = true; nemTagjaAzOsztalynak.Add(item.KovTanuloNev); continue; } var forrasTanuloCsoportId = aktTanevValidate.GetTanuloCsoportId(model.FromDDL.Value, item.AktTanuloId); var message = helper.GetUtkozoCsoportok(item.KovTanuloId.Value, openDate, celCsoport.ID, kategoria, true, forrasTanuloCsoportId); if (!string.IsNullOrWhiteSpace(message)) { hasError = true; errormessage.Add(message); continue; } try { CsoportbaSorolasLogic.AlapKepzesCsoportbaSorolas(item.KovTanuloId.Value, celCsoport.ID, openDate); } catch (SDA.DataProvider.UniqueKeyViolationException) { hasError = true; errormessage.Add(string.Format(ErrorResource.TanuloMarTagjaACsoportnak, item.KovTanuloNev)); continue; } CsoportKisorolasLogic.AlapkepzesCsoportbolKisorolas(forrasTanuloCsoportId, closeDate, model.Zaradek, tanevId: parent.aktivTanevId); } } catch (BlException) { throw; } catch (Exception e) { throw new BlException(StringResourcesUtil.GetString(4001)/*Nem kezelt adatbázis hiba történt!*/, e); } if (hasError) { var message = parent.GetErrorMessageForTanuloList(OsztalyCsoportResource.TanuloNemSorolhatoMertNincsOsztalya, tanuloNemSorolhatoMertNincsOsztalya); message += parent.GetErrorMessageForTanuloList(string.Format(OsztalyCsoportResource.NemTagjaAzOsztalynakFormat, celCsoport.OsztalyBontas?.Nev), nemTagjaAzOsztalynak); message += string.Join("
", errormessage); return parent.RemoveLastBrTag(message); } else { return string.Empty; } } private List GetKovTanevTanuloIds(List tanuloIds) { var kovTanuloList = new List(); foreach (var item in tanuloIds) { DataSet ds = TanuloCsoportDal.GetKovTanuloByAktTanulo(parent.TanevId, item); var row = ds.Tables[0].Rows[0]; var osztalyList = ds.Tables[0].AsEnumerable().Where(x => x.Field("KovTanuloOsztalyId").HasValue); var rowTanuloId = row.Field("AktTanuloId"); CsoportAtsorolas data = kovTanuloList.SingleOrDefault(a => a.AktTanuloId == rowTanuloId); if (data == null) { data = new CsoportAtsorolas() { AktTanuloId = row.Field("AktTanuloId"), KovTanuloId = row.Field("KovTanuloId"), KovTanuloNev = row.Field("KovTanuloNev"), }; kovTanuloList.Add(data); } foreach (var kovOsztaly in osztalyList) { data.TryAddKovOsztaly(kovOsztaly.Field("KovTanuloOsztalyId"), kovOsztaly.Field("KovTanuloOsztalyNev")); } } return kovTanuloList; } private class CsoportAtsorolas { public CsoportAtsorolas() { KovOsztalyList = new List(); } public string KovTanuloNev { get; set; } public int AktTanuloId { get; set; } public int? KovTanuloId { get; set; } public List KovOsztalyList { get; } public void TryAddKovOsztaly(int? id, string nev) { if (id.HasValue) { KovOsztalyList.Add(new KovOsztaly { Id = id.Value, Nev = nev }); } } public class KovOsztaly { public int Id { get; set; } public string Nev { get; set; } } } } } }