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.Generic; using Gestor.Model.Domain.Seguros; using Gestor.Model.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Gestor.Infrastructure.Repository.Logic { public class ClienteTelefoneRepository : GenericRepository, IClienteTelefoneRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public ClienteTelefoneRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public List DeleteFone(long clienteId, List telefones) { if (telefones == null || telefones.Count == 0) { return null; } List list = ( from cliente in base.All() where cliente.Cliente.Id == clienteId select cliente).ToList().Where((ClienteTelefoneDb fone) => { List clienteTelefones = telefones; Func u003cu003e9_103 = ClienteTelefoneRepository.u003cu003ec.u003cu003e9__10_3; if (u003cu003e9_103 == null) { u003cu003e9_103 = (ClienteTelefone t) => t.Id; ClienteTelefoneRepository.u003cu003ec.u003cu003e9__10_3 = u003cu003e9_103; } return !clienteTelefones.Select(u003cu003e9_103).Contains(fone.Id); }).ToList(); list.ForEach((ClienteTelefoneDb fonesExcluido) => base.Delete(fonesExcluido)); return ApplicationMapper.Mapper.Map, List>(list); } public List Find(string telefone, long idempresa = 0L) { List condicaos = new List() { new Condicao() { Campo = "REPLACE(ISNULL(ct.fone, ''), '-','')", Valores = telefone.Clear().CriarValor(), Operador = Operador.Like } }; if (idempresa > (long)0) { condicaos.Add(new Condicao() { Campo = "c.idempresa", Valores = idempresa.CriarValor() }); } return this.Select(condicaos.CreateParameters(0)); } private List FindByCliente(long id) { return this.Select((new List() { new Condicao() { Campo = "ct.idcliente", Valores = id.CriarValor() } }).CreateParameters(0)); } public List FindByClienteId(long id) { return this.FindByCliente(id); } public ClienteTelefone FindById(long id) { ClienteTelefoneDb clienteTelefoneDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(clienteTelefoneDb); } public List Inserir(List telefones) { List clienteTelefoneDbs = ApplicationMapper.Mapper.Map, List>(telefones); clienteTelefoneDbs.ForEach((ClienteTelefoneDb x) => { string str; ClienteTelefoneDb clienteTelefoneDb = x; string observacao = x.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteTelefoneDb.Observacao = str; if (x.Id == 0) { this.SaveOrUpdate(x); return; } base.Merge(x); }); return ApplicationMapper.Mapper.Map, List>(clienteTelefoneDbs); } public List Inserir(List telefones, Cliente cliente) { telefones.ForEach((ClienteTelefone x) => { string str; x.Cliente = cliente; ClienteTelefone clienteTelefone = x; string observacao = x.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteTelefone.Observacao = str; }); List clienteTelefoneDbs = ApplicationMapper.Mapper.Map, List>(telefones); base.AddRange(clienteTelefoneDbs); return ApplicationMapper.Mapper.Map, List>(clienteTelefoneDbs); } public ClienteTelefone Merge(ClienteTelefone telefone) { ClienteTelefoneDb clienteTelefoneDb = ApplicationMapper.Mapper.Map(telefone); clienteTelefoneDb.Observacao = clienteTelefoneDb.Observacao.Trim(); base.Merge(clienteTelefoneDb); return ApplicationMapper.Mapper.Map(clienteTelefoneDb); } public List Merge(List telefones, Cliente cliente) { List clienteTelefoneDbs = ApplicationMapper.Mapper.Map, List>(telefones); clienteTelefoneDbs.ForEach((ClienteTelefoneDb x) => { string str; ClienteTelefoneDb clienteTelefoneDb = x; string observacao = x.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteTelefoneDb.Observacao = str; if (x.Id != 0) { base.Merge(x); return; } x.Cliente = ApplicationMapper.Mapper.Map(cliente); this.SaveOrUpdate(x); }); return ApplicationMapper.Mapper.Map, List>(clienteTelefoneDbs); } public ClienteTelefone SaveOrUpdate(ClienteTelefone telefone) { string str; ClienteTelefoneDb clienteTelefoneDb = ApplicationMapper.Mapper.Map(telefone); ClienteTelefoneDb clienteTelefoneDb1 = clienteTelefoneDb; string observacao = clienteTelefoneDb.Observacao; if (observacao != null) { str = observacao.Trim(); } else { str = null; } clienteTelefoneDb1.Observacao = str; this.SaveOrUpdate(clienteTelefoneDb); return ApplicationMapper.Mapper.Map(clienteTelefoneDb); } private List Select(SqlQueryCondition condition) { List clienteTelefones = CustomMap.MapTelefone(this._unitOfWork.Select(condition, "SELECT ct.idclitelefone AS Id, ct.idcliente as IdCliente, ct.ddd AS Prefixo, ct.fone AS Numero, ISNULL(ct.tipo , 0) AS Tipo, ct.obs AS Observacao, ct.ordem AS Ordem, c.nome as NomeCliente FROM clitelefone ct INNER JOIN cliente c ON c.idcliente = ct.idcliente WHERE ", "")); int? nullable1 = new int?(0); clienteTelefones.ForEach((ClienteTelefone x) => { int? ordem = nullable1; int? nullable = ordem; nullable1 = (nullable.HasValue ? new int?(nullable.GetValueOrDefault() + 1) : null); ClienteTelefone clienteTelefone = x; ordem = x.Ordem; clienteTelefone.Ordem = (ordem.HasValue ? ordem : nullable1); }); return clienteTelefones; } } }