using System; using System.Collections.Generic; using System.Data; using System.Text; using Kreta.Core.Logic; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.Util; using Kreta.Enums; using Kreta.Framework.Entities; using Kreta.Framework.Util; using SDA.DataProvider; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class LepEloadasJegyzekDal : DataAccessBase, ILepEloadasJegyzekDal { public LepEloadasJegyzekDal(DalHandler handler, GridParameters gridParameters) : base(handler, gridParameters) { } public LepEloadasJegyzekDal(DalHandler handler) : base(handler) { } #region BaseCRUD public ILepEloadasJegyzek Get() { return LepEloadasJegyzek.GiveAnInstance(); } public ILepEloadasJegyzek Get(int id) { var entity = LepEloadasJegyzek.GiveAnInstance(); entity.LoadByID(id); return entity; } public void Insert(ILepEloadasJegyzek dto) { var entity = dto as LepEloadasJegyzek; entity.Insert(); dto.ID = entity.ID; DalHelper.Commit(); } public void FullUpdate(ILepEloadasJegyzek dto) { var entity = dto as LepEloadasJegyzek; entity.FullUpdate(true); DalHelper.Commit(); } public void Update(ILepEloadasJegyzek dto) { var entity = dto as LepEloadasJegyzek; entity.Update(); DalHelper.Commit(); } public void Delete(ILepEloadasJegyzek dto) { var entity = dto as LepEloadasJegyzek; entity.Delete(); DalHelper.Commit(); } #endregion public DataSet GetEloadasJegyzekek(int tanevId, int eloadasId, int felhasznaloId, bool isMindenEvfolyamJog, DateTime datum, int evfolyamId, string szervezetNev, string eloadasNev, DateTime kezdete, DateTime vege, string eloadasHelyszin) { var paramsList = new List() { new CommandParameter(nameof(tanevId), tanevId), new CommandParameter(nameof(eloadasId), eloadasId), new CommandParameter(nameof(felhasznaloId), felhasznaloId), new CommandParameter(nameof(isMindenEvfolyamJog), isMindenEvfolyamJog ? 1 : 0), new CommandParameter(nameof(datum), datum), new CommandParameter(nameof(evfolyamId), evfolyamId), new CommandParameter(nameof(szervezetNev), szervezetNev), new CommandParameter(nameof(eloadasNev), eloadasNev), new CommandParameter(nameof(kezdete), kezdete), new CommandParameter(nameof(vege), vege), new CommandParameter(nameof(eloadasHelyszin), eloadasHelyszin) }; var command = new StringBuilder($@" SELECT x.ID ,x.EloadasId ,x.Megjelent ,x.TanuloId ,x.TanuloNev ,x.TanuloOktAzon ,x.IntezmenyAzon ,x.IntezmenyNev ,x.OsztalyCsoportNev ,x.isErasable ,@{nameof(datum)} as datum ,@{nameof(evfolyamId)} as EvfolyamId ,@{nameof(szervezetNev)} as szervezetNev ,@{nameof(eloadasNev)} as eloadasNev ,@{nameof(kezdete)} as kezdete ,@{nameof(vege)} as vege ,@{nameof(eloadasHelyszin)} as eloadasHelyszin ,x.GondviseloElfogadas FROM ( SELECT DISTINCT ROW_NUMBER() OVER (PARTITION BY fh.ID ORDER BY IIF((@{nameof(isMindenEvfolyamJog)} = 1 or o.ID is not null or cs.ID is not null), 'T', 'F') desc) rn ,e.ID as ID ,e.C_ELOADASID as EloadasId ,e.C_MEGJELENT as Megjelent ,e.C_FELHASZNALOID as TanuloId ,fh.C_NYOMTATASINEV as TanuloNev ,fh.C_OKTATASIAZONOSITO as TanuloOktAzon ,i.C_AZONOSITO as IntezmenyAzon ,ia.C_NEV as IntezmenyNev ,y.Osztalynev as OsztalyCsoportNev ,e.C_GONDVISELOALTALENGEDELYEZVE as GondviseloElfogadas ,IIF(( @{nameof(isMindenEvfolyamJog)} = 1 or o.ID is not null or cs.ID is not null), 'T', 'F') as isErasable FROM T_LEPELOADASJEGYZEK_OSSZES e INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = e.C_FELHASZNALOID AND fh.TOROLT = 'F' INNER JOIN T_INTEZMENYADATOK_OSSZES ia on ia.C_INTEZMENYID = fh.C_INTEZMENYID and ia.C_TANEVID = fh.C_TANEVID and ia.TOROLT = 'F' INNER JOIN T_INTEZMENY_OSSZES i on i.ID = fh.C_INTEZMENYID and i.TOROLT = 'F' INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_TANULOID = fh.ID AND tcs.TOROLT = 'F' CROSS APPLY fnGetTanuloOsztalyString(e.C_FELHASZNALOID, @datum,default,default,default, NULL) y LEFT JOIN T_OSZTALY tanuloOsztaly on tanuloOsztaly.ID = tcs.C_OSZTALYCSOPORTID and tanuloOsztaly.TOROLT = 'F' LEFT JOIN T_OSZTALY o on o.ID = tcs.C_OSZTALYCSOPORTID and o.TOROLT = 'F' and (o.C_OSZTALYFONOKID = @{nameof(felhasznaloId)} or o.C_OFOHELYETTESID = @{nameof(felhasznaloId)}) LEFT JOIN T_CSOPORT cs on cs.ID = tcs.C_OSZTALYCSOPORTID and cs.TOROLT = 'F' and cs.C_CSOPORTVEZETOID = @{nameof(felhasznaloId)} WHERE e.TOROLT = 'F' AND e.C_TANEVID = @{nameof(tanevId)} AND e.C_ELOADASID = @{nameof(eloadasId)} ) AS x WHERE rn = 1 "); return GetData(command.ToString(), paramsList); } public DataSet GetTanulokForEloadas(int tanevId, int eloadasId, int evfolyamId, string filter, int? osztfoId = null) { var paramsList = new List() { new CommandParameter(nameof(tanevId), tanevId), new CommandParameter(nameof(eloadasId), eloadasId), new CommandParameter(nameof(evfolyamId), evfolyamId) }; var command = new StringBuilder($@" SELECT DISTINCT t.ID as TanuloId, fh.C_NYOMTATASINEV as TanuloNev FROM T_TANULO_OSSZES t INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = t.ID AND fh.C_NYOMTATASINEV LIKE '%{filter}%' AND fh.C_TANEVID = t.C_ALTANEVID AND fh.TOROLT = 'F' INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = t.ID AND tcs.C_TANEVID = t.C_ALTANEVID AND tcs.TOROLT = 'F' INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.C_EVFOLYAMTIPUSA = @{nameof(evfolyamId)} AND ocs.C_TANEVID = t.C_ALTANEVID AND ocs.TOROLT = 'F' AND NOT EXISTS( SELECT TOP 1 ID FROM T_LEPELOADASJEGYZEK_OSSZES eaj WHERE eaj.C_FELHASZNALOID = t.ID AND eaj.C_ELOADASID = @{nameof(eloadasId)} AND eaj.C_TANEVID = t.C_ALTANEVID AND eaj.TOROLT = 'F')" + (osztfoId.HasValue ? $@" LEFT JOIN T_OSZTALY o ON o.ID=ocs.ID AND (o.C_OSZTALYFONOKID= " + osztfoId.ToString() + @" OR o.C_OFOHELYETTESID = " + osztfoId.ToString() + @") LEFT JOIN T_CSOPORT cs ON cs.ID=ocs.ID AND (" + osztfoId.ToString() + @" IS NULL OR cs.C_CSOPORTVEZETOID=" + osztfoId.ToString() + @")" : "") + $@" WHERE t.C_ALTANEVID = @{nameof(tanevId)} AND t.TOROLT = 'F' " + (osztfoId.HasValue ? $@"AND NOT (o.ID IS NULL AND cs.ID IS NULL)" : "") + $@" ORDER BY fh.C_NYOMTATASINEV "); return GetData(command.ToString(), paramsList); } public DataSet GetOsztalyokForEloadas(int tanevId, int eloadasId, int evfolyamId, int? osztfoId = null) { var paramsList = new List() { new CommandParameter(nameof(tanevId), tanevId), new CommandParameter(nameof(evfolyamId), evfolyamId), }; var command = new StringBuilder($@" select ocs.ID as Id ,ocs.C_NEV as Nev from T_OSZTALYCSOPORT ocs join T_OSZTALY o on o.ID = ocs.ID and o.TOROLT = 'F' where ocs.C_EVFOLYAMTIPUSA = @{nameof(evfolyamId)} and ocs.C_TANEVID = @{nameof(tanevId)} and ocs.TOROLT = 'F' " + (osztfoId.HasValue ? $@" and (o.C_OSZTALYFONOKID = " + osztfoId.ToString() + " or C_OFOHELYETTESID = " + osztfoId.ToString() + " ) " : "") + " order by ocs.C_NEV" ); return GetData(command.ToString(), paramsList); } public DataSet GetJelentkeztetettOsztalyokIdForEloadas(int tanevId, int eloadasId, int? osztalyFonokId = null) { var paramsList = new List() { new CommandParameter("pTanevId", tanevId), new CommandParameter("pEloadasId", eloadasId), }; var command = new StringBuilder($@" SELECT o.ID FROM T_OSZTALY_OSSZES o WHERE o.TOROLT = 'F' AND EXISTS( SELECT * FROM T_LEPELOADASJEGYZEK_OSSZES lj INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = lj.C_FELHASZNALOID WHERE lj.C_TANEVID = :pTanevId AND lj.C_ELOADASID = :pEloadasId AND lj.TOROLT = 'F' AND tcs.TOROLT = 'F' AND tcs.C_TANULOID = lj.C_FELHASZNALOID AND tcs.C_OSZTALYCSOPORTID = o.ID ) " + (osztalyFonokId.HasValue ? $@" AND (o.C_OSZTALYFONOKID = " + osztalyFonokId.ToString() + " OR C_OFOHELYETTESID = " + osztalyFonokId.ToString() + " ) " : "") ); return GetData(command.ToString(), paramsList); } public DataSet GetTanuloEloadasai(int felhasznaloId) { var paramsList = new List() { new CommandParameter(nameof(felhasznaloId), felhasznaloId) }; var command = new StringBuilder($@" SELECT DISTINCT e.C_ELOADASID as EloadasId ,e.C_GONDVISELOALTALENGEDELYEZVE as GondviseloElfogadas ,e.C_MEGJELENT as Megjelent FROM T_LEPELOADASJEGYZEK_OSSZES e WHERE e.TOROLT = 'F' AND e.C_FELHASZNALOID = @{nameof(felhasznaloId)} AND e.TOROLT = 'F' "); return GetData(command.ToString(), paramsList, booleanColumns: "Megjelent"); } public DataSet GetEloadasJelentkezesEmailData(int id) { var paramsList = new List() { new CommandParameter(nameof(id), id) }; var command = new StringBuilder($@" select f.ID as TanuloId ,f.C_NYOMTATASINEV as Nev ,f.C_NYOMTATASINEV as TanuloNev ,y.Osztalynev as TanuloOsztalyNev ,ISNULL(ia.C_NEV, '-') as IntezmenyNev ,ISNULL(ia.C_EMAILCIM, '-') as IntezmenyEmail ,e.C_EMAILCIM as EmailCim from T_LEPELOADASJEGYZEK ej join T_FELHASZNALO f on f.ID = ej.C_FELHASZNALOID and f.TOROLT = 'F' CROSS APPLY fnGetTanuloOsztalyString(ej.C_FELHASZNALOID, GETDATE(),default,default,default, NULL) y join T_EMAIL e on e.C_FELHASZNALOID = ej.C_FELHASZNALOID and e.TOROLT = 'F' join T_INTEZMENYADATOK ia on ia.C_INTEZMENYID = ej.C_INTEZMENYID and ia.C_TANEVID = ej.C_TANEVID where ej.C_ELOADASID = @{nameof(id)} and ej.TOROLT = 'F' and e.C_GONDVISELOID is null union select g.C_TANULOID as TanuloId ,g.C_NEV ,f.C_NYOMTATASINEV as TanuloNev ,y.Osztalynev as TanuloOsztalyNev ,ISNULL(ia.C_NEV, '-') as IntezmenyNev ,ISNULL(ia.C_EMAILCIM, '-') as IntezmenyEmail ,e.C_EMAILCIM as EmailCim from T_LEPELOADASJEGYZEK ej join T_GONDVISELO g on g.C_TANULOID = ej.C_FELHASZNALOID and g.TOROLT = 'F' join T_FELHASZNALO f on f.ID = ej.C_FELHASZNALOID and f.TOROLT = 'F' CROSS APPLY fnGetTanuloOsztalyString(ej.C_FELHASZNALOID, GETDATE(),default,default,default, NULL) y join T_EMAIL e on e.C_GONDVISELOID = g.ID and e.TOROLT = 'F' AND e.C_ALAPERTELMEZETT = 'T' join T_INTEZMENYADATOK ia on ia.C_INTEZMENYID = ej.C_INTEZMENYID and ia.C_TANEVID = ej.C_TANEVID where ej.C_ELOADASID = @{nameof(id)} and ej.TOROLT = 'F' "); return GetData(command.ToString(), paramsList); } public DataSet GetEloadasLemondasEmailData(int id) { var paramsList = new List() { new CommandParameter(nameof(id), id) }; var command = new StringBuilder($@" select f.ID as TanuloId ,f.C_NYOMTATASINEV as Nev ,f.C_NYOMTATASINEV as TanuloNev ,y.Osztalynev as TanuloOsztalyNev ,ia.C_NEV as IntezmenyNev ,ia.C_EMAILCIM as IntezmenyEmail ,e.C_EMAILCIM as EmailCim from T_LEPELOADASJEGYZEK_OSSZES ej join T_FELHASZNALO f on f.ID = ej.C_FELHASZNALOID and f.TOROLT = 'F' CROSS APPLY fnGetTanuloOsztalyString(ej.C_FELHASZNALOID, GETDATE(),default,default,default, NULL) y join T_EMAIL e on e.C_FELHASZNALOID = ej.C_FELHASZNALOID and e.TOROLT = 'F' join T_INTEZMENYADATOK ia on ia.C_INTEZMENYID = ej.C_INTEZMENYID and ia.C_TANEVID = ej.C_TANEVID where ej.ID = @{nameof(id)} and e.C_GONDVISELOID is null union select g.C_TANULOID as TanuloId ,g.C_NEV ,f.C_NYOMTATASINEV as TanuloNev ,y.Osztalynev as TanuloOsztalyNev ,ia.C_NEV as IntezmenyNev ,ia.C_EMAILCIM as IntezmenyEmail ,e.C_EMAILCIM as EmailCim from T_LEPELOADASJEGYZEK_OSSZES ej join T_GONDVISELO g on g.C_TANULOID = ej.C_FELHASZNALOID and g.TOROLT = 'F' join T_FELHASZNALO f on f.ID = ej.C_FELHASZNALOID and f.TOROLT = 'F' CROSS APPLY fnGetTanuloOsztalyString(ej.C_FELHASZNALOID, GETDATE(),default,default,default, NULL) y join T_EMAIL e on e.C_GONDVISELOID = g.ID and e.TOROLT = 'F' AND e.C_ALAPERTELMEZETT = 'T' join T_INTEZMENYADATOK ia on ia.C_INTEZMENYID = ej.C_INTEZMENYID and ia.C_TANEVID = ej.C_TANEVID where ej.ID = @{nameof(id)} "); return GetData(command.ToString(), paramsList); } public int GetTorlendoTanuloSzam(int intezmenyId, int tanevId, int eloadasId, int osztalyId) { var paramsList = new List() { new CommandParameter(nameof(intezmenyId), intezmenyId), new CommandParameter(nameof(tanevId), tanevId), new CommandParameter(nameof(eloadasId), eloadasId), new CommandParameter(nameof(osztalyId), osztalyId) }; var command = new StringBuilder($@" select count(1) as TorlendoDiakSzam from T_TANULOCSOPORT tcs join T_LEPELOADASJEGYZEK ej on ej.C_FELHASZNALOID = tcs.C_TANULOID and ej.C_ELOADASID = @{nameof(eloadasId)} and ej.TOROLT = 'F' where tcs.C_OSZTALYCSOPORTID = @{nameof(osztalyId)} and tcs.C_INTEZMENYID = @{nameof(intezmenyId)} and tcs.C_TANEVID = @{nameof(tanevId)} "); var data = GetData(command.ToString(), paramsList); return data.Tables[0].Rows[0].Field("TorlendoDiakSzam"); } public void DeleteTanulokForEloadasByOsztaly(int intezmenyId, int tanevId, int eloadasId, int osztalyId) { string commandText = @" update ej set TOROLT = 'T' from T_LEPELOADASJEGYZEK ej join T_TANULOCSOPORT tcs on tcs.C_TANULOID = ej.C_FELHASZNALOID and ej.C_ELOADASID = :pEloadasId and tcs.C_OSZTALYCSOPORTID = :pOsztalyId and tcs.TOROLT = 'F' where C_ELOADASID = :pEloadasId and ej.C_INTEZMENYID = :pIntezmenyId and ej.C_TANEVID = :pTanevId "; using (SDACommand command = DAUtil.CreateCommand(commandText)) { command.Parameters.Add("pIntezmenyId", SDADBType.Int).Value = intezmenyId; command.Parameters.Add("pTanevId", SDADBType.Int).Value = tanevId; command.Parameters.Add("pEloadasId", SDADBType.Int).Value = eloadasId; command.Parameters.Add("pOsztalyId", SDADBType.Int).Value = osztalyId; command.ExecuteNonQuery(); DalHelper.Commit(); } } public bool SaveGondviseloEngedelyezes(int intezmenyId, int tanevId, int eloadasId, int tanuloId, int gondviseloId, string dontes) { string commandText = @" update ej set C_GONDVISELOALTALENGEDELYEZVE = :pDontes ,C_GONDVISELOID = :pGondviseloId ,SERIAL += 1 ,LASTCHANGED = GETDATE() ,MODIFIER = :pGondviseloId from T_LEPELOADASJEGYZEK ej where C_ELOADASID = :pEloadasId and ej.C_INTEZMENYID = :pIntezmenyId and ej.C_TANEVID = :pTanevId and C_FELHASZNALOID = :pTanuloId "; using (SDACommand command = DAUtil.CreateCommand(commandText)) { command.Parameters.Add("pIntezmenyId", SDADBType.Int).Value = intezmenyId; command.Parameters.Add("pTanevId", SDADBType.Int).Value = tanevId; command.Parameters.Add("pEloadasId", SDADBType.Int).Value = eloadasId; command.Parameters.Add("pGondviseloId", SDADBType.Int).Value = gondviseloId; command.Parameters.Add("pTanuloId", SDADBType.Int).Value = tanuloId; command.Parameters.Add("pDontes", SDADBType.String).Value = dontes; var result = command.ExecuteNonQuery() == 1; DalHelper.Commit(); return result; } } public DataSet GetTanulokForEloadasWithMegjelent(int eloadasId, DateTime eloadasDatum) { var paramsList = new List() { new CommandParameter(nameof(eloadasId), eloadasId), new CommandParameter(nameof(eloadasDatum), eloadasDatum), new CommandParameter("oktNevelesiKategoriaId", (int)OktNevelesiKategoriaEnum.NevelesOktatas) }; var command = new StringBuilder($@" select distinct x.EvfolyamTipusId as EvfolyamId ,dic.C_NAME as EvfolyamNev ,x.ID as OsztalyId ,x.OsztalyNev as OsztalyNev ,ej.C_MEGJELENT as Megjelent ,ej.C_FELHASZNALOID as TanuloId ,ej.TOROLT as Torolt from T_LEPELOADASJEGYZEK_OSSZES ej CROSS APPLY fnGetTanuloOsztaly(ej.C_FELHASZNALOID, @{nameof(eloadasDatum)},@oktNevelesiKategoriaId,default,default) x LEFT JOIN T_DICTIONARYITEMBASE dic on dic.ID = x.EvfolyamTipusId and dic.C_INTEZMENYID = ej.C_INTEZMENYID and dic.C_TANEVID = ej.C_TANEVID where ej.C_ELOADASID = @{nameof(eloadasId)} --and ej.TOROLT = 'F' "); return GetData(command.ToString(), paramsList); } public DataSet GetEloadasokTanuloinakOsszesitoje(int tanevId, List osztalyIdList, int oktNevKategoria) { string osztalySzures = string.Empty; if (osztalyIdList?.Count > 0) { osztalySzures = string.Format("AND tcs.C_OSZTALYCSOPORTID IN ({0})", SqlLogic.ParseListToParameter(osztalyIdList)); } string oktNevKategoriaSzures = string.Empty; if (oktNevKategoria > 0) { oktNevKategoriaSzures = string.Format("AND ocs.C_FELADATKATEGORIAID = {0}", oktNevKategoria); } var paramsList = new List() { new CommandParameter(nameof(tanevId), tanevId) }; var command = new StringBuilder($@" SELECT DISTINCT f.C_NYOMTATASINEV AS 'Diák neve' ,f.C_OKTATASIAZONOSITO AS 'Oktatási azonosítója' ,ocs.C_NEV AS 'Osztálya' ,IIF(lej.C_MEGJELENT = 'T', 'Igen', 'Nem') AS 'Volt-e LEP előadáson az adott évben' FROM T_TANULO_OSSZES t INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = t.ID AND f.C_TANEVID = @{nameof(tanevId)} AND f.TOROLT = 'F' INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = t.ID {osztalySzures} AND tcs.TOROLT = 'F' INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID {oktNevKategoriaSzures} AND ocs.TOROLT = 'F' INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID AND o.TOROLT = 'F' LEFT JOIN T_LEPELOADASJEGYZEK_OSSZES lej ON lej.C_FELHASZNALOID = f.ID AND lej.C_MEGJELENT = 'T' AND lej.TOROLT = 'F' ORDER BY ocs.C_NEV "); return GetData(command.ToString(), paramsList); } public void DeleteTanulokByEloadasId(int tanevId, int eloadasId) { // NOTE: A MODIFIER = -13 azt jelenti, hogy KTR törölt, de a törlést mi írjuk az intézményi DB-be. string commandText = @" UPDATE ej SET TOROLT = 'T' ,SERIAL += 1 ,LASTCHANGED = GETDATE() ,MODIFIER = -13 FROM T_LEPELOADASJEGYZEK_OSSZES ej WHERE C_ELOADASID = :pEloadasId AND ej.C_TANEVID = :pTanevId AND ej.TOROLT = 'F' UPDATE e SET TOROLT = 'T' ,SERIAL += 1 ,LASTCHANGED = GETDATE() ,MODIFIER = -13 FROM T_LEPELOADAS_OSSZES e WHERE C_ELOADASID = :pEloadasId AND e.C_TANEVID = :pTanevId AND e.TOROLT = 'F' "; using (SDACommand command = DAUtil.CreateCommand(commandText)) { command.Parameters.Add("pTanevId", SDADBType.Int).Value = tanevId; command.Parameters.Add("pEloadasId", SDADBType.Int).Value = eloadasId; command.ExecuteNonQuery(); DalHelper.Commit(); } } } }