using AutoMapper; using Gestor.Infrastructure.Entities.Common; 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 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 IndiceArquivoDigitalRepository : GenericRepository, IIndiceArquivoDigitalRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public IndiceArquivoDigitalRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public ControleArquivoDigital BuscarBanco() { ControleArquivoDigitalDb controleArquivoDigitalDb = ( from x in this._unitOfWork.Query() orderby x.Id descending select x).First(); return ApplicationMapper.Mapper.Map(controleArquivoDigitalDb); } public List BuscarBancos() { List list = ( from x in this._unitOfWork.Query() orderby x.Id descending select x).ToList(); return ApplicationMapper.Mapper.Map, List>(list); } public ControleArquivoDigital ConsultarBanco(string banco) { ControleArquivoDigitalDb controleArquivoDigitalDb = this._unitOfWork.Query().First((ControleArquivoDigitalDb x) => x.Catalogo == banco); return ApplicationMapper.Mapper.Map(controleArquivoDigitalDb); } public void Delete(long id) { IndiceArquivoDigitalDb indiceArquivoDigitalDb = base.FindEntityById(id); if (indiceArquivoDigitalDb == null) { return; } base.Delete(indiceArquivoDigitalDb); } public List Find(TipoArquivoDigital tipo, long id, long usuario, bool buscarAssinaturas = false) { object connection; SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; DataTable dataTable = new DataTable(); DataTable dataTable1 = new DataTable(); string str1 = ""; switch (tipo) { case TipoArquivoDigital.Todos: { str1 = "idcliente = @id "; break; } case TipoArquivoDigital.Cliente: { str1 = "idcliente = @id AND ISNULL(iddocumento, 0) = 0 AND ISNULL(iditem, 0) = 0 AND ISNULL(idvenctoaleatorio, 0) = 0 AND ISNULL(idparcela, 0) = 0 AND ISNULL(idsinistro, 0) = 0 "; break; } case TipoArquivoDigital.Apolice: { str1 = "iddocumento = @id AND ISNULL(iditem, 0) = 0 AND ISNULL(idvenctoaleatorio, 0) = 0 AND ISNULL(idparcela, 0) = 0 AND ISNULL(idsinistro, 0) = 0 "; break; } case TipoArquivoDigital.Parcela: { str1 = "idparcela = @id AND ISNULL(iditem, 0) = 0 AND ISNULL(idvenctoaleatorio, 0) = 0 AND ISNULL(idsinistro, 0) = 0 "; break; } case TipoArquivoDigital.Item: { str1 = "iditem = @id AND ISNULL(idvenctoaleatorio, 0) = 0 AND ISNULL(idparcela, 0) = 0 AND ISNULL(idsinistro, 0) = 0 "; break; } case TipoArquivoDigital.Sinistro: { str1 = "idsinistro = @id AND ISNULL(idvenctoaleatorio, 0) = 0 AND ISNULL(idparcela, 0) = 0 "; break; } case TipoArquivoDigital.Vendedor: { str1 = "idvendedor = @id "; break; } case TipoArquivoDigital.Extrato: { str1 = "idextrato = @id "; break; } case TipoArquivoDigital.Seguradora: { str1 = "idciaseg = @id "; break; } case TipoArquivoDigital.Lancamento: { str1 = "idlancamen = @id "; break; } case TipoArquivoDigital.Fornecedor: { str1 = "idfornecedor = @id AND ISNULL(idlancamen, 0) = 0 "; break; } case TipoArquivoDigital.Prospeccao: { str1 = "idvenctoaleatorio = @id "; break; } case TipoArquivoDigital.Usuario: { str1 = "idusuarioarquivo = @id "; break; } case TipoArquivoDigital.Empresa: { str1 = "idempresa = @id AND ISNULL(idcliente, 0) = 0 AND ISNULL(iddocumento, 0) = 0 AND ISNULL(iditem, 0) = 0 AND ISNULL(idvenctoaleatorio, 0) = 0 AND ISNULL(idparcela, 0) = 0 AND ISNULL(idsinistro, 0) = 0 AND ISNULL(idlancamen, 0) = 0 AND ISNULL(idfornecedor, 0) = 0 AND ISNULL(idextrato, 0) = 0 AND ISNULL(idciaseg, 0) = 0 AND ISNULL(idvendedor, 0) = 0 AND ISNULL(idusuarioarquivo, 0) = 0 AND ISNULL(idtarefa, 0) = 0 AND ISNULL(idsocio, 0) = 0 "; break; } case TipoArquivoDigital.Socio: { str1 = "idsocio = @id "; break; } case TipoArquivoDigital.Tarefa: { str1 = "IdTarefa = @id "; break; } case TipoArquivoDigital.NotaFiscal: { str1 = "IdNotaFiscal = @id "; break; } case TipoArquivoDigital.Estipulante: { str1 = "IdEstipulante = @id "; break; } } if (sessionFactory != null) { connection = sessionFactory.ConnectionProvider.GetConnection(); } else { connection = null; } using (SqlConnection sqlConnection = connection as SqlConnection) { using (SqlCommand sqlCommand = sqlConnection.CreateCommand()) { sqlCommand.CommandText = string.Concat("SELECT * FROM newarquivodigital WHERE ", (usuario == 0 ? "" : "(excluido IS NULL OR excluido != '1') AND"), " ", str1); sqlCommand.Parameters.AddWithValue("@id", id); using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } if (dataTable.Rows.Count != 0) { try { if (buscarAssinaturas) { List condicaos = new List() { new Condicao() { Campo = "IndiceId", Valores = ( from x in dataTable.AsEnumerable().ToList() select x.Field("idnewarquivodigital")).ToList().CriarValor() }, new Condicao() { Campo = "excluido", Valores = null, Grupo = 2, Operacao = Operacao.Or }, new Condicao() { Campo = "excluido", Valores = "1".CriarValor(), Operador = Operador.Diferente, Grupo = 2, Operacao = Operacao.Or } }; dataTable1 = sqlCommand.Select(condicaos.CreateParameters(0), "SELECT assinado, IndiceId, UrlAssinatura FROM ArquivoParaAssinatura WHERE ", ""); } } catch (Exception exception) { dataTable1 = null; } } else { return new List(); } } } return dataTable.AsEnumerable().ToList().Select((DataRow x) => { string str; IndiceArquivoDigital indiceArquivoDigital = new IndiceArquivoDigital() { Id = x.Field("idnewarquivodigital"), IdArquivoDigital = x.Field("idarquivodigital"), Bd = x.Field("banco"), Descricao = x.Field("descricao"), Extensao = x.Field("extension") }; long? nullable = x.Field("idcliente"); indiceArquivoDigital.IdCliente = nullable.GetValueOrDefault(); nullable = x.Field("iddocumento"); indiceArquivoDigital.IdDocumento = nullable.GetValueOrDefault(); nullable = x.Field("iditem"); indiceArquivoDigital.IdItem = nullable.GetValueOrDefault(); nullable = x.Field("idparcela"); indiceArquivoDigital.IdParcela = nullable.GetValueOrDefault(); nullable = x.Field("idsinistro"); indiceArquivoDigital.IdSinistro = nullable.GetValueOrDefault(); nullable = x.Field("idciaseg"); indiceArquivoDigital.IdSeguradora = nullable.GetValueOrDefault(); nullable = x.Field("idvendedor"); indiceArquivoDigital.IdVendedor = nullable.GetValueOrDefault(); nullable = x.Field("idextrato"); indiceArquivoDigital.IdExtrato = nullable.GetValueOrDefault(); nullable = x.Field("idempresa"); indiceArquivoDigital.IdEmpresa = nullable.GetValueOrDefault(); nullable = x.Field("idlancamen"); indiceArquivoDigital.IdLancamento = nullable.GetValueOrDefault(); nullable = x.Field("idfornecedor"); indiceArquivoDigital.IdFornecedor = nullable.GetValueOrDefault(); nullable = x.Field("idvenctoaleatorio"); indiceArquivoDigital.IdProspeccao = nullable.GetValueOrDefault(); nullable = x.Field("idsocio"); indiceArquivoDigital.IdSocio = nullable.GetValueOrDefault(); indiceArquivoDigital.Excluido = (x.Field("excluido") == null ? true : x.Field("excluido").ToString() != "1"); nullable = x.Field("idusuarioarquivo"); indiceArquivoDigital.IdUsuario = nullable.GetValueOrDefault(); nullable = x.Field("IdTarefa"); indiceArquivoDigital.IdTarefa = nullable.GetValueOrDefault(); nullable = x.Field("IdNotaFiscal"); indiceArquivoDigital.IdNotaFiscal = nullable.GetValueOrDefault(); nullable = x.Field("IdEstipulante"); indiceArquivoDigital.IdEstipulante = nullable.GetValueOrDefault(); nullable = x.Field("usuariocriacao"); indiceArquivoDigital.UsuarioCriacao = nullable.GetValueOrDefault(); nullable = x.Field("usuarioalteracao"); indiceArquivoDigital.UsuarioAtualizacao = nullable.GetValueOrDefault(); DateTime? nullable1 = x.Field("datacriacao"); indiceArquivoDigital.DataCriacao = new DateTime?((nullable1.HasValue ? nullable1.GetValueOrDefault() : DateTime.MinValue)); nullable1 = x.Field("dataalteracao"); indiceArquivoDigital.DataAtualizacao = new DateTime?((nullable1.HasValue ? nullable1.GetValueOrDefault() : DateTime.MinValue)); indiceArquivoDigital.Assinado = (!buscarAssinaturas || dataTable1 == null ? false : dataTable1.AsEnumerable().ToList().Any((DataRow a) => { if (a.Field("IndiceId") != x.Field("idnewarquivodigital")) { return false; } return a.Field("assinado"); })); indiceArquivoDigital.EnviadoAssinatura = (!buscarAssinaturas || dataTable1 == null ? false : dataTable1.AsEnumerable().ToList().Any((DataRow a) => a.Field("IndiceId") == x.Field("idnewarquivodigital"))); if (!buscarAssinaturas || dataTable1 == null) { str = ""; } else { DataRow dataRow = dataTable1.AsEnumerable().ToList().FirstOrDefault((DataRow a) => a.Field("IndiceId") == x.Field("idnewarquivodigital")); if (dataRow != null) { str = dataRow.Field("UrlAssinatura"); } else { str = null; } } indiceArquivoDigital.UrlAssinatura = str; indiceArquivoDigital.AzureGuid = x.Field("AzureGuid"); indiceArquivoDigital.AzureStorage = x.Field("AzureStorage"); return indiceArquivoDigital; }).ToList(); } public List Find(string condicao) { List list; object connection; DataTable dataTable = new DataTable(); SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; try { if (sessionFactory != null) { connection = sessionFactory.ConnectionProvider.GetConnection(); } else { connection = null; } using (SqlConnection sqlConnection = connection as SqlConnection) { using (SqlCommand sqlCommand = sqlConnection.CreateCommand()) { sqlCommand.CommandText = string.Concat("SELECT * FROM AssinaturaRecebida WHERE tipo = 'MANIFEST' ", condicao, " "); using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } } } list = ( from x in dataTable.AsEnumerable().ToList() select new ArquivoDigital() { Id = x.Field("Id"), Arquivo = x.Field("Bytes"), Descricao = x.Field("Nome"), Extensao = x.Field("Mime"), DataCriacao = x.Field("DataCriacao"), AzureGuid = x.Field("AzureGuid") }).ToList(); } catch (Exception exception) { list = new List(); } return list; } public ArquivoDigital FindAssinatura(long id) { string str = string.Format(" AND IndiceId = {0}", id); return this.Find(str).FirstOrDefault(); } public List FindAssinatura(List id) { string str = string.Concat(" AND IndiceId IN (", string.Join(",", id), ")"); return this.Find(str); } public IndiceArquivoDigital FindById(long id) { IndiceArquivoDigitalDb indiceArquivoDigitalDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(indiceArquivoDigitalDb); } public IndiceArquivoDigital Merge(IndiceArquivoDigital indice) { IndiceArquivoDigitalDb indiceArquivoDigitalDb = ApplicationMapper.Mapper.Map(indice); base.Merge(indiceArquivoDigitalDb); return ApplicationMapper.Mapper.Map(indiceArquivoDigitalDb); } public IndiceArquivoDigital SaveOrUpdate(IndiceArquivoDigital indice) { IndiceArquivoDigitalDb indiceArquivoDigitalDb = ApplicationMapper.Mapper.Map(indice); this.SaveOrUpdate(indiceArquivoDigitalDb); return ApplicationMapper.Mapper.Map(indiceArquivoDigitalDb); } public ControleArquivoDigital SaveOrUpdate(ControleArquivoDigital catalogo) { ControleArquivoDigitalDb controleArquivoDigitalDb = ApplicationMapper.Mapper.Map(catalogo); this._unitOfWork.Repository().SaveOrUpdate(controleArquivoDigitalDb); return ApplicationMapper.Mapper.Map(controleArquivoDigitalDb); } } }