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

311 lines
10 KiB
C#

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;
}
/// <summary>
/// A void helyett az IEmail-return verzióst kell használni!
/// </summary>
[Obsolete]
void IBaseDal<IEmail>.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;
}
/// <summary>
/// IsHibasanMegadva flag false-ra állítódik!
/// </summary>
/// <param name="dto"></param>
public void Update(IEmail dto)
{
var entity = dto as Email;
entity.IsHibasanMegadva = false;
entity.Update();
DalHelper.Commit();
}
/// <summary>
/// Csak az IsHibasanMegadva flag-et és a Guid-ot update-eli!
/// </summary>
/// <param name="tanevId"></param>
/// <param name="guid"></param>
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<CommandParameter>
{
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<int>("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<EmailResponseDao> GetFelhasznalokEmailCimei(EmailRequestDao request)
{
var parameters = new List<CommandParameter>();
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<EmailResponseDao>();
}
public void AddFelhasznaloEmail(IFelhasznalo felhasznalo, IEmail email)
{
((Felhasznalo)felhasznalo).Email.Add((Email)email);
}
/// <summary>
/// A szűrőparaméterek alapján SP használatával lekérdezi az EmailDataSet-et!
/// </summary>
/// <param name="pco">Szűrő paraméterek</param>
/// <returns></returns>
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();
}
}
/// <summary>
/// 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!
/// </summary>
private List<CommandParameter> SetParameters(EmailSearchPco pco)
{
var parameters = new List<CommandParameter>
{
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;
}
}
}