kreta/Kreta.BusinessLogic/Helpers/HelyettesitesHelper.cs
2024-03-13 00:33:46 +01:00

546 lines
25 KiB
C#

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<DataRow>();
var ocsTiltottEventList = new List<DataRow>();
var globalTiltottEventList = new List<DataRow>();
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<DateTime>("HelyettesitettOraKezdete").Date == t.Item1 &&
x.Field<int>("HelyettesitettOsztalyId") == t.Item2));
}
foreach (var d in tanevRendjeLists.GlobalTiltas)
{
globalTiltottEventList.AddRange(orarendevents.Where(x => x.Field<DateTime>("HelyettesitettOraKezdete").Date == d));
}
foreach (var t in tanevRendjeLists.OcsTiltas)
{
ocsTiltottEventList.AddRange(orarendevents.Where(x => x.Field<DateTime>("HelyettesitettOraKezdete").Date == t.Item1 &&
x.Field<int>("HelyettesitettOsztalyId") == t.Item2));
}
var foglalkozasok_Rogzitese_Hetvegere = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h)).GetSystemSettingValue<FoglalkozasokRogziteseHetvegere>(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<DateTime>("HelyettesitettOraKezdete").Date);
break;
case FoglalkozasokRogziteseHetvegere.NemEngedelyezett:
default:
isErvenyesNap = orarendHelper.IsHetkoznap(item.Field<DateTime>("HelyettesitettOraKezdete").Date);
break;
}
if ((isErvenyesNap || tanevRendjeLists.GlobalEngedelyezes.Contains(item.Field<DateTime>("HelyettesitettOraKezdete").Date))
&& engedelyezettEventList.All(x => x.Field<Guid>("ID") != item.Field<Guid>("ID"))
&& ocsTiltottEventList.All(x => x.Field<Guid>("ID") != item.Field<Guid>("ID"))
&& globalTiltottEventList.All(x => x.Field<Guid>("ID") != item.Field<Guid>("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<int>("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<HelyettesitesResultCO> 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<HelyettesitesResultCO>
{
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<string>("HelyettesitoNev"),
HelyettesitoEmail = dr.Field<string>("HelyettesitoEmail"),
OsztalyCsoportNev = dr.Field<string>("OsztalyCsoportNev"),
TantargyNev = dr.Field<string>("TantargyNev"),
OraDatuma = dr.Field<DateTime>("OraDatuma").ToString("yyyy.MM.dd."),
OraKezdete = dr.Field<DateTime>("OraKezdete").ToString("HH:mm"),
OraVege = dr.Field<DateTime>("OraVege").ToString("HH:mm"),
OraSzama = dr.Field<int?>("OraSzama").HasValue ? dr.Field<int>("OraSzama") : 0,
IsNapirend = dr.Field<bool>("IsNapirend_BOOL"),
TeremNev = dr.Field<string>("TeremNev"),
HelyettesitesTipusa = dr.Field<string>("HelyettesitesTipus"),
HelyettesitettNev = dr.Field<string>("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<int, int> GetNemkotottMunkaidoByHelyettesitesTorleshez(int? id, int? groupId, DateTime helyettesitesBevitelOraKezdeteDate)
{
Dictionary<int, int> nemKotottMunkaidoDictionary = new Dictionary<int, int>();
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<string> GetNemkotottMunkaidoByHelyettesitesHibakListaja(int? id, int? groupId, DateTime helyettesitesBevitelOraKezdeteDate)
{
List<string> textList = new List<string>();
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<HetNapjaTipusEnum>(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<HetiRendTipusEnum>(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<string>("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<HelyettesitesItemCo> GetHelyettesitesekListajaCoList(HelyettesitesekListajaSearchCO co)
{
DataSet dataSet = GetHelyettesitesekListajaGrid(co);
var result = new List<HelyettesitesItemCo>();
foreach (DataRow dataRow in dataSet.Tables[0].Rows)
{
var item = new HelyettesitesItemCo(dataRow);
result.Add(item);
}
return result;
}
}
}