using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.HelperClasses; using Kreta.Core; using Kreta.Core.ConnectionType; using Kreta.DataAccessManual; using Kreta.DataAccessManual.Util; using Kreta.Framework; namespace Kreta.BusinessLogic.Helpers { public class CsengetesiRendOrakHelper : LogicBase { public CsengetesiRendOrakHelper(IConnectionType connectionType) : base(connectionType) { } public void UpdateCsengetesiRend(int? newCsengetesiRendId, int? oldCsengetesiRendId) { Dal.CustomConnection.Run(ConnectionType, (h) => { var csengOraDal = h.CsengetesiRendOrak(); csengOraDal.UpdateCsengetesiRend(newCsengetesiRendId, oldCsengetesiRendId); var orarendDal = h.OrarendiOra(); orarendDal.UpdateOrarend(IntezmenyId, TanevId, null, null, null, null); }); } public CsengetesiRendOraCO GetCsengetesiRendKapcsolodoOra(int csengetesiRendId) { var result = new CsengetesiRendOraCO(); Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(GridParameters); var ds = dal.GetCsengetesiiRendKapcsolodoOra(csengetesiRendId, TanevId, IntezmenyId); foreach (DataRow row in ds.Tables[0].Rows) { result.ID = SDAConvert.ToInt32(row["ID"]); result.IsVanKapcsolodoOra = SDAConvert.ToBoolean(row["IsVanOraKapcsolodas"]); result.Aktiv = SDAConvert.ToBoolean(row["IsAktiv"]); result.MinOraszam = SDAConvert.ToInt32(row["MinOraszam"]); result.MaxOraszam = SDAConvert.ToInt32(row["MaxOraszam"]); } }); return result; } public List<(string OraKezdet, string OraVeg)> GetCsengetesiRendKapcsolodoOraKezdeteVege(int csengetesiRendId) { var result = new List<(string oraKezdet, string oraVeg)>(); Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(GridParameters); var ds = dal.GetCsengetesiiRendKapcsolodoOraKezdeteVege(csengetesiRendId, TanevId); foreach (DataRow row in ds.Tables[0].Rows) { result.Add((SDAConvert.ToString(row["OraKezdete"]), SDAConvert.ToString(row["OraVege"]))); } }); return result; } public DataSet GetCsengetesiRendOraiForGrid(int csengetesiRendId, bool onlyReal) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(GridParameters); var ds = dal.GetCsengetesiRendOraiForGrid(csengetesiRendId, onlyReal); ds.Tables[0].Columns.Add("IsHaveReferences"); foreach (DataRow row in ds.Tables[0].Rows) { if (row.Field("IsReal_BOOL") && row["CsengetesiRendOraId"] != DBNull.Value) { row["IsHaveReferences"] = IsHaveReferences(row.Field("CsengetesiRendOraId")); } } return ds; }); } public void SaveCsengetesiRendOraLista(List model, bool isVisszamenoleges, int? kovTanevId) { Dal.CustomConnection.Run(ConnectionType, (h) => { int csengetesiRendId = model[0].CsengetesiRendID; var dal = h.CsengetesiRend(); var csengOraDal = h.CsengetesiRendOrak(); var orarendDal = h.OrarendiOra(); var entity = dal.Get(csengetesiRendId); var torlendoCsengetesiRendOrak = new List(); foreach (var item in model) { if (!item.Aktiv) { if (item.ID != null && !IsHaveReferences(item.ID.Value)) { torlendoCsengetesiRendOrak.Add(item.ID.Value); } continue; } var listItem = entity.CsengetesiRendOra.SingleOrDefault(x => x.ID == item.ID); if (listItem != null) { listItem.Kezdete = item.Kezd; listItem.Vege = item.Veg; listItem.Oraszam = item.Oraszam; csengOraDal.Update(listItem); if (isVisszamenoleges) { csengOraDal.UpdateOrarendiOraVisszamenolegesen(item.ID.Value); } } else { var ora = csengOraDal.Get(); ora.CsengetesiRendId = csengetesiRendId; ora.Oraszam = item.Oraszam; ora.Kezdete = item.Kezd; ora.Vege = item.Veg; ora.TanevId = TanevId; csengOraDal.Insert(ora); item.ID = ora.ID; } var th = new TanevHelper(new DalHandlerConnectionType(ConnectionType, h)); int currentKovTanevId = kovTanevId ?? th.GetKovetkezoTanev().Key; if (currentKovTanevId.IsEntityId() && currentKovTanevId != TanevId) { csengOraDal.FollowUpCsengetesiRendOra(IntezmenyId, TanevId, currentKovTanevId, item.ID.Value, csengetesiRendId, isVisszamenoleges); } } if (torlendoCsengetesiRendOrak.Count > 0) { csengOraDal.CsengetesiRendOrakTorles(torlendoCsengetesiRendOrak, TanevId); orarendDal.UpdateOrarend(IntezmenyId, TanevId, null, null, null, null); } else if (isVisszamenoleges) { orarendDal.UpdateOrarend(IntezmenyId, TanevId, null, null, null, null); } }); } public int GetCsengetesiRendOraSzam(int csengRendId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var csora = h.CsengetesiRendOrak().Get(csengRendId); return csora.Oraszam; }); } public DataSet GetCsengetesiOrakKezdVeg() { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(GridParameters); return dal.GetCsengetesiOrakKezdVeg(TanevId, IntezmenyId); }); } public IDictionary ValidateCsengetesiRendOrak(List list) { var errorList = new Dictionary(); foreach (CsengetesiRendOraCO itemA in list.Where(x => x.Kezd.Year == 1900 && x.Veg.Year == 1900)) { if (itemA.Kezd < itemA.Veg) { int kulonbseg = (itemA.Veg.Subtract(itemA.Kezd).Hours * 60) + itemA.Veg.Subtract(itemA.Kezd).Minutes; if (kulonbseg < 15 || kulonbseg > 90) { errorList.Add(StringResourcesUtil.GetString(3988) + itemA.Oraszam /*Időtartam*/, string.Format(StringResourcesUtil.GetString(3989), itemA.Oraszam, kulonbseg)); //A(z) {0} óra időtartama nem 30,35,40 vagy 45 perc.({1} perc) } foreach (CsengetesiRendOraCO itemB in list) { if (itemB.Kezd < itemB.Veg && itemB.Oraszam > itemA.Oraszam) { if (itemA.Kezd > itemB.Veg || itemA.Veg > itemB.Kezd) { errorList.Add(StringResourcesUtil.GetString(3990) + itemA.Oraszam /*Ütközés*/, string.Format(StringResourcesUtil.GetString(3991), itemA.Oraszam, itemB.Oraszam)); //A(z) {0}. óra ütközik a(z) {1}. órával. break; // A kód elszáll, ha egyszerre többel is ütközik. } } } } else { if (itemA.Kezd.Hour == 0 && itemA.Kezd.Minute == 0 && itemA.Veg.Hour == 0 && itemA.Veg.Minute == 0) { errorList.Add(StringResourcesUtil.GetString(3999) + itemA.Oraszam /*Kitöltetlen*/, string.Format(StringResourcesUtil.GetString(4000), itemA.Oraszam)); // A(z) {0}. óra értékei nem lettek kitöltve. } else { errorList.Add(StringResourcesUtil.GetString(3992) + itemA.Oraszam /*Kezdete-Vége*/, string.Format(StringResourcesUtil.GetString(3993), itemA.Oraszam)); //A(z) {0}. óra kezdete nagyobb mint a vége. } } } return errorList; } public DataTable GetCsengetesirendOrakNaptarhoz(int? csengetesiRendId = null) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(GridParameters); var ds = dal.GetCsengetesirendOrakNaptarhoz(TanevId, csengetesiRendId); if (ds.Tables.Count > 0) { return ds.Tables[0]; } return null; }); } public List GetCsengetesiRendOraCoList(int? csengetesiRendId = null) { var result = new List(); var dataTable = GetCsengetesirendOrakNaptarhoz(csengetesiRendId); foreach (DataRow dataRow in dataTable.Rows) { result.Add(new CsengetesiRendOraCO { ID = SDAConvert.ToInt32(dataRow["ID"]), Kezd = SDAConvert.ToDateTime(dataRow["C_KEZDETE"]).Value, Veg = SDAConvert.ToDateTime(dataRow["C_VEGE"]).Value, Oraszam = SDAConvert.ToInt32(dataRow["C_ORASZAM"]) }); } return result; } public int? GetCsengetesiRendOraId(int csengRendId, int oraszam) { return Dal.CustomConnection.Run(ConnectionType, (h) => { return h.CsengetesiRendOrak().GetCsengetesiRendOraIdByIdAndOraszam(csengRendId, oraszam, TanevId); }); } public bool IsHaveReferences(int csengetesiRendOraId) { return Dal.CustomConnection.Run(ConnectionType, (h) => { var dal = h.CsengetesiRendOrak(); var result = dal.ReferencesCount(csengetesiRendOraId, TanevId); return result.Tables[0].Rows.Cast().Any(row => row.Field("darab") > 0); }); } } }