public async Task <Respuesta <IClienteDTO> > ActualizarCliente(IClienteDTO cliente)
 {
     return(await new Wrapper <IClienteDTO>().EjecutarTransaccionAsync(async() =>
     {
         contexto.Entry(mapper.Map <Cliente>(cliente)).State = EntityState.Modified;
         await contexto.SaveChangesAsync();
         return FabricaRespuesta <IClienteDTO> .RespuestaEdicionExitosa(new List <IClienteDTO> {
             cliente
         });
     }, async() => await FabricaRespuesta <IClienteDTO> .RespuestaFallida(Mensajes.ErrorEnEdición)));
 }
 public async Task <Respuesta <IClienteDTO> > CrearCliente(IClienteDTO cliente)
 {
     return(await new Wrapper <IClienteDTO>().EjecutarTransaccionAsync(async() =>
     {
         Cliente nuevoCliente = mapper.Map <Cliente>(cliente);
         contexto.Add(nuevoCliente);
         await contexto.SaveChangesAsync();
         return FabricaRespuesta <IClienteDTO> .RespuestaCreacionExitosa(new List <IClienteDTO> {
             nuevoCliente
         });
     }, async() => await FabricaRespuesta <IClienteDTO> .RespuestaFallida(Mensajes.ErrorEnCreacion)));
 }
 public async Task <Respuesta <IClienteDTO> > LeerCliente(IClienteDTO clienteIn)
 {
     return(await new Wrapper <IClienteDTO>().EjecutarTransaccionAsync(async() =>
     {
         Cliente cliente = await contexto.Cliente.FirstOrDefaultAsync(cli => cli.Cedula == clienteIn.Cedula);
         if (cliente == null)
         {
             return FabricaRespuesta <IClienteDTO> .RespuestaSinDatos();
         }
         return FabricaRespuesta <IClienteDTO> .RespuestaConDatos(new List <IClienteDTO> {
             clienteIn
         });
     }));
 }
        public async Task <Respuesta <IClienteDTO> > EliminarCliente(IClienteDTO cliente)
        {
            return(await new Wrapper <IClienteDTO>().EjecutarTransaccionAsync(async() =>
            {
                int clienteId = await contexto.Cliente
                                .Select(Cli => Cli.IdCliente)
                                .FirstOrDefaultAsync(x => x == cliente.IdCliente);

                if (clienteId == default)
                {
                    return FabricaRespuesta <IClienteDTO> .RespuestaEliminacionFallida();
                }
                else
                {
                    List <Factura> facturasCliente = await contexto.Factura
                                                     .Include(fac => fac.DetalleFactura)
                                                     .Where(cli => cli.IdCliente == cliente.IdCliente)
                                                     .ToListAsync();

                    foreach (Factura factura in facturasCliente)
                    {
                        contexto.RemoveRange(factura.DetalleFactura);
                        await contexto.SaveChangesAsync();
                    }

                    contexto.RemoveRange(facturasCliente);
                    await contexto.SaveChangesAsync();

                    contexto.Cliente.Remove(new Cliente {
                        IdCliente = clienteId
                    });
                    await contexto.SaveChangesAsync();
                    return FabricaRespuesta <IClienteDTO> .RespuestaEliminacionExitosa();
                }
            }, async() => await FabricaRespuesta <IClienteDTO> .RespuestaFallida(Mensajes.ErrorEnEliminacion)));
        }
 public async Task <Respuesta <IClienteDTO> > LeerCliente(IClienteDTO cliente)
 {
     return(await clienteDAL.LeerCliente(cliente));
 }
 public async Task <Respuesta <IClienteDTO> > EliminarCliente(IClienteDTO cliente)
 {
     return(await clienteDAL.EliminarCliente(cliente));
 }
 public async Task <Respuesta <IClienteDTO> > ActualizarCliente(IClienteDTO cliente)
 {
     return(await clienteDAL.ActualizarCliente(cliente));
 }