using AutoMapper; using Gestor.Infrastructure.Entities.Common; using Gestor.Infrastructure.Entities.Ferramentas; using Gestor.Infrastructure.Entities.Generic; using Gestor.Infrastructure.Helpers; using Gestor.Infrastructure.Mappers; using Gestor.Infrastructure.Repository.Generic; using Gestor.Infrastructure.Repository.Interface; using Gestor.Infrastructure.UnitOfWork.Generic; using Gestor.Model.Common; using Gestor.Model.Domain.Common; using Gestor.Model.Domain.Ferramentas; using Gestor.Model.Domain.Relatorios; using Gestor.Model.Domain.Relatorios.LogsEnvio; using Gestor.Model.Validation; using NHibernate; using NHibernate.Connection; using NHibernate.Impl; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Gestor.Infrastructure.Repository.Logic { public class RegistroLogRepository : GenericRepository, IRegistroLogRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public RegistroLogRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void AddRange(List registrosLog) { base.AddRange(ApplicationMapper.Mapper.Map, List>(registrosLog)); } public List BuscaLogParcelas(List entidadeId) { return this.Select((new List() { new Condicao() { Campo = "Tela", Valores = 5.CriarValor() }, new Condicao() { Campo = "EntidadeId", Valores = entidadeId.CriarValor() } }).CreateParameters(0)); } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public List FindByCredential(long id) { List list = ( from x in this._unitOfWork.Query() where x.Credencial.Id == id select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByEntity(TipoTela tela, long id) { List list = ( from x in this._unitOfWork.Query() where x.EntityId == id && (int)x.Tela == (int)tela select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByEntityId(TipoTela tela, long entidadeId) { List condicaos = new List() { new Condicao() { Campo = "Tela", Valores = tela.CriarValor() } }; Condicao condicao = new Condicao() { Campo = "EntidadeId", Valores = entidadeId.CriarValor() }; if (tela != TipoTela.Configuracoes) { condicaos.Add(condicao); } return this.Select(condicaos.CreateParameters(0)); } public RegistroLog FindById(long id) { RegistroLogDb registroLogDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(registroLogDb); } public List FindByIdSingle(long id) { List list = ( from x in this._unitOfWork.Query() where x.Id == id select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByUser(TipoTela tela, long idUsuario) { return this.Select((new List() { new Condicao() { Campo = "IdUsuario", Valores = idUsuario.CriarValor() }, new Condicao() { Campo = "Tela", Valores = 0.CriarValor(), Operacao = Operacao.Or, Grupo = 1 }, new Condicao() { Campo = "Tela", Valores = tela.CriarValor(), Operacao = Operacao.Or, Grupo = 1 } }).CreateParameters(0)); } public List FindByUsuario(long id) { List list = ( from x in this._unitOfWork.Query() where x.Usuario.Id == id select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public List LogsEnvio(Filtros filtro) { object connection; SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; DataTable dataTable = new DataTable(); if (sessionFactory != null) { connection = sessionFactory.ConnectionProvider.GetConnection(); } else { connection = null; } using (SqlConnection sqlConnection = connection as SqlConnection) { if (sqlConnection != null) { using (SqlCommand sqlCommand = sqlConnection.CreateCommand()) { sqlCommand.CommandTimeout = 15000; Auxiliar.CriarAuxiliar(sqlCommand, false); sqlCommand.CommandText = string.Concat("SELECT e.email as emailenvio, u.nome as usuarionome, l.id as id, l.tela as tela, l.data as data, l.destinatarios as destinatarios, l.assunto as assunto, l.cco as cco, l.versao as versao, l.nomemaquina as nomemaquina, l.usuariomaquina as usuariomaquina, l.ip as ip FROM LogEmail l INNER JOIN enviosmtp e on e.idenviosmtp = l.Credencial_id INNER JOIN usuario u on u.idusuario = l.Usuario_id ", string.Format("AND CAST(l.data AS DATE) >= '{0:yyyy-MM-dd}' AND CAST(l.data as DATE) <= '{1:yyyy-MM-dd}'", filtro.Inicio, filtro.Fim)); using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } } } } return dataTable.AsEnumerable().Select((DataRow x) => new LogsEnvio() { Id = x.Campo("id"), Tela = x.Campo("tela").GetDescription(), Assunto = x.Campo("assunto"), Destinatarios = x.Campo("destinatarios").Replace(";", ";\n"), Data = x.Campo("data"), Ip = x.Campo("ip"), Versao = x.Campo("versao"), Cco = x.Campo("cco").Replace(";", ";\n"), Maquina = x.Campo("nomemaquina"), UsuarioMaquina = x.Campo("usuariomaquina"), UsuarioAgger = x.Campo("usuarionome"), Remetente = x.Campo("emailenvio") }).ToList(); } public RegistroLog SaveOrUpdate(RegistroLog registroLog) { RegistroLogDb registroLogDb = ApplicationMapper.Mapper.Map(registroLog); this.SaveOrUpdate(registroLogDb); return ApplicationMapper.Mapper.Map(registroLogDb); } public LogEmail SaveOrUpdate(LogEmail log) { LogEmailDb logEmailDb = ApplicationMapper.Mapper.Map(log); this._unitOfWork.Repository().SaveOrUpdate(logEmailDb); return ApplicationMapper.Mapper.Map(logEmailDb); } private List Select(SqlQueryCondition sqlCondition) { return this._unitOfWork.Select(sqlCondition, "SELECT DISTINCT * FROM RegistroLog WHERE", "").MapRegistroLog(); } } }