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

277 lines
11 KiB
C#

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<bool>("IsReal_BOOL") && row["CsengetesiRendOraId"] != DBNull.Value)
{
row["IsHaveReferences"] = IsHaveReferences(row.Field<int>("CsengetesiRendOraId"));
}
}
return ds;
});
}
public void SaveCsengetesiRendOraLista(List<CsengetesiRendOraCO> 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<int>();
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<string, string> ValidateCsengetesiRendOrak(List<CsengetesiRendOraCO> list)
{
var errorList = new Dictionary<string, string>();
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<CsengetesiRendOraCO> GetCsengetesiRendOraCoList(int? csengetesiRendId = null)
{
var result = new List<CsengetesiRendOraCO>();
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<DataRow>().Any(row => row.Field<int>("darab") > 0);
});
}
}
}