269 lines
14 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|