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

269 lines
14 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.ConnectionType;
using Kreta.DataAccess.Interfaces;
using Kreta.DataAccessManual;
using Kreta.DataAccessManual.Util;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Framework.Util;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Helpers
{
public class AdminKozpontiOrakHelper : LogicBase
{
public AdminKozpontiOrakHelper(IConnectionType connectionType) : base(connectionType) { }
public int CsengetesirendId
=> Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.CsengetesiRend();
return dal.GetAktivCsengetesiRendId(TanevId, IntezmenyId);
});
public OrarendCO GetAdminKozpontiOrak(DateTime start, DateTime end)
{
OrarendCO orarendCO = new OrarendCO();
var csengetesirendOrak = GetCsengetesirendOrak();
var startEndDifference = (end - start).Days;
Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var orarendiOraDal = h.OrarendiOra();
var dsOrarend = orarendiOraDal.GetOrarendForKozpontiOrak(IntezmenyId, TanevId, start, end);
var tanevrendHelper = new TanevrendHelper(new DalHandlerConnectionType(ConnectionType, h));
// Tanév rendje:
OrarendHelper orarendHelper = new OrarendHelper(new DalHandlerConnectionType(ConnectionType, h));
orarendCO.Events.AddRange(orarendHelper.HandleAndAddTanevRendje(h, start, end, new List<OrarendCO.ExtendedEvent>()));
for (int i = 0; i < startEndDifference; i++)
{
DateTime currentDate = new DateTime(start.Year, start.Month, start.Day).AddDays(i);
if (tanevrendHelper.IsTanitasiNap(currentDate, null))
{
var events = new List<OrarendCO.ExtendedEvent>(csengetesirendOrak.Count);
foreach (var csrO in csengetesirendOrak)
{
List<OrarendCO.ExtendedEvent> csengeteseiRendhezTartozoOrarendiOrak = new List<OrarendCO.ExtendedEvent>();
foreach (DataRow row in dsOrarend.Tables[0].Rows)
{
var oraKezdete = Convert.ToDateTime(row["OraKezdete"]);
if (Convert.ToDateTime(oraKezdete.ToShortDateString()) == currentDate &&
SDAConvert.ToInt32(row["Oraszam"], -1) == csrO.Oraszam)
{
csengeteseiRendhezTartozoOrarendiOrak.Add(new OrarendCO.ExtendedEvent
{
KozpontiOraGroupId = SDAConvert.StringToNullableGuid(row["KozpontiOraGroupId"]),
KozpontilagToroltOraGroupId = SDAConvert.StringToNullableGuid(row["KozpontilagToroltOraGroupId"]),
Torolt = string.Equals(row["TOROLT"], "T")
});
}
}
int kozpontiOrakSzama = csengeteseiRendhezTartozoOrarendiOrak.Where(x => x.KozpontiOraGroupId != null && !x.Torolt).GroupBy(x => x.KozpontiOraGroupId).Distinct().Count();
int kozpontiOrakOrainakSzama = csengeteseiRendhezTartozoOrarendiOrak.Count(x => x.KozpontiOraGroupId != null && !x.Torolt);
int toroltKozpontiOrakSzama = csengeteseiRendhezTartozoOrarendiOrak.Count(x => x.KozpontilagToroltOraGroupId != null);
int orarendiOraSzama = csengeteseiRendhezTartozoOrarendiOrak.Count(x => x.KozpontiOraGroupId == null && x.KozpontilagToroltOraGroupId == null && !x.Torolt);
bool isUresOra = IsUresOra(orarendiOraSzama, kozpontiOrakSzama, kozpontiOrakOrainakSzama, toroltKozpontiOrakSzama);
EventColorEnum color = orarendiOraSzama > 0 && kozpontiOrakSzama == 0 && kozpontiOrakOrainakSzama == 0 && toroltKozpontiOrakSzama == 0 ? EventColorEnum.Kek :
orarendiOraSzama > 0 && kozpontiOrakSzama > 0 ? EventColorEnum.Narancs :
toroltKozpontiOrakSzama > 0 && kozpontiOrakSzama == 0 ? EventColorEnum.Piros :
orarendiOraSzama == 0 && kozpontiOrakSzama > 0 ? EventColorEnum.Zold : EventColorEnum.Feher;
var orarendiEvent = new OrarendCO.ExtendedEvent
{
id = csrO.ID.Value,
start = new DateTime(start.Year, start.Month, start.Day, csrO.Kezd.Hour, csrO.Kezd.Minute, 0).AddDays(i),
end = new DateTime(start.Year, start.Month, start.Day, csrO.Veg.Hour, csrO.Veg.Minute, 0).AddDays(i),
allDay = false,
color = color.GetStringValue(),
colorEnum = color,
oraType = isUresOra ? CalendarOraTypeEnum.UresOra : CalendarOraTypeEnum.OrarendiOra,
textColor = isUresOra ? EventColorEnum.Szurke.GetStringValue() : "#000000",
borderColor = EventColorEnum.Szurke.GetStringValue(),
borderStyle = "dashed",
hanyadikora = csrO.Oraszam,
text = isUresOra ? csrO.Oraszam.ToString() : string.Empty,
title = isUresOra ? string.Empty : GetTextForKozpontiOra(orarendiOraSzama, kozpontiOrakSzama, kozpontiOrakOrainakSzama, toroltKozpontiOrakSzama, csrO.Oraszam),
oraszam = $"{csrO.Oraszam}. {CommonResource.Ora.ToLower()}"
};
events.Add(orarendiEvent);
}
orarendCO.Events.AddRange(events);
}
}
});
return orarendCO;
}
public IList<AdminKozpontiOrakOrarendiOraCo> GetToroltOrarendiOrakVisszaallitashoz(DateTime start, DateTime end, int hanyadikOra, Guid? kozpontilagToroltOraGroupId = null)
{
OrarendCO orarendCO = new OrarendCO();
var dsOrarend = Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var orarendiOraDal = h.OrarendiOra();
return orarendiOraDal.GetOrarendForKozpontiOrak(IntezmenyId, TanevId, start, end);
});
IList<AdminKozpontiOrakOrarendiOraCo> list = AdminKozpontiOrakOrarendiOraCo.MapGridModelFromOrarendiOraTanitasiOraCoList(dsOrarend.Tables[0])
.Where(i => i.OraSorszam == hanyadikOra && i.KozpontilagToroltOraGroupId.HasValue)
.ToList();
return list;
}
public void OrarendiOrakVisszaallitasa(List<int> orarendiOrakIdList)
{
Dal.CustomConnection.Run(ConnectionType, h =>
{
var orarendiOraDal = h.OrarendiOra();
orarendiOraDal.KozpontilagToroltOraVisszaallitasa(orarendiOrakIdList, FelhasznaloId);
DataSet orarendiOrak = null;
foreach (var orarendiOraId in orarendiOrakIdList)
{
IOrarendiOra orarendiOra = orarendiOraDal.Get(orarendiOraId);
if (orarendiOrak == null)
{
orarendiOrak = orarendiOraDal.GetOrarend(IntezmenyId, TanevId,
orarendiOra.OraErvenyessegKezdete, orarendiOra.OraErvenyessegVege.Value.AddDays(1),
null, null, null, true, OrarendTipusEnum.Minden, null,
null, false, null,
null, null, null);
}
foreach (DataRow row in orarendiOrak.Tables[0].Rows)
{
var tantargyId = SDAConvert.ToNullableInt32(row["TantargyId"]);
var osztalyCsoportId = SDAConvert.ToNullableInt32(row["OsztCsopId"]);
var hetirendId = SDAConvert.ToInt32(row["Hetirend"]);
var oraSorszam = SDAConvert.ToNullableInt32(row["OraSzam"]);
var tanarId = SDAConvert.ToInt32(row["TanarID"]);
var Id = SDAConvert.ToInt32(row["ID"]);
if (tantargyId.HasValue && tantargyId.Value == orarendiOra.TantargyId &&
osztalyCsoportId.HasValue && osztalyCsoportId.Value == orarendiOra.OsztalyCsoportId &&
hetirendId == orarendiOra.Hetirend &&
tanarId == orarendiOra.TanarId &&
oraSorszam == orarendiOra.Oraszam &&
Id != orarendiOraId)
{
orarendiOraDal.Delete(Id);
}
}
orarendiOraDal.UpdateOrarend(IntezmenyId, TanevId, orarendiOra.OraErvenyessegKezdete, orarendiOra.OraErvenyessegVege, orarendiOraId, null);
}
});
}
public List<string> OrarendiOrakVisszaallitasaValidacio(List<int> orarendiOrakIdList)
{
var utkozoOrak = new List<string>();
Dal.CustomConnection.Run(ConnectionType, h =>
{
var orarendiOraDal = h.OrarendiOra();
DataSet orarendiOrak = null;
foreach (var orarendiOraId in orarendiOrakIdList)
{
IOrarendiOra orarendiOra = orarendiOraDal.Get(orarendiOraId);
if (orarendiOrak == null)
{
orarendiOrak = orarendiOraDal.GetOrarend(IntezmenyId, TanevId,
orarendiOra.OraErvenyessegKezdete, orarendiOra.OraErvenyessegVege.Value.AddDays(1),
null, null, null, true, OrarendTipusEnum.Minden, null,
null, false, null,
null, null, null);
}
foreach (DataRow row in orarendiOrak.Tables[0].Rows)
{
var tantargyId = SDAConvert.ToNullableInt32(row["TantargyId"]);
var osztalyCsoportId = SDAConvert.ToNullableInt32(row["OsztCsopId"]);
var hetirendId = SDAConvert.ToInt32(row["Hetirend"]);
var oraSorszam = SDAConvert.ToNullableInt32(row["OraSzam"]);
var oraErvenyessegKezdete = SDAConvert.ToDateTime(row["ErvenyessegKezdete"]);
var oraErvenyessegVege = SDAConvert.ToDateTime(row["ErvenyessegVege"]);
var tanarId = SDAConvert.ToInt32(row["TanarID"]);
var hetNapjaTipusId = SDAConvert.ToInt32(row["HetNapja"]);
if (tantargyId.HasValue && tantargyId.Value == orarendiOra.TantargyId &&
osztalyCsoportId.HasValue && osztalyCsoportId.Value == orarendiOra.OsztalyCsoportId &&
hetirendId == orarendiOra.Hetirend &&
tanarId == orarendiOra.TanarId &&
oraSorszam == orarendiOra.Oraszam)
{
utkozoOrak.Add($"{oraErvenyessegKezdete.ToShortDateString()} {oraErvenyessegVege.ToShortDateString()} ({hetNapjaTipusId.GetDisplayName<HetNapjaTipusEnum>(TanevId)} {oraSorszam}. óra)");
}
}
}
});
return utkozoOrak;
}
private List<CsengetesiRendOraCO> GetCsengetesirendOrak()
{
var csengetesirendId = CsengetesirendId;
return Dal.CustomConnection.Run(ConnectionType, (h) =>
{
var dal = h.CsengetesiRendOrak();
var ds = dal.GetCsengetesirendOrakNaptarhoz(TanevId, csengetesirendId);
var result = new List<CsengetesiRendOraCO>(ds.Tables[0].Rows.Count);
foreach (DataRow dataRow in ds.Tables[0].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;
});
}
private string GetTextForKozpontiOra(int csengeteseiRendhezTartozoOrarendiOrakSzama, int kozpontiOrakSzama, int kozpontiOrakOrainakSzama, int toroltKozpontiOrakSzama, int oraSzam)
{
return $@"Központi órák száma: {kozpontiOrakSzama} ({kozpontiOrakOrainakSzama})
Órarendi órák száma: {csengeteseiRendhezTartozoOrarendiOrakSzama}
Törölt órák száma: {toroltKozpontiOrakSzama}";
}
private bool IsUresOra(int csengeteseiRendhezTartozoOrarendiOrakSzama, int kozpontiOrakSzama, int kozpontiOrakOrainakSzama, int toroltKozpontiOrakSzama)
{
if (csengeteseiRendhezTartozoOrarendiOrakSzama == 0 && kozpontiOrakSzama == 0 &&
kozpontiOrakOrainakSzama == 0 && toroltKozpontiOrakSzama == 0)
{
return true;
}
return false;
}
}
}