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.BusinessLogic.Helpers.SystemSettings; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.Core.Exceptions; 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.Resources; namespace Kreta.BusinessLogic.Helpers { public class HelyettesitesHelper : LogicBase { public HelyettesitesHelper(IConnectionType connectionType) : base(connectionType) { } // TODO: párja: OrarendHelper.FilterOutEventByTanevRendje !! public DataSet GetTanarOrai(HelyettesitesekKereseseCo co) { HelyettesitesekKeresesePCO pco = Convert_CO_to_PCO(co); return Dal.CustomConnection.Run(ConnectionType, h => { IHelyettesitesDAL dal = h.HelyettesitesDAL(GridParameters); var ds = dal.GetTanarOrai(pco, IntezmenyId, TanevId); var orarendevents = ds.Tables[0].AsEnumerable(); var engedelyezettEventList = new List(); var ocsTiltottEventList = new List(); var globalTiltottEventList = new List(); var orarendHelper = new OrarendHelper(new DalHandlerConnectionType(ConnectionType, h)); var tanevRendHelper = new TanevrendHelper(new DalHandlerConnectionType(ConnectionType, h)); var tanevrendek = tanevRendHelper.GetTanevrendekOsztalyCsoportokkal(co.HelyettesitesKezdete, co.HelyettesitesVege); var tanevRendjeLists = tanevRendHelper.GetTanevRendjeLists(tanevrendek.Tables[0]); foreach (var t in tanevRendjeLists.OcsEngedelyezes) { engedelyezettEventList.AddRange(orarendevents.Where(x => x.Field("HelyettesitettOraKezdete").Date == t.Item1 && x.Field("HelyettesitettOsztalyId") == t.Item2)); } foreach (var d in tanevRendjeLists.GlobalTiltas) { globalTiltottEventList.AddRange(orarendevents.Where(x => x.Field("HelyettesitettOraKezdete").Date == d)); } foreach (var t in tanevRendjeLists.OcsTiltas) { ocsTiltottEventList.AddRange(orarendevents.Where(x => x.Field("HelyettesitettOraKezdete").Date == t.Item1 && x.Field("HelyettesitettOsztalyId") == t.Item2)); } var foglalkozasok_Rogzitese_Hetvegere = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h)).GetSystemSettingValue(RendszerBeallitasTipusEnum.Foglalkozasok_Rogzitese_Hetvegere); foreach (var item in orarendevents) { bool isErvenyesNap = false; switch (foglalkozasok_Rogzitese_Hetvegere) { case FoglalkozasokRogziteseHetvegere.Engedelyezett: isErvenyesNap = true; break; case FoglalkozasokRogziteseHetvegere.CsakSzombat: isErvenyesNap = orarendHelper.IsHetkoznapWithSzombat(item.Field("HelyettesitettOraKezdete").Date); break; case FoglalkozasokRogziteseHetvegere.NemEngedelyezett: default: isErvenyesNap = orarendHelper.IsHetkoznap(item.Field("HelyettesitettOraKezdete").Date); break; } if ((isErvenyesNap || tanevRendjeLists.GlobalEngedelyezes.Contains(item.Field("HelyettesitettOraKezdete").Date)) && engedelyezettEventList.All(x => x.Field("ID") != item.Field("ID")) && ocsTiltottEventList.All(x => x.Field("ID") != item.Field("ID")) && globalTiltottEventList.All(x => x.Field("ID") != item.Field("ID"))) { engedelyezettEventList.Add(item); } } var resultDs = ds.Clone(); foreach (var item in engedelyezettEventList) { resultDs.Tables[0].Rows.Add(item.ItemArray); } return resultDs; }); } public DataSet GetHelyettesitesekListajaGrid(HelyettesitesekListajaSearchCO co) { return Dal.CustomConnection.Run(ConnectionType, h => { IHelyettesitesDAL dal = h.HelyettesitesDAL(GridParameters); return dal.GetHelyettesitesekListajaGrid(co.ConvertToPCO(), TanevId); }); } public DataSet GetHelyettesitesekAjanlasa(LehetsegesHelyettesitoTanarokCO co) { LehetsegesHelyettesitoTanarokPCO pco = Convert_CO_to_PCO(co); DataSet dataSet = Dal.CustomConnection.Run(ConnectionType, h => { IHelyettesitesDAL dal = h.HelyettesitesDAL(GridParameters); return dal.GetHelyettesitesekAjanlasa(pco, TanevId, IntezmenyId); }); dataSet.Tables[0].ChangeColumnDataType("ID", typeof(string)); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { string tanarId = SDAConvert.ToString(dataRow["TanarId"]); dataRow["ID"] = tanarId; string tantargyId = SDAConvert.ToString(dataRow["TantargyId"]); if (!string.IsNullOrWhiteSpace(tantargyId)) { dataRow["ID"] += $"_{tantargyId}"; } string osztalyCsoportId = SDAConvert.ToString(dataRow["OsztalyCsoportId"]); if (!string.IsNullOrWhiteSpace(osztalyCsoportId)) { dataRow["ID"] += $"_{osztalyCsoportId}"; } } DataTable tanarDataTable = dataSet.Tables[0].Clone(); foreach (DataRow sourceDataRow in dataSet.Tables[0].Rows) { var listabanSzereploTanar = tanarDataTable.AsEnumerable().FirstOrDefault(x => x.Field("TanarId").Equals(sourceDataRow["TanarId"])); if (listabanSzereploTanar == null) { tanarDataTable.ImportRow(sourceDataRow); } else { listabanSzereploTanar["TantargyNev"] = $"{listabanSzereploTanar["TantargyNev"]}, {sourceDataRow["TantargyNev"]}"; listabanSzereploTanar["OsztalyCsoportNev"] = $"{listabanSzereploTanar["OsztalyCsoportNev"]}, {sourceDataRow["OsztalyCsoportNev"]}"; } } var tanarDataSet = new DataSet(); tanarDataSet.Tables.Add(tanarDataTable); return tanarDataSet; } public bool IsOrarendiOraHelyettesitoTanar(int tanoraId, int tanarId, int hetSorszam) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.OrarendiOra(); return dal.IsOrarendiOraHelyettesitoTanar(tanoraId, tanarId, hetSorszam); }); } public HelyettesitesResultCO SaveHelyettesites(int orarendiOraId, int tanarId, int helyettesitesTipus, string helyettesItesOka, int hetSorszam, DateTime helyettesitesNapja, bool isTuloraMentes) { try { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.OrarendiOra(); var (helyettesItesId, errorId) = dal.SaveHelyettesites(orarendiOraId, tanarId, helyettesitesTipus, helyettesItesOka, hetSorszam, helyettesitesNapja.Date, isTuloraMentes); return new HelyettesitesResultCO { HelyettesitesId = helyettesItesId, ErrorId = errorId }; }); } catch (Exception ex) { throw new BlException(StringResourcesUtil.GetString(4296) /*Hiba a helyettesítés mentése során!*/, ex); } } public List SaveGroupHelyettesites(int orarendiOraId, int tanarId, int helyettesitesTipus, string helyettesItesOka, int hetSorszam, DateTime helyettesitesNapja, DateTime tartosHelyettesitesVegeDate, bool isTuloraMentes) { try { var result = Dal.CustomConnection.Run(ConnectionType, handler => { var dal = handler.OrarendiOra(); var (helyettesItesId, errorId) = dal.SaveHelyettesites(orarendiOraId, tanarId, helyettesitesTipus, helyettesItesOka, hetSorszam, helyettesitesNapja, isTuloraMentes); var helyettesitesResultCoList = new List { new HelyettesitesResultCO { HelyettesitesId = helyettesItesId, ErrorId = errorId } }; int groupId; if (helyettesItesId.IsEntityId()) { groupId = helyettesItesId.Value; } else { return helyettesitesResultCoList; } var hetHelper = new NaptariHetHelper(new DalHandlerConnectionType(ConnectionType, handler)); var utolsoNapDate = new TanevHelper(new DalHandlerConnectionType(ConnectionType, handler)).GetTanevInfo().UtolsoNap; int currentHetszam = hetHelper.GetNaptariHetSorszamByDate(helyettesitesNapja); int mentettOraHetirendje = dal.Get(orarendiOraId).Hetirend; do { int? aktualisHetHetirendje = hetHelper.GetNaptariHetHetirendByDate(helyettesitesNapja); bool isTanitasiNap; var tanevrendHelper = new TanevrendHelper(new DalHandlerConnectionType(ConnectionType, handler)); isTanitasiNap = tanevrendHelper.IsTanitasiNap(helyettesitesNapja, null); if (mentettOraHetirendje == aktualisHetHetirendje || mentettOraHetirendje == (int)HetiRendTipusEnum.MindegyikHet) { helyettesitesResultCoList.Add(isTanitasiNap ? SaveHelyettesites(orarendiOraId, tanarId, helyettesitesTipus, helyettesItesOka, currentHetszam, helyettesitesNapja, isTuloraMentes) : new HelyettesitesResultCO { ErrorId = 8020 } ); } helyettesitesNapja = helyettesitesNapja.AddDays(7); currentHetszam = hetHelper.GetNaptariHetSorszamByDate(helyettesitesNapja); } while (helyettesitesNapja <= tartosHelyettesitesVegeDate && helyettesitesNapja.AddDays(7) <= utolsoNapDate); foreach (int helyettesitesId in helyettesitesResultCoList.Where(x => x.HelyettesitesId.IsEntityId()).Select(x => x.HelyettesitesId.Value)) { dal.UpdateHelyettesitesGroupId(helyettesitesId, groupId); } return helyettesitesResultCoList; }); return result; } catch (Exception ex) { throw new BlException(StringResourcesUtil.GetString(4296) /*Hiba a helyettesítés mentése során!*/, ex); } } public HelyettesitesResultCO UpdateHelyettesitoTanar(int orarendiOraId, int helyettesitesId, int ujTanarId, int helyettesitesTipus, string helyettesitesOka, DateTime helyettesitesNapja, int? groupId, bool isTuloraMentes) { try { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.OrarendiOra(); var (helyettesItesId, errorId) = dal.UpdateHelyettesitoTanar(orarendiOraId, helyettesitesId, ujTanarId, helyettesitesTipus, helyettesitesOka, helyettesitesNapja, groupId, isTuloraMentes); return new HelyettesitesResultCO { HelyettesitesId = helyettesItesId, ErrorId = errorId }; }); } catch (Exception ex) { throw new BlException(StringResourcesUtil.GetString(4296) /*Hiba a helyettesítés mentése során!*/, ex); } } public void DeleteHelyettesites(int helyettesitesId) { Dal.CustomConnection.Run(ConnectionType, dal => { dal.HelyettesitesDAL().Delete(helyettesitesId); }); } public void ClearHelyettesitesGroupId(int helyettesitesId) { Dal.CustomConnection.Run(ConnectionType, dal => { var helyettesitesDAL = dal.HelyettesitesDAL(); var helyettesitesiIdoszak = helyettesitesDAL.Get(helyettesitesId); helyettesitesiIdoszak.GroupId = null; helyettesitesDAL.FullUpdate(helyettesitesiIdoszak); }); } public DataSet GetHelyettesitesDataById(int id) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.OrarendiOra(); return dal.GetTanarFromHelyettesites(id, IntezmenyId, TanevId); }); } public DataSet GetHelyettesitettTanorak(TanarHelyettesitesekKereseseCO co) { return Dal.CustomConnection.Run(ConnectionType, h => { IHelyettesitesDAL dal = h.HelyettesitesDAL(GridParameters); return dal.GetHelyettesitettTanorak(ConvertTanarHelyettesitesekKereseseCoToPco(co)); }); } public HelyettesitesCO GetHelyettesitesEmailDataById(int id) { DataSet ds = Dal.CustomConnection.Run(ConnectionType, h => { IHelyettesitesDAL dal = h.HelyettesitesDAL(GridParameters); return dal.GetHelyettesitesEmailDataById(id); }); DataRow dr = ds.Tables[0].Rows[0]; var co = new HelyettesitesCO() { HelyettesitoNev = dr.Field("HelyettesitoNev"), HelyettesitoEmail = dr.Field("HelyettesitoEmail"), OsztalyCsoportNev = dr.Field("OsztalyCsoportNev"), TantargyNev = dr.Field("TantargyNev"), OraDatuma = dr.Field("OraDatuma").ToString("yyyy.MM.dd."), OraKezdete = dr.Field("OraKezdete").ToString("HH:mm"), OraVege = dr.Field("OraVege").ToString("HH:mm"), OraSzama = dr.Field("OraSzama").HasValue ? dr.Field("OraSzama") : 0, IsNapirend = dr.Field("IsNapirend_BOOL"), TeremNev = dr.Field("TeremNev"), HelyettesitesTipusa = dr.Field("HelyettesitesTipus"), HelyettesitettNev = dr.Field("HelyettesitettNev"), HelyettesitoID = SDAConvert.ToInt32(dr["HelyettesitoID"]), HelyettesitoEmailGuid = SDAConvert.ToNullableGuid(dr["HelyettesitoEmailGuid"]) }; return co; } public DataSet GetNemkotottMunkaidoByHelyettesites(int? id, int? groupId) { return Dal.CustomConnection.Run(ConnectionType, h => { IHelyettesitesDAL dal = h.HelyettesitesDAL(); return dal.GetNemkotottMunkaidoByHelyettesites(id, groupId, TanevId); }); } public Dictionary GetNemkotottMunkaidoByHelyettesitesTorleshez(int? id, int? groupId, DateTime helyettesitesBevitelOraKezdeteDate) { Dictionary nemKotottMunkaidoDictionary = new Dictionary(); DataSet ds = GetNemkotottMunkaidoByHelyettesites(id, groupId); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow dataRow in ds.Tables[0].Rows) { var helyettesitesNapjaDate = SDAConvert.ToDateTime(dataRow["HelyettesitesNapjaDate"]); if (helyettesitesBevitelOraKezdeteDate.Date <= helyettesitesNapjaDate) { int nemKotottMunkaidoId = SDAConvert.ToInt32(dataRow["NemKotottMunkaidoId"]); int helyettesitesId = SDAConvert.ToInt32(dataRow["HelyettesitesId"]); nemKotottMunkaidoDictionary.Add(helyettesitesId, nemKotottMunkaidoId); } } } return nemKotottMunkaidoDictionary; } public List GetNemkotottMunkaidoByHelyettesitesHibakListaja(int? id, int? groupId, DateTime helyettesitesBevitelOraKezdeteDate) { List textList = new List(); DataSet ds = GetNemkotottMunkaidoByHelyettesites(id, groupId); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow dataRow in ds.Tables[0].Rows) { var helyettesitesNapjaDate = SDAConvert.ToDateTime(dataRow["HelyettesitesNapjaDate"]); if (helyettesitesBevitelOraKezdeteDate.Date <= helyettesitesNapjaDate) { string kezdetiDatum = SDAConvert.ToDateTime(dataRow["NemKotottMunkaidoKezdete"]).Value.ToString(Kreta.Core.Constants.ToStringPattern.HungarianDateTime); string vegDatum = SDAConvert.ToDateTime(dataRow["NemKotottMunkaidoVege"]).Value.ToString(Kreta.Core.Constants.ToStringPattern.HungarianDateTime); textList.Add(string.Format(HelyettesitesResource.NemKotottMunkaidoTorlesreFogKerulni, kezdetiDatum, vegDatum)); } } } return textList; } public TanoraCO GetHelyettesitesAdatok(int searchId) { return Dal.CustomConnection.Run(ConnectionType, dal => { var helyettesitesDal = dal.HelyettesitesDAL(); var helyettesites = helyettesitesDal.Get(searchId); var co = new TanoraCO { Datum = helyettesites.HelyettesitesNapja, TeremNev = helyettesites.HelyettesitettOrarend.Terem.Nev, HetNapjaNev = helyettesites.HelyettesitettOrarend.HetNapja.GetDisplayName(TanevId), ID = helyettesites.HelyettesitettOrarend.ID, Oraszam = helyettesites.HelyettesitettOrarend.Oraszam, OsztalyCsoportNev = helyettesites.HelyettesitettOrarend.OsztalyCsoport.Nev, TanarNev = helyettesites.HelyettesitettOrarend.Tanar.NyomtatasiNev, HelyettesitoTanarNev = helyettesites.HelyettesTanarok.NyomtatasiNev, TantargyNev = helyettesites.HelyettesitettOrarend.Tantargy.Nev, Megtartott = false, OraKezd = helyettesites.HelyettesitettOrarend.OraKezdete.Value, OraVeg = helyettesites.HelyettesitettOrarend.OraVege.Value, Terem = helyettesites.HelyettesitettOrarend.TeremId, OsztCsop = helyettesites.HelyettesitettOrarend.OsztalyCsoportId, Targy = helyettesites.HelyettesitettOrarend.TantargyId, AdminAltalKiirt = true, CsengetesiRendOraId = helyettesites.HelyettesitettOrarend.CsengetesirendOraId, Sorszamozando = helyettesites.HelyettesitettOrarend.Sorszamozando, Megjegyzes = helyettesites.HelyettesitesOka, HetirendNev = helyettesites.HelyettesitettOrarend.Hetirend.GetDisplayName(TanevId), HelyettesitesTipus = helyettesites.HelyettesitesTipus }; co.HelyettesitesElrendelesenekIdopontja = helyettesitesDal.GetHelyettesitesElrendelese(helyettesites.ID); if (helyettesites.HelyettesitettOrarend.FoglalkozasId > 0) { co.FoglalkozasNev = helyettesites.HelyettesitettOrarend.Foglalkozas?.Nev; } return co; }); } private LehetsegesHelyettesitoTanarokPCO Convert_CO_to_PCO(LehetsegesHelyettesitoTanarokCO co) { return new LehetsegesHelyettesitoTanarokPCO() { orarendiOraId = co.orarendiOraId, datum = co.datum, }; } private TanarHelyettesitesekKeresesePCO ConvertTanarHelyettesitesekKereseseCoToPco(TanarHelyettesitesekKereseseCO co) { TanarHelyettesitesekKeresesePCO pco = new TanarHelyettesitesekKeresesePCO() { HelyettesitesKezdete = co.HelyettesitesKezdete, HelyettesitesVege = co.HelyettesitesVege, HelyettesitettId = co.HelyettesitettId, HelyettesitoId = co.HelyettesitoId }; return pco; } private HelyettesitesekKeresesePCO Convert_CO_to_PCO(HelyettesitesekKereseseCo co) { HelyettesitesekKeresesePCO pco = new HelyettesitesekKeresesePCO() { HelyettesitesKezdete = co.HelyettesitesKezdete, HelyettesitesVege = co.HelyettesitesVege, HelyettesitettId = co.HelyettesitettId, }; return pco; } public bool GetUserHelyettesitesProfilData(int userId) { string xmlResult = string.Empty; Dal.CustomConnection.Run(ConnectionType, h => { IFelhasznaloDal dal = h.Felhasznalo(); xmlResult = dal.GetUserProfile(userId); }); if (!string.IsNullOrWhiteSpace(xmlResult)) { var profilXml = new XmlDocument(); profilXml.LoadXml(xmlResult); XmlNode node = profilXml.SelectSingleNode("UserProfile/EmailHelyettesites"); if (node == null) { return true; } return bool.TryParse(node.InnerText, out bool result) && result; } return true; } public string GetHelyettesitoTanarEmailCim(int userId) { return Dal.CustomConnection.Run(ConnectionType, h => { var dal = h.Felhasznalo(); var ds = dal.GetUserEmailCim(userId).Tables[0]; if (ds.Rows.Count > 0) { return ds.Rows[0].Field("EmailCim"); } return ""; }); } public void DeleteHelyettesitesek(int orarendiOraId, DateTime start, DateTime end) { Dal.CustomConnection.Run(ConnectionType, dal => { dal.HelyettesitesDAL().DeleteHelyettesitesek(orarendiOraId, start, end, TanevId); }); } public DataSet GetHelyettesitesDataSetByGroupId(int groupId) { return Dal.CustomConnection.Run(ConnectionType, dal => { return dal.HelyettesitesDAL().GetHelyettesitesDataSetByGroupId(IntezmenyId, TanevId, groupId); }); } public List GetHelyettesitesekListajaCoList(HelyettesitesekListajaSearchCO co) { DataSet dataSet = GetHelyettesitesekListajaGrid(co); var result = new List(); foreach (DataRow dataRow in dataSet.Tables[0].Rows) { var item = new HelyettesitesItemCo(dataRow); result.Add(item); } return result; } } }