using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Xml; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Enums.ManualEnums; using Kreta.Framework.Util; using Kreta.Resources; namespace Kreta.BusinessLogic.Helpers { public class FogadooraHelper : LogicBase { public FogadooraHelper(IConnectionType connectionType) : base(connectionType) { } public DataSet GetFogadoora(FogadooraSearchCo searchCo) { var dataSet = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Fogadoora(GridParameters); return dal.GetFogadoora( IntezmenyId, TanevId, searchCo.ConvertToPco() ); }); dataSet.Tables[0].Columns.Add("JelentkezesekKezelese"); dataSet.Tables[0].Columns.Add("Rendszeresseg"); dataSet.Tables[0].Columns.Add("OsztalyCsoportFormatted"); var temp = dataSet.Tables[0].AsEnumerable(); var RendszeressegDictionary = EnumExtensions.EnumToDictionary(tanevId: TanevId); var TipusDictionary = new Dictionary { {(int)FogadooraTipusEnum.Jelentkezheto, FogadooraResource.Igen }, {(int)FogadooraTipusEnum.NemJelentkezheto, FogadooraResource.Nem }, {(int)FogadooraTipusEnum.JelentkezhetoDarabolt, FogadooraResource.Idopontra }, }; foreach (var row in temp) { row["JelentkezesekKezelese"] = TipusDictionary.First(x => x.Key == (int)row["JelentkezesekKezeleseId"]).Value; row["Rendszeresseg"] = RendszeressegDictionary.First(x => x.Key == row["RendszeressegId"].ToString()).Value; var ocsStr = row["OsztalyCsoport"].ToString(); if (ocsStr.Length > 70 && ocsStr.LastIndexOf(',') > 0) { int indx = ocsStr.LastIndexOf(','); row["OsztalyCsoportFormatted"] = ocsStr.Substring(0, indx) + " ..."; } else { row["OsztalyCsoportFormatted"] = row["OsztalyCsoport"].ToString(); } } return dataSet; } private DataSet GetGondviselokByFogadooraId(IDalHandler h, int fogadooraId) { var dal = h.Fogadoora(GridParameters); return dal.GetGondviselokByFogadooraId(fogadooraId); } public DataSet GetJelentkezettGondviseloCntByFogadooraId(int fogadooraId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetJelentkezettGondviseloCntByFogadooraId(fogadooraId); }); } private DataSet GetGondviselokByFogadooraIdAndOsztalyCsoportId(IDalHandler h, int fogadooraId, int osztalyCsoportId) { var dal = h.Fogadoora(GridParameters); return dal.GetGondviselokByFogadooraIdAndOsztalyCsoportId(fogadooraId, osztalyCsoportId); } public void DeleteFogadoora(int fogadooraId, int modositasiIdoszakTipus) { Dal.CustomConnection.Run(ConnectionType, (h) => { TanevCO tanevCO; var tanevHelper = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)); tanevCO = tanevHelper.GetTanevInfo(); var gondviseloDs = GetGondviselokByFogadooraId(h, fogadooraId); var fogadooraCo = GetFogadooraById(h, fogadooraId); DateTime idopontVege = fogadooraCo.FogadoOraVege; var lista = new List<(int Id, DateTime Idopont)>(); switch (modositasiIdoszakTipus) { case (int)OraModositasiIdoszakTipus.EgyOra: lista.Add((fogadooraId, fogadooraCo.FogadoOraKezdete)); break; case (int)OraModositasiIdoszakTipus.AdottNaptol: lista = GetFogadooraIdAndKezdeteByGroupIdList(h, fogadooraCo.GroupId, fogadooraCo.FogadoOraDatuma, tanevCO.UtolsoTanitasiNap); break; case (int)OraModositasiIdoszakTipus.AdottNapig: lista = GetFogadooraIdAndKezdeteByGroupIdList(h, fogadooraCo.GroupId, tanevCO.ElsoTanitasiNap, fogadooraCo.FogadoOraDatuma); break; case (int)OraModositasiIdoszakTipus.TeljesIdoszak: lista = GetFogadooraIdAndKezdeteByGroupIdList(h, fogadooraCo.GroupId, tanevCO.ElsoTanitasiNap, tanevCO.UtolsoTanitasiNap); break; } var elsoAlkalomDatuma = GetRendszeresModifyDeleteElsoDatum(lista); var dal = h.Fogadoora(GridParameters); foreach (var (Id, Idopont) in lista) { dal.DeleteFogadoora(Id); } bool isEgyalkalom = lista.Count < 2; PedagogusToroltFogadooraEmailKuldes(h, fogadooraCo.TanarId, fogadooraCo.TeremId, isEgyalkalom, elsoAlkalomDatuma, idopontVege, fogadooraCo.Rendszeresseg, fogadooraCo.JelentkezesHatarideje); GondviseloToroltFogadooraEmailKuldes(h, gondviseloDs, fogadooraCo.TanarId, fogadooraCo.TeremId, isEgyalkalom, elsoAlkalomDatuma, idopontVege, fogadooraCo.Rendszeresseg, fogadooraCo.JelentkezesHatarideje); if (fogadooraCo.IsFaliujsagonMegjelenjen) //beállítától függjön? { SaveToroltFogadooraFaliujsag(h, fogadooraCo, isEgyalkalom, elsoAlkalomDatuma, idopontVege); } }); } public DataSet GetFogadooraDokumentumAdatok(int fogadooraId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetFogadooraDokumentumAdatok(fogadooraId, TanevId); }); } public DataSet GetFogadooraOsztalyCsoportok(bool isSzuperOsztalyfonok) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetFogadooraOsztalyCsoportok(TanevId, FelhasznaloId, isSzuperOsztalyfonok); }); } private int InsertNewFogadoora(IDalHandler h, FogadooraCo fogadooraCo) { if (fogadooraCo.Rendszeresseg == (int)FogadooraRendszeressegEnum.EgyAlkalom) { return InsertFogadoora(h, fogadooraCo); } return InsertFogadooraTobbalkalom(h, fogadooraCo); } public Dictionary SaveFogadoora(FogadooraCo fogadooraCo) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var tanevCO = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanevInfo(); var isIdopontUjraGeneralasKell = false; var validateDictionary = ValidateFogadoora(fogadooraCo); if (validateDictionary.Any()) { return validateDictionary; } if (fogadooraCo.Id.HasValue) { var gondviseloDs = GetGondviselokByFogadooraId(h, fogadooraCo.Id.Value); var oldFogadooraCo = GetFogadooraById(h, fogadooraCo.Id.Value); fogadooraCo.FaliujsagId = oldFogadooraCo.FaliujsagId; fogadooraCo.GroupId = oldFogadooraCo.GroupId; fogadooraCo.FaliujsagId = oldFogadooraCo.FaliujsagId; fogadooraCo.Rendszeresseg = oldFogadooraCo.Rendszeresseg; var lista = new List<(int Id, DateTime Idopont)>(); isIdopontUjraGeneralasKell = IsIdopontUjraGeneralasKell(h, fogadooraCo.Id.Value, fogadooraCo.JelentkezesekKezelese, fogadooraCo.IsIdosavraOsztas.Value, fogadooraCo.EgysegnyiIdopontok, fogadooraCo.FogadoOraKezdete, fogadooraCo.FogadoOraVege); switch (fogadooraCo.ModositasiIdoszakTipus) { case (int)OraModositasiIdoszakTipus.TeljesIdoszak: lista = GetFogadooraIdAndKezdeteByGroupIdList(h, oldFogadooraCo.GroupId, DateTime.Now, tanevCO.UtolsoTanitasiNap); break; case (int)OraModositasiIdoszakTipus.AdottNaptol: lista = GetFogadooraIdAndKezdeteByGroupIdList(h, oldFogadooraCo.GroupId, fogadooraCo.FogadoOraDatuma, tanevCO.UtolsoTanitasiNap); break; case (int)OraModositasiIdoszakTipus.AdottNapig: lista = GetFogadooraIdAndKezdeteByGroupIdList(h, oldFogadooraCo.GroupId, DateTime.Now, fogadooraCo.FogadoOraDatuma); break; case (int)OraModositasiIdoszakTipus.EgyOra: lista.Add((fogadooraCo.Id.Value, fogadooraCo.FogadoOraKezdete)); fogadooraCo.Rendszeresseg = 0; break; } bool isEgyalkalom = lista.Count < 2; UpdateFogadoora(h, lista, fogadooraCo, isIdopontUjraGeneralasKell); if (isIdopontUjraGeneralasKell || oldFogadooraCo.TeremId != fogadooraCo.TeremId) { var elsoAlkalomDatuma = GetRendszeresModifyDeleteElsoDatum(lista).Date; var oldFogadooraKezdete = elsoAlkalomDatuma.AddHours(oldFogadooraCo.FogadoOraKezdete.Hour).AddMinutes(oldFogadooraCo.FogadoOraKezdete.Minute); var oldFogadooraVege = elsoAlkalomDatuma.AddHours(oldFogadooraCo.FogadoOraVege.Hour).AddMinutes(oldFogadooraCo.FogadoOraVege.Minute); var newFogadooraKezdete = elsoAlkalomDatuma.AddHours(fogadooraCo.FogadoOraKezdete.Hour).AddMinutes(fogadooraCo.FogadoOraKezdete.Minute); var newFogadooraVege = elsoAlkalomDatuma.AddHours(fogadooraCo.FogadoOraVege.Hour).AddMinutes(fogadooraCo.FogadoOraVege.Minute); PedagogusModositottFogadooraEmailKuldes(h, fogadooraCo.TanarId, oldFogadooraCo.TeremId, fogadooraCo.TeremId, oldFogadooraKezdete, oldFogadooraVege, newFogadooraKezdete, newFogadooraVege, isEgyalkalom, fogadooraCo.Rendszeresseg, fogadooraCo.JelentkezesHatarideje); GondviseloModositottFogadooraEmailKuldes(h, gondviseloDs, fogadooraCo.TanarId, oldFogadooraCo.TeremId, fogadooraCo.TeremId, oldFogadooraKezdete, oldFogadooraVege, newFogadooraKezdete, newFogadooraVege, isEgyalkalom, fogadooraCo.Rendszeresseg, fogadooraCo.JelentkezesHatarideje); if (fogadooraCo.IsFaliujsagonMegjelenjen) //beállítástól függjön? { fogadooraCo.Id = fogadooraCo.GroupId; SaveModositottFogadooraFaliujsag(h, fogadooraCo, fogadooraCo.TeremId, newFogadooraKezdete, newFogadooraVege, isEgyalkalom); } } } else { var newFogadooraKezdete = fogadooraCo.RendszeresFogadooraElsoDatuma?.AddHours(fogadooraCo.FogadoOraKezdete.Hour).AddMinutes(fogadooraCo.FogadoOraKezdete.Minute) ?? fogadooraCo.FogadoOraKezdete; var newFogadooraVege = fogadooraCo.RendszeresFogadooraUtolsoDatuma?.AddHours(fogadooraCo.FogadoOraVege.Hour).AddMinutes(fogadooraCo.FogadoOraVege.Minute) ?? fogadooraCo.FogadoOraVege; var groupId = InsertNewFogadoora(h, fogadooraCo); PedagogusUjFogadooraEmailKuldes(h, groupId, fogadooraCo.TanarId, fogadooraCo.TeremId, newFogadooraKezdete, newFogadooraVege, fogadooraCo.Rendszeresseg, fogadooraCo.EgysegnyiIdopontok, fogadooraCo.FogadooraTipusEnumId, fogadooraCo.JelentkezesHatarideje, isIdosavraOsztas: fogadooraCo.IsIdosavraOsztas); GondviseloUjFogadooraEmailKuldes(h, groupId, fogadooraCo.TanarId, fogadooraCo.TeremId, newFogadooraKezdete, newFogadooraVege, fogadooraCo.Rendszeresseg, fogadooraCo.EgysegnyiIdopontok, fogadooraCo.JelentkezesHatarideje, isIdosavraOsztas: fogadooraCo.IsIdosavraOsztas); if (fogadooraCo.IsFaliujsagonMegjelenjen) //beállítástól függjön? { fogadooraCo.Id = groupId; SaveUjFogadooraFaliujsag(h, fogadooraCo, tanevCO.OraFelvetelKezdete, tanevCO.UtolsoTanitasiNap, newFogadooraKezdete, newFogadooraVege); } } return validateDictionary; }); } private Dictionary ValidateFogadoora(FogadooraCo fogadooraCo) { Dictionary modelStateDictionary = new Dictionary(); if (fogadooraCo.FogadoOraKezdete >= fogadooraCo.FogadoOraVege) { modelStateDictionary.Add(nameof(fogadooraCo.FogadoOraVege), FogadooraResource.AFogadooraVegeIdopontjaNemLehetKorabbanMintaKezdoIdopont); } if (new DateTime(fogadooraCo.FogadoOraDatuma.Year, fogadooraCo.FogadoOraDatuma.Month, fogadooraCo.FogadoOraDatuma.Day, fogadooraCo.FogadoOraKezdete.Hour, fogadooraCo.FogadoOraKezdete.Minute, fogadooraCo.FogadoOraKezdete.Second) <= DateTime.Now) { modelStateDictionary.Add(nameof(fogadooraCo.FogadoOraKezdete), FogadooraResource.FogadooraCreateIsFutureError); } if (fogadooraCo.SelectedOsztalyCsoportIdList.Count == 0) { modelStateDictionary.Add(nameof(fogadooraCo.SelectedOsztalyCsoportIdList), FogadooraResource.NincsBeallitvaCsoportvagyOsztalyAFogadoorahoz); } if ((int)FogadooraRendszeressegEnum.Egyedi == fogadooraCo.Rendszeresseg && !fogadooraCo.Id.HasValue) { if (!fogadooraCo.FogadooraDatumList.Any()) { modelStateDictionary.Add(nameof(fogadooraCo.FogadooraDatumList), FogadooraResource.EgyediRendszeresseguFogadooranalLegalabbEgyIdopontKivalasztasaKotelezo); } } var span = fogadooraCo.FogadoOraVege.Subtract(fogadooraCo.FogadoOraKezdete); var oraHoszaInMinutes = span.Hours * 60 + span.Minutes; if (fogadooraCo.JelentkezesekKezelese && fogadooraCo.IsIdosavraOsztas.HasValue && fogadooraCo.IsIdosavraOsztas.Value && oraHoszaInMinutes < fogadooraCo.EgysegnyiIdopontok) { modelStateDictionary.Add(nameof(fogadooraCo.EgysegnyiIdopontok), FogadooraResource.FogadooraIdotartamaKevesebbMintAzEgysegnyiIdopontok); } if (oraHoszaInMinutes < 15) { modelStateDictionary.Add(nameof(oraHoszaInMinutes), FogadooraResource.OraHosszaNemLehet15PercnelRovidebb); } var rendszeressegTipusList = new List { (int)FogadooraRendszeressegEnum.Heti, (int)FogadooraRendszeressegEnum.HetirendAlapu }; if (!fogadooraCo.Id.HasValue && rendszeressegTipusList.Contains(fogadooraCo.Rendszeresseg) && fogadooraCo.RendszeresFogadooraElsoDatuma >= fogadooraCo.RendszeresFogadooraUtolsoDatuma) { modelStateDictionary.Add(nameof(fogadooraCo.RendszeresFogadooraUtolsoDatuma), FogadooraResource.AFogadooraUtolsoDatumaNemLehetKorabbanMintAzElsoDatuma); } if (!fogadooraCo.Id.HasValue && (rendszeressegTipusList.Contains(fogadooraCo.Rendszeresseg) && fogadooraCo.RendszeresFogadooraElsoDatuma <= DateTime.Today || fogadooraCo.FogadooraDatumList.Any(x => x <= DateTime.Today))) { modelStateDictionary.Add(nameof(fogadooraCo.RendszeresFogadooraElsoDatuma), FogadooraResource.FogadooraFelivetleCsakJovobeliDatumraLehetseges); } if (fogadooraCo.IsFaliujsagonMegjelenjen && (fogadooraCo.FaliujsagErvenyessegKezdete >= fogadooraCo.FaliujsagErvenyessegVege)) { modelStateDictionary.Add(nameof(fogadooraCo.FaliujsagErvenyessegVege), FogadooraResource.AFaliujsagVegeIdopontjaNemLehetKorabbanMintaKezdoIdopont); } return modelStateDictionary; } private int PreUpdateFogadoora(IDalHandler h, FogadooraCo fogadooraCo, List modositottIdopontok = null) { return InsertFogadooraTobbalkalom(h, fogadooraCo, modositottIdopontok, fogadooraCo.GroupId); } private int InsertFogadoora(IDalHandler h, FogadooraCo fogadooraCo, int groupId = -1) { var dal = h.Fogadoora(GridParameters); var entity = dal.Get(); entity.FogadooraKezdete = fogadooraCo.FogadoOraKezdete; entity.FogadooraVege = fogadooraCo.FogadoOraVege; entity.Rendszeresseg = fogadooraCo.Rendszeresseg; entity.FogadooraTipusId = fogadooraCo.FogadooraTipusEnumId; entity.TanarId = fogadooraCo.TanarId; entity.TeremId = fogadooraCo.TeremId; entity.Egyseg = fogadooraCo.EgysegnyiIdopontok; if (fogadooraCo.JelentkezesHatarideje.HasValue) { entity.JelentkezesHatarido = fogadooraCo.FogadoOraKezdete.AddHours(-fogadooraCo.JelentkezesHatarideje.Value); } if (fogadooraCo.FaliujsagId.IsEntityId()) { entity.TanuloEsemenyId = fogadooraCo.FaliujsagId; } InsertNemkotottMunkaido(h, fogadooraCo); if (groupId < 0) { var entityId = dal.Insert(entity); dal.UpdateFogadooraGroupId(entityId, entityId); } else { entity.GroupId = groupId; dal.Insert(entity); } foreach (var osztalyCsoportId in fogadooraCo.SelectedOsztalyCsoportIdList) { var focs = dal.GetFogadooraOsztalyCsoport(); focs.FogadooraId = entity.ID; focs.OsztalyCsoportId = osztalyCsoportId; dal.Insert(focs); } if (fogadooraCo.JelentkezesekKezelese) { if (fogadooraCo.IsIdosavraOsztas == true) { int fogadooraSzeletekSzama = CalculateFogadooraIdoszeletekSzama(fogadooraCo); if (fogadooraSzeletekSzama != 0) { var add = 0; for (int i = 1; i < fogadooraSzeletekSzama + 1; i++) { var fi = dal.GetFogadooraIdopont(); fi.Kezdete = fogadooraCo.FogadoOraKezdete.AddMinutes(add); fi.Vege = fogadooraCo.FogadoOraKezdete.AddMinutes(i * fogadooraCo.EgysegnyiIdopontok); add = i * fogadooraCo.EgysegnyiIdopontok; fi.FogadooraId = entity.ID; dal.Insert(fi); } } else { var fi = dal.GetFogadooraIdopont(); fi.Kezdete = fogadooraCo.FogadoOraKezdete; fi.Vege = fogadooraCo.FogadoOraVege; fi.FogadooraId = entity.ID; dal.Insert(fi); } } else { var fi = dal.GetFogadooraIdopont(); fi.Kezdete = fogadooraCo.FogadoOraKezdete; fi.Vege = fogadooraCo.FogadoOraVege; fi.FogadooraId = entity.ID; dal.Insert(fi); } } return entity.ID; } private void UpdateFogadoora(IDalHandler h, List<(int Id, DateTime Idopont)> fogadooraIdList, FogadooraCo fogadooraCo, bool IsIdopontUjraGeneralasKell) { var dal = h.Fogadoora(GridParameters); if (IsIdopontUjraGeneralasKell) { foreach (var (Id, Idopont) in fogadooraIdList) { dal.DeleteFogadoora(Id); } PreUpdateFogadoora(h, fogadooraCo, fogadooraIdList.Select(x => x.Idopont).ToList()); } else { var maradekElemek = GetFogadooraOsztalyCsoportMaradekElemek(h, fogadooraCo.GroupId); bool ujonnanFelvettOsztalycsoportokMailjeiKikuldve = false; foreach (var (Id, Idopont) in fogadooraIdList) { var entity = dal.Get(Id); entity.TeremId = fogadooraCo.TeremId; entity.TanuloEsemenyId = fogadooraCo.FaliujsagId; if (fogadooraCo.JelentkezesHatarideje.HasValue) { entity.JelentkezesHatarido = fogadooraCo.FogadoOraKezdete.AddHours(-fogadooraCo.JelentkezesHatarideje.Value); } dal.FullUpdate(entity); var jelentkezesHatarideje = entity.JelentkezesHatarido.HasValue ? (int?)(entity.FogadooraKezdete - entity.JelentkezesHatarido.Value).TotalHours : null; // újonnan felvett osztálycsoportok foreach (var osztalyCsoportId in fogadooraCo.SelectedOsztalyCsoportIdList.Except(entity.Fogadoora_OsztalyCsoport.Where(x => !x.Torolt).Select(y => y.OsztalyCsoportId))) { var focs = dal.GetFogadooraOsztalyCsoport(); focs.FogadooraId = entity.ID; focs.OsztalyCsoportId = osztalyCsoportId; dal.Insert(focs); if (!ujonnanFelvettOsztalycsoportokMailjeiKikuldve) { GondviseloUjFogadooraEmailKuldes(h, Id, entity.TanarId, entity.TeremId, entity.FogadooraKezdete, entity.FogadooraVege, entity.Rendszeresseg, entity.Egyseg ?? 0, jelentkezesHatarideje, osztalyCsoportId, isIdosavraOsztas: fogadooraCo.IsIdosavraOsztas); } if (fogadooraCo.IsFaliujsagonMegjelenjen) { InsertOsztalyCsoportTanuloesemenyByFogadooraId(h, Id, osztalyCsoportId); } } ujonnanFelvettOsztalycsoportokMailjeiKikuldve = true; //eltávolított osztálycsoportok foreach (var osztalyCsoportId in fogadooraCo.ModifiedOsztalyCsoportList.Where(x => x.Value == false).Select(x => x.Key)) { var isEgyalkalom = fogadooraIdList.Count > 2; DeleteFogadooraOsztalyCsoportByFogadooraIdOsztalyCsoportId(h, Id, osztalyCsoportId); var ertesitendoGondviseloDS = DeleteGondviseloJelentkezesByFogadooraIdOsztalyCsoportId(h, Id, osztalyCsoportId); GondviseloToroltFogadooraEmailKuldes(h, ertesitendoGondviseloDS, entity.TanarId, entity.TeremId, isEgyalkalom, entity.FogadooraKezdete, entity.FogadooraVege, entity.Rendszeresseg, jelentkezesHatarideje); if (fogadooraCo.IsFaliujsagonMegjelenjen && (maradekElemek.AsEnumerable().First(x => x.Field("OsztalyCsoportId") == osztalyCsoportId).Field("Darab") == fogadooraIdList.Count)) { DeleteOsztalyCsoportTanuloesemenyByFogadooraId(h, Id, osztalyCsoportId); } } } } UpdateFaliujsag(h, fogadooraCo); } private void UpdateFaliujsag(IDalHandler h, FogadooraCo co) { var tanevCo = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanevInfo(); var fogadooraList = GetFogadooraIdAndKezdeteByGroupIdList(h, co.GroupId, tanevCo.OraFelvetelKezdete, tanevCo.UtolsoTanitasiNap); var faliujsagDal = h.Feljegyzes(); if (co.FaliujsagId.IsEntityId()) { var faliujsagEntity = faliujsagDal.Get(co.FaliujsagId); faliujsagEntity.Kezdete = co.FaliujsagErvenyessegKezdete; faliujsagEntity.Vege = co.FaliujsagErvenyessegVege; faliujsagDal.FullUpdate(faliujsagEntity); } var fogadooraDal = h.Fogadoora(); if (!co.IsFaliujsagonMegjelenjen && co.FaliujsagId.IsEntityId()) { foreach (var (Id, _) in fogadooraList) { var fogadooraEntity = fogadooraDal.Get(Id); fogadooraEntity.TanuloEsemeny = null; fogadooraDal.FullUpdate(fogadooraEntity); } faliujsagDal.DeleteFeljegyzes(co.FaliujsagId); } if (co.IsFaliujsagonMegjelenjen && !co.FaliujsagId.IsEntityId()) { var newFogadooraKezdete = co.RendszeresFogadooraElsoDatuma?.AddHours(co.FogadoOraKezdete.Hour).AddMinutes(co.FogadoOraKezdete.Minute) ?? co.FogadoOraKezdete; var newFogadooraVege = co.RendszeresFogadooraUtolsoDatuma?.AddHours(co.FogadoOraVege.Hour).AddMinutes(co.FogadoOraVege.Minute) ?? co.FogadoOraVege; SaveUjFogadooraFaliujsag(h, co, tanevCo.OraFelvetelKezdete, tanevCo.UtolsoTanitasiNap, newFogadooraKezdete, newFogadooraVege); } } private NemKotottMunkaidoCO CreateNemKotottMunkaidoCO(FogadooraCo model) { return new NemKotottMunkaidoCO() { Id = model.Id, GroupId = Guid.NewGuid().ToString(), TorvenyKategoriaId = (int)TevekenysegTipusEnum.egyeb, TanarId = FelhasznaloId, TulajId = FelhasznaloId, Kezdete = model.FogadoOraKezdete, Vege = model.FogadoOraVege, Megtartott = false, Megjegyzes = FogadooraResource.Fogadoora, NaplozottMegjegyzes = FogadooraResource.Fogadoora, HetirendId = (int)HetiRendTipusEnum.MindegyikHet }; } private void InsertNemkotottMunkaido(IDalHandler h, FogadooraCo model) { var nemKotottMunkaIdoCo = CreateNemKotottMunkaidoCO(model); if (model.IsNemKotottMunkaido) { var nemKotottMunkaidoHelper = new NemKotottMunkaidoHelper(new DalHandlerConnectionType(ConnectionType, h)); nemKotottMunkaidoHelper.Insert(nemKotottMunkaIdoCo); } } private int InsertFogadooraTobbalkalom(IDalHandler h, FogadooraCo fogadooraCo, List modositottIdopontok = null, int groupId = -1) { var fogadooraIdopontList = modositottIdopontok ?? GetFogadooraDatumList(h, fogadooraCo); foreach (var fogadooraIdopont in fogadooraIdopontList) { fogadooraCo.FogadoOraKezdete = new DateTime(fogadooraIdopont.Year, fogadooraIdopont.Month, fogadooraIdopont.Day, fogadooraCo.FogadoOraKezdete.Hour, fogadooraCo.FogadoOraKezdete.Minute, fogadooraCo.FogadoOraKezdete.Second); fogadooraCo.FogadoOraVege = new DateTime(fogadooraIdopont.Year, fogadooraIdopont.Month, fogadooraIdopont.Day, fogadooraCo.FogadoOraVege.Hour, fogadooraCo.FogadoOraVege.Minute, fogadooraCo.FogadoOraVege.Second); if (groupId < 0) { groupId = InsertFogadoora(h, fogadooraCo, groupId); //A gruop id az első elem id-ja lesz } else { InsertFogadoora(h, fogadooraCo, groupId); } } return groupId; } private List GetFogadooraDatumList(IDalHandler h, FogadooraCo fogadooraCo) { var fogadooraIdopontList = new List(); if (fogadooraCo.Rendszeresseg == (int)FogadooraRendszeressegEnum.EgyAlkalom) { fogadooraIdopontList.Add(fogadooraCo.FogadoOraDatuma); } else if (fogadooraCo.Rendszeresseg == (int)FogadooraRendszeressegEnum.Egyedi) { fogadooraIdopontList = fogadooraCo.FogadooraDatumList; } else { fogadooraIdopontList = GetFogadooraIdopontokByRendszeressegTipusEnum(h, fogadooraCo.RendszeresFogadooraElsoDatuma.Value, fogadooraCo.RendszeresFogadooraUtolsoDatuma, (FogadooraRendszeressegEnum)fogadooraCo.Rendszeresseg); } return fogadooraIdopontList; } public List GetFogadooraDatumList(FogadooraCo fogadooraCo) { return Dal.CustomConnection.Run(ConnectionType, (h) => GetFogadooraDatumList(h, fogadooraCo)); } private int CalculateFogadooraIdoszeletekSzama(FogadooraCo fogadooraCo) { var szeletekSzama = 0; if (fogadooraCo.EgysegnyiIdopontok != 0) { TimeSpan span = fogadooraCo.FogadoOraVege.Subtract(fogadooraCo.FogadoOraKezdete); var minutes = span.Hours * 60 + span.Minutes; szeletekSzama = minutes / fogadooraCo.EgysegnyiIdopontok; } return szeletekSzama; } private List GetFogadooraIdopontokByRendszeressegTipusEnum(IDalHandler h, DateTime datum, DateTime? rendszeresFogadooraUtolsoDatuma, FogadooraRendszeressegEnum rendszeressegEnum) { DateTime utolsoNap = rendszeresFogadooraUtolsoDatuma ?? new TanevrendHelper(new DalHandlerConnectionType(ConnectionType, h)).GetUtolsoTanitasiNapDate(); var dal = h.Fogadoora(GridParameters); var ds = dal.GetFogadooraIdopontokByRendszeressegTipusId(TanevId, (int)rendszeressegEnum, datum, utolsoNap); var result = ds.Tables[0].AsEnumerable().Select(x => SDAConvert.ToDateTime(x["Datum"]).Value).ToList(); return result; } public FogadooraCo GetFogadooraById(int fogadooraId) { return Dal.CustomConnection.Run(ConnectionType, h => { return GetFogadooraById(h, fogadooraId); }); } private FogadooraCo GetFogadooraById(IDalHandler h, int fogadooraId) { var fogadoora = h.Fogadoora().Get(fogadooraId); var result = ConvertEntityToCoFogadooraToCo(h, fogadoora); return result; } private FogadooraCo ConvertEntityToCoFogadooraToCo(IDalHandler h, IFogadoora fogadoora) { var (kezdete, vege) = GetFaliujsagDetails(h, fogadoora); return new FogadooraCo() { Id = fogadoora.ID, Rendszeresseg = fogadoora.Rendszeresseg, EgysegnyiIdopontok = fogadoora.Egyseg.Value, IsIdosavraOsztas = fogadoora.FogadooraTipusId == (int)FogadooraTipusEnum.JelentkezhetoDarabolt, FogadoOraDatuma = fogadoora.FogadooraKezdete, FogadoOraKezdete = fogadoora.FogadooraKezdete, FogadoOraVege = fogadoora.FogadooraVege, FogadooraTipusEnumId = fogadoora.FogadooraTipusId, JelentkezesekKezelese = (int)FogadooraTipusEnum.Jelentkezheto == fogadoora.FogadooraTipusId || (int)FogadooraTipusEnum.JelentkezhetoDarabolt == fogadoora.FogadooraTipusId, TanarId = fogadoora.TanarId, TeremId = fogadoora.TeremId, SelectedOsztalyCsoportIdList = fogadoora.Fogadoora_OsztalyCsoport.Where(s => !s.Torolt).Select(x => x.OsztalyCsoportId).ToList(), TeremNev = fogadoora.Terem.Nev, GroupId = fogadoora.GroupId, IsFaliujsagonMegjelenjen = fogadoora.TanuloEsemenyId.IsEntityId(), FaliujsagErvenyessegKezdete = kezdete, FaliujsagErvenyessegVege = vege, FaliujsagId = fogadoora.TanuloEsemenyId, JelentkezesHatarideje = fogadoora.JelentkezesHatarido.HasValue ? (int?)(fogadoora.FogadooraKezdete - fogadoora.JelentkezesHatarido.Value).TotalHours : null }; } private DateTime GetRendszeresModifyDeleteElsoDatum(List<(int Id, DateTime Idopont)> datumList) { var result = datumList.Select(x => x.Idopont).OrderBy(x => x.Date).FirstOrDefault(); return result; } private (DateTime kezdete, DateTime vege) GetFaliujsagDetails(IDalHandler h, IFogadoora fogadoora) { if (fogadoora.TanuloEsemenyId.IsEntityId()) { return (fogadoora.TanuloEsemeny.Kezdete.Value, fogadoora.TanuloEsemeny.Vege.Value); } DateTime ervenyessegVege; switch (fogadoora.Rendszeresseg) { case (int)FogadooraRendszeressegEnum.EgyAlkalom: ervenyessegVege = fogadoora.FogadooraVege.Date.AddDays(1); break; case (int)FogadooraRendszeressegEnum.Heti: case (int)FogadooraRendszeressegEnum.HetirendAlapu: var helper = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)); ervenyessegVege = helper.GetTanevInfo().UtolsoNap; break; default: ervenyessegVege = DateTime.Today.AddDays(1); break; } return (DateTime.Today, ervenyessegVege); } private void DeleteFogadooraOsztalyCsoportByFogadooraIdOsztalyCsoportId(IDalHandler h, int fogadooraId, int osztalyCsoportId) { var dal = h.Fogadoora(GridParameters); dal.DeleteFogadooraOsztalyCsoportByFogadooraIdOsztalyCsoportId(fogadooraId, osztalyCsoportId); } private void DeleteOsztalyCsoportTanuloesemenyByFogadooraId(IDalHandler h, int fogadooraId, int osztalyCsoportId) { var dal = h.Fogadoora(GridParameters); dal.DeleteOsztalyCsoportTanuloesemenyByFogadooraId(fogadooraId, osztalyCsoportId); } private void InsertOsztalyCsoportTanuloesemenyByFogadooraId(IDalHandler h, int fogadooraId, int osztalyCsoportId) { var dal = h.Fogadoora(GridParameters); dal.InsertOsztalyCsoportTanuloesemenyByFogadooraId(fogadooraId, osztalyCsoportId); } private DataSet DeleteGondviseloJelentkezesByFogadooraIdOsztalyCsoportId(IDalHandler h, int fogadooraId, int osztalyCsoportId) { var dal = h.Fogadoora(GridParameters); return dal.DeleteFogadooraIdopontGondviseloByFogadooraIdOsztalyCsoportId(fogadooraId, osztalyCsoportId); } public DataSet GetFogadooraGondviselo(int gondviseloId, int? tanarId = null, int? teremId = null, DateTime? start = null, DateTime? end = null, DateTime? startTime = null, DateTime? endTime = null, bool? isJelentkezheto = null) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Fogadoora(GridParameters); var dataSet = dal.GetFogadooraGondviselo( IntezmenyId, TanevId, gondviseloId, tanarId, teremId, start, end, startTime, endTime, isJelentkezheto ); var jelentkezettFogadoorak = dataSet.Tables[0].AsEnumerable() .Where(x => (int)x["JelentkezesekKezeleseId"] == (int)FogadooraTipusEnum.JelentkezhetoDarabolt && !string.IsNullOrWhiteSpace(x["IdopontGondviseloId"].ToString())) .Select(x => (int)x["ID"]).ToList(); var result = new DataSet(); var table = dataSet.Tables[0].Clone(); var data = dataSet.Tables[0].AsEnumerable(); foreach (var dataRow in data) { if (string.IsNullOrWhiteSpace(dataRow["IdopontStr"].ToString())) { dataRow["IdopontStr"] = FogadooraResource.NemLehetJelentkezni; } if (!(jelentkezettFogadoorak.Contains((int)dataRow["Id"]) && string.IsNullOrWhiteSpace(dataRow["IdopontGondviseloId"].ToString()))) { if ((int)dataRow["JelentkezesekKezeleseId"] == (int)FogadooraTipusEnum.JelentkezhetoDarabolt && (int)dataRow["jelentkezesAllapot"] == 1 /*nem jelentkezett*/ && (int)dataRow["SzabadIdopontokSzama"] == 0) { dataRow["JelentkezesekKezeleseId"] = ((int)FogadooraTipusEnum.NemJelentkezheto).ToString(); } table.ImportRow(dataRow); } } result.Tables.Add(table); return result; }); } public DataSet GetFogadooraIdopontok(int fogadooraId, int gondviseloId, FogadooraTipusEnum? tipus = null) { var dataSet = Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Fogadoora(GridParameters); return dal.GetFogadooraIdopontok( new List { fogadooraId }, gondviseloId, tipus ); }); return dataSet; } public bool IsIdopontUjraGeneralasKell(int Id, bool isJelentkezesekKezelese, bool IsIdosavraOsztas, int egysegnyiIdopontok, DateTime kezdete, DateTime vege) { return Dal.CustomConnection.Run(ConnectionType, h => IsIdopontUjraGeneralasKell(h, Id, isJelentkezesekKezelese, IsIdosavraOsztas, egysegnyiIdopontok, kezdete, vege)); } private bool IsIdopontUjraGeneralasKell(IDalHandler h, int Id, bool isJelentkezesekKezelese, bool IsIdosavraOsztas, int egysegnyiIdopontok, DateTime kezdete, DateTime vege) { var entity = h.Fogadoora().Get(Id); var tipusId = isJelentkezesekKezelese ? (IsIdosavraOsztas ? (int)FogadooraTipusEnum.JelentkezhetoDarabolt : (int)FogadooraTipusEnum.Jelentkezheto) : (int)FogadooraTipusEnum.NemJelentkezheto; var result = entity.FogadooraTipusId != tipusId || tipusId == (int)FogadooraTipusEnum.JelentkezhetoDarabolt && entity.Egyseg.HasValue && entity.Egyseg.Value != egysegnyiIdopontok || entity.FogadooraKezdete.Hour != kezdete.Hour || entity.FogadooraKezdete.Minute != kezdete.Minute || entity.FogadooraVege.Hour != vege.Hour || entity.FogadooraVege.Minute != vege.Minute; return result; } /// INFO: Mobil használja public void FogadooraGondviseloJelentkezes(int idopontId, int gondviseloId) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); var foig = dal.GetFogadooraIdopontGondviselo(); foig.FogadooraIdopontId = idopontId; foig.GondviseloId = gondviseloId; if (!foig.IntezmenyId.IsEntityId()) { foig.IntezmenyId = IntezmenyId; } dal.Insert(foig); //Email küldés jelentkezéskor var fogadooraIdopont = dal.GetFogadooraIdopont(idopontId); var fogadoora = fogadooraIdopont.Fogadoora; string osztalyCsoportok = string.Join(", ", fogadoora.Fogadoora_OsztalyCsoport.Where(focs => focs.OsztalyCsoport.Tanulo.Any(tcs => tcs.Tanulo.Gondviselo.Any(g => g.ID == gondviseloId && !g.Torolt) && !tcs.Torolt) && !focs.Torolt).Select(focs => focs.OsztalyCsoport.Nev)); PedagogusFogadooraJelentkezesEmailKuldes(h, fogadoora.TanarId, fogadoora.TeremId, gondviseloId, fogadooraIdopont.Kezdete, fogadooraIdopont.Vege, foig.Gondviselo.TanuloId, osztalyCsoportok); GondviseloSikeresJelentkezesEmailKuldes(h, fogadoora.TanarId, fogadoora.TeremId, gondviseloId, fogadooraIdopont.Kezdete, fogadooraIdopont.Vege, foig.Gondviselo.TanuloId, osztalyCsoportok); }); } /// INFO: Mobil használja public void FogadooraGondviseloJelentkezesLemondas(int idopontId, int gondviseloId) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); var fogadooraIdopont = dal.GetFogadooraIdopont(idopontId); var idopontGondviselo = fogadooraIdopont.FogadooraIdopont_Gondviselo.FirstOrDefault(x => x.GondviseloId == gondviseloId && !x.Torolt && !x.Gondviselo.Torolt); if (idopontGondviselo != null) { FogadooraGondviseloJelentkezesLemondas(idopontGondviselo.ID); } }); } public void FogadooraGondviseloJelentkezesLemondas(int idopontGondviseloId) { Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); var fogadooraIdopontGondviselo = dal.GetFogadooraIdopontGondviselo(idopontGondviseloId); var fogadooraIdopont = dal.GetFogadooraIdopont(fogadooraIdopontGondviselo.FogadooraIdopontId); var fogadoora = fogadooraIdopont.Fogadoora; string osztalyCsoportok = string.Join(", ", fogadoora.Fogadoora_OsztalyCsoport.Where(focs => focs.OsztalyCsoport.Tanulo.Any(tcs => tcs.Tanulo.Gondviselo.Any(g => g.ID == fogadooraIdopontGondviselo.GondviseloId && !g.Torolt) && !tcs.Torolt) && !focs.Torolt).Select(focs => focs.OsztalyCsoport.Nev)); PedagogusFogadooraJelentkezesLemondasEmailKuldes(h, fogadoora.TanarId, fogadoora.TeremId, fogadooraIdopontGondviselo.GondviseloId, fogadooraIdopont.Kezdete, fogadooraIdopont.Vege, fogadooraIdopontGondviselo.Gondviselo.TanuloId, osztalyCsoportok); dal.DeleteFogadooraIdopontGondviselo(idopontGondviseloId); }); } #region Email private void FogadooraEmailKuldes(IDalHandler h, FogadooraEmailModel model) => new UzenetekHelper(new DalHandlerConnectionType(ConnectionType, h)).EmailKuldes(model.Message, model.Subject, model.EmailCim, model.EmailGuid); private void FogadooraEmailekKuldese(IDalHandler h, List modelList) => new UzenetekHelper(new DalHandlerConnectionType(ConnectionType, h)).EmailekKuldese(modelList); private string TanarNev(IDalHandler h, int tanarid) => new TanarHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanarNev(tanarid); private string TanuloNev(IDalHandler h, int tanuloid) => new TanuloHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanuloNev(tanuloid); private string GondviseloNev(IDalHandler h, int gondviseloId) => new TanuloHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTanuloGondviseloById(gondviseloId).GondviseloNeve; private (string email, Guid? guid) GetGondviseloEmailCimAndGuid(IDalHandler h, int gondviseloId) => new TanuloHelper(new DalHandlerConnectionType(ConnectionType, h)).GetGondviseloEmailCimAndGuid(gondviseloId); private string TeremNev(IDalHandler h, int teremId) => new TeremHelper(new DalHandlerConnectionType(ConnectionType, h)).GetTeremNev(teremId); private static IEmail TanarEmailCim(IDalHandler h, int tanarid) { var oTanar = h.Alkalmazott().Get(tanarid); var emailList = oTanar.Email; if (emailList.Any(x => x.Alapertelmezett && !x.Torolt && !x.IsHibasanMegadva)) { return emailList.First(x => x.Alapertelmezett && !x.Torolt && !x.IsHibasanMegadva); } return emailList.Any(x => x.EmailTipusa == (int)EmailTipusEnum.Hivatalos && !x.Torolt && !x.IsHibasanMegadva) ? emailList.First(x => x.EmailTipusa == (int)EmailTipusEnum.Hivatalos && !x.Torolt && !x.IsHibasanMegadva) : null; } private IntezmenyCO Intezmeny(IDalHandler h) => new IntezmenyHelper(new DalHandlerConnectionType(ConnectionType, h)).GetIntezmenyiAdatok(); private (string rendszeresseg, string idopont) FogadaooraDetails(int rendszeressegEnumId) { switch (rendszeressegEnumId) { case (int)FogadooraRendszeressegEnum.EgyAlkalom: return (string.Empty, FogadooraResource.Idopont); case (int)FogadooraRendszeressegEnum.Heti: return (FogadooraResource.HetiRendszeressegu, FogadooraResource.ElsoAlkalomIdopontja); case (int)FogadooraRendszeressegEnum.HetirendAlapu: return (FogadooraResource.HetirendAlapuRendszeressegu, FogadooraResource.ElsoAlkalomIdopontja); case (int)FogadooraRendszeressegEnum.Egyedi: return (FogadooraResource.EgyediRendszeressegu, FogadooraResource.ElsoAlkalomIdopontja); } return (string.Empty, string.Empty); } private void PedagogusUjFogadooraEmailKuldes(IDalHandler h, int fogadooraId, int tanarId, int teremId, DateTime idopontKezdete, DateTime idopontVege, int rendszeressegId, int egysegnyiIdopontok, int fogadooraTipusEnumId, int? jelentkezesHatarideje, bool? isIdosavraOsztas = null) { if (GetProfileData(h, tanarId, "FogadooraEmailUj")) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var (rendszeresseg, idopont) = FogadaooraDetails(rendszeressegId); var fogadooraDetailList = (GetGondviselokByFogadooraId(h, fogadooraId)).Tables[0].AsEnumerable().Select(g => new { OsztalyNev = g["OsztalyNev"], FogadooraJelentkezesTipus = g["FogadooraJelentkezesTipusa"] }); string KiirtOsztalyok = string.Join(", ", from osztaly in fogadooraDetailList.Select(s => s.OsztalyNev).Distinct().ToList() select osztaly); string idosavraOsztasSzoveg = string.Empty; if (isIdosavraOsztas.HasValue && isIdosavraOsztas.Value) { idosavraOsztasSzoveg = string.Format(EmailResource.UjFogadooraEmailTartalomIdosavraOsztasSzoveg, egysegnyiIdopontok); } IEmail email = TanarEmailCim(h, tanarId); var emailModel = new FogadooraEmailModel { Message = string.Format(EmailResource.UjFogadooraPedagogusEmailTartalom, tanarNev, rendszeresseg, idopont, GetFogadooraIdopontIntervallum(idopontKezdete, idopontVege, true), idosavraOsztasSzoveg, fogadooraTipusEnumId != 0 ? EmailResource.Tudnak : EmailResource.NemTudnak, GetJelentkezesiHataridoText(jelentkezesHatarideje), teremNev, tanarNev, KiirtOsztalyok), Subject = $"{EmailResource.UjFogadoora} - {idopontKezdete.ToShortDateString()} - {KiirtOsztalyok} osztály/csoport", EmailCim = email?.EmailCim, EmailGuid = email?.Guid }; FogadooraEmailKuldes(h, emailModel); } } public void GondviseloUjFogadooraEmailKuldes(IDalHandler h, int fogadooraId, int tanarId, int teremId, DateTime idopontKezdete, DateTime idopontVege, int rendszeressegId, int egysegnyiIdopontok, int? jelentkezesHatarideje, int? osztalyCsoportId = null, bool? isIdosavraOsztas = null) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var (rendszeresseg, idopont) = FogadaooraDetails(rendszeressegId); var jelentkezesHataridejeText = GetJelentkezesiHataridoText(jelentkezesHatarideje); var ds = new DataSet(); if (!osztalyCsoportId.HasValue) { ds = GetGondviselokByFogadooraId(h, fogadooraId); } else { ds = GetGondviselokByFogadooraIdAndOsztalyCsoportId(h, fogadooraId, osztalyCsoportId.Value); } if (ds.Tables[0].Rows.Count > 0) { var fogadooraDetailList = ds.Tables[0].AsEnumerable() .Select(g => new { FogadooraJelentkezesTipus = g["FogadooraJelentkezesTipusa"], Id = g["GondviseloId"], EmailCim = g["GondviseloEmailCim"], EmailGuid = SDAConvert.ToNullableGuid(g["GondviseloEmailGuid"]), Nev = g["GondviseloNev"], TanuloId = g["TanuloId"], TanuloNev = g["TanuloNev"], OsztalyNev = g["OsztalyNev"], IsProfilFogadooraEmailUj = SDAConvert.ToBoolean(g["FogadooraEmailUj"], true) }); bool IsJelentkezesLehetseges = ((int)fogadooraDetailList.Select(s => s.FogadooraJelentkezesTipus).First() > 0); string idosavraOsztasSzoveg = string.Empty; if (isIdosavraOsztas.HasValue && isIdosavraOsztas.Value) { idosavraOsztasSzoveg = string.Format(EmailResource.UjFogadooraEmailTartalomIdosavraOsztasSzoveg, egysegnyiIdopontok); } string fogadooraIdopontIntervallum = GetFogadooraIdopontIntervallum(idopontKezdete, idopontVege, true); string emailTartalomPluszHaLehetJelentkezni = IsJelentkezesLehetseges ? isIdosavraOsztas.ToBool() ? EmailResource.UjFogadooraGondviseloEmailTartalomPlusTextHaLehetJelentkeni : EmailResource.UjFogadooraGondviseloEmailTartalomPlusTextHaLehetJelentkeniDeNincsIdosav : "."; var emailModelList = new List(); foreach (var fogadooraDetail in fogadooraDetailList) { if (fogadooraDetail.IsProfilFogadooraEmailUj && !string.IsNullOrWhiteSpace((string)fogadooraDetail.EmailCim) && ((string)fogadooraDetail.EmailCim).IsValidEmail()) { var gondviseloNev = fogadooraDetail.Nev.ToString(); var gondviseloEmailCim = fogadooraDetail.EmailCim.ToString(); var emailModel = new FogadooraEmailModel { Message = string.Format(EmailResource.UjFogadooraGondviseloEmailTartalom, gondviseloNev, rendszeresseg, idopont, fogadooraIdopontIntervallum, idosavraOsztasSzoveg, emailTartalomPluszHaLehetJelentkezni, jelentkezesHataridejeText, teremNev, tanarNev, fogadooraDetail.TanuloNev.ToString(), fogadooraDetail.OsztalyNev.ToString()), Subject = $"{EmailResource.UjFogadoora} - {idopontKezdete.ToShortDateString()} - {fogadooraDetail.TanuloNev} - {fogadooraDetail.OsztalyNev}", EmailCim = gondviseloEmailCim, EmailGuid = fogadooraDetail.EmailGuid }; emailModelList.Add(emailModel); } } if (emailModelList.Count > 0) { FogadooraEmailekKuldese(h, emailModelList); } } } private int GetHetNapja(DateTime date) { HetNapjaTipusEnum hetNapja = HetNapjaTipusEnum.na; switch (date.DayOfWeek) { case DayOfWeek.Monday: hetNapja = HetNapjaTipusEnum.Hetfo; break; case DayOfWeek.Tuesday: hetNapja = HetNapjaTipusEnum.Kedd; break; case DayOfWeek.Wednesday: hetNapja = HetNapjaTipusEnum.Szerda; break; case DayOfWeek.Thursday: hetNapja = HetNapjaTipusEnum.Csutortok; break; case DayOfWeek.Friday: hetNapja = HetNapjaTipusEnum.Pentek; break; case DayOfWeek.Saturday: hetNapja = HetNapjaTipusEnum.Szombat; break; case DayOfWeek.Sunday: hetNapja = HetNapjaTipusEnum.Vasarnap; break; } return (int)hetNapja; } private string GetHetnapja(DateTime date) => GetHetNapja(date).GetItemNameFromCache(TanevId).ToLower(); private void PedagogusToroltFogadooraEmailKuldes(IDalHandler h, int tanarId, int teremId, bool isEgyalkalom, DateTime idopontKezdete, DateTime idopontVege, int rendszeressegId, int? jelentkezesHatarideje) { if (GetProfileData(h, tanarId, "FogadooraEmailTorles")) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var (rendszeresseg, idopont) = FogadaooraDetails(isEgyalkalom ? (int)FogadooraRendszeressegEnum.EgyAlkalom : rendszeressegId); var idopontSzoveg = GetFogadooraIdopontIntervallum(idopontKezdete, idopontVege, true); var message = string.Format(EmailResource.LemondottFogadooraTartalom, tanarNev, rendszeresseg, idopont, idopontSzoveg, GetJelentkezesiHataridoText(jelentkezesHatarideje), teremNev, tanarNev); IEmail email = TanarEmailCim(h, tanarId); var emailModel = new FogadooraEmailModel { Message = message, Subject = $"{EmailResource.LemondottFogadoora} - {tanarNev}", EmailCim = email?.EmailCim, EmailGuid = email?.Guid }; FogadooraEmailKuldes(h, emailModel); } } private void GondviseloToroltFogadooraEmailKuldes(IDalHandler h, DataSet gondviseloDs, int tanarId, int teremId, bool isEgyalkalom, DateTime idopontKezdete, DateTime idopontVege, int rendszeressegId, int? jelentkezesHatarideje) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var (rendszeresseg, idopont) = FogadaooraDetails(isEgyalkalom ? (int)FogadooraRendszeressegEnum.EgyAlkalom : rendszeressegId); var idopontSzoveg = GetFogadooraIdopontIntervallum(idopontKezdete, idopontVege, true); var jelentkezesHataridejeText = GetJelentkezesiHataridoText(jelentkezesHatarideje); var gondviseloList = gondviseloDs.Tables[0].AsEnumerable() .Select(g => new { Id = g.Field("GondviseloId"), EmailCim = g.Field("GondviseloEmailCim"), EmailGuid = g.Field("GondviseloEmailGuid"), Nev = g.Field("GondviseloNev"), TanuloId = g.Field("TanuloId") }); foreach (var gondviselo in gondviseloList.Where(g => !string.IsNullOrWhiteSpace(g.EmailCim))) { if (GetProfileData(h, (int)gondviselo.TanuloId, "FogadooraEmailTorles")) { var emailModel = new FogadooraEmailModel { Message = string.Format(EmailResource.LemondottFogadooraTartalom, gondviselo.Nev, rendszeresseg, idopont, idopontSzoveg, jelentkezesHataridejeText, teremNev, tanarNev), Subject = $"{EmailResource.LemondottFogadoora} - {idopontKezdete.ToShortDateString()} - {tanarNev}", EmailCim = gondviselo.EmailCim, EmailGuid = gondviselo.EmailGuid }; FogadooraEmailKuldes(h, emailModel); } } } private void PedagogusModositottFogadooraEmailKuldes(IDalHandler h, int tanarId, int oldaTeremId, int newTeremId, DateTime oldIdopontKezdete, DateTime oldIdopontVege, DateTime newIdopontKezdete, DateTime newIdopontVege, bool isEgyalkalom, int rendszeressegId, int? jelentkezesHatarideje) { if (GetProfileData(h, tanarId, "FogadooraEmailUj")) { var oldTeremNev = TeremNev(h, oldaTeremId); var teremText = oldaTeremId != newTeremId ? $"({oldTeremNev}) {TeremNev(h, newTeremId)}" : $"{oldTeremNev}"; var tanarNev = TanarNev(h, tanarId); var (rendszeresseg, idopont) = FogadaooraDetails(isEgyalkalom ? (int)FogadooraRendszeressegEnum.EgyAlkalom : rendszeressegId); var idopontText = oldIdopontKezdete != newIdopontKezdete || oldIdopontVege != newIdopontVege ? $"({GetFogadooraIdopontIntervallum(oldIdopontKezdete, oldIdopontVege)}) {GetFogadooraIdopontIntervallum(newIdopontKezdete, newIdopontVege, true)}" : $"{GetFogadooraIdopontIntervallum(oldIdopontKezdete, oldIdopontVege, true)}"; var message = string.Format(EmailResource.ModositottFogadooraTartalom, tanarNev, rendszeresseg, idopont, idopontText, GetJelentkezesiHataridoText(jelentkezesHatarideje), teremText, tanarNev); IEmail email = TanarEmailCim(h, tanarId); var emailModel = new FogadooraEmailModel { Message = message, Subject = $"{EmailResource.ModositottFogadoora} - {tanarNev}", EmailCim = email?.EmailCim, EmailGuid = email?.Guid }; FogadooraEmailKuldes(h, emailModel); } } private void GondviseloModositottFogadooraEmailKuldes(IDalHandler h, DataSet gondviseloDs, int tanarId, int oldaTeremId, int newTeremId, DateTime oldIdopontKezdete, DateTime oldIdopontVege, DateTime newIdopontKezdete, DateTime newIdopontVege, bool isEgyalkalom, int rendszeressegId, int? jelentkezesHatarideje) { var oldTeremNev = TeremNev(h, oldaTeremId); var teremText = oldaTeremId != newTeremId ? $"({oldTeremNev}) {TeremNev(h, newTeremId)}" : $"{oldTeremNev}"; var tanarNev = TanarNev(h, tanarId); var (rendszeresseg, idopont) = FogadaooraDetails(isEgyalkalom ? (int)FogadooraRendszeressegEnum.EgyAlkalom : rendszeressegId); var idopontText = oldIdopontKezdete != newIdopontKezdete || oldIdopontVege != newIdopontVege ? $"({GetFogadooraIdopontIntervallum(oldIdopontKezdete, oldIdopontVege)}) {GetFogadooraIdopontIntervallum(newIdopontKezdete, newIdopontVege, true)}" : $"{GetFogadooraIdopontIntervallum(oldIdopontKezdete, oldIdopontVege, true)}"; var jelentkezesHataridejeText = GetJelentkezesiHataridoText(jelentkezesHatarideje); var gondviseloList = gondviseloDs.Tables[0].AsEnumerable() .Select(g => new { Id = g.Field("GondviseloId"), EmailCim = g.Field("GondviseloEmailCim"), EmailGuid = g.Field("GondviseloEmailGuid"), Nev = g.Field("GondviseloNev"), TanuloId = g.Field("TanuloId") }); foreach (var gondviselo in gondviseloList.Where(g => !string.IsNullOrWhiteSpace(g.EmailCim))) { if (GetProfileData(h, (int)gondviselo.TanuloId, "FogadooraEmailUj")) { var message = string.Format(EmailResource.ModositottFogadooraTartalom, gondviselo.Nev, rendszeresseg, idopont, idopontText, jelentkezesHataridejeText, teremText, tanarNev); var emailModel = new FogadooraEmailModel { Message = message, Subject = $"{EmailResource.ModositottFogadoora} - {tanarNev}", EmailCim = gondviselo.EmailCim, EmailGuid = gondviselo.EmailGuid }; FogadooraEmailKuldes(h, emailModel); } } } private void PedagogusFogadooraJelentkezesEmailKuldes(IDalHandler h, int tanarId, int teremId, int gondviseloId, DateTime idopont, DateTime idopontVege, int tanuloId, string osztalyCsoportok) { if (GetProfileData(h, tanarId, "FogadooraEmailJelentkezes")) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var gondviseloNev = GondviseloNev(h, gondviseloId); var tanuloNev = TanuloNev(h, tanuloId); var intezmenyCO = Intezmeny(h); var intezmenyUrl = Utils.CommonUtils.GetIntezmenyUrl(intezmenyCO.IntezmenyAzonosito); var intezmenyNev = intezmenyCO.Nev; var intezmenyCim = intezmenyCO.IntezmenyCim; IEmail email = TanarEmailCim(h, tanarId); var emailModel = new FogadooraEmailModel { Message = string.Format(EmailResource.JelentkezesFogadoorara, tanarNev, idopont, teremNev, gondviseloNev, idopontVege, tanuloNev, osztalyCsoportok, intezmenyUrl, intezmenyNev, intezmenyCim), Subject = $"{EmailResource.FogadooraJelentkezes} - {idopont} - {gondviseloNev}", EmailCim = email?.EmailCim, EmailGuid = email?.Guid }; FogadooraEmailKuldes(h, emailModel); } } private void PedagogusFogadooraJelentkezesLemondasEmailKuldes(IDalHandler h, int tanarId, int teremId, int gondviseloId, DateTime idopont, DateTime idopontVege, int tanuloId, string osztalyCsoportok) { if (GetProfileData(h, tanarId, "FogadooraEmailJelentkezesLemondas")) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var gondviseloNev = GondviseloNev(h, gondviseloId); var tanuloNev = TanuloNev(h, tanuloId); var intezmenyCO = Intezmeny(h); var intezmenyUrl = Utils.CommonUtils.GetIntezmenyUrl(intezmenyCO.IntezmenyAzonosito); var intezmenyNev = intezmenyCO.Nev; var intezmenyCim = intezmenyCO.IntezmenyCim; IEmail email = TanarEmailCim(h, tanarId); var emailModel = new FogadooraEmailModel { Message = string.Format(EmailResource.JelentkezesLemondasFogadoorara, tanarNev, idopont, teremNev, gondviseloNev, idopontVege, tanuloNev, osztalyCsoportok, intezmenyUrl, intezmenyNev, intezmenyCim), Subject = $"{EmailResource.FogadooraJelentkezesLemondas} - {idopont} - {gondviseloNev}", EmailCim = email?.EmailCim, EmailGuid = email?.Guid }; FogadooraEmailKuldes(h, emailModel); } } private void GondviseloSikeresJelentkezesEmailKuldes(IDalHandler h, int tanarId, int teremId, int gondviseloId, DateTime idopont, DateTime idopontVege, int tanuloId, string osztalyCsoportok) { if (GetProfileData(h, tanuloId, "FogadooraEmailJelentkezes")) { var tanarNev = TanarNev(h, tanarId); var teremNev = TeremNev(h, teremId); var gondviseloNev = GondviseloNev(h, gondviseloId); var tanuloNev = TanuloNev(h, tanuloId); var intezmenyCO = Intezmeny(h); var intezmenyUrl = Utils.CommonUtils.GetIntezmenyUrl(intezmenyCO.IntezmenyAzonosito); var intezmenyNev = intezmenyCO.Nev; var intezmenyCim = intezmenyCO.IntezmenyCim; var (email, guid) = GetGondviseloEmailCimAndGuid(h, gondviseloId); var emailModel = new FogadooraEmailModel { Message = string.Format(EmailResource.SikeresFogadooraJelentkezesTartalom, gondviseloNev, idopont, teremNev, tanarNev, idopontVege, tanuloNev, osztalyCsoportok, intezmenyUrl, intezmenyNev, intezmenyCim), Subject = $"{EmailResource.SikeresFogadooraJelentkezes} - {idopont} - {tanarNev}", EmailCim = email, EmailGuid = guid }; FogadooraEmailKuldes(h, emailModel); } } private bool GetProfileData(IDalHandler h, int felhasznaloId, string profileTipus) { var dal = h.Fogadoora(GridParameters); var profileXml = dal.GetProfileData(felhasznaloId); if (string.IsNullOrWhiteSpace(profileXml)) { return true; } XmlDocument xDoc = new XmlDocument(); xDoc.LoadXml(profileXml); XmlNode node = xDoc.SelectSingleNode("UserProfile/" + profileTipus); return node == null || (bool.TryParse(node.InnerText, out bool result)) && result; } #endregion public DataSet GetFogadooraJelentkezettGondviselokDataSet(int fogadooraId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var fogadooraOsztalyCsoportIdList = GetFogadooraById(h, fogadooraId).SelectedOsztalyCsoportIdList; var dal = h.Fogadoora(GridParameters); return dal.GetFogadooraJelentkezettGondviselokDataSet(fogadooraId, fogadooraOsztalyCsoportIdList); }); } public DataSet GetFogadooraJelentkezettGondviselokByGroupId(int groupId, DateTime kedzete, DateTime vege) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetFogadooraJelentkezettGondviselokByGroupId(groupId, kedzete, vege); }); } public DataSet GeTeremOrarendDs(DateTime start, DateTime end, int teremId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GeTeremOrarendDataSet(IntezmenyId, TanevId, start, end, teremId); }); } public DataSet GetPedagogusOrarendDs(DateTime start, DateTime end) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetPedagogusOrarendDataSet(IntezmenyId, TanevId, start, end, FelhasznaloId); }); } public DataSet GetPedagogusFogadooraDs(DateTime start, DateTime end) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetPedagogusTeremFogadooraDataSet(TanevId, start, end, FelhasznaloId, null); }); } public DataSet GetTeremFogadooraDs(DateTime start, DateTime end, int teremId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.Fogadoora(GridParameters); return dal.GetPedagogusTeremFogadooraDataSet(TanevId, start, end, null, teremId); }); } private List<(int Id, DateTime Idopont)> GetFogadooraIdAndKezdeteByGroupIdList(IDalHandler h, int fogadooraGroupId, DateTime start, DateTime end) { var dal = h.Fogadoora(GridParameters); return dal.GetFogadooraIdByGroupIdList(TanevId, fogadooraGroupId, start, end); } public int IsSzabadIdopontByFogadooraIdopontId(int fogadooraIdopontId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var isTorolt = false; var isSzabad = false; var dal = h.Fogadoora(GridParameters); var fogadooraIdopont = dal.GetFogadooraIdopont(fogadooraIdopontId); if (fogadooraIdopont.Torolt) { isTorolt = true; } var isSzabadIdopont = dal.IsSzabadIdopontByFogadooraIdopontId(fogadooraIdopontId); if (isSzabadIdopont) { isSzabad = true; } if (isTorolt) { return (int)FogadooraJelentkezesAllapotEnum.ToroltFogoora; } if (!isSzabad) { return (int)FogadooraJelentkezesAllapotEnum.MarJelentkeztek; } return (int)FogadooraJelentkezesAllapotEnum.LehetJelentkezni; }); } private string GetDateWithoutHoursAndMinutes(DateTime date) { var months = date.Month < 10 ? $"0{date.Month}" : date.Month.ToString(); var days = date.Day < 10 ? $"0{date.Day}" : date.Day.ToString(); return $"{date.Year}.{months}.{days}."; } private string GetDateOnlyHoursAndMinutes(DateTime date) { var hours = date.Hour < 10 ? $"0{date.Hour}" : date.Hour.ToString(); var minutes = date.Minute < 10 ? $"0{date.Minute}" : date.Minute.ToString(); return $"{hours}:{minutes}"; } private string GetFogadooraIdopontIntervallum(DateTime intervallumEleje, DateTime intervalllumVege, bool isNapFelirat = false) { var hetnapjaText = isNapFelirat ? $"{GetHetnapja(intervallumEleje)}, " : string.Empty; return $"{GetDateWithoutHoursAndMinutes(intervallumEleje)} ({hetnapjaText}{GetDateOnlyHoursAndMinutes(intervallumEleje)}-{GetDateOnlyHoursAndMinutes(intervalllumVege)})"; } private string GetJelentkezesiHataridoText(int? jelentkezesHatarideje) { if (!jelentkezesHatarideje.HasValue || jelentkezesHatarideje == 0) { return FogadooraResource.Nincs; } return string.Format(FogadooraResource.ora, jelentkezesHatarideje.Value); } private void SaveUjFogadooraFaliujsag(IDalHandler h, FogadooraCo co, DateTime elsoTanitasiNap, DateTime utolsoTanitasiNap, DateTime idopontKezdete, DateTime idopontVege) { var (rendszeresseg, idopont) = FogadaooraDetails(co.Rendszeresseg); var tanarNeve = h.Alkalmazott().GetAlkalmazottNevById(FelhasznaloId, TanevId, IntezmenyId); var teremNev = h.Terem().Get(co.TeremId).Nev; var dal = h.Feljegyzes(); var fogadooraDal = h.Fogadoora(); var entity = dal.Get(); entity.Kezdete = co.FaliujsagErvenyessegKezdete; entity.FaliujsagMegjelenes = true; entity.EsemenyDatuma = idopontKezdete.Date; entity.Tipus = (int)EsemenyTipusEnum.FaliujsagBejegyzes; entity.Vege = co.FaliujsagErvenyessegVege; entity.FeljegyzoId = FelhasznaloId; entity.Mindenkinek = false; entity.Targy = FogadooraResource.UjFogadora; entity.Tartalom = string.Format(FogadooraResource.FaliujsagUjFogadoora, rendszeresseg, idopont, GetFogadooraIdopontIntervallum(idopontKezdete, idopontVege, true), tanarNeve, teremNev); dal.Insert(entity); var coOsztalyCsoportIdList = co.SelectedOsztalyCsoportIdList; foreach (var id in coOsztalyCsoportIdList) { dal.AddOsztalyCsoport(entity, id); } var fogadooraList = fogadooraDal.GetFogadooraIdByGroupIdList(TanevId, co.Id.Value, elsoTanitasiNap, utolsoTanitasiNap); foreach (var (Id, _) in fogadooraList) { var fogadooraEntity = fogadooraDal.Get(Id); fogadooraEntity.TanuloEsemenyId = entity.ID; fogadooraDal.FullUpdate(fogadooraEntity); } } private void SaveToroltFogadooraFaliujsag(IDalHandler handler, FogadooraCo co, bool isEgyalkalom, DateTime idopontKezdete, DateTime idopontVege) { var (rendszeresseg, idopont) = FogadaooraDetails(isEgyalkalom ? (int)FogadooraRendszeressegEnum.EgyAlkalom : co.Rendszeresseg); var tanarNeve = handler.Alkalmazott().GetAlkalmazottNevById(co.TanarId, TanevId, IntezmenyId); var teremNev = handler.Terem().Get(co.TeremId).Nev; var dal = handler.Feljegyzes(); var entity = dal.Get(co.FaliujsagId); entity.Kezdete = co.FaliujsagErvenyessegKezdete; entity.FaliujsagMegjelenes = true; entity.EsemenyDatuma = DateTime.Today; entity.Tipus = (int)EsemenyTipusEnum.FaliujsagBejegyzes; entity.Vege = co.FaliujsagErvenyessegVege; entity.Mindenkinek = false; entity.Targy = EmailResource.LemondottFogadoora; entity.Tartalom = string.Format(FogadooraResource.LemondottFogadooraFaliujsag, rendszeresseg, idopont, GetFogadooraIdopontIntervallum(idopontKezdete, idopontVege, true), tanarNeve, teremNev); dal.FullUpdate(entity); } public void SaveModositottFogadooraFaliujsag(IDalHandler h, FogadooraCo co, int newTeremId, DateTime newIdopontKezdete, DateTime newIdopontVege, bool isEgyalkalom) { var teremText = $"{TeremNev(h, newTeremId)}"; var tanarNev = TanarNev(h, co.TanarId); var (rendszeresseg, idopont) = FogadaooraDetails(isEgyalkalom ? (int)FogadooraRendszeressegEnum.EgyAlkalom : co.Rendszeresseg); var idopontText = $"{GetFogadooraIdopontIntervallum(newIdopontKezdete, newIdopontVege, true)}"; var fogadooraDal = h.Fogadoora(); var faliujsagId = fogadooraDal.Get(co.Id.Value).TanuloEsemenyId; var dal = h.Feljegyzes(); var entity = dal.Get(faliujsagId); entity.Kezdete = co.FaliujsagErvenyessegKezdete; entity.FaliujsagMegjelenes = true; entity.EsemenyDatuma = DateTime.Today; entity.Tipus = (int)EsemenyTipusEnum.FaliujsagBejegyzes; entity.Vege = co.FaliujsagErvenyessegVege; entity.FeljegyzoId = FelhasznaloId; entity.Mindenkinek = false; entity.Targy = EmailResource.ModositottFogadoora; entity.Tartalom = string.Format(FogadooraResource.ModositottFaliujsagTartalom, rendszeresseg, idopont, idopontText, teremText, tanarNev); dal.FullUpdate(entity); } private DataTable GetFogadooraOsztalyCsoportMaradekElemek(IDalHandler h, int fogadooraId) { var fogadooraDal = h.Fogadoora(); return fogadooraDal.GetFogadooraOsztalyCsoportMaradekElemek(fogadooraId); } } }