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 tanitasiNapIdList, int tanevId) { var filter = " AND TOROLT = 'F' AND C_NAPDATUMA = :pNapDatuma AND C_TANEVID = :pTanevId"; var commandParameters = new Dictionary { { "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 { 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_NAPDATUMAnnAkt.C_NAPDATUMA ORDER BY nnKov.C_NAPDATUMA"; var result = command.ExecuteScalar(); if (result != null) { return Convert.ToDateTime(result); } return null; } } public List GetNaptariNapIdsIntervallumonBelul(DateTime kezd, DateTime veg) { var pList = new List(); 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("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 { 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 { new CommandParameter("pNaptipus", naptipus), new CommandParameter("pTanevId", tanevId) }; var ds = GetData(commandText, parameters: paramList, booleanColumns: "IsTanorai,IsTanorankivuli"); return ds; } } }