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

520 lines
22 KiB
C#

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Kreta.DataAccess.Interfaces;
using Kreta.DataAccessManual.Interfaces;
using Kreta.DataAccessManual.Util;
using Kreta.Enums;
using Kreta.Framework;
using Kreta.Framework.Util;
using SDA.DataProvider;
using SDA.Kreta.Entities;
namespace Kreta.DataAccessManual
{
internal class NaptariNapDal : DataAccessBase, INaptariNapDal
{
public NaptariNapDal(DalHandler handler) : base(handler)
{
}
public NaptariNapDal(DalHandler handler, GridParameters parameters) : base(handler, parameters)
{
}
public bool IsTanitasiNap(DateTime datum, List<int> tanitasiNapIdList, int tanevId)
{
var filter = " AND TOROLT = 'F' AND C_NAPDATUMA = :pNapDatuma AND C_TANEVID = :pTanevId";
var commandParameters = new Dictionary<string, object>
{
{ "pNapDatuma", datum }, { "pTanevId", tanevId }
};
var naptariNap = NaptariNap.LoadWithFilter(filter, commandParameters).SingleOrDefault();
return naptariNap?.NapTipusa != null && tanitasiNapIdList.Contains(naptariNap.NapTipusa.Value);
}
public DataSet GetNaplozottOrakTanarai(int? naptariNapId)
{
if (!naptariNapId.HasValue)
{ return null; }
const string commandText = @"
SELECT
DISTINCT T_FELHASZNALO_OSSZES.ID ID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV Nev
FROM T_TANITASIORA_OSSZES
LEFT JOIN T_FOGLALKOZAS_OSSZES on T_TANITASIORA_OSSZES.C_FOGLALKOZASID = T_FOGLALKOZAS_OSSZES.ID
INNER JOIN T_FELHASZNALO_OSSZES on
IIF(T_FOGLALKOZAS_OSSZES.C_TANARID IS NOT NULL,T_FOGLALKOZAS_OSSZES.C_TANARID, T_TANITASIORA_OSSZES.C_ORATULAJDONOSID) = T_FELHASZNALO_OSSZES.ID
WHERE T_TANITASIORA_OSSZES.C_NAPTARINAPID = :pNaptariNapID
AND T_TANITASIORA_OSSZES.TOROLT = 'F'
AND T_TANITASIORA_OSSZES.C_MEGTARTOTT = 'T'
";
var paramList = new List<CommandParameter> { new CommandParameter("pNaptariNapID", naptariNapId.Value) };
var ds = GetData(commandText, parameters: paramList);
return ds;
}
public DateTime? GetDatumElottiUgyanolyanNapDatuma(DateTime date, bool mindenhet)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add("pDate", date.Date);
command.Parameters.Add("pMindenhet", mindenhet);
command.CommandText = @"
SELECT
TOP 1 nnPrev.C_NAPDATUMA
FROM T_NAPTARINAP nnPrev
INNER JOIN T_NAPTARINAP nnAkt ON
nnAkt.C_HETNAPJA=nnPrev.C_HETNAPJA
AND (:pMindenhet=1 OR nnPrev.C_HETIREND=nnAkt.C_HETIREND)
AND nnAkt.C_NAPDATUMA=:pDate
AND nnPrev.C_NAPDATUMA<nnAkt.C_NAPDATUMA
ORDER BY nnPrev.C_NAPDATUMA DESC";
var result = command.ExecuteScalar();
if (result != null)
{
return Convert.ToDateTime(result);
}
return null;
}
}
public DateTime? GetDatumUtaniUgyanolyanNapDatuma(DateTime date, bool mindenhet)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add("pDate", date.Date);
command.Parameters.Add("pMindenhet", mindenhet);
command.CommandText = @"
SELECT
TOP 1 nnKov.C_NAPDATUMA
FROM T_NAPTARINAP nnKov
INNER JOIN T_NAPTARINAP nnAkt ON
nnAkt.C_HETNAPJA=nnKov.C_HETNAPJA
AND (:pMindenhet=1 OR nnKov.C_HETIREND=nnAkt.C_HETIREND)
AND nnAkt.C_NAPDATUMA=:pDate
AND nnKov.C_NAPDATUMA>nnAkt.C_NAPDATUMA
ORDER BY nnKov.C_NAPDATUMA";
var result = command.ExecuteScalar();
if (result != null)
{
return Convert.ToDateTime(result);
}
return null;
}
}
public List<int> GetNaptariNapIdsIntervallumonBelul(DateTime kezd, DateTime veg)
{
var pList = new List<CommandParameter>();
pList.Add(new CommandParameter("pKezd", kezd));
pList.Add(new CommandParameter("pVeg", veg));
const string command = @"select
ID
from T_NAPTARINAP
where
T_NAPTARINAP.TOROLT = 'F' and
T_NAPTARINAP.C_NAPDATUMA BETWEEN :pKezd and :pVeg";
var ds = this.GetData(command, pList);
return ds.Tables[0].AsEnumerable().Select(x => x.Field<int>("ID")).ToList();
}
/// INFO @DevKornel: Mobil használja
public int? GetNaptariNapId(DateTime datum)
{
int? ret = null;
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add("pDatum", datum);
command.CommandText = @"
SELECT
ID
FROM
T_NAPTARINAP_OSSZES
WHERE
T_NAPTARINAP_OSSZES.C_NAPDATUMA = :pDatum
";
var result = command.ExecuteScalar();
if (result != null && result != DBNull.Value)
{
ret = Convert.ToInt32(result);
}
}
return ret;
}
public INaptariNap Get()
{
return NaptariNap.GiveAnInstance();
}
public INaptariNap Get(int id)
{
var entity = NaptariNap.GiveAnInstance();
entity.LoadByID(id);
return entity;
}
public void FullUpdate(INaptariNap dto)
{
var entity = dto as NaptariNap;
entity.FullUpdate();
DalHelper.Commit();
}
public void Update(INaptariNap dto)
{
var entity = dto as NaptariNap;
entity.Update();
DalHelper.Commit();
}
public void Insert(INaptariNap dto)
{
var entity = dto as NaptariNap;
entity.Insert();
dto.ID = entity.ID;
DalHelper.Commit();
}
public void Delete(int id)
{
var entity = NaptariNap.GiveAnInstance();
entity.LoadByID(id);
entity.Delete();
DalHelper.Commit();
}
public void UpdateNaptariNapokForOsszefuggoSzakGyak(DateTime newSzakGyakKezdoDatum, DateTime newSzakGyakVegDatum, int tanevId)
{
UpdateAlapOrarendiNap(newSzakGyakKezdoDatum, newSzakGyakVegDatum, tanevId);
UpdateOrarendiNap(newSzakGyakKezdoDatum, newSzakGyakVegDatum, tanevId);
SetBackAlapOrarendiNap(newSzakGyakKezdoDatum, newSzakGyakVegDatum, tanevId);
SetBackOrarendiNap(newSzakGyakKezdoDatum, newSzakGyakVegDatum, tanevId);
}
private void SetBackOrarendiNap(DateTime newSzakGyakKezdoDatum, DateTime newSzakGyakVegDatum, int tanevId)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add(nameof(newSzakGyakKezdoDatum), newSzakGyakKezdoDatum);
command.Parameters.Add(nameof(newSzakGyakVegDatum), newSzakGyakVegDatum);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Hetfo), (int)HetNapjaTipusEnum.Hetfo);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Kedd), (int)HetNapjaTipusEnum.Kedd);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Szerda), (int)HetNapjaTipusEnum.Szerda);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Csutortok), (int)HetNapjaTipusEnum.Csutortok);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Pentek), (int)HetNapjaTipusEnum.Pentek);
command.Parameters.Add(nameof(tanevId), tanevId);
command.CommandText = $@"
UPDATE n
SET n.C_ORARENDINAP = 'F'
FROM T_NAPTARINAP_OSSZES n
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = n.C_NAPDATUMA AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND tr.TOROLT = 'F' AND tr.C_TANEVID = n.C_TANEVID
INNER JOIN T_TANEV_OSSZES t ON t.id = n.C_TANEVID AND t.TOROLT = 'F'
WHERE (n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Hetfo)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Kedd)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Szerda)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Csutortok)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Pentek)})
AND C_NAPDATUMA > t.C_UTOLSOTANITASINAP
AND (C_NAPDATUMA < @{nameof(newSzakGyakKezdoDatum)} OR C_NAPDATUMA > @{nameof(newSzakGyakVegDatum)})
AND tr.ID IS NULL
AND n.TOROLT = 'F'
AND n.C_TANEVID = @{nameof(tanevId)}
";
var result = command.ExecuteNonQuery();
}
}
private void SetBackAlapOrarendiNap(DateTime newSzakGyakKezdoDatum, DateTime newSzakGyakVegDatum, int tanevId)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add(nameof(newSzakGyakKezdoDatum), newSzakGyakKezdoDatum);
command.Parameters.Add(nameof(newSzakGyakVegDatum), newSzakGyakVegDatum);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Hetfo), (int)HetNapjaTipusEnum.Hetfo);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Kedd), (int)HetNapjaTipusEnum.Kedd);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Szerda), (int)HetNapjaTipusEnum.Szerda);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Csutortok), (int)HetNapjaTipusEnum.Csutortok);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Pentek), (int)HetNapjaTipusEnum.Pentek);
command.Parameters.Add(nameof(tanevId), tanevId);
command.CommandText = $@"
UPDATE n
SET n.C_ALAPORARENDINAP = 'F'
FROM T_NAPTARINAP_OSSZES n
INNER JOIN T_TANEV_OSSZES t ON t.id = n.C_TANEVID AND t.TOROLT = 'F'
WHERE (n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Hetfo)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Kedd)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Szerda)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Csutortok)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Pentek)})
AND C_NAPDATUMA > t.C_UTOLSOTANITASINAP
AND (C_NAPDATUMA < @{nameof(newSzakGyakKezdoDatum)} OR C_NAPDATUMA > @{nameof(newSzakGyakVegDatum)})
AND n.TOROLT = 'F'
AND n.C_TANEVID = @{nameof(tanevId)}
";
var result = command.ExecuteNonQuery();
}
}
private void UpdateAlapOrarendiNap(DateTime newSzakGyakKezdoDatum, DateTime newSzakGyakVegDatum, int tanevId)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add(nameof(newSzakGyakKezdoDatum), newSzakGyakKezdoDatum);
command.Parameters.Add(nameof(newSzakGyakVegDatum), newSzakGyakVegDatum);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Hetfo), (int)HetNapjaTipusEnum.Hetfo);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Kedd), (int)HetNapjaTipusEnum.Kedd);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Szerda), (int)HetNapjaTipusEnum.Szerda);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Csutortok), (int)HetNapjaTipusEnum.Csutortok);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Pentek), (int)HetNapjaTipusEnum.Pentek);
command.Parameters.Add(nameof(tanevId), tanevId);
command.CommandText = $@"
UPDATE n
SET n.C_ALAPORARENDINAP = 'T'
FROM T_NAPTARINAP_OSSZES n
WHERE (n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Hetfo)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Kedd)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Szerda)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Csutortok)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Pentek)})
AND C_NAPDATUMA >= @{nameof(newSzakGyakKezdoDatum)}
AND C_NAPDATUMA <= @{nameof(newSzakGyakVegDatum)}
AND n.TOROLT = 'F'
AND n.C_TANEVID = @{nameof(tanevId)}
";
var result = command.ExecuteNonQuery();
}
}
private void UpdateOrarendiNap(DateTime newSzakGyakKezdoDatum, DateTime newSzakGyakVegDatum, int tanevId)
{
using (var command = new SDACommand())
{
command.Connection = UserContext.Instance.SDAConnection;
command.Transaction = UserContext.Instance.SDATransaction;
command.Parameters.Add(nameof(newSzakGyakKezdoDatum), newSzakGyakKezdoDatum);
command.Parameters.Add(nameof(newSzakGyakVegDatum), newSzakGyakVegDatum);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Hetfo), (int)HetNapjaTipusEnum.Hetfo);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Kedd), (int)HetNapjaTipusEnum.Kedd);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Szerda), (int)HetNapjaTipusEnum.Szerda);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Csutortok), (int)HetNapjaTipusEnum.Csutortok);
command.Parameters.Add(nameof(HetNapjaTipusEnum.Pentek), (int)HetNapjaTipusEnum.Pentek);
command.Parameters.Add(nameof(tanevId), tanevId);
command.CommandText = $@"
UPDATE n
SET n.C_ORARENDINAP = 'T'
FROM T_NAPTARINAP_OSSZES n
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = n.C_NAPDATUMA AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND tr.TOROLT = 'F' AND tr.C_TANEVID = n.C_TANEVID
WHERE (n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Hetfo)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Kedd)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Szerda)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Csutortok)} OR n.C_ALAPHETNAPJA = @{nameof(HetNapjaTipusEnum.Pentek)})
AND n.C_NAPDATUMA >= @{nameof(newSzakGyakKezdoDatum)}
AND n.C_NAPDATUMA <= @{nameof(newSzakGyakVegDatum)}
AND n.TOROLT = 'F'
AND tr.ID IS NULL
AND n.C_TANEVID = @{nameof(tanevId)}
";
var result = command.ExecuteNonQuery();
}
}
public DataSet GetNaptariNapData(DateTime datum, int tanevId)
{
const string commandText = @"
SELECT
nn.ID
,nn.C_HETIREND as Hetirend
,nn.C_HETNAPJA as Hetnapja
,nn.C_ALAPHETIREND as AlapHetirend
,nn.C_ALAPHETNAPJA as AlapHetnapja
FROM T_NAPTARINAP_OSSZES nn
WHERE
nn.C_NAPDATUMA = :pDatum
AND nn.C_TANEVID = :pTanevId
";
var paramList = new List<CommandParameter> {
new CommandParameter("pDatum", datum),
new CommandParameter("pTanevId", tanevId)
};
var ds = GetData(commandText, parameters: paramList);
return ds;
}
public bool GetIsEgyediNapByDate(DateTime datum, int tanevId)
{
using (var command = UserContext.Instance.SDAConnection.CreateCommand())
{
command.Transaction = UserContext.Instance.SDATransaction;
command.CommandText = @"
SELECT
tr.C_EGYEDINAP
FROM T_TANEVRENDJE tr
WHERE
tr.C_DATUM = :pDatum
AND tr.C_TANEVID = :pTanevId
AND tr.TOROLT = 'F'
";
command.Parameters.Add("pDatum", datum);
command.Parameters.Add("pTanevId", tanevId);
var result = command.ExecuteScalar();
return result != null && result.ToString() == "T";
}
}
public bool GetIsEgyediNapByDateAndOsztalyCsoportId(DateTime datum, int tanevId, int osztalyCsoportId)
{
using (SDACommand sdaCommand = UserContext.Instance.SDAConnection.CreateCommand())
{
sdaCommand.Transaction = UserContext.Instance.SDATransaction;
sdaCommand.CommandText = @"
SELECT TOP (1) C_EGYEDINAP
FROM (
SELECT 1 AS rn, tr.C_EGYEDINAP
FROM T_TANEVRENDJE_OSSZES tr
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.C_TANEVID = tr.C_TANEVID AND ocs.TOROLT = 'F' AND ocs.ID = ocstr.C_OSZTALYCSOPORTID
WHERE tr.C_TANEVID = :pTanevId
AND tr.TOROLT = 'F'
AND tr.C_DATUM = :pDatum
AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'F'
AND ocs.ID = :pOsztalyCsoportId
UNION ALL
SELECT 2 AS rn, tr.C_EGYEDINAP
FROM T_TANEVRENDJE_OSSZES tr
WHERE tr.C_TANEVID = :pTanevId
AND tr.TOROLT = 'F'
AND tr.C_DATUM = :pDatum
AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T'
UNION ALL
SELECT 3 AS rn, 'F'
) x
ORDER BY rn
";
sdaCommand.Parameters.Add("pTanevId", tanevId);
sdaCommand.Parameters.Add("pDatum", datum);
sdaCommand.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId);
var result = sdaCommand.ExecuteScalar();
return result != null && result.ToString() == "T";
}
}
public DataSet GetIsEgyediNapByDateAndOsztalyCsoportNev(DateTime datum, int tanevId, string osztalyCsoportNev)
{
using (SDACommand sdaCommand = UserContext.Instance.SDAConnection.CreateCommand())
{
sdaCommand.Transaction = UserContext.Instance.SDATransaction;
sdaCommand.CommandText = $@"
SELECT TOP (1) IsEgyediNap, HetNapjaTipusId
FROM (
SELECT 1 AS rn, tr.C_EGYEDINAP AS IsEgyediNap, C_HETNAPJA AS HetNapjaTipusId
FROM T_TANEVRENDJE_OSSZES tr
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.C_TANEVID = tr.C_TANEVID AND ocs.TOROLT = 'F' AND ocs.ID = ocstr.C_OSZTALYCSOPORTID
WHERE tr.C_TANEVID = :pTanevId
AND tr.TOROLT = 'F'
AND tr.C_DATUM = :pDatum
AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'F'
--NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
-- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
AND REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(:pOsztalyCsoportNev)
UNION ALL
SELECT 2 AS rn, tr.C_EGYEDINAP AS IsEgyediNap, C_HETNAPJA AS HetNapjaTipusId
FROM T_TANEVRENDJE_OSSZES tr
WHERE tr.C_TANEVID = :pTanevId
AND tr.TOROLT = 'F'
AND tr.C_DATUM = :pDatum
AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T'
UNION ALL
SELECT 3 AS rn, 'F', NULL
) x
ORDER BY rn
";
sdaCommand.Parameters.Add("pTanevId", tanevId);
sdaCommand.Parameters.Add("pDatum", datum);
sdaCommand.Parameters.Add("pOsztalyCsoportNev", osztalyCsoportNev);
var dataSet = new DataSet();
using (var adapter = new SDADataAdapter())
{
adapter.SelectCommand = sdaCommand;
adapter.Fill(dataSet);
}
return dataSet;
}
}
public DataSet GetNapTipusData(int naptipus, int tanevId)
{
const string commandText = @"
SELECT
C_ISTANORAI as IsTanorai
,C_ISTANORANKIVULI as IsTanorankivuli
FROM T_NAPTIPUS_OSSZES
WHERE
ID = :pNaptipus
AND C_ALTANEVID = :pTanevId
";
var paramList = new List<CommandParameter> {
new CommandParameter("pNaptipus", naptipus),
new CommandParameter("pTanevId", tanevId)
};
var ds = GetData(commandText, parameters: paramList, booleanColumns: "IsTanorai,IsTanorankivuli");
return ds;
}
}
}