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

460 lines
15 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.Core;
using Kreta.DataAccess.Interfaces;
using Kreta.DataAccessManual.Interfaces;
using Kreta.DataAccessManual.ParameterClasses;
using Kreta.DataAccessManual.Util;
using Kreta.Enums;
using Kreta.Enums.ManualEnums;
using Kreta.Framework;
using Kreta.Framework.Util;
using SDA.DataProvider;
using SDA.Kreta.Entities;
namespace Kreta.DataAccessManual
{
internal class OraSorszamozasHalmazDAL : DataAccessBase, IOraSorszamozasHalmazDAL
{
public OraSorszamozasHalmazDAL(DalHandler handler) : base(handler)
{ }
public OraSorszamozasHalmazDAL(DalHandler handler, GridParameters parameters) : base(handler, parameters)
{ }
public bool NevExists(int tanevId, string nev, int id)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add("pTanevId", tanevId);
command.Parameters.Add("pNev", nev);
command.Parameters.Add("pId", id);
command.CommandText = @"
IF EXISTS
(
SELECT 1
FROM T_ORASORSZAMOZASHALMAZ_OSSZES h
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = :pTanevId
AND h.C_NEV = :pNev
AND h.ID <> :pId
)
SELECT 1
ELSE
SELECT 0
";
return Convert.ToBoolean(command.ExecuteScalar());
}
}
public bool OsszerendelesExists(int tanevId, int osztalyCsoportId, int tantargyId, int halmazId, List<int> deletedOsszerendeslIds)
{
var deletedOsszerendelesIdsList = deletedOsszerendeslIds.Count > 0 ? string.Join<int>(",", deletedOsszerendeslIds) : "-1";
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add("pTanevId", tanevId);
command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId);
command.Parameters.Add("pTantargyId", tantargyId);
command.Parameters.Add("pHalmazId", halmazId);
command.CommandText = $@"
IF EXISTS
(
SELECT 1
FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r
WHERE r.TOROLT = 'F'
AND r.C_TANEVID = :pTanevId
AND r.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND r.C_TANTARGYID = :pTantargyId
AND r.C_ORASORSZAMOZASHALMAZID <> :pHalmazId
AND r.ID NOT IN ({deletedOsszerendelesIdsList})
)
SELECT 1
ELSE
SELECT 0
";
return Convert.ToBoolean(command.ExecuteScalar());
}
}
public IOraSorszamozasHalmaz Get(int id)
{
var entity = OraSorszamozasHalmaz.GiveAnInstance();
entity.LoadByID(id);
return entity;
}
public DataSet GetAllPaged(int tanevId, OraSorszamozasHalmazSearchPCO pco)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
};
string commandText = @"
SELECT
h.ID AS ID
,h.C_NEV AS HalmazNeve
FROM T_ORASORSZAMOZASHALMAZ_OSSZES h
";
if (pco.SearchOsztalyCsoportId.HasValue || pco.SearchTantargyId.HasValue)
{
commandText += @" INNER JOIN T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r ON h.ID = r.C_ORASORSZAMOZASHALMAZID AND r.TOROLT = 'F'";
if (pco.SearchOsztalyCsoportId.HasValue)
{
commandText += @" AND r.C_OSZTALYCSOPORTID = :pOsztalyCsoportId";
commandParameterList.Add(new CommandParameter("pOsztalyCsoportId", pco.SearchOsztalyCsoportId.Value));
}
if (pco.SearchTantargyId.HasValue)
{
commandText += @" AND r.C_TANTARGYID = :pTantargyId";
commandParameterList.Add(new CommandParameter("pTantargyId", pco.SearchTantargyId.Value));
}
}
commandText += @"
WHERE h.TOROLT = 'F'
AND h.C_TANEVID = :pTanevId
";
if (!string.IsNullOrWhiteSpace(pco.SearchHalmazNeve))
{
commandText += @" AND h.C_NEV LIKE '%' + :pHalmazNeve + '%'";
commandParameterList.Add(new CommandParameter("pHalmazNeve", pco.SearchHalmazNeve));
}
return GetData(commandText, commandParameterList);
}
public DataSet GetOsszerendelesek(int halmazId, bool forDetail = false)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pHalmazId", halmazId),
};
string commandText = $@"
SELECT
r.ID AS ID
,r.C_OSZTALYCSOPORTID AS {(forDetail ? "Detail" : "")}OsztalyCsoportId
,o.C_NEV AS {(forDetail ? "Detail" : "")}OsztalyCsoport
,r.C_TANTARGYID AS {(forDetail ? "Detail" : "")}TantargyId
,t.C_NEV AS {(forDetail ? "Detail" : "")}Tantargy
FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r
INNER JOIN T_OSZTALYCSOPORT_OSSZES o ON r.C_OSZTALYCSOPORTID = o.ID
AND o.TOROLT = 'F'
INNER JOIN T_TANTARGY_OSSZES t ON r.C_TANTARGYID = t.ID
AND t.TOROLT = 'F'
WHERE r.TOROLT = 'F'
AND r.C_ORASORSZAMOZASHALMAZID = :pHalmazId
";
return GetData(commandText, commandParameterList);
}
public void Delete(int id, int intezmenyId, int tanevId)
{
var entity = OraSorszamozasHalmaz.GiveAnInstance();
entity.LoadByID(id);
entity.OraSorszamozasHalmazOsszerendelesList.DeleteAll();
entity.Delete();
DalHelper.TanitasiOra().UpdateTanitasiOraEvesSorszamTeljesTanev(intezmenyId, tanevId);
DalHelper.Commit();
}
public void DeleteOsszerendeles(int osszerendelesId, int intezmenyId, int tanevId, bool updateTanoraEvesSorszam = true)
{
var ids = GetHalmazokForOsszerendeles(osszerendelesId);
foreach (var id in ids)
{
ResetSorszamozasKezodErtek(id);
}
DalHelper.OraSorszamozasHalmazOsszerendeles().Delete(osszerendelesId);
if (updateTanoraEvesSorszam)
{
DalHelper.TanitasiOra().UpdateTanitasiOraEvesSorszamTeljesTanev(intezmenyId, tanevId);
}
DalHelper.Commit();
}
public int Save(int tanevId, int id, string nev, bool kozosOraSorszamozasElteroTanarnal, int tipus, int? kezdoertek)
{
var entity = OraSorszamozasHalmaz.GiveAnInstance();
if (id.IsEntityId())
{
entity.LoadByID(id);
}
entity.Nev = nev;
entity.KozosOraSorszamozasElteroTanarnal = kozosOraSorszamozasElteroTanarnal;
entity.Tipus = tipus;
entity.Kezdoertek = kezdoertek;
entity.TanevId = tanevId;
if (id.IsEntityId())
{
entity.FullUpdate();
}
else
{
entity.Insert();
}
DalHelper.Commit();
return entity.ID;
}
public int SaveOsszerendeles(int tanevId, int osztalyCsoportId, int tantargyId, int halmazId)
{
var ds = GetOsszerendelesIDWithTorolt(tanevId, osztalyCsoportId, tantargyId);
int? osszerendelesId = null;
bool torolt = false;
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
var row = ds.Tables[0].Rows[0];
if (row["ID"] != null && row["ID"] != DBNull.Value)
{
osszerendelesId = Convert.ToInt32(row["ID"]);
}
if (row["TOROLT"] != null && row["TOROLT"] != DBNull.Value)
{
torolt = row["TOROLT"].ToString() == "T";
}
}
if (!osszerendelesId.IsEntityId())
{
osszerendelesId = InsertOsszerendeles(tanevId, osztalyCsoportId, tantargyId, halmazId);
}
else
{
if (torolt)
{
UnDeleteOsszerendeles(osszerendelesId.Value, halmazId);
}
}
return osszerendelesId.Value;
}
public void DeleteOsszerendelesek(int halmazId, IEnumerable<int> idsInGrid, int intezmenyId, int tanevId)
{
var idsInDB = GetOsszerendelesekID(halmazId);
var torlendoIds = idsInDB.Except(idsInGrid).Distinct();
foreach (var id in torlendoIds)
{
DeleteOsszerendeles(id, tanevId, intezmenyId, updateTanoraEvesSorszam: false);
}
}
public void SetHalmazOsszerendeles(int halmazId, int osszerendelesId)
{
var entity = OraSorszamozasHalmaz.GiveAnInstance();
entity.LoadByID(halmazId);
entity.OraSorszamozasHalmazOsszerendelesId = osszerendelesId;
entity.FullUpdate();
DalHelper.Commit();
}
public List<int> GetEvesOraszamForTantargyAndOsztaly(int tanevId, int itezmenyId, int osztalyCsoportId, int tantargyId)
{
List<int> ret = new List<int>();
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "uspGetEvesOraszamForTantargyAndOsztaly";
command.Parameters.Add("pTanevId", tanevId);
command.Parameters.Add("pIntezmenyId", itezmenyId);
command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId);
command.Parameters.Add("pTantargyId", tantargyId);
command.Parameters.Add("pBeallitasTanarSzamit", (int)RendszerBeallitasTipusEnum.TanitasiOra_sorszamozas_mod);
command.Parameters.Add("pBeallitasOsztalybontasEgybe", (int)RendszerBeallitasTipusEnum.tanitasiOra_sorszamozas_csoportbontas);
var ds = new DataSet();
using (var adapter = new SDADataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(ds);
}
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row["EvesOraszam"] != null && row["EvesOraszam"] != DBNull.Value)
{
ret.Add(Convert.ToInt32(row["EvesOraszam"]));
}
}
}
return ret;
}
private int InsertOsszerendeles(int tanevId, int osztalyCsoportId, int tantargyId, int halmazId)
{
var entity = OraSorszamozasHalmazOsszerendeles.GiveAnInstance();
entity.OsztalyCsoportId = osztalyCsoportId;
entity.TantargyId = tantargyId;
entity.OraSorszamozasHalmazId = halmazId;
entity.TanevId = tanevId;
entity.Insert();
DalHelper.Commit();
return entity.ID;
}
private void UnDeleteOsszerendeles(int id, int halmazId)
{
var entity = OraSorszamozasHalmazOsszerendeles.GiveAnInstance();
entity.LoadByID(id);
entity.Torolt = false;
entity.OraSorszamozasHalmazId = halmazId;
entity.FullUpdate();
DalHelper.Commit();
}
private List<int> GetHalmazokForOsszerendeles(int osszerendelesId)
{
List<int> ret = new List<int>();
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pOsszerendelesId", osszerendelesId),
};
string commandText = @"
SELECT
h.ID AS ID
FROM T_ORASORSZAMOZASHALMAZ_OSSZES h
WHERE h.C_ORASORSZAMOZASHALMAZOSSZEREN = :pOsszerendelesId
";
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 void ResetSorszamozasKezodErtek(int id)
{
var entity = OraSorszamozasHalmaz.GiveAnInstance();
entity.LoadByID(id);
entity.OraSorszamozasHalmazOsszerendelesId = -1;
entity.Tipus = (int)SorszamozasKezdoErtekenekBeallitasa.SorszamozasKezdoErtekeKezzelMegadva;
entity.FullUpdate();
DalHelper.Commit();
}
private DataSet GetOsszerendelesIDWithTorolt(int tanevId, int osztalyCsoportId, int tantargyId)
{
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pTanevId", tanevId),
new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),
new CommandParameter("pTantargyId", tantargyId),
};
string commandText = @"
SELECT
r.ID
,r.TOROLT
FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r
WHERE r.C_TANEVID = :pTanevId
AND r.C_OSZTALYCSOPORTID = :pOsztalyCsoportId
AND r.C_TANTARGYID = :pTantargyId
";
return GetData(commandText, commandParameterList);
}
private List<int> GetOsszerendelesekID(int halmazId)
{
List<int> ret = new List<int>();
var commandParameterList = new List<CommandParameter>
{
new CommandParameter("pHalmazId", halmazId),
};
string commandText = $@"
SELECT
r.ID AS ID
FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES r
INNER JOIN T_OSZTALYCSOPORT_OSSZES o ON r.C_OSZTALYCSOPORTID = o.ID
AND o.TOROLT = 'F'
INNER JOIN T_TANTARGY_OSSZES t ON r.C_TANTARGYID = t.ID
AND t.TOROLT = 'F'
WHERE r.TOROLT = 'F'
AND r.C_ORASORSZAMOZASHALMAZID = :pHalmazId
";
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;
}
}
}