using AutoMapper; using Gestor.Infrastructure.Entities.Generic; using Gestor.Infrastructure.Entities.Seguros; 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.Generic; using Gestor.Model.Domain.Seguros; 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 PatrimonialRepository : GenericRepository, IPatrimonialRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public PatrimonialRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public void DeleteRange(List ids) { List list = ( from x in base.All() where ids.Contains(x.Item.Id) select x).ToList(); base.DeleteRange(list); } public Patrimonial Find(long id) { PatrimonialDb patrimonialDb = base.All().FirstOrDefault((PatrimonialDb x) => x.Item.Id == id) ?? new PatrimonialDb(); return ApplicationMapper.Mapper.Map(patrimonialDb); } public Patrimonial FindById(long id) { PatrimonialDb patrimonialDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(patrimonialDb); } public List FindImobiliaria(string imobiliaria, FiltroStatusDocumento status, List vendedorVinculado) { List pesquisaAvancadas; object connection; DataTable dataTable = new DataTable(); DataTable dataTable1 = new DataTable(); DataTable dataTable2 = new DataTable(); DataTable dataTable3 = new DataTable(); SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; 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 iditem as id FROM resempco WHERE imobiliaria LIKE '%", imobiliaria, "%'"); using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } if (dataTable.Rows.Count != 0) { string str = string.Concat(" AND iditem IN (", string.Join(",", dataTable.AsEnumerable().Select((DataRow v) => v.Field("id"))), ")"); sqlCommand.CommandText = string.Concat("SELECT iddocumento as id, descricao, iditem FROM item WHERE 1=1 ", str); using (SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter()) { sqlDataAdapter1.SelectCommand = sqlCommand; sqlDataAdapter1.Fill(dataTable1); } sqlCommand.CommandText = string.Concat("SELECT DISTINCT cl.nome as cliente, c.idcliente, d.idcontrole, d.iddocumento, situacao, vigencia1, vigencia2, proposta, contrato as apolice, aditamento as endosso, CAST(tipo as INTEGER) as tipo FROM documento d INNER JOIN controle c on c.idcontrole = d.idcontrole INNER JOIN cliente cl on cl.idcliente = c.idcliente WHERE d.iddocumento IN (", string.Join(",", dataTable1.AsEnumerable().Select((DataRow v) => v.Field("id"))), ")"); using (SqlDataAdapter sqlDataAdapter2 = new SqlDataAdapter()) { sqlDataAdapter2.SelectCommand = sqlCommand; sqlDataAdapter2.Fill(dataTable2); } string str1 = string.Concat(" AND d.idcontrole IN (", string.Join(",", ( from x in dataTable2.AsEnumerable().ToList() select x.Field("idcontrole")).ToList()), ")"); sqlCommand.CommandText = string.Concat("SELECT DISTINCT vp.idvendedor, d.iddocumento, d.idcontrole, vp.idtipovendedor FROM vendedorparcela vp INNER JOIN documento d on d.iddocumento = vp.iddocumento WHERE 1=1 ", str1); using (SqlDataAdapter sqlDataAdapter3 = new SqlDataAdapter()) { sqlDataAdapter3.SelectCommand = sqlCommand; sqlDataAdapter3.Fill(dataTable3); List list = null; if (vendedorVinculado != null && vendedorVinculado.Count > 0) { list = dataTable3.AsEnumerable().Where((DataRow x) => { List vendedorUsuarios = vendedorVinculado; Func u003cu003e9_85 = PatrimonialRepository.u003cu003ec.u003cu003e9__8_5; if (u003cu003e9_85 == null) { u003cu003e9_85 = (VendedorUsuario v) => v.Vendedor.Id; PatrimonialRepository.u003cu003ec.u003cu003e9__8_5 = u003cu003e9_85; } return vendedorUsuarios.Select(u003cu003e9_85).Contains(x.Field("idvendedor")); }).Select((DataRow x) => x.Field("idcontrole")).ToList(); } if (list != null && list.Count == 0) { return new List(); } return Auxiliar.PesquisaAvancada(status, dataTable2, dataTable1, list); } } else { pesquisaAvancadas = new List(); } } } return pesquisaAvancadas; } public List Findlocatario(string imobiliaria, FiltroStatusDocumento status, List vendedorVinculado) { List pesquisaAvancadas; object connection; bool count; DataTable dataTable = new DataTable(); DataTable dataTable1 = new DataTable(); DataTable dataTable2 = new DataTable(); DataTable dataTable3 = new DataTable(); SessionFactoryImpl sessionFactory = this._unitOfWork.Session.SessionFactory as SessionFactoryImpl; 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(new string[] { "SELECT DISTINCT rec.iditem AS id FROM resempco rec INNER JOIN item i ON i.iditem = rec.iditem INNER JOIN documento d ON i.IDDOCUMENTO = d.IDDOCUMENTO WHERE (rec.locatario LIKE '%", imobiliaria, "%' OR rec.locatario2 LIKE '%", imobiliaria, "%' OR rec.locatario3 LIKE '%", imobiliaria, "%') AND d.excluido != 1;" }); using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } if (dataTable.Rows.Count != 0) { string str = string.Concat(" AND iditem IN (", string.Join(",", dataTable.AsEnumerable().Select((DataRow v) => v.Field("id"))), ")"); sqlCommand.CommandText = string.Concat("SELECT iddocumento as id, descricao, iditem FROM item WHERE 1=1 ", str); using (SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter()) { sqlDataAdapter1.SelectCommand = sqlCommand; sqlDataAdapter1.Fill(dataTable1); } sqlCommand.CommandText = string.Concat("SELECT DISTINCT cl.nome as cliente, c.idcliente, d.idcontrole, d.iddocumento, situacao, vigencia1, vigencia2, proposta, contrato as apolice, aditamento as endosso, CAST(tipo as INTEGER) as tipo FROM documento d INNER JOIN controle c on c.idcontrole = d.idcontrole INNER JOIN cliente cl on cl.idcliente = c.idcliente WHERE d.iddocumento IN (", string.Join(",", dataTable1.AsEnumerable().Select((DataRow v) => v.Field("id"))), ")"); using (SqlDataAdapter sqlDataAdapter2 = new SqlDataAdapter()) { sqlDataAdapter2.SelectCommand = sqlCommand; sqlDataAdapter2.Fill(dataTable2); } string str1 = string.Concat(" AND d.idcontrole IN (", string.Join(",", ( from x in dataTable2.AsEnumerable().ToList() select x.Field("idcontrole")).ToList()), ")"); sqlCommand.CommandText = string.Concat("SELECT DISTINCT vp.idvendedor, d.iddocumento, d.idcontrole, vp.idtipovendedor FROM vendedorparcela vp INNER JOIN documento d on d.iddocumento = vp.iddocumento WHERE 1=1 ", str1); using (SqlDataAdapter sqlDataAdapter3 = new SqlDataAdapter()) { sqlDataAdapter3.SelectCommand = sqlCommand; sqlDataAdapter3.Fill(dataTable3); goto Label0; } } else { pesquisaAvancadas = new List(); } } } return pesquisaAvancadas; Label0: List list = null; if (vendedorVinculado != null && vendedorVinculado.Count > 0) { list = dataTable3.AsEnumerable().Where((DataRow x) => { List vendedorUsuarios = vendedorVinculado; Func u003cu003e9_97 = PatrimonialRepository.u003cu003ec.u003cu003e9__9_7; if (u003cu003e9_97 == null) { u003cu003e9_97 = (VendedorUsuario v) => v.Vendedor.Id; PatrimonialRepository.u003cu003ec.u003cu003e9__9_7 = u003cu003e9_97; } return vendedorUsuarios.Select(u003cu003e9_97).Contains(x.Field("idvendedor")); }).Select((DataRow x) => x.Field("idcontrole")).ToList(); } if (vendedorVinculado != null) { List vendedorUsuarios1 = vendedorVinculado; if (vendedorUsuarios1 != null) { count = vendedorUsuarios1.Count == 0; } else { count = false; } if (count) { list = dataTable2.AsEnumerable().Where((DataRow x) => x.Field("idcontrole").HasValue).Select((DataRow x) => x.Field("idcontrole")).ToList(); } } return Auxiliar.PesquisaAvancada(status, dataTable2, dataTable1, list); } public Patrimonial Merge(Patrimonial patrimonial) { PatrimonialDb patrimonialDb = ApplicationMapper.Mapper.Map(patrimonial); base.Merge(patrimonialDb); return ApplicationMapper.Mapper.Map(patrimonialDb); } public Patrimonial SaveOrUpdate(Patrimonial patrimonial) { PatrimonialDb patrimonialDb = ApplicationMapper.Mapper.Map(patrimonial); this.SaveOrUpdate(patrimonialDb); return ApplicationMapper.Mapper.Map(patrimonialDb); } } }