using System; using System.Collections.Generic; using System.Data; using System.Text; using Kreta.Core; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Framework; using Kreta.Framework.Util; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class TanmenetDal : DataAccessBase, ITanmenetDal { public TanmenetDal(DalHandler handler) : base(handler) { } public TanmenetDal(DalHandler handler, GridParameters parameters) : base(handler, parameters) { } public DataSet GetTemakByTargyEsOsztCsop(int tantargyId = -1, int osztalyCsoportId = -1, int tanarID = -1) { var parameters = new List { new CommandParameter("pTantargyId", tantargyId), new CommandParameter("pOsztalyCsoportId", osztalyCsoportId),new CommandParameter("pTantarId", tanarID) }; var command = $@" SELECT ID ID, C_TEMA Tema, C_ORASZAM Sorsz FROM T_TANMENET WHERE TOROLT = 'F' {(tantargyId > 0 ? "AND C_TANTARGYID = :pTantargyId " : string.Empty)} {(osztalyCsoportId > 0 ? "AND C_OSZTALYCSOPORTID = :pOsztalyCsoportId" : string.Empty)} {(tanarID > 0 ? "AND C_FELTOLTOID = :pTantarId " : string.Empty)}"; var ds = GetData(command, parameters); return ds; } public DataSet GetTanmenetek(TanmenetKeresesePCO pco) { var parameters = new List(); var whereTanmenet = new StringBuilder(); parameters.Add(new CommandParameter("pAlkalmazottID", pco.AlkalmazottID)); if (pco.OsztalyID.HasValue && pco.OsztalyID.Value > 0) { parameters.Add(new CommandParameter("pOsztalyID", pco.OsztalyID)); whereTanmenet.Append(" AND tanmenet.C_OSZTALYCSOPORTID = :pOsztalyID"); } if (pco.TantargyID.HasValue && pco.TantargyID.Value > 0) { parameters.Add(new CommandParameter("pTantargyID", pco.TantargyID)); whereTanmenet.Append(" AND tanmenet.C_TANTARGYID = :pTantargyID"); } string commandText = $@" SELECT CAST(tantargy.ID AS VARCHAR) + CAST(osztalycsoport.ID AS VARCHAR) ID, tantargy.C_NEV TantargyNev, osztalycsoport.C_NEV OsztalyCsoportNev, MAX(szurtTanmenet.C_ORASZAM) OraszamMax, COUNT(szurtTanmenet.ID) OraszamCount, szurtTanmenet.C_FELTOLTOID FeltoltoID, tantargy.ID TantargyID, osztalycsoport.ID OsztalyCsoportID, foglalkozas.ID FoglalkozasID FROM ( SELECT * FROM T_TANMENET tanmenet WHERE tanmenet.TOROLT = 'F' AND tanmenet.C_FELTOLTOID = :pAlkalmazottID {whereTanmenet} ) szurtTanmenet LEFT JOIN T_TANTARGY tantargy ON tantargy.ID = szurtTanmenet.C_TANTARGYID LEFT JOIN T_OSZTALYCSOPORT osztalycsoport ON osztalycsoport.ID = szurtTanmenet.C_OSZTALYCSOPORTID LEFT JOIN T_FOGLALKOZAS foglalkozas ON foglalkozas.C_TANTARGYID = tantargy.ID AND foglalkozas.C_OSZTALYCSOPORTID = osztalycsoport.ID AND foglalkozas.C_TANARID = szurtTanmenet.C_FELTOLTOID WHERE foglalkozas.C_TANARID = :pAlkalmazottID GROUP BY tantargy.C_NEV, osztalycsoport.C_NEV, szurtTanmenet.C_FELTOLTOID, tantargy.ID, osztalycsoport.ID, foglalkozas.ID"; DataSet ds = GetData(commandText, parameters); return ds; } /// INFO @DevKornel: Mobil használja public DataSet GetTanmenetek(int tantargyId, int osztalyId, int? userId = null, int? foglalkozasId = null, Guid? userIdpUniqueId = null) { List parameters = new List { new CommandParameter("pOsztalyId", osztalyId), new CommandParameter("pTantargyId", tantargyId) }; StringBuilder command = new StringBuilder(@" SELECT t.ID ID, t.C_ORASZAM Oraszam, t.C_NEV Nev, t.C_ROVIDNEV RovidNev, t.C_TEMA Tema, t.C_MEGJEGYZES Megjegyzes FROM T_TANMENET t INNER JOIN T_FOGLALKOZAS f on t.C_TANTARGYID = f.C_TANTARGYID AND t.C_OSZTALYCSOPORTID = f.C_OSZTALYCSOPORTID"); if (userIdpUniqueId.HasValue) { parameters.Add(new CommandParameter("pUserIdpUniqueId", userIdpUniqueId)); command.AppendFormat(@" INNER JOIN T_FELHASZNALO felh on felh.C_IDPEGYEDIAZONOSITO = :pUserIdpUniqueId"); } command.AppendFormat(@" WHERE t.C_TANTARGYID = :pTantargyId AND t.C_OSZTALYCSOPORTID = :pOsztalyId"); if (userId.HasValue) { parameters.Add(new CommandParameter("pFeltoltoId", userId)); command.AppendFormat(@" AND f.C_TANARID = :pFeltoltoId"); command.AppendFormat(@" AND t.C_FELTOLTOID = :pFeltoltoId"); } if (foglalkozasId.HasValue) { parameters.Add(new CommandParameter("pFoglalkozasId", foglalkozasId)); command.AppendFormat(@" AND f.ID = :pFoglalkozasId"); } if (userIdpUniqueId.HasValue) { command.AppendFormat(@" AND felh.ID = t.C_FELTOLTOID"); command.AppendFormat(@" AND felh.ID = f.C_TANARID"); } return GetData(command.ToString(), parameters); } public DataSet GetTantargyTanmenetei(int tantargyId, int tanevId) { var parameters = new List { new CommandParameter("pTantargyID", tantargyId), new CommandParameter("pTanevId", tanevId) }; var commandText = @" SELECT T_TANMENET_OSSZES.ID ID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV Tanar, T_OSZTALYCSOPORT_OSSZES.C_NEV OsztalyCsoport, T_TANMENET_OSSZES.C_ORASZAM Oraszam, T_TANMENET_OSSZES.C_TEMA Tema FROM T_TANMENET_OSSZES INNER JOIN T_FELHASZNALO_OSSZES ON T_TANMENET_OSSZES.C_FELTOLTOID = T_FELHASZNALO_OSSZES.ID INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_TANMENET_OSSZES.C_OSZTALYCSOPORTID = T_OSZTALYCSOPORT_OSSZES.ID WHERE T_TANMENET_OSSZES.TOROLT = 'F' AND T_TANMENET_OSSZES.C_TANTARGYID = :pTantargyID AND T_TANMENET_OSSZES.C_TANEVID = :pTanevId "; var ds = GetData(commandText, parameters); return ds; } public DataSet GetOsztalyCsoportTanmenetei(int osztalyCsoportId, int tanevId, OktNevelesiKategoriaEnum? kategoria) { var parameters = new List { new CommandParameter("pOsztalyCsoportID", osztalyCsoportId), new CommandParameter("pTanevId", tanevId) }; if (kategoria.HasValue) { parameters.Add(new CommandParameter(nameof(kategoria), (int)kategoria)); } else { parameters.Add(new CommandParameter(nameof(kategoria), DBNull.Value)); } string commandText = $@" SELECT T_TANMENET_OSSZES.ID ID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV Tanar, T_TANTARGY_OSSZES.C_NEV Tantargy, T_TANMENET_OSSZES.C_TEMA Tema, T_TANMENET_OSSZES.C_ORASZAM Ora FROM T_TANMENET_OSSZES INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = T_TANMENET_OSSZES.C_TANTARGYID INNER JOIN T_FELHASZNALO_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_TANMENET_OSSZES.C_FELTOLTOID INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_TANMENET_OSSZES.C_OSZTALYCSOPORTID AND (T_OSZTALYCSOPORT_OSSZES.C_FELADATKATEGORIAID = @{nameof(kategoria)} OR @{nameof(kategoria)} IS NULL) WHERE T_OSZTALYCSOPORT_OSSZES.ID = :pOsztalyCsoportID AND T_TANMENET_OSSZES.TOROLT = 'F' AND T_OSZTALYCSOPORT_OSSZES.C_TANEVID = :pTanevId "; DataSet ds = GetData(commandText, parameters); return ds; } public int? GetTanmenetIdBySorszamEsFoglalkozas(int evesOraSorszam, int foglalkozasId) { using (var command = new SDA.DataProvider.SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pFoglalkozasId", foglalkozasId); command.Parameters.Add("pEvesOraSorszam", evesOraSorszam); command.CommandText = @" SELECT T_TANMENET.ID FROM T_TANMENET JOIN T_FOGLALKOZAS ON T_FOGLALKOZAS.C_OSZTALYCSOPORTID = T_TANMENET.C_OSZTALYCSOPORTID AND T_FOGLALKOZAS.C_TANTARGYID = T_TANMENET.C_TANTARGYID WHERE T_TANMENET.TOROLT = 'F' AND T_FOGLALKOZAS.TOROLT = 'F' AND T_FOGLALKOZAS.ID = :pFoglalkozasId AND T_TANMENET.C_ORASZAM = :pEvesOraSorszam"; var result = command.ExecuteScalar(); if (result != null && result != DBNull.Value) { return (int)result; } return null; } } public void DeleteTanmenet(int tantargyId, int osztalyCsoportId, int userId) { using (var command = new SDA.DataProvider.SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pUserId", userId); command.Parameters.Add("pTantargyId", tantargyId); command.Parameters.Add("pOsztalyCsoportId", osztalyCsoportId); command.CommandText = @" UPDATE T_TANMENET SET TOROLT = 'T', SERIAL = SERIAL + 1, LASTCHANGED = GETDATE(), MODIFIER = :pUserId WHERE C_TANTARGYID = :pTantargyId AND C_OSZTALYCSOPORTID = :pOsztalyCsoportId AND C_FELTOLTOID = :pUserId"; command.ExecuteNonQuery(); } } public string GetTemaEvesOraSorszamhoz(int tantargyId, int osztalyCsoportId, int feltoltoId, int oraEvesSorszama = 0, string elozoTema = null) { if (string.IsNullOrWhiteSpace(elozoTema)) { using (var command = new SDA.DataProvider.SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pTantargyID", tantargyId); command.Parameters.Add("pOsztalyCsoportID", osztalyCsoportId); command.Parameters.Add("pFeltoltoID", feltoltoId); command.Parameters.Add("pOraEvesSorszama", oraEvesSorszama); command.CommandText = @" SELECT C_TEMA Tema FROM T_TANMENET WHERE T_TANMENET.C_TANTARGYID = @pTantargyID AND T_TANMENET.C_OSZTALYCSOPORTID = @pOsztalyCsoportID AND T_TANMENET.C_FELTOLTOID = @pFeltoltoID AND T_TANMENET.C_ORASZAM = @pOraEvesSorszama"; var result = command.ExecuteScalar(); if (result != null && result != DBNull.Value) { return result.ToString(); } return string.Empty; } } else { using (var command = new SDA.DataProvider.SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.Parameters.Add("pTantargyID", tantargyId); command.Parameters.Add("pOsztalyCsoportID", osztalyCsoportId); command.Parameters.Add("pFeltoltoID", feltoltoId); command.Parameters.Add("pOraEvesSorszama", oraEvesSorszama); command.Parameters.Add("pElozoTema", elozoTema); command.CommandText = @" SELECT TOP 1 T_TANMENET.C_TEMA Tema FROM T_TANMENET OUTER APPLY ( SELECT TOP 1 T_TANMENET.C_ORASZAM FROM T_TANMENET WHERE T_TANMENET.C_TANTARGYID = @pTantargyID AND T_TANMENET.C_OSZTALYCSOPORTID = @pOsztalyCsoportID AND T_TANMENET.C_FELTOLTOID = @pFeltoltoID AND T_TANMENET.C_ORASZAM <= @pOraEvesSorszama AND T_TANMENET.C_TEMA = @pElozoTema ORDER BY T_TANMENET.C_ORASZAM DESC ) elozo WHERE T_TANMENET.C_TANTARGYID = @pTantargyID AND T_TANMENET.C_OSZTALYCSOPORTID = @pOsztalyCsoportID AND T_TANMENET.C_FELTOLTOID = @pFeltoltoID AND T_TANMENET.C_ORASZAM > elozo.C_ORASZAM ORDER BY T_TANMENET.C_ORASZAM"; var result = command.ExecuteScalar(); if (result != null && result != DBNull.Value) { return result.ToString(); } return string.Empty; } } } public ITanmenet Get() { return Tanmenet.GiveAnInstance(); } public ITanmenet Get(int tanuloId) { var entity = Tanmenet.GiveAnInstance(); entity.LoadByID(tanuloId); return entity; } public void FullUpdate(ITanmenet dto) { var entity = dto as Tanmenet; entity.FullUpdate(); DalHelper.Commit(); } public void Update(ITanmenet dto) { var entity = dto as Tanmenet; entity.Update(); DalHelper.Commit(); } public void Insert(ITanmenet dto) { var entity = dto as Tanmenet; entity.Insert(); dto.ID = entity.ID; DalHelper.Commit(); } public void Delete(int id) { var entity = Tanmenet.GiveAnInstance(); entity.LoadByID(id); entity.TanitasiOra.RemoveAll(); entity.Delete(); DalHelper.Commit(); } public DataSet GetTanmenetDataSet(int tanevId, int? alkalmazottId = null, int? oktNevelesiKategoriaId = null) { var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), alkalmazottId.IsEntityId() ? new CommandParameter("pAlkalmazottId", alkalmazottId.Value) : new CommandParameter("pAlkalmazottId", DBNull.Value), oktNevelesiKategoriaId.IsEntityId() ? new CommandParameter("pOktNevelesiKategoriaId", oktNevelesiKategoriaId.Value) : new CommandParameter("pOktNevelesiKategoriaId", DBNull.Value) }; const string commandText = @" SELECT tm.ID AS Id ,tm.C_NEV AS Nev ,tm.C_BEJEGYZESIDEJE AS BejegyzesIdeje ,tm.C_ORASZAM AS OraSorszam ,tm.C_TEMA AS Tema ,tm.C_IMPORTALT AS Importalt ,f.ID AS TantargyfelosztasId ,(ocs.C_NEV + ' - ' + tgy.C_NEV) AS TantargyfelosztasNevAlkalmazottNelkul FROM T_TANMENET_OSSZES tm INNER JOIN T_TANTARGY_OSSZES tgy ON tgy.ID = tm.C_TANTARGYID AND tgy.C_TANEVID = tm.C_TANEVID AND tgy.TOROLT = 'F' INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = tm.C_FELTOLTOID AND fh.C_TANEVID = tm.C_TANEVID AND fh.TOROLT = 'F' INNER JOIN T_ALKALMAZOTT_OSSZES a ON a.ID = fh.ID AND a.C_ALTANEVID = tm.C_TANEVID AND a.TOROLT = 'F' INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tm.C_OSZTALYCSOPORTID AND ocs.C_TANEVID = tm.C_TANEVID AND ocs.TOROLT = 'F' AND (:pOktNevelesiKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = :pOktNevelesiKategoriaId) INNER JOIN T_FOGLALKOZAS_OSSZES f ON f.C_TANTARGYID = tgy.ID AND f.C_TANARID = fh.ID AND f.C_OSZTALYCSOPORTID = ocs.ID AND f.C_TANEVID = tm.C_TANEVID AND f.TOROLT = 'F' WHERE (:pAlkalmazottId IS NULL OR tm.C_FELTOLTOID = :pAlkalmazottId) AND tm.C_TANEVID = :pTanevId AND tm.TOROLT = 'F' "; DataSet dataSet = GetData(commandText, commandParameterList); return dataSet; } } }