1137 lines
53 KiB
C#
1137 lines
53 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using Kreta.BusinessLogic.Classes;
|
|
using Kreta.BusinessLogic.HelperClasses;
|
|
using Kreta.BusinessLogic.Helpers.SystemSettings;
|
|
using Kreta.BusinessLogic.Logic;
|
|
using Kreta.Core;
|
|
using Kreta.Core.ConnectionType;
|
|
using Kreta.DataAccess.Interfaces;
|
|
using Kreta.DataAccessManual;
|
|
using Kreta.DataAccessManual.Interfaces;
|
|
using Kreta.DataAccessManual.ParameterClasses;
|
|
using Kreta.DataAccessManual.Util;
|
|
using Kreta.Enums;
|
|
using Kreta.Enums.ManualEnums;
|
|
using Kreta.Resources;
|
|
using OfficeOpenXml;
|
|
|
|
namespace Kreta.BusinessLogic.Helpers
|
|
{
|
|
public class MulasztasHelper : LogicBase
|
|
{
|
|
public MulasztasHelper(IConnectionType connectionType) : base(connectionType) { }
|
|
|
|
public int GetOraTanuloId(int id)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var entity = dal.Get(id);
|
|
|
|
return entity.OraTanuloiId;
|
|
});
|
|
}
|
|
|
|
public TanuloMulasztasInfoCo GetMulasztasById(int id)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var entity = dal.Get(id);
|
|
|
|
var mulasztas = new TanuloMulasztasInfoCo
|
|
{
|
|
OraId = entity.TanitasiOrakId,
|
|
Datum = entity.TanitasiOrak.Datum,
|
|
};
|
|
|
|
if (entity.TanitasiOrak != null)
|
|
{
|
|
mulasztas.Oraszam = entity.TanitasiOrak.Oraszam;
|
|
|
|
if (entity.TanitasiOrak.TantargyId > 0)
|
|
{
|
|
mulasztas.TargyNev = entity.TanitasiOrak.Tantargy.Nev;
|
|
}
|
|
}
|
|
|
|
mulasztas.MulTipNev = entity.Tipus.GetDisplayName<MulasztasTipusEnum>(TanevId);
|
|
if (entity.KesesPercben != null)
|
|
{
|
|
mulasztas.KesIdo = entity.KesesPercben;
|
|
}
|
|
|
|
if (entity.Igazolt != null)
|
|
{
|
|
mulasztas.Igazolt = entity.Igazolt;
|
|
}
|
|
|
|
if (entity.IgazolasTipusa != null)
|
|
{
|
|
mulasztas.IgazolasTipusNev = entity.IgazolasTipusa.GetDisplayName<IgazolasTipusEnum>(TanevId);
|
|
}
|
|
|
|
mulasztas.Megjegyzes = entity.Megjegyzes;
|
|
mulasztas.TanuloNev = entity.OraTanuloi.NyomtatasiNev;
|
|
|
|
return mulasztas;
|
|
});
|
|
}
|
|
|
|
public DataSet GetHallgatoMulasztasai(MulasztasokCo co)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var pco = co.ToPco(TanevId);
|
|
var ds = dal.GetHallgatoMulasztasaiDataSet(pco);
|
|
|
|
return ds;
|
|
});
|
|
}
|
|
|
|
public DataSet GetMulasztasList(MulasztasokCo keresoProfil, bool igazoltEsIgazolatlan = false, bool fromSearchPanel = false, int? csoportVezetoId = null)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
List<int> szervezetIdList = null;
|
|
if (keresoProfil.SzervezetId.IsEntityId())
|
|
{
|
|
szervezetIdList = h.SzervezetDal(GridParameters).GetLathatoSzervezetek(IntezmenyId, TanevId, keresoProfil.SzervezetId.Value, (int)SzervezetAdatokHalmazaEnum.SzervezetEsAlSzervezetek);
|
|
}
|
|
|
|
var result = h.MulasztasDal(GridParameters).GetMulasztasDataSet(keresoProfil.ToPco(TanevId, szervezetIdList), igazoltEsIgazolatlan, fromSearchPanel, csoportVezetoId);
|
|
|
|
AddColumnsToDataSet(h, result, true, true, !fromSearchPanel);
|
|
return result;
|
|
});
|
|
}
|
|
|
|
public List<MulasztasItemCo> GetMulasztasokTanuloDetailGridItemCoList(MulasztasokCo keresoProfil, bool igazoltEsIgazolatlan = false, bool fromSearchPanel = false, int? csoportVezetoId = null)
|
|
{
|
|
var ds = GetMulasztasList(keresoProfil, igazoltEsIgazolatlan, fromSearchPanel, csoportVezetoId);
|
|
|
|
var result = new List<MulasztasItemCo>();
|
|
foreach (DataRow dataRow in ds.Tables[0].Rows)
|
|
{
|
|
var item = new MulasztasItemCo(dataRow);
|
|
result.Add(item);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public DataSet GetMulasztasokDatumNezetDetailGrid(DateTime mulasztasDatuma, int osztalyCsoportId, bool isCsoportVezeto)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var ds = dal.GetMulasztasokDatumNezetDetailGrid(mulasztasDatuma, osztalyCsoportId, isCsoportVezeto);
|
|
|
|
AddColumnsToDataSet(h, ds, true, false, false);
|
|
|
|
return ds;
|
|
});
|
|
}
|
|
|
|
private void AddColumnsToDataSet(IDalHandler h, DataSet ds, bool szuletesiIdoFormattedColumn, bool datumFormatted, bool isMulasztasKezelheto)
|
|
{
|
|
var igazolasNaplozarasDatuma = new SystemSettingsHelper(new DalHandlerConnectionType(ConnectionType, h)).GetIgazolasokNaplozarasDatuma();
|
|
var dt = ds.Tables[0];
|
|
if (szuletesiIdoFormattedColumn)
|
|
{
|
|
dt.Columns.Add("SzuletesiIdoFormatted");
|
|
}
|
|
|
|
if (datumFormatted)
|
|
{
|
|
dt.Columns.Add("DatumFormatted");
|
|
}
|
|
|
|
if (isMulasztasKezelheto)
|
|
{
|
|
dt.Columns.Add("IsMulasztasKezelheto", typeof(bool));
|
|
}
|
|
|
|
var rows = dt.Rows.Cast<DataRow>().ToList();
|
|
foreach (var row in rows)
|
|
{
|
|
if (szuletesiIdoFormattedColumn)
|
|
{
|
|
row["SzuletesiIdoFormatted"] = SDAConvert.ToDateTime(row["SzuletesiIdo"]).ToShortDateString();
|
|
}
|
|
|
|
if (datumFormatted)
|
|
{
|
|
row["DatumFormatted"] = SDAConvert.ToDateTime(row["Datum"]).ToShortDateString();
|
|
}
|
|
|
|
if (isMulasztasKezelheto)
|
|
{
|
|
row["IsMulasztasKezelheto"] = row.Field<DateTime>("Datum") > igazolasNaplozarasDatuma;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public MulasztasNotificatonCo SaveOrUpdateMulasztas(MulasztasokCo co)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var (mulasztas, needJuttatasUpdate) = ConvertCoToEntity(h, co, true);
|
|
SaveOrUpdateMulasztas(h, co, mulasztas);
|
|
if ((mulasztas.Intezmeny.IntezmenyAdatok.SingleOrDefault(x => !x.Torolt && x.TanevId == mulasztas.TanevId)?.IsSzakkepzoJuttatas ?? false) && needJuttatasUpdate)
|
|
{
|
|
var dal = h.JuttatasDAL();
|
|
dal.UpdateTanulokSzakkepzesiJuttatasok(TanevId, FelhasznaloId, (int)JuttatasTipusEnum.szakkepzesi_juttatas, tanuloId: co.TanuloId);
|
|
dal.UpdateTanulokSzakkepzesiJuttatasok(TanevId, FelhasznaloId, (int)JuttatasTipusEnum.apaczaiosztondij, tanuloId: co.TanuloId);
|
|
}
|
|
|
|
return new MulasztasNotificatonCo(mulasztas);
|
|
});
|
|
}
|
|
|
|
public MulasztasNotificatonCo SaveOrUpdateNaplonezetMulasztas(MulasztasokCo co)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var (mulasztas, needJuttatasUpdate) = ConvertNaploNezetCoToEntity(h, co);
|
|
if (mulasztas.TanitasiOrak.Torolt)
|
|
{
|
|
throw new ApplicationException(string.Format(HianyzasResource.MulasztasRogziteseNemLehetsegesMertToroltekANaplozast, mulasztas.TanitasiOrak.Datum.ToString(Constants.ToStringPattern.HungarianDateWithSpaces), mulasztas.TanitasiOrak.Oraszam));
|
|
}
|
|
|
|
SaveOrUpdateMulasztas(h, co, mulasztas);
|
|
if ((mulasztas.Intezmeny.IntezmenyAdatok.SingleOrDefault(x => !x.Torolt && x.TanevId == mulasztas.TanevId)?.IsSzakkepzoJuttatas ?? false) && needJuttatasUpdate)
|
|
{
|
|
var dal = h.JuttatasDAL();
|
|
dal.UpdateTanulokSzakkepzesiJuttatasok(mulasztas.TanevId, FelhasznaloId, (int)JuttatasTipusEnum.szakkepzesi_juttatas, tanuloId: co.TanuloId);
|
|
dal.UpdateTanulokSzakkepzesiJuttatasok(mulasztas.TanevId, FelhasznaloId, (int)JuttatasTipusEnum.apaczaiosztondij, tanuloId: co.TanuloId);
|
|
}
|
|
|
|
return new MulasztasNotificatonCo(mulasztas);
|
|
});
|
|
}
|
|
|
|
private static void SaveOrUpdateMulasztas(IDalHandler h, MulasztasokCo co, ITanuloMulasztas mulasztas)
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
if (co.ID.HasValue)
|
|
{
|
|
if (mulasztas.Tipus == (int)MulasztasTipusEnum.jelenlet)
|
|
{
|
|
dal.Delete(mulasztas);
|
|
}
|
|
else
|
|
{
|
|
if (!(mulasztas.Tipus == (int)MulasztasTipusEnum.keses || mulasztas.Tipus == (int)MulasztasTipusEnum.potlas))
|
|
{
|
|
mulasztas.KesesPercben = null;
|
|
}
|
|
|
|
mulasztas.Megjegyzes = co.Megjegyzes;
|
|
dal.FullUpdate(mulasztas);
|
|
}
|
|
}
|
|
else if (mulasztas.Tipus != (int)MulasztasTipusEnum.jelenlet)
|
|
{
|
|
dal.Insert(mulasztas);
|
|
}
|
|
}
|
|
|
|
public bool VaneMarIgazolt(int tipusId, int tanuloId, int oraId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
return dal.VaneMarIgazolt(tipusId, tanuloId, oraId);
|
|
});
|
|
}
|
|
|
|
internal (ITanuloMulasztas mulasztas, bool needJuttatasUpdate) ConvertCoToEntity(IDalHandler h, MulasztasokCo co, bool isMulasztasKezeles = false)
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var mulasztas = dal.Get();
|
|
var needJuttatasUpdate = false;
|
|
if (isMulasztasKezeles)
|
|
{
|
|
mulasztas = dal.Get(co.ID.Value);
|
|
|
|
needJuttatasUpdate = (mulasztas.Igazolt != co.Igazolt) && (co.Igazolt.HasValue && !co.Igazolt.Value);
|
|
mulasztas.Igazolt = co.Igazolt;
|
|
mulasztas.IgazolasTipusa = co.Igazolt.HasValue && co.Igazolt.Value && co.IgazolasTipus.HasValue && co.IgazolasTipus.Value > 0 ? (int?)co.IgazolasTipus.Value : null;
|
|
|
|
if (!string.IsNullOrWhiteSpace(co.Megjegyzes))
|
|
{
|
|
mulasztas.Megjegyzes = co.Megjegyzes;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (co.ID.HasValue)
|
|
{
|
|
mulasztas = dal.Get(co.ID.Value);
|
|
}
|
|
else
|
|
{
|
|
// új
|
|
mulasztas.OraTanuloiId = co.TanuloId.Value;
|
|
if (co.OraId.HasValue)
|
|
{
|
|
mulasztas.TanitasiOrakId = co.OraId.Value;
|
|
}
|
|
}
|
|
|
|
if (co.MulTip.HasValue)
|
|
{
|
|
mulasztas.Tipus = co.MulTip.Value;
|
|
}
|
|
|
|
if (co.KesIdo.HasValue && co.KesIdo > 0)
|
|
{
|
|
mulasztas.KesesPercben = co.KesIdo.Value;
|
|
}
|
|
else
|
|
{
|
|
mulasztas.KesesPercben = null;
|
|
}
|
|
}
|
|
|
|
if (mulasztas.TanitasiOrak != null)
|
|
{
|
|
var igazolasDataRow = new IgazolasHelper(new DalHandlerConnectionType(ConnectionType, h)).GetIgazolasByTanuloId(co.TanuloId.Value).Tables[0].Rows.Cast<DataRow>().FirstOrDefault(row => SDAConvert.ToDateTime(row["Kezdete"]).Value.Date <= mulasztas.TanitasiOrak.Datum.Date && SDAConvert.ToDateTime(row["Vege"]).Value.Date >= mulasztas.TanitasiOrak.Datum.Date);
|
|
if (igazolasDataRow != null && (mulasztas.Tipus == (int)MulasztasTipusEnum.hianyzas || mulasztas.Tipus == (int)MulasztasTipusEnum.keses))
|
|
{
|
|
mulasztas.Igazolt = true;
|
|
mulasztas.IgazolasTipusa = SDAConvert.ToInt32(igazolasDataRow["IgazolasTipusa"]);
|
|
}
|
|
}
|
|
|
|
return (mulasztas, needJuttatasUpdate);
|
|
}
|
|
|
|
private static (ITanuloMulasztas mulasztas, bool needJuttatasUpdate) ConvertNaploNezetCoToEntity(IDalHandler h, MulasztasokCo co)
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var mulasztas = dal.Get();
|
|
if (co.ID.HasValue)
|
|
{
|
|
mulasztas = dal.Get(co.ID.Value);
|
|
}
|
|
|
|
mulasztas.OraTanuloiId = co.TanuloId.Value;
|
|
if (co.OraId.HasValue)
|
|
{
|
|
mulasztas.TanitasiOrakId = co.OraId.Value;
|
|
}
|
|
|
|
var needJuttatasUpdate = co.MulTip != mulasztas.Tipus && mulasztas.Igazolt.HasValue && !mulasztas.Igazolt.Value;
|
|
if (co.MulTip.HasValue)
|
|
{
|
|
mulasztas.Tipus = co.MulTip.Value;
|
|
}
|
|
|
|
needJuttatasUpdate = needJuttatasUpdate | (mulasztas.Igazolt != co.Igazolt) && co.Igazolt.HasValue;
|
|
mulasztas.Igazolt = co.Igazolt;
|
|
mulasztas.IgazolasTipusa = co.Igazolt.HasValue && co.Igazolt.Value && co.IgazolasTipus.HasValue && co.IgazolasTipus.Value > 0 ? (int?)co.IgazolasTipus.Value : null;
|
|
|
|
if (!string.IsNullOrWhiteSpace(co.Megjegyzes))
|
|
{
|
|
mulasztas.Megjegyzes = co.Megjegyzes;
|
|
}
|
|
|
|
return (mulasztas, needJuttatasUpdate);
|
|
}
|
|
|
|
public void DeleteMulasztasById(int mulId)
|
|
{
|
|
Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var mul = dal.Get(mulId);
|
|
var tanuloId = mul.OraTanuloiId;
|
|
var needJuttatasUpdate = (mul.Intezmeny.IntezmenyAdatok.SingleOrDefault(x => !x.Torolt && x.TanevId == mul.TanevId)?.IsSzakkepzoJuttatas ?? false) && mul.Igazolt.HasValue && !mul.Igazolt.Value;
|
|
dal.Delete(mulId);
|
|
if (needJuttatasUpdate)
|
|
{
|
|
var juttatasDal = h.JuttatasDAL();
|
|
juttatasDal.UpdateTanulokSzakkepzesiJuttatasok(mul.TanevId, FelhasznaloId, (int)JuttatasTipusEnum.szakkepzesi_juttatas, tanuloId);
|
|
juttatasDal.UpdateTanulokSzakkepzesiJuttatasok(mul.TanevId, FelhasznaloId, (int)JuttatasTipusEnum.apaczaiosztondij, tanuloId);
|
|
}
|
|
});
|
|
}
|
|
|
|
public DataSet GetTanuloMulasztasai(int tanuloId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
return dal.GetTanuloMulasztasai(tanuloId);
|
|
});
|
|
}
|
|
|
|
public TanoraMulasztasaiCO GetTanoraMulasztasai(int? tanoraId)
|
|
{
|
|
if (!tanoraId.HasValue || tanoraId < 1)
|
|
{
|
|
return new TanoraMulasztasaiCO();
|
|
}
|
|
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.TanitasiOra();
|
|
var entity = dal.Get(tanoraId.Value);
|
|
var result = new TanoraMulasztasaiCO();
|
|
foreach (var item in entity.OraTanuloi.Where(a => !a.Torolt))
|
|
{
|
|
result.Add(new TanoraMulasztasCO { MulasztasId = item.ID, TanuloId = item.OraTanuloiId });
|
|
}
|
|
|
|
return result;
|
|
});
|
|
}
|
|
|
|
public List<int> GetTanuloIgazolatlanMulasztasIdoszakban(int tanuloId, DateTime kezdete, DateTime vege)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var ds = dal.GetTanuloIgazolatlanMulasztasIdoszakban(tanuloId, kezdete, vege);
|
|
|
|
// Use GetIdList extension here
|
|
var list = ds.Tables[0].AsEnumerable()
|
|
.Select(r => r.Field<int>("ID"))
|
|
.ToList();
|
|
|
|
return list;
|
|
});
|
|
}
|
|
|
|
public List<int> GetTanuloIgazoltMulasztasIdoszakban(int tanuloId, DateTime kezdete, DateTime vege, int tipus)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var ds = dal.GetTanuloIgazoltMulasztasIdoszakban(tanuloId, kezdete, vege, tipus);
|
|
var list = ds.Tables[0].AsEnumerable()
|
|
.Select(r => r.Field<int>("ID"))
|
|
.ToList();
|
|
return list;
|
|
});
|
|
}
|
|
|
|
/// INFO @DevKornel: Mobil használja
|
|
public List<int> ListParhuzamosOranNaplozottMulasztasTanuloId(DateTime kezdete, DateTime vege, int tanoraId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var ds = dal.GetParhuzamosOraNaplozottMulasztasTanuloId(kezdete, vege, tanoraId);
|
|
var list = ds.Tables[0].AsEnumerable()
|
|
.Select(r => r.Field<int>("TanuloId"))
|
|
.ToList();
|
|
return list;
|
|
});
|
|
}
|
|
|
|
public string GetTanuloTanoraiMulasztasa(int tanuloId, int oraId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var co = new MulasztasokCo { TanuloId = tanuloId, OraId = oraId };
|
|
var ds = dal.GetMulasztasDataSet(co.ToPco(TanevId));
|
|
|
|
if (ds.Tables[0].Rows.Count > 0)
|
|
{
|
|
var row = ds.Tables[0].Rows[0];
|
|
if (row["MulTip"] is int mulasztasTipus)
|
|
{
|
|
if (mulasztasTipus == (int)MulasztasTipusEnum.keses || mulasztasTipus == (int)MulasztasTipusEnum.potlas)
|
|
{
|
|
var igazolt = row["IgazolasTipus_DNAME"].ToString();
|
|
if (string.IsNullOrWhiteSpace(igazolt))
|
|
{
|
|
return $"{row["MulTip_DNAME"]} ({row["KesesPerc"]})";
|
|
}
|
|
|
|
return $"{row["MulTip_DNAME"]} ({row["KesesPerc"]}) ({igazolt})";
|
|
}
|
|
|
|
if (mulasztasTipus == (int)MulasztasTipusEnum.hianyzas)
|
|
{
|
|
var igazolt = row["IgazolasTipus_DNAME"].ToString();
|
|
if (string.IsNullOrWhiteSpace(igazolt))
|
|
{
|
|
return row["MulTip_DNAME"].ToString();
|
|
}
|
|
|
|
return $"{row["MulTip_DNAME"]} ({igazolt})";
|
|
}
|
|
}
|
|
|
|
return string.Empty;
|
|
}
|
|
|
|
return string.Empty;
|
|
});
|
|
}
|
|
|
|
public DataSet GetDatumNezetDataByOsztalyCsoportId(int osztalyCsoportId, bool isCsoportVezeto)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
return dal.GetDatumNezetDataByOsztalyCsoportId(osztalyCsoportId, IntezmenyId, TanevId, isCsoportVezeto);
|
|
});
|
|
}
|
|
|
|
public DataSet GetTanulokMulasztasaiKesesei(int? osztalyCsoportId = null, int? tanuloId = null, bool isCsoportVezeto = false, int? szervezetTipusId = null)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var ds = dal.GetTanulokMulasztasaiKesesei(IntezmenyId, TanevId, osztalyCsoportId, tanuloId, isCsoportVezeto, szervezetTipusId);
|
|
|
|
var dt = ds.Tables[0];
|
|
|
|
//Számított oszlopok hozzáadása a táblához
|
|
dt.Columns.Add(new DataColumn("TanoraiHianyzasOsszes", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("TanoranKivuliHianyzasOsszes", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("TanoraiKesesOsszes", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("TanoraiKesesIgazolando", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("TanoraiKesesIgazolt", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("TanoraiKesesIgazolatlan", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("SzamitottKesesOsszes", typeof(string)));
|
|
|
|
//Számított / formázott oszlopok feltöltése
|
|
foreach (DataRow row in dt.Rows)
|
|
{
|
|
//Tanórai hiányzás összes
|
|
row["TanoraiHianyzasOsszes"] = row.Field<int>("TanoraiHianyzasIgazolando") + row.Field<int>("TanoraiHianyzasIgazolt") + row.Field<int>("TanoraiHianyzasIgazolatlan")
|
|
+ row.Field<int>("Szabadsag") + row.Field<int>("Tappenz") + row.Field<int>("BetegSzabadsag");
|
|
|
|
//Tanórán kívüli hiányzás összes
|
|
row["TanoranKivuliHianyzasOsszes"] = row.Field<int>("TanoranKivuliHianyzasIgazolt") + row.Field<int>("TanoranKivuliHianyzasIgazolando") + row.Field<int>("TanoranKivuliHianyzasIgazolatlan");
|
|
|
|
//Tanórai késések száma (perc)
|
|
row["TanoraiKesesOsszes"] = row.Field<int>("TanoraiKesesDarabszamIgazolt") + row.Field<int>("TanoraiKesesDarabszamIgazolatlan") + row.Field<int>("TanoraiKesesDarabszamIgazolando")
|
|
+ " (" + (row.Field<int>("TanoraiKesesIgazolandoPerc") + row.Field<int>("TanoraiKesesIgazoltPerc") + +row.Field<int>("TanoraiKesesIgazolatlanPerc")) + ")";
|
|
|
|
row["TanoraiKesesIgazolando"] = row.Field<int>("TanoraiKesesDarabszamIgazolando") + " (" + row.Field<int?>("TanoraiKesesIgazolandoPerc") + ")";
|
|
row["TanoraiKesesIgazolt"] = row.Field<int>("TanoraiKesesDarabszamIgazolt") + " (" + row.Field<int>("TanoraiKesesIgazoltPerc") + ")";
|
|
row["TanoraiKesesIgazolatlan"] = row.Field<int>("TanoraiKesesDarabszamIgazolatlan") + " (" + row.Field<int?>("TanoraiKesesIgazolatlanPerc") + ")";
|
|
|
|
//Számított késések összes
|
|
row["SzamitottKesesOsszes"] = row.Field<int>("SzamitottKesesIgazolando") + row.Field<int>("SzamitottKesesIgazolt") + row.Field<int>("SzamitottKesesIgazolatlan");
|
|
}
|
|
|
|
AddColumnsToDataSet(h, ds, true, false, false);
|
|
|
|
return ds;
|
|
});
|
|
}
|
|
|
|
public DataSet GetTanuloMulasztasaiGrid(int tanuloId, int aktualisTanevId, bool igazolandok, bool? isTanoraiCelu, int? csoportVezetoId, int osztalyCsoportId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var pco = new MulasztasKeresesePCO
|
|
{
|
|
TanuloId = tanuloId,
|
|
TanevId = aktualisTanevId,
|
|
IsTanoraiCelu = isTanoraiCelu
|
|
};
|
|
return dal.GetTanuloMulasztasaiGrid(pco, igazolandok, csoportVezetoId, osztalyCsoportId);
|
|
});
|
|
}
|
|
|
|
public DataSet GetTanuloMulasztasaiDetailGrid(MulasztasokCo keresoProfil, bool igazolando, bool? isTanoraiCelu, int? csoportVezetoId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var pco = keresoProfil.ToPco(TanevId);
|
|
pco.IsTanoraiCelu = isTanoraiCelu;
|
|
|
|
return dal.GetTanuloMulasztasaiDetailGrid(pco, igazolando, csoportVezetoId);
|
|
});
|
|
}
|
|
|
|
public DataSet GetMulasztasokNaploNezetGrid(int osztalyCsoportId, DateTime datum, bool isCsoportVezeto, int? szervezetTipusId = null)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var naploNezetAdatok = dal.GetMulasztasokNaploNezetData(TanevId, IntezmenyId, osztalyCsoportId, datum, isCsoportVezeto, szervezetTipusId);
|
|
|
|
var naplonezetGridData = new DataSet();
|
|
|
|
var dt = new DataTable();
|
|
|
|
dt.Columns.Add(new DataColumn("ID", typeof(int)));
|
|
dt.Columns.Add(new DataColumn("TanuloId", typeof(int)));
|
|
dt.Columns.Add(new DataColumn("TanuloNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("OsztalyNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("AnyjaNeve", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("SzuletesiIdo", typeof(DateTime)));
|
|
|
|
var jelenletTipus = (int)MulasztasTipusEnum.jelenlet;
|
|
|
|
for (var i = Constants.Mulasztas.OraSorszamMinValue; i <= Constants.Mulasztas.OraSorszamMaxValue; i++)
|
|
{
|
|
string oraSorszamString;
|
|
if (i < 0)
|
|
{
|
|
oraSorszamString = "Minusz" + Math.Abs(i);
|
|
}
|
|
else
|
|
{
|
|
oraSorszamString = i.ToString();
|
|
}
|
|
|
|
var isMegtartottColumn = new DataColumn("Ora" + oraSorszamString + "IsMegtartott", typeof(bool));
|
|
{
|
|
isMegtartottColumn.DefaultValue = false;
|
|
}
|
|
dt.Columns.Add(isMegtartottColumn);
|
|
|
|
var nevColumn = new DataColumn("Ora" + oraSorszamString + "Nev")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(nevColumn);
|
|
|
|
dt.Columns.Add(new DataColumn("Ora" + oraSorszamString + "OsztalyCsoportNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("Ora" + oraSorszamString + "TantargyNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("Ora" + oraSorszamString + "TanarNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("Ora" + oraSorszamString + "TanitasiOraId", typeof(int)));
|
|
|
|
var isHiddenColumn = new DataColumn("Ora" + oraSorszamString + "IsHiddenColumn")
|
|
{
|
|
DefaultValue = true
|
|
};
|
|
dt.Columns.Add(isHiddenColumn);
|
|
|
|
var mulasztasIdColumn = new DataColumn("Ora" + oraSorszamString + "MulasztasId")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(mulasztasIdColumn);
|
|
|
|
var mulasztasTipusColumn = new DataColumn("Ora" + oraSorszamString + "MulasztasTipus")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(mulasztasTipusColumn);
|
|
|
|
var kesesPercbenColumn = new DataColumn("Ora" + oraSorszamString + "KesesPercben")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(kesesPercbenColumn);
|
|
|
|
var isIgazolt = new DataColumn("Ora" + oraSorszamString + "IsIgazolt")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(isIgazolt);
|
|
|
|
var igazolasTipus = new DataColumn("Ora" + oraSorszamString + "IgazolasTipus")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(igazolasTipus);
|
|
dt.Columns.Add(new DataColumn("Ora" + oraSorszamString + "IgazolasTipusText", typeof(string)));
|
|
|
|
dt.Columns.Add(new DataColumn("Ora" + oraSorszamString + "Megjegyzes", typeof(string)));
|
|
}
|
|
|
|
for (var i = 1; i <= Constants.Mulasztas.FoglalkozasCount; i++)
|
|
{
|
|
var isMegtartottColumn = new DataColumn("Foglalkozas" + i + "IsMegtartott", typeof(bool));
|
|
{
|
|
isMegtartottColumn.DefaultValue = false;
|
|
}
|
|
dt.Columns.Add(isMegtartottColumn);
|
|
|
|
var nevColumn = new DataColumn("Foglalkozas" + i + "Nev")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(nevColumn);
|
|
|
|
dt.Columns.Add(new DataColumn("Foglalkozas" + i + "OsztalyCsoportNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("Foglalkozas" + i + "TantargyNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("Foglalkozas" + i + "TanarNev", typeof(string)));
|
|
dt.Columns.Add(new DataColumn("Foglalkozas" + i + "TanitasiOraId", typeof(int)));
|
|
|
|
var isHiddenColumn = new DataColumn("Foglalkozas" + i + "IsHiddenColumn")
|
|
{
|
|
DefaultValue = true
|
|
};
|
|
dt.Columns.Add(isHiddenColumn);
|
|
|
|
var mulasztasIdColumn = new DataColumn("Foglalkozas" + i + "MulasztasId")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(mulasztasIdColumn);
|
|
|
|
var mulasztasTipusColumn = new DataColumn("Foglalkozas" + i + "MulasztasTipus")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(mulasztasTipusColumn);
|
|
|
|
var kesesPercbenColumn = new DataColumn("Foglalkozas" + i + "KesesPercben")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(kesesPercbenColumn);
|
|
|
|
var isIgazolt = new DataColumn("Foglalkozas" + i + "IsIgazolt")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(isIgazolt);
|
|
|
|
var igazolasTipus = new DataColumn("Foglalkozas" + i + "IgazolasTipus")
|
|
{
|
|
AllowDBNull = true
|
|
};
|
|
dt.Columns.Add(igazolasTipus);
|
|
dt.Columns.Add(new DataColumn("Foglalkozas" + i + "IgazolasTipusText", typeof(string)));
|
|
|
|
dt.Columns.Add(new DataColumn("Foglalkozas" + i + "Megjegyzes", typeof(string)));
|
|
}
|
|
|
|
foreach (DataColumn column in dt.Columns)
|
|
{
|
|
column.AllowDBNull = true;
|
|
}
|
|
|
|
naplonezetGridData.Tables.Add(dt);
|
|
|
|
var view = new DataView(naploNezetAdatok.Tables[0]);
|
|
var tanuloIdList = view.ToTable(true, "TanuloId").AsEnumerable().Select(p => SDAConvert.ToInt32(p["TanuloId"])).ToList();
|
|
|
|
var orderedFoglalkozasKezdeteList = naploNezetAdatok
|
|
.Tables[0]
|
|
.AsEnumerable()
|
|
.Where(r => SDAConvert.ToDateTime(r["OraKezdete"]) != null)
|
|
.GroupBy(x => SDAConvert.ToDateTime(x["OraKezdete"]))
|
|
.OrderBy(r => SDAConvert.ToDateTime(r.Key))
|
|
.Select(x => x.Key)
|
|
.OfType<DateTime>()
|
|
.ToList();
|
|
var foglalkozasColumnDictionary = new Dictionary<string, int>();
|
|
var foglalkozasColumnDictionaryIndex = 1;
|
|
foreach (var foglalkozasKezdete in orderedFoglalkozasKezdeteList)
|
|
{
|
|
var orakezdete = foglalkozasKezdete.ToString("HH:mm");
|
|
if (!foglalkozasColumnDictionary.ContainsKey(orakezdete))
|
|
{
|
|
foglalkozasColumnDictionary.Add(orakezdete, foglalkozasColumnDictionaryIndex);
|
|
foglalkozasColumnDictionaryIndex++;
|
|
}
|
|
}
|
|
|
|
var visibleColumnList = new List<string>();
|
|
foreach (var tanuloId in tanuloIdList)
|
|
{
|
|
var dr = naplonezetGridData.Tables[0].NewRow();
|
|
|
|
IEnumerable<DataRow> rows = naploNezetAdatok
|
|
.Tables[0]
|
|
.AsEnumerable()
|
|
.Where(r => SDAConvert.ToInt32(r["TanuloId"]) == tanuloId)
|
|
.ToList();
|
|
if (rows.Any())
|
|
{
|
|
var firstRow = rows.First();
|
|
dr.SetField("ID", tanuloId);
|
|
dr.SetField("TanuloId", tanuloId);
|
|
dr.SetField("TanuloNev", SDAConvert.ToString(firstRow["TanuloNev"]));
|
|
dr.SetField("OsztalyNev", SDAConvert.ToString(firstRow["OsztalyNev"]));
|
|
dr.SetField("AnyjaNeve", SDAConvert.ToString(firstRow["AnyjaNeve"]));
|
|
dr.SetField("SzuletesiIdo", SDAConvert.ToDateTime(firstRow["SzuletesiIdo"]));
|
|
}
|
|
|
|
IEnumerable<DataRow> oraRows = naploNezetAdatok
|
|
.Tables[0]
|
|
.AsEnumerable()
|
|
.Where(r => SDAConvert.ToInt32(r["TanuloId"]) == tanuloId && SDAConvert.ToNullableInt32(r["OraSorszam"]) != null)
|
|
.OrderBy(r => SDAConvert.ToNullableInt32(r["OraSorszam"]))
|
|
.ToList();
|
|
oraRows = oraRows
|
|
.GroupBy(x => SDAConvert.ToNullableInt32(x["OraSorszam"]))
|
|
//NOTE: Az alábbi feltételeket alapján jelenítjük meg a tanítási órát
|
|
// - Ahol már van mulasztás felvéve(MulasztasId.IsEntityId()) és a mulasztás típusa hiányzás vagy késés
|
|
// - Ha nincs, akkor az osztály órája(IsOsztalyOraja)
|
|
// - Ha nincs, akkor a tanórai célú csoport órája(IsTanoraiCelu)
|
|
// - Ha nincs, akkor a tanórai célúnak jelölt csoport órája(IsTanoraiCelunakJelolt)
|
|
// - Különben az első találatot(First())
|
|
.Select(x =>
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToNullableInt32(dataRow["MulasztasId"]).IsEntityId() && (SDAConvert.ToNullableInt32(dataRow["MulasztasTipus"]) == (int)MulasztasTipusEnum.hianyzas || SDAConvert.ToNullableInt32(dataRow["MulasztasTipus"]) == (int)MulasztasTipusEnum.keses)) ??
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToBoolean(dataRow["IsOsztalyOraja"])) ??
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToBoolean(dataRow["IsTanoraiCelu"])) ??
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToBoolean(dataRow["IsTanoraiCelunakJelolt"])) ??
|
|
x.First())
|
|
.ToList();
|
|
foreach (var oraRow in oraRows)
|
|
{
|
|
var oraColumnIndex = SDAConvert.ToNullableInt32(oraRow["OraSorszam"]);
|
|
string oraSorszamString;
|
|
if (oraColumnIndex < 0)
|
|
{
|
|
oraSorszamString = "Minusz" + Math.Abs(oraColumnIndex.Value);
|
|
}
|
|
else
|
|
{
|
|
//NOTE: A feljebb lévő Where miatt nem lehet null.
|
|
oraSorszamString = oraColumnIndex.Value.ToString();
|
|
}
|
|
|
|
dr.SetField("Ora" + oraSorszamString + "IsMegtartott", true);
|
|
dr.SetField("Ora" + oraSorszamString + "OsztalyCsoportNev", SDAConvert.ToString(oraRow["OsztalyCsoportNev"]));
|
|
dr.SetField("Ora" + oraSorszamString + "TantargyNev", SDAConvert.ToString(oraRow["TantargyNev"]));
|
|
dr.SetField("Ora" + oraSorszamString + "TanarNev", SDAConvert.ToString(oraRow["TanarNev"]));
|
|
dr.SetField("Ora" + oraSorszamString + "MulasztasId", SDAConvert.ToNullableInt32(oraRow["MulasztasId"]));
|
|
var mulasztasTipus = SDAConvert.ToNullableInt32(oraRow["MulasztasTipus"]) != null ? SDAConvert.ToNullableInt32(oraRow["MulasztasTipus"]) : jelenletTipus;
|
|
dr.SetField("Ora" + oraSorszamString + "MulasztasTipus", mulasztasTipus);
|
|
dr.SetField("Ora" + oraSorszamString + "KesesPercben", SDAConvert.ToNullableInt32(oraRow["KesesPercben"]));
|
|
dr.SetField("Ora" + oraSorszamString + "IsIgazolt", SDAConvert.ToNullableBoolean(oraRow["IsIgazolt_BOOL"]));
|
|
dr.SetField("Ora" + oraSorszamString + "IgazolasTipus", SDAConvert.ToNullableInt32(oraRow["IgazolasTipus"]));
|
|
dr.SetField("Ora" + oraSorszamString + "IgazolasTipusText", SDAConvert.ToString(oraRow["IgazolasTipus_DNAME"]));
|
|
dr.SetField("Ora" + oraSorszamString + "Megjegyzes", FormatMulasztasMegjegyzes(SDAConvert.ToString(oraRow["Megjegyzes"])));
|
|
dr.SetField("Ora" + oraSorszamString + "TanitasiOraId", SDAConvert.ToNullableInt32(oraRow["TanitasiOraId"]));
|
|
var isHiddenColumn = "Ora" + oraSorszamString + "IsHiddenColumn";
|
|
if (!visibleColumnList.Contains(isHiddenColumn))
|
|
{
|
|
visibleColumnList.Add(isHiddenColumn);
|
|
}
|
|
}
|
|
|
|
IEnumerable<DataRow> foglalkozasRows = naploNezetAdatok
|
|
.Tables[0]
|
|
.AsEnumerable()
|
|
.Where(r => SDAConvert.ToInt32(r["TanuloId"]) == tanuloId && SDAConvert.ToDateTime(r["OraKezdete"]) != null)
|
|
.OrderBy(r => SDAConvert.ToDateTime(r["OraKezdete"]))
|
|
.ToList();
|
|
foglalkozasRows = foglalkozasRows
|
|
.GroupBy(x => SDAConvert.ToDateTime(x["OraKezdete"]))
|
|
//NOTE: Az alábbi feltételeket alapján jelenítjük meg a tanítási órát
|
|
// - Ahol már van mulasztás felvéve(MulasztasId.IsEntityId()) és a mulasztás típusa hiányzás vagy késés
|
|
// - Ha nincs, akkor az osztály órája(IsOsztalyOraja)
|
|
// - Ha nincs, akkor a tanórai célú csoport órája(IsTanoraiCelu)
|
|
// - Ha nincs, akkor a tanórai célúnak jelölt csoport órája(IsTanoraiCelunakJelolt)
|
|
// - Különben az első találatot(First())
|
|
.Select(x =>
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToNullableInt32(dataRow["MulasztasId"]).IsEntityId() && (SDAConvert.ToNullableInt32(dataRow["MulasztasTipus"]) == (int)MulasztasTipusEnum.hianyzas || SDAConvert.ToNullableInt32(dataRow["MulasztasTipus"]) == (int)MulasztasTipusEnum.keses)) ??
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToBoolean(dataRow["IsOsztalyOraja"])) ??
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToBoolean(dataRow["IsTanoraiCelu"])) ??
|
|
x.FirstOrDefault(dataRow => SDAConvert.ToBoolean(dataRow["IsTanoraiCelunakJelolt"])) ??
|
|
x.First())
|
|
.ToList();
|
|
foreach (var foglalkozasRow in foglalkozasRows)
|
|
{
|
|
var orakezdete = SDAConvert.ToDateTime(foglalkozasRow["OraKezdete"]).Value.ToString("HH:mm");
|
|
var foglalkozasColumnIndex = foglalkozasColumnDictionary[orakezdete];
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "IsMegtartott", true);
|
|
//NOTE: A feljebb lévő Where miatt nem lehet null.
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "OsztalyCsoportNev", SDAConvert.ToString(foglalkozasRow["OsztalyCsoportNev"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "TantargyNev", SDAConvert.ToString(foglalkozasRow["TantargyNev"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "TanarNev", SDAConvert.ToString(foglalkozasRow["TanarNev"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "MulasztasId", SDAConvert.ToNullableInt32(foglalkozasRow["MulasztasId"]));
|
|
var mulasztasTipus = SDAConvert.ToNullableInt32(foglalkozasRow["MulasztasTipus"]) != null ? SDAConvert.ToNullableInt32(foglalkozasRow["MulasztasTipus"]) : jelenletTipus;
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "MulasztasTipus", mulasztasTipus);
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "KesesPercben", SDAConvert.ToNullableInt32(foglalkozasRow["KesesPercben"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "IsIgazolt", SDAConvert.ToNullableBoolean(foglalkozasRow["IsIgazolt_BOOL"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "IgazolasTipus", SDAConvert.ToNullableInt32(foglalkozasRow["IgazolasTipus"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "IgazolasTipusText", SDAConvert.ToString(foglalkozasRow["IgazolasTipus_DNAME"]));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "Megjegyzes", FormatMulasztasMegjegyzes(SDAConvert.ToString(foglalkozasRow["Megjegyzes"])));
|
|
dr.SetField("Foglalkozas" + foglalkozasColumnIndex + "TanitasiOraId", SDAConvert.ToNullableInt32(foglalkozasRow["TanitasiOraId"]));
|
|
var isHiddenColumn = "Foglalkozas" + foglalkozasColumnIndex + "IsHiddenColumn";
|
|
if (!visibleColumnList.Contains(isHiddenColumn))
|
|
{
|
|
visibleColumnList.Add(isHiddenColumn);
|
|
}
|
|
}
|
|
|
|
naplonezetGridData.Tables[0].Rows.Add(dr);
|
|
}
|
|
|
|
#region "Header helyett nulladik sor"
|
|
|
|
//NOTE: "Ideiglenesen mivel a grid headerbe nincs lehetőség az összes oszlopérték beállítására egyszerre, ezért bekerül egy nulladik sor, amivel állítani lehet..."
|
|
|
|
var editorRow = naplonezetGridData.Tables[0].NewRow();
|
|
editorRow["ID"] = 0;
|
|
editorRow["TanuloId"] = 0;
|
|
editorRow["TanuloNev"] = "";
|
|
naplonezetGridData.Tables[0].Rows.InsertAt(editorRow, 0);
|
|
|
|
#endregion "Header helyett nulladik sor"
|
|
|
|
foreach (var visibleColumn in visibleColumnList)
|
|
{
|
|
naplonezetGridData.Tables[0].Columns[visibleColumn].Expression = "False";
|
|
|
|
}
|
|
|
|
for (var i = Constants.Mulasztas.OraSorszamMinValue; i <= Constants.Mulasztas.OraSorszamMaxValue; i++)
|
|
{
|
|
string oraSorszamString;
|
|
if (i < 0)
|
|
{
|
|
oraSorszamString = "Minusz" + Math.Abs(i);
|
|
}
|
|
else
|
|
{
|
|
//NOTE: A feljebb lévő Where miatt nem lehet null.
|
|
oraSorszamString = i.ToString();
|
|
}
|
|
|
|
naplonezetGridData.Tables[0].Columns["Ora" + oraSorszamString + "Nev"].Expression = "'" + i + ". óra'";
|
|
|
|
}
|
|
|
|
foreach (var foglalkozasColumn in foglalkozasColumnDictionary)
|
|
{
|
|
|
|
naplonezetGridData.Tables[0].Columns["Foglalkozas" + foglalkozasColumn.Value + "Nev"].Expression = "'" + foglalkozasColumn.Key + "'";
|
|
}
|
|
|
|
AddColumnsToDataSet(h, naplonezetGridData, true, false, false);
|
|
|
|
return naplonezetGridData;
|
|
});
|
|
}
|
|
|
|
public QuintupleList<DateTime?, string, string, string, string> GetTanuloLegutobbiMulasztasai(int tanuloId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal(GridParameters);
|
|
var result = new QuintupleList<DateTime?, string, string, string, string>();
|
|
var mulasztasok = dal.GetTanuloLegutobbiMulasztasai(tanuloId).Tables[0].AsEnumerable();
|
|
|
|
foreach (var keses in mulasztasok.Where(r => (MulasztasTipusEnum)SDAConvert.ToInt32(r["C_TIPUS"]) == MulasztasTipusEnum.keses))
|
|
{
|
|
var oraSzamVagyKezdeteVege = string.IsNullOrWhiteSpace(SDAConvert.ToString(keses["C_ORASZAM"])) ? keses["OraKezdeteVege"] : keses["C_ORASZAM"];
|
|
result.Add(SDAConvert.ToDateTime(keses["C_DATUM"]), MulasztasTipusEnum.keses.GetDisplayName(TanevId), SDAConvert.ToDateTime(keses["C_DATUM"])?.ToString("dddd"), $"{oraSzamVagyKezdeteVege}. óra ({keses["C_NEV"]})", keses["ID"].ToString());
|
|
}
|
|
|
|
foreach (var grouping in mulasztasok.Where(r => (MulasztasTipusEnum)SDAConvert.ToInt32(r["C_TIPUS"]) == MulasztasTipusEnum.hianyzas).GroupBy(r => SDAConvert.ToDateTime(r["C_DATUM"])))
|
|
{
|
|
var first = grouping.First();
|
|
var count = grouping.Count();
|
|
var oraSzamVagyKezdeteVege = string.IsNullOrWhiteSpace(SDAConvert.ToString(first["C_ORASZAM"])) ? first["OraKezdeteVege"] : first["C_ORASZAM"];
|
|
|
|
result.Add(
|
|
grouping.Key,
|
|
MulasztasTipusEnum.hianyzas.GetDisplayName(TanevId),
|
|
grouping.Key?.ToString("dddd"),
|
|
count > 1 ?
|
|
$"{count} db tanóra" :
|
|
$"{oraSzamVagyKezdeteVege}. óra ({first["C_NEV"]})",
|
|
first["ID"].ToString());
|
|
}
|
|
|
|
return new QuintupleList<DateTime?, string, string, string, string>(result.OrderByDescending(r => r.Item1).Take(6).ToList());
|
|
});
|
|
}
|
|
|
|
#region Export
|
|
|
|
public MemoryStream GetTanulokTantargyaiEsPedagogusaiExcelExport(MulasztasokCo seachModel)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dataSet = h.Tanulo().GetTanulokMulasztasaiExcelExport(seachModel.ToPco(TanevId));
|
|
var dataTable = dataSet.Tables[0];
|
|
ExportLogic.TryCreateHeaderIfNotExist(dataTable);
|
|
|
|
var stream = new MemoryStream();
|
|
|
|
using (var excel = new ExcelPackage(stream))
|
|
{
|
|
var workSheet = excel.Workbook.Worksheets.Add(HianyzasResource.TanulokMulasztasai);
|
|
|
|
workSheet.Cells[1, 1].LoadFromDataTable(dataTable, true);
|
|
ExportLogic.SetHeaderStyles(workSheet.Cells[1, 1, 1, dataTable.Columns.Count]);
|
|
|
|
workSheet.Cells.AutoFitColumns();
|
|
excel.Save();
|
|
}
|
|
|
|
stream.Position = 0;
|
|
|
|
return stream;
|
|
});
|
|
}
|
|
|
|
public MemoryStream GetTanorakonNemJelenlevokExcelExport(MulasztasokCo seachModel)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dataSet = h.Tanulo().GetTanorakonNemJelenlevokExcelExport(seachModel.ToPco(TanevId));
|
|
var dataTable = dataSet.Tables[0];
|
|
ExportLogic.TryCreateHeaderIfNotExist(dataTable);
|
|
|
|
var stream = new MemoryStream();
|
|
|
|
using (var excel = new ExcelPackage(stream))
|
|
{
|
|
var workSheet = excel.Workbook.Worksheets.Add(HianyzasResource.TanorakonNemJelenlevok);
|
|
|
|
workSheet.Cells[1, 1].LoadFromDataTable(dataTable, true);
|
|
ExportLogic.SetHeaderStyles(workSheet.Cells[1, 1, 1, dataTable.Columns.Count]);
|
|
|
|
workSheet.Cells.AutoFitColumns();
|
|
excel.Save();
|
|
}
|
|
|
|
stream.Position = 0;
|
|
|
|
return stream;
|
|
});
|
|
}
|
|
|
|
public MemoryStream ExportTanuloKesesekHianyzasok(MulasztasokCo co)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var dal = h.MulasztasDal();
|
|
var pco = co.ToPco(TanevId);
|
|
var ds = dal.GetHallgatoMulasztasaiDataSet(pco);
|
|
|
|
var dt = ds.DataSetSort("MulasztasDatum", false).Tables[0];
|
|
var mulasztasKesesColumn = dt.Columns.Add("Mulasztas_Keses", typeof(string));
|
|
foreach (DataRow row in dt.Rows)
|
|
{
|
|
var mulasztasKesesResult = row.Field<string>("MulasztasTipus_DNAME");
|
|
|
|
var mulasztasTipus = row.Field<int>("MulasztasTipus");
|
|
if (mulasztasTipus == (int)MulasztasTipusEnum.keses || mulasztasTipus == (int)MulasztasTipusEnum.potlas)
|
|
{
|
|
var keses = row.Field<int>("Perc");
|
|
mulasztasKesesResult += $" ({keses} Perc)";
|
|
}
|
|
|
|
row.SetField(mulasztasKesesColumn, mulasztasKesesResult);
|
|
}
|
|
|
|
var stream = new MemoryStream();
|
|
using (var excel = new ExcelPackage(stream))
|
|
{
|
|
var workSheet = excel.Workbook.Worksheets.Add(HianyzasResource.KesesekHianyzasok);
|
|
|
|
(string nameFrom, string nameTo, Type type)[] exportColumns =
|
|
{
|
|
("MulasztasDatum", HianyzasResource.MulasztasDatuma, typeof(DateTime)),
|
|
("Oraszam", HianyzasResource.Ora, typeof(int)),
|
|
("Targy", HianyzasResource.Tantargy, typeof(string)),
|
|
("Tema", TantargyResource.Tema, typeof(string)),
|
|
("Mulasztas_Keses", HianyzasResource.MulasztasTipusa, typeof(string)),
|
|
("Igazolt_BNAME", HianyzasResource.IgazoltKerdojel, typeof(string)),
|
|
("TanoraiCeluMulasztas_BNAME", HianyzasResource.TanoraiCeluMulasztas, typeof(string)),
|
|
("IgazolasTipus_DNAME", HianyzasResource.IgazolasTipusa, typeof(string)),
|
|
("RogzitesDatum", HianyzasResource.RogzitesDatuma, typeof(DateTime))
|
|
};
|
|
|
|
ExportLogic.MapDataTable(dt, exportColumns, true);
|
|
ExportLogic.FormatDateFields(exportColumns, workSheet);
|
|
|
|
workSheet.Cells[1, 1].LoadFromDataTable(dt, true);
|
|
|
|
ExportLogic.SetHeaderStyles(workSheet.Cells[1, 1, 1, exportColumns.Length]);
|
|
|
|
workSheet.Cells.AutoFitColumns();
|
|
|
|
excel.Save();
|
|
}
|
|
|
|
stream.Position = 0;
|
|
|
|
return stream;
|
|
});
|
|
}
|
|
|
|
public List<MulasztasItemCo> GetMulasztasCoList(MulasztasokCo mulasztasok, bool fromSearchPanel)
|
|
{
|
|
var coList = new List<MulasztasItemCo>();
|
|
var ds = GetMulasztasList(mulasztasok, fromSearchPanel: fromSearchPanel);
|
|
|
|
foreach (var row in ds.Tables[0].AsEnumerable())
|
|
{
|
|
coList.Add(new MulasztasItemCo(row));
|
|
}
|
|
|
|
return coList;
|
|
}
|
|
|
|
#endregion
|
|
|
|
public List<TanitasiOraCo> ListTanitasiOraKezdeteVege(IEnumerable<int> tanitasiOraIdList)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var tanitasiOraDal = h.TanitasiOra();
|
|
|
|
var tanitasiOraKezdeteVegeDs = tanitasiOraDal.ListTanitasiOraKezdeteVege(tanitasiOraIdList);
|
|
var result = tanitasiOraKezdeteVegeDs.Tables[0].AsEnumerable().Select(r => new TanitasiOraCo
|
|
{
|
|
Id = r.Field<int>("Id"),
|
|
OraKezdete = r.Field<DateTime>("OraKezdete"),
|
|
OraVege = r.Field<DateTime>("OraVege"),
|
|
Oraszam = r.Field<int?>("Oraszam")
|
|
}).ToList();
|
|
|
|
return result;
|
|
});
|
|
}
|
|
|
|
public int? GetMulasztasId(int tanuloId, int tanitasiOraId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var mulasztasDal = h.MulasztasDal();
|
|
|
|
var mulasztasDataSet = mulasztasDal.GetMulasztasDataSet(new MulasztasKeresesePCO() { TanevId = TanevId, TanuloId = tanuloId, TanitasiOraId = tanitasiOraId }, true);
|
|
|
|
int? mulasztasId = null;
|
|
|
|
if (mulasztasDataSet.Tables[0].Rows.Count == 1)
|
|
{
|
|
mulasztasId = Convert.ToInt32(mulasztasDataSet.Tables[0].Rows[0][0]);
|
|
}
|
|
|
|
return mulasztasId;
|
|
});
|
|
}
|
|
|
|
public int GetTanuloMulasztasaiHianyzasMiattCount(int tanuloId)
|
|
{
|
|
return Dal.CustomConnection.Run(ConnectionType, h =>
|
|
{
|
|
var mulasztasDal = h.MulasztasDal();
|
|
|
|
var mulasztasDataSet = mulasztasDal.GetTanuloMulasztasaiData(TanevId, tanuloId, (int)MulasztasTipusEnum.hianyzas, false);
|
|
|
|
return mulasztasDataSet.Tables.Count > 0 && mulasztasDataSet.Tables[0].Rows != null ? mulasztasDataSet.Tables[0].Rows.Count : 0;
|
|
});
|
|
}
|
|
|
|
private string FormatMulasztasMegjegyzes(string megjegyzes)
|
|
{
|
|
return megjegyzes?.Length > 30 ? $"{megjegyzes.Substring(0, 29)}…" : megjegyzes;
|
|
}
|
|
}
|
|
}
|