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 System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Gestor.Infrastructure.Repository.Logic { public class MaisContatoRepository : GenericRepository, IMaisContatoRepository, IGenericRepository { private readonly GenericUnitOfWork _unitOfWork; public MaisContatoRepository(GenericUnitOfWork unitOfWork) : base(unitOfWork.Session) { this._unitOfWork = unitOfWork; } public void Delete(long id) { base.Delete(base.FindEntityById(id)); } public List DeleteContato(long clienteId, List contatos) { if (contatos == null) { return null; } List list = ( from cliente in base.All() where cliente.Cliente.Id == clienteId select cliente).ToList().Where((MaisContatoDb contato) => { List maisContatos = contatos; Func u003cu003e9_83 = MaisContatoRepository.u003cu003ec.u003cu003e9__8_3; if (u003cu003e9_83 == null) { u003cu003e9_83 = (MaisContato t) => t.Id; MaisContatoRepository.u003cu003ec.u003cu003e9__8_3 = u003cu003e9_83; } if (maisContatos.Select(u003cu003e9_83).Contains(contato.Id)) { return false; } return !contato.Excluido; }).ToList(); if (contatos.Count == 0 && (list == null || list.Count == 0)) { return null; } list.ForEach((MaisContatoDb contato) => { contato.Excluido = true; base.Merge(contato); }); return ApplicationMapper.Mapper.Map, List>(list); } public List FindByCustomerId(long id) { ClienteDb clienteDb = this._unitOfWork.Query().FirstOrDefault((ClienteDb x) => x.Id == id); if (clienteDb == null) { return new List(); } Cliente cliente = ApplicationMapper.Mapper.Map(clienteDb); List condicaos = new List() { new Condicao() { Campo = "idcliente", Valores = id.CriarValor() }, new Condicao() { Campo = "excluido", Valores = null, Operacao = Operacao.Or, Grupo = 1 }, new Condicao() { Campo = "excluido", Valores = "0".CriarValor(), Operacao = Operacao.Or, Grupo = 1 } }; return this._unitOfWork.Select(condicaos.CreateParameters(0), "SELECT * FROM clicontato WHERE", "").MapMaisContatos(cliente); } public MaisContato FindById(long id) { MaisContatoDb maisContatoDb = base.FindEntityById(id); return ApplicationMapper.Mapper.Map(maisContatoDb); } public List Inserir(List contatos, Cliente cliente) { contatos.ForEach((MaisContato x) => x.Cliente = cliente); List maisContatoDbs = ApplicationMapper.Mapper.Map, List>(contatos); base.AddRange(maisContatoDbs); return ApplicationMapper.Mapper.Map, List>(maisContatoDbs); } public List Inserir(List contatos) { List maisContatoDbs = ApplicationMapper.Mapper.Map, List>(contatos); maisContatoDbs.ForEach((MaisContatoDb x) => { if (x.Id == 0) { this.SaveOrUpdate(x); return; } base.Merge(x); }); return ApplicationMapper.Mapper.Map, List>(maisContatoDbs); } public MaisContato Merge(MaisContato maisContato) { MaisContatoDb maisContatoDb = ApplicationMapper.Mapper.Map(maisContato); base.Merge(maisContatoDb); return ApplicationMapper.Mapper.Map(maisContatoDb); } public List Merge(List contatos, Cliente cliente) { List maisContatoDbs = ApplicationMapper.Mapper.Map, List>(contatos); maisContatoDbs.ForEach((MaisContatoDb x) => { if (x.Id != 0) { base.Merge(x); return; } x.Cliente = ApplicationMapper.Mapper.Map(cliente); this.SaveOrUpdate(x); }); return ApplicationMapper.Mapper.Map, List>(maisContatoDbs); } public MaisContato SaveOrUpdate(MaisContato maisContato) { MaisContatoDb maisContatoDb = ApplicationMapper.Mapper.Map(maisContato); this.SaveOrUpdate(maisContatoDb); return ApplicationMapper.Mapper.Map(maisContatoDb); } } }