using System; using System.Collections.Generic; using System.Data; using System.Linq; using Kreta.Core; using Kreta.Core.Logic; using Kreta.DataAccess.Interfaces; using Kreta.DataAccessManual.Interfaces; using Kreta.DataAccessManual.ParameterClasses; using Kreta.DataAccessManual.Util; using Kreta.Ellenorzo.Dao.VN.Email; using Kreta.Framework; using Kreta.Framework.Util; using SDA.DataProvider; using SDA.Kreta.Entities; namespace Kreta.DataAccessManual { internal class EmailDal : DataAccessBase, IEmailDal { public EmailDal(DalHandler handler) : base(handler) { } public EmailDal(DalHandler handler, GridParameters gridParameters) : base(handler, gridParameters) { } #region BaseCRUD public IEmail Get() { return Email.GiveAnInstance(); } public IEmail Get(int id) { var entity = Email.GiveAnInstance(); entity.LoadByID(id); return entity; } /// /// A void helyett az IEmail-return verzióst kell használni! /// [Obsolete] void IBaseDal.Insert(IEmail dto) { throw new System.NotImplementedException(); } public IEmail Insert(IEmail dto) { var entity = dto as Email; entity.Insert(); DalHelper.Commit(); dto.ID = entity.ID; dto.Guid = entity.Guid; return dto; } /// /// IsHibasanMegadva flag false-ra állítódik! /// /// public void Update(IEmail dto) { var entity = dto as Email; entity.IsHibasanMegadva = false; entity.Update(); DalHelper.Commit(); } /// /// Csak az IsHibasanMegadva flag-et és a Guid-ot update-eli! /// /// /// public bool UpdateIsHibasanMegadvaFlag(int tanevId, Guid guid) { var commandText = @" SELECT ID FROM T_EMAIL_OSSZES WHERE C_TANEVID = :pTanevId AND C_GUID = :pGuid "; var commandParameterList = new List { new CommandParameter("pTanevId", tanevId), new CommandParameter("pGuid", guid) }; DataSet selectResult = GetData(commandText, commandParameterList); int? emailId = null; var rows = selectResult.Tables[0].Rows; if (rows.Count > 0) { emailId = rows[0].Field("ID"); } if (!emailId.IsEntityId()) { return false; } var entity = Email.GiveAnInstance(); entity.LoadByID(emailId.Value); entity.IsHibasanMegadva = true; //NOTE: Azért állítunk be új Guid-ot, hogy többször ne tudja ugyanazzal az url-el az IsHibasanMegadva property-t true-ra állítani! entity.Guid = Guid.NewGuid(); entity.Update(); DalHelper.Commit(); return true; } public void Delete(IEmail dto) { var entity = (Email)dto; entity.Delete(); DalHelper.Commit(); } public void Delete(int id) { var entity = Email.GiveAnInstance(); entity.LoadByID(id); entity.Delete(); DalHelper.Commit(); } #endregion public void FullUpdate(IEmail dto) { var entity = dto as Email; entity.IsHibasanMegadva = false; entity.FullUpdate(); DalHelper.Commit(); } public IEmail GetSpecific(string condition, int tanevId) { var entity = Email.LoadWithFilter(condition + $" AND C_TANEVID = {tanevId}").FirstOrDefault(); return entity; } public string GetEmailCimBygondviselo(int userId, int gondviseloId) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspGetEmailCimBygondviselo"; command.Parameters.Add("pUserId", userId); command.Parameters.Add("pGondviseloId", gondviseloId); return command.ExecuteScalar().ToString(); } } public void SetAlapertelmezett(int tanuloId, int userId, int tanevId) { using (var command = new SDACommand()) { command.Connection = UserContext.Instance.SDAConnection; command.Transaction = UserContext.Instance.SDATransaction; command.CommandType = CommandType.StoredProcedure; command.CommandText = "uspSetAlapertelmezettEmail"; command.Parameters.Add("pUserId", SDADBType.Int).Value = userId; command.Parameters.Add("pTanuloId", SDADBType.Int).Value = tanuloId; command.Parameters.Add("pTanevId", SDADBType.Int).Value = tanevId; command.ExecuteNonQuery(); } } /// INFO @DevKornel: Mobil használja public List GetFelhasznalokEmailCimei(EmailRequestDao request) { var parameters = new List(); if (request.IsPublic.HasValue) { parameters.Add(new CommandParameter("pIsPublic", request.IsPublic.Value ? 'T' : 'F')); } var felhasznaloIdsString = SqlLogic.ParseListToParameter(request.FelhasznaloIds).ToString(); var command = @" SELECT e.ID AS ID ,e.C_EMAILTIPUSA AS Tipus ,e.C_EMAILCIM AS EmailCim ,e.C_ALAPERTELMEZETT AS Alapertelmezett ,e.C_FELHASZNALOID AS FelhasznaloId ,e.C_GONDVISELOID AS GondviseloId FROM T_EMAIL e WHERE 1 = 1 " + (!string.IsNullOrWhiteSpace(felhasznaloIdsString) ? $@" AND e.C_FELHASZNALOID IN({felhasznaloIdsString}) " : "") + (request.IsPublic.HasValue ? @" AND e.C_ISPUBLIC = :pIsPublic " : ""); var dataSet = GetData(command, parameters); DataTable dataTable = dataSet.Tables[0]; SetDNAME(dataTable, "Tipus"); return dataTable.AsDataSet().ToDaoList(); } public void AddFelhasznaloEmail(IFelhasznalo felhasznalo, IEmail email) { ((Felhasznalo)felhasznalo).Email.Add((Email)email); } /// /// A szűrőparaméterek alapján SP használatával lekérdezi az EmailDataSet-et! /// /// Szűrő paraméterek /// public DataSet GetEmailDataSet(EmailSearchPco pco) { var parameters = SetParameters(pco); using (var sdaCommand = new SDACommand()) { sdaCommand.Connection = UserContext.Instance.SDAConnection; sdaCommand.Transaction = UserContext.Instance.SDATransaction; sdaCommand.CommandType = CommandType.StoredProcedure; sdaCommand.CommandText = "uspGetEmail"; foreach (var param in parameters) { sdaCommand.Parameters.Add(param.Name, param.Value); } var dataSet = new DataSet(); using (var adapter = new SDADataAdapter()) { adapter.SelectCommand = sdaCommand; adapter.Fill(dataSet); } DataTable dataTable = dataSet.Tables[0]; SetDNAME(dataTable, "EmailTipusa"); SetBoolFields(dataTable, "IsAlapertelmezett,IsPublikus,IsHibasanMegadva"); DataTable result = SortingAndPaging(dataTable, GridParameters); return result.AsDataSet(); } } /// /// Keresési feltételek összeállítása az SP részére. A paraméternevek az SP-ben lévőkkel kell, hogy egyezzenek! /// private List SetParameters(EmailSearchPco pco) { var parameters = new List { new CommandParameter("pTanevId", pco.TanevId, SDADBType.Int) }; if (pco.FelhasznaloId.HasValue) { parameters.Add(new CommandParameter("pFelhasznaloId", pco.FelhasznaloId.Value, SDADBType.Int)); } if (pco.FelhasznaloTipus.HasValue) { parameters.Add(new CommandParameter("pFelhasznaloTipus", pco.FelhasznaloTipus.Value, SDADBType.Int)); } if (pco.GondviseloId.HasValue) { parameters.Add(new CommandParameter("pGondviseloId", pco.GondviseloId.Value, SDADBType.Int)); } if (pco.IsAlapertelmezett.HasValue) { parameters.Add(new CommandParameter("pIsAlapertelmezett", pco.IsAlapertelmezett.Value ? 'T' : 'F', SDADBType.Char)); } if (pco.IsPublic.HasValue) { parameters.Add(new CommandParameter("pIsPublic", pco.IsPublic.Value ? 'T' : 'F', SDADBType.Char)); } if (pco.EmailTipusa.HasValue) { parameters.Add(new CommandParameter("pEmailTipusa", pco.EmailTipusa.Value, SDADBType.Int)); } if (pco.IsHibasanMegadva.HasValue) { parameters.Add(new CommandParameter("pIsHibasanMegadva", pco.IsHibasanMegadva.Value ? 'T' : 'F', SDADBType.Char)); } return parameters; } } }