using AutoMapper; using Gestor.Infrastructure.Entities.Generic; using Gestor.Infrastructure.Entities.Seguros; using Gestor.Infrastructure.Mappers; using Gestor.Infrastructure.Repository.Generic; using Gestor.Infrastructure.Repository.Interface; using Gestor.Infrastructure.UnitOfWork.Generic; 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 ClienteEnderecoRepository : GenericRepository, IClienteEnderecoRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public ClienteEnderecoRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public List DeleteEndereco(long clienteId, List enderecos) { if (enderecos == null || enderecos.Count == 0) { return null; } List list = ( from cliente in base.All() where cliente.Cliente.Id == clienteId select cliente).ToList().Where((ClienteEnderecoDb endereco) => { List clienteEnderecos = enderecos; Func u003cu003e9_102 = ClienteEnderecoRepository.u003cu003ec.u003cu003e9__10_2; if (u003cu003e9_102 == null) { u003cu003e9_102 = (ClienteEndereco t) => t.Id; ClienteEnderecoRepository.u003cu003ec.u003cu003e9__10_2 = u003cu003e9_102; } return !clienteEnderecos.Select(u003cu003e9_102).Contains(endereco.Id); }).ToList(); ClienteEnderecoRepository clienteEnderecoRepository = this; list.ForEach(new Action(clienteEnderecoRepository.Delete)); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByCliente(List clientes) { string str = string.Concat(" AND ce.idcliente in (", string.Join(",", ( from x in clientes select x.Id).Distinct()), ")"); List clienteEnderecos = this.Select(str); ( from x in clienteEnderecos orderby x.Ordem select x).ToList().ForEach((ClienteEndereco x) => x.Selecionado = x.Id == clienteEnderecos.First((ClienteEndereco c) => c.Cliente.Id == x.Cliente.Id).Id); return clienteEnderecos; } public List FindByClienteId(long id) { return this.Select(string.Format(" AND ce.idcliente = {0}", id)); } public ClienteEndereco FindById(long id) { ClienteEnderecoDb clienteEnderecoDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(clienteEnderecoDb); } public List Inserir(List endereco, Cliente cliente) { endereco.ForEach((ClienteEndereco x) => x.Cliente = cliente); List clienteEnderecoDbs = ApplicationMapper.Mapper.Map, List>(endereco); base.AddRange(clienteEnderecoDbs); return ApplicationMapper.Mapper.Map, List>(clienteEnderecoDbs); } public List Inserir(List endereco) { List clienteEnderecoDbs = ApplicationMapper.Mapper.Map, List>(endereco); clienteEnderecoDbs.ForEach((ClienteEnderecoDb x) => { string str; ClienteEnderecoDb clienteEnderecoDb = x; string observacao = x.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteEnderecoDb.Observacao = str; if (x.Id == 0) { this.SaveOrUpdate(x); return; } base.Merge(x); }); return ApplicationMapper.Mapper.Map, List>(clienteEnderecoDbs); } public ClienteEndereco Merge(ClienteEndereco clienteEndereco) { string str; ClienteEnderecoDb clienteEnderecoDb = ApplicationMapper.Mapper.Map(clienteEndereco); ClienteEnderecoDb clienteEnderecoDb1 = clienteEnderecoDb; string observacao = clienteEnderecoDb.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteEnderecoDb1.Observacao = str; base.Merge(clienteEnderecoDb); return ApplicationMapper.Mapper.Map(clienteEnderecoDb); } public List Merge(List enderecos, Cliente cliente) { List clienteEnderecoDbs = ApplicationMapper.Mapper.Map, List>(enderecos); clienteEnderecoDbs.ForEach((ClienteEnderecoDb x) => { string str; ClienteEnderecoDb clienteEnderecoDb = x; string observacao = x.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteEnderecoDb.Observacao = str; if (x.Id != 0) { base.Merge(x); return; } x.Cliente = ApplicationMapper.Mapper.Map(cliente); this.SaveOrUpdate(x); }); return ApplicationMapper.Mapper.Map, List>(clienteEnderecoDbs); } public ClienteEndereco SaveOrUpdate(ClienteEndereco clienteEndereco) { string str; ClienteEnderecoDb clienteEnderecoDb = ApplicationMapper.Mapper.Map(clienteEndereco); ClienteEnderecoDb clienteEnderecoDb1 = clienteEnderecoDb; string observacao = clienteEnderecoDb.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteEnderecoDb1.Observacao = str; this.SaveOrUpdate(clienteEnderecoDb); return ApplicationMapper.Mapper.Map(clienteEnderecoDb); } private List Select(string condition) { object connection; DataTable dataTable = 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 ce.*, c.nome as NomeCliente FROM cliendereco ce INNER JOIN cliente c ON c.idcliente = ce.idcliente WHERE 1=1 ", condition); using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter()) { sqlDataAdapter.SelectCommand = sqlCommand; sqlDataAdapter.Fill(dataTable); } } } List clienteEnderecos = dataTable.MapEndereco(); int? nullable1 = new int?(0); clienteEnderecos.ForEach((ClienteEndereco x) => { int? ordem = nullable1; int? nullable = ordem; nullable1 = (nullable.HasValue ? new int?(nullable.GetValueOrDefault() + 1) : null); ClienteEndereco clienteEndereco = x; ordem = x.Ordem; clienteEndereco.Ordem = (ordem.HasValue ? ordem : nullable1); }); return clienteEnderecos; } } }