kreta/Kreta.DataAccessManual/HetesDal.cs
2024-03-13 00:33:46 +01:00

554 lines
21 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.Core;
using Kreta.DataAccessManual.Interfaces;
using Kreta.DataAccessManual.Util;
using SDA.Kreta.Entities;
namespace Kreta.DataAccessManual
{
internal class HetesDal : DataAccessBase, IHetesDal
{
public HetesDal(DalHandler handler) : base(handler)
{ }
public DataSet GetHetSorszamokTanulokkal(int tanevId, int osztalyCsoportId, int? hetSorszam = null)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
};
string commandText = @"
SELECT
ROW_NUMBER() OVER (ORDER BY nh.C_HETSORSZAMA, IIF(f.C_NEVSORREND = 'T', f.C_UTONEV + ' ' + f.C_VEZETEKNEV, f.C_VEZETEKNEV + ' ' + f.C_UTONEV)) AS ID
,nh.C_HETSORSZAMA AS HetSorszam
,tcs.C_TANULOID As TanuloId
,f.C_NYOMTATASINEV AS Nev
,IIF(f.C_NEVSORREND = 'T', f.C_UTONEV + ' ' + f.C_VEZETEKNEV, f.C_VEZETEKNEV + ' ' + f.C_UTONEV) AS NevElotagNelkul
FROM T_NAPTARIHET_OSSZES nh
INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = nh.C_TANEVID
AND tanev.TOROLT = 'F'
AND nh.C_HETKEZDONAPJA >= tanev.C_KEZDONAP
AND nh.C_HETUTOLSONAPJA <= tanev.C_UTOLSONAP
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANEVID = nh.C_TANEVID
AND tcs.C_BELEPESDATUM <= nh.C_HETKEZDONAPJA
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= nh.C_HETUTOLSONAPJA)
AND tcs.TOROLT = 'F'
INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID
AND f.C_TANEVID = nh.C_TANEVID
AND f.TOROLT = 'F'
INNER JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.ID = nh.C_HETIREND
AND hetirend.TOROLT = 'F'
AND hetirend.C_TANEVID = nh.C_TANEVID
WHERE nh.TOROLT = 'F'
AND nh.C_TANEVID = :pTanevId
AND tcs.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
";
if (hetSorszam.HasValue)
{
commandParameterList.Add(new CommandParameter("pHetSorszam", hetSorszam.Value));
commandText += " AND nh.C_HETSORSZAMA = :pHetSorszam";
}
return GetData(commandText, commandParameterList);
}
public DataSet GetHetesek(int tanevId, int osztalyCsoportId)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
};
string commandText = @"
SELECT
nh.ID
,nh.C_HETSORSZAMA AS HetSorszam
,nh.C_HETKEZDONAPJA AS HetKezdoNap
,nh.C_HETUTOLSONAPJA AS HetUtolsoNap
,ISNULL(hetirend.C_NAME, N'Szünet') AS Hetirend
,STUFF((
SELECT
',' + CAST(h.C_TANULOID AS nvarchar (max))
FROM T_HETES_OSSZES h
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = nh.C_TANEVID
AND h.C_HETSORSZAMA = nh.C_HETSORSZAMA
AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
FOR XML PATH ('')), 1, 1, ''
) AS Tanulok
,:pOsztalyCsoportId AS OsztalyCsoportId
FROM T_NAPTARIHET_OSSZES nh
INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = nh.C_TANEVID
AND tanev.TOROLT = 'F'
AND nh.C_HETKEZDONAPJA >= tanev.C_KEZDONAP
AND nh.C_HETUTOLSONAPJA <= tanev.C_UTOLSONAP
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.ID = nh.C_HETIREND
AND hetirend.TOROLT = 'F'
AND hetirend.C_TANEVID = nh.C_TANEVID
WHERE nh.TOROLT = 'F'
AND nh.C_TANEVID = :pTanevId
ORDER BY nh.C_HETSORSZAMA
";
return GetData(commandText, commandParameterList);
}
public void DeleteFutureHetesInOsztalyCsoport(int tanevId, int osztalyCsoportId)
{
var ids = GetHetesIDsInFuture(tanevId, osztalyCsoportId);
foreach (var id in ids)
{
Delete(id);
}
}
public (List<int> toroltHetesek, List<int> beallitottHetesek) SaveOrDeleteHetesek(int tanevId, int osztalyCsoportId, int hetSorszam, List<int> selectedTanuloIds)
{
var ids = GetHetesIDsForDelete(tanevId, osztalyCsoportId, hetSorszam, selectedTanuloIds);
List<int> torolthetesek = ids.Values.ToList();
List<int> beallitottHetesek = new List<int>();
foreach (var id in ids.Keys)
{
Delete(id);
}
if (selectedTanuloIds != null)
{
foreach (var tanuloId in selectedTanuloIds)
{
int? hetesId = null;
bool torolt = false;
int hetesnekBeallitottTanuloId = default;
var ds = GetHetesIDForTanuloWithTorolt(tanevId, osztalyCsoportId, hetSorszam, tanuloId);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["ID"] != null && row["ID"] != DBNull.Value)
{
hetesId = Convert.ToInt32(row["ID"]);
}
if (row["TOROLT"] != null && row["TOROLT"] != DBNull.Value)
{
torolt = row["TOROLT"].ToString() == "T";
}
if (row["C_TANULOID"] != null && row["C_TANULOID"] != DBNull.Value)
{
hetesnekBeallitottTanuloId = Convert.ToInt32(row["C_TANULOID"]);
}
break;
}
if (!hetesId.HasValue || hetesId.Value < 1)
{
Insert(tanevId, osztalyCsoportId, hetSorszam, tanuloId);
beallitottHetesek.Add(tanuloId);
}
else
{
if (torolt)
{
UnDelete(hetesId.Value);
beallitottHetesek.Add(hetesnekBeallitottTanuloId);
}
}
}
}
return (torolthetesek, beallitottHetesek);
}
public string GetHetesekForDatum(int tanevId, int osztalyCsoportId, DateTime datum)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pDatum", datum),
};
string commandText = @"
SELECT
STUFF((
SELECT
', ' + IIF(ocs.ID IS NULL AND tcs.ID IS NULL, '(' + f.C_NYOMTATASINEV + ')', f.C_NYOMTATASINEV)
FROM T_HETES_OSSZES h
INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = h.C_TANULOID
AND f.TOROLT = 'F'
AND f.C_TANEVID = h.C_TANEVID
-- ha osztály van kiválasztva
LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = h.C_OSZTALYCSOPORTID
AND ocs.TOROLT = 'F'
AND ocs.ID = @pOsztalyCsoportId
-- osztálybontott csoport van kiválasztva
LEFT JOIN T_CSOPORT_OSSZES cs ON cs.C_OSZTALYBONTASID = h.C_OSZTALYCSOPORTID
AND cs.TOROLT = 'F'
AND cs.ID = @pOsztalyCsoportId
LEFT JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = cs.ID
AND tcs.TOROLT = 'F'
AND tcs.C_TANULOID = f.ID
AND tcs.C_OSZTALYCSOPORTID = cs.ID
AND (tcs.C_BELEPESDATUM <= @pDatum AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pDatum))
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = nh.C_TANEVID
AND h.C_HETSORSZAMA = nh.C_HETSORSZAMA
AND (ocs.ID IS NOT NULL OR cs.ID IS NOT NULL)
ORDER BY IIF(f.C_NEVSORREND = 'T', f.C_UTONEV + ' ' + f.C_VEZETEKNEV, f.C_VEZETEKNEV + ' ' + f.C_UTONEV)
FOR XML PATH ('')), 1, 1, ''
) AS Hetesek
FROM T_NAPTARIHET_OSSZES nh
WHERE nh.TOROLT = 'F'
AND nh.C_TANEVID = @pTanevId
AND nh.C_HETKEZDONAPJA <= @pDatum AND nh.C_HETUTOLSONAPJA >= @pDatum
";
var ds = GetData(commandText, commandParameterList);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["Hetesek"] != null && row["Hetesek"] != DBNull.Value)
{
return row["Hetesek"].ToString();
}
}
return null;
}
public void DeleteHetesekInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum)
{
var ids = GetHetesIDsInIdoszak(tanevId, osztalyCsoportId, tanuloId, belepesDatum, kilepesDatum);
foreach (var id in ids)
{
Delete(id);
}
}
public void DeleteHetesekNotInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum)
{
var ids = GetHetesIDsNotInIdoszak(tanevId, osztalyCsoportId, tanuloId, belepesDatum, kilepesDatum);
foreach (var id in ids)
{
Delete(id);
}
}
private void Insert(int tanevId, int osztalyCsoportId, int hetSorszam, int tanuloId)
{
var entity = Hetes.GiveAnInstance();
entity.TanevId = tanevId;
entity.OsztalyCsoportId = osztalyCsoportId;
entity.HetSorszama = hetSorszam;
entity.TanuloId = tanuloId;
entity.Insert();
DalHelper.Commit();
}
private void Delete(int id)
{
var entity = Hetes.GiveAnInstance();
entity.LoadByID(id);
entity.Delete();
DalHelper.Commit();
}
private void UnDelete(int id)
{
var entity = Hetes.GiveAnInstance();
entity.LoadByID(id);
entity.Torolt = false;
entity.Update();
DalHelper.Commit();
}
private List<int> GetHetesIDsInFuture(int tanevId, int osztalyCsoportId)
{
List<int> ret = new List<int>();
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
};
string commandText = @"
SELECT
h.ID
FROM T_HETES_OSSZES h
INNER JOIN T_NAPTARIHET_OSSZES nh ON nh.C_HETSORSZAMA = h.C_HETSORSZAMA
AND nh.TOROLT = 'F'
AND nh.C_TANEVID = h.C_TANEVID
AND nh.C_HETKEZDONAPJA > GETDATE()
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = :pTanevId
AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
";
var ds = GetData(commandText, commandParameterList);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["ID"] != null && row["ID"] != DBNull.Value)
{
ret.Add(Convert.ToInt32(row["ID"]));
}
}
return ret;
}
private Dictionary<int, int> GetHetesIDsForDelete(int tanevId, int osztalyCsoportId, int hetSorszam, List<int> selectedTanuloIds)
{
Dictionary<int, int> ret = new Dictionary<int, int>();
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pHetSorszam", hetSorszam),
};
string commandText = @"
SELECT
h.ID
,h.C_TANULOID
FROM T_HETES_OSSZES h
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = :pTanevId
AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND h.C_HETSORSZAMA = :pHetSorszam
";
if (selectedTanuloIds != null && selectedTanuloIds.Count > 0)
{
commandText += $" AND h.C_TANULOID NOT IN ({string.Join(",", selectedTanuloIds)})";
}
var ds = GetData(commandText, commandParameterList);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["ID"] != null && row["ID"] != DBNull.Value)
{
ret.Add(Convert.ToInt32(row["ID"]), Convert.ToInt32(row["C_TANULOID"]));
}
}
return ret;
}
private DataSet GetHetesIDForTanuloWithTorolt(int tanevId, int osztalyCsoportId, int hetSorszam, int tanuloId)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pHetSorszam", hetSorszam),
new CommandParameter("pTanuloId", tanuloId),
};
string commandText = @"
SELECT
h.ID
,h.TOROLT
,h.C_TANULOID
FROM T_HETES_OSSZES h
WHERE h.C_TANEVID = :pTanevId
AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND h.C_HETSORSZAMA = :pHetSorszam
AND h.C_TANULOID = :pTanuloId
";
return GetData(commandText, commandParameterList);
}
private List<int> GetHetesIDsInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum)
{
List<int> ret = new List<int>();
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pTanuloId", tanuloId),
};
if (belepesDatum.HasValue)
{
commandParameterList.Add(new CommandParameter("pBelepesDatum", belepesDatum.Value));
}
else
{
commandParameterList.Add(new CommandParameter("pBelepesDatum", DBNull.Value));
}
if (kilepesDatum.HasValue)
{
commandParameterList.Add(new CommandParameter("pKilepesDatum", kilepesDatum.Value));
}
else
{
commandParameterList.Add(new CommandParameter("pKilepesDatum", DBNull.Value));
}
string commandText = @"
SELECT
h.ID
FROM T_HETES_OSSZES h
INNER JOIN T_NAPTARIHET_OSSZES nh ON nh.C_HETSORSZAMA = h.C_HETSORSZAMA
AND nh.TOROLT = 'F'
AND nh.C_TANEVID = h.C_TANEVID
AND ((nh.C_HETKEZDONAPJA <= :pBelepesDatum AND nh.C_HETUTOLSONAPJA >= :pBelepesDatum) OR nh.C_HETKEZDONAPJA >= :pBelepesDatum)
AND (:pKilepesDatum IS NULL OR nh.C_HETKEZDONAPJA <= :pKilepesDatum)
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = :pTanevId
AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND h.C_TANULOID = :pTanuloId
";
var ds = GetData(commandText, commandParameterList);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["ID"] != null && row["ID"] != DBNull.Value)
{
ret.Add(Convert.ToInt32(row["ID"]));
}
}
return ret;
}
private List<int> GetHetesIDsNotInIdoszak(int tanevId, int osztalyCsoportId, int tanuloId, DateTime? belepesDatum, DateTime? kilepesDatum)
{
List<int> ret = new List<int>();
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pTanuloId", tanuloId),
};
if (belepesDatum.HasValue)
{
commandParameterList.Add(new CommandParameter("pBelepesDatum", belepesDatum.Value));
}
else
{
commandParameterList.Add(new CommandParameter("pBelepesDatum", DBNull.Value));
}
if (kilepesDatum.HasValue)
{
commandParameterList.Add(new CommandParameter("pKilepesDatum", kilepesDatum.Value));
}
else
{
commandParameterList.Add(new CommandParameter("pKilepesDatum", DBNull.Value));
}
string commandText = @"
SELECT
h.ID
FROM T_HETES_OSSZES h
INNER JOIN T_NAPTARIHET_OSSZES nh ON nh.C_HETSORSZAMA = h.C_HETSORSZAMA
AND nh.TOROLT = 'F'
AND nh.C_TANEVID = h.C_TANEVID
AND (nh.C_HETKEZDONAPJA < :pBelepesDatum OR (:pKilepesDatum IS NOT NULL AND nh.C_HETUTOLSONAPJA > :pKilepesDatum))
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = :pTanevId
AND h.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND h.C_TANULOID = :pTanuloId
";
var ds = GetData(commandText, commandParameterList);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["ID"] != null && row["ID"] != DBNull.Value)
{
ret.Add(Convert.ToInt32(row["ID"]));
}
}
return ret;
}
public DataSet GetHetesNevekHetsorszammal(int tanevId, List<int> osztalyCsoportIdList)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId)
};
string commandText = $@"
SELECT
hetes.C_HETSORSZAMA AS Hetsorszama
,felhasznalo.C_NYOMTATASINEV AS TanuloNev
,hetes.C_OSZTALYCSOPORTID AS osztalyCsoportId
,ocs.C_NEV AS OsztalyNev
,ocs.C_FELADATKATEGORIAID FeladatKategoriaId
,felhely.C_OKTATASINEVELESIFELADATTIPUS AS OktNevFeladatId
FROM T_HETES_OSSZES hetes
INNER JOIN T_FELHASZNALO_OSSZES felhasznalo ON felhasznalo.ID = hetes.C_TANULOID
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = hetes.C_OSZTALYCSOPORTID
INNER JOIN T_FELADATELLATASIHELY_OSSZES felhely ON felhely.ID = ocs.C_FELADATELLATASIHELYID
WHERE hetes.TOROLT = 'F'
AND hetes.C_TANEVID = :pTanevId
AND hetes.C_OSZTALYCSOPORTID IN ({string.Join(",", osztalyCsoportIdList)})";
return GetData(commandText, commandParameterList);
}
public DataSet GetHetesAdatokFeljegyzeshez(int tanevId, int osztalyCsoportId, List<int> selectedTanuloIds, bool IsTorolt)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pIsTorolt", IsTorolt.ToSDABoolean())
};
string commandText = $@"
SELECT
felhasznalo.ID AS ID
,felhasznalo.C_NYOMTATASINEV AS Nev
,C_HETKEZDONAPJA AS KezdoNap
,C_HETUTOLSONAPJA AS UtolsoNap
,ocs.C_NEV AS OsztalyCsoportNev
FROM T_FELHASZNALO_OSSZES felhasznalo
INNER JOIN T_HETES_OSSZES hetes ON hetes.C_TANULOID = felhasznalo.ID
INNER JOIN T_NAPTARIHET naptarihet ON naptarihet.C_HETSORSZAMA = hetes.C_HETSORSZAMA
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = hetes.C_OSZTALYCSOPORTID
WHERE
felhasznalo.TOROLT = 'F'
AND felhasznalo.C_TANEVID = :pTanevId
AND hetes.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND hetes.C_TANULOID IN ({string.Join(",", selectedTanuloIds)})
AND hetes.TOROLT = :pIsTorolt";
return GetData(commandText, commandParameterList);
}
}
}