public async Task ImportarArquivoAsync(IFormFile arquivo)
        {
            double progresso          = 0;
            int    clientesImportados = 0;
            int    clientesTotal      = 0;
            Tarefa tarefa             = null;

            try
            {
                IList <Cliente> clientes = new List <Cliente>();

                using (var reader = new StreamReader(arquivo.OpenReadStream()))
                {
                    var data   = reader.ReadToEnd();
                    var linhas = data.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
                    clientesTotal = linhas.Count();

                    tarefa = await _tarefaService.IniciarTarefaAsync(arquivo.FileName);

                    foreach (var linha in linhas)
                    {
                        progresso = (clientesImportados * 100 / clientesTotal);

                        var clienteLinha = linha.Split(',');
                        var cliente      = new Cliente()
                        {
                            Telefone       = long.Parse(clienteLinha[0]),
                            Nome           = clienteLinha[1],
                            DataNascimento = DateTime.Parse(clienteLinha[2])
                        };

                        await _repositorio.AdicionarAsync(cliente);

                        await _tarefaService.AtualizarProgressoAsync(tarefa, progresso);

                        clientesImportados++;
                    }

                    _tarefaService.FinalizarTarefaAsync(tarefa);
                }
            }
            catch (Exception ex)
            {
                _tarefaService.AtualizarStatusAsync(tarefa, StatusTarefaEnum.Erro);
            }
        }
Example #2
0
        public async Task <Result <ClienteDTO> > RegistrarNovoClienteAsync(CadastroDeClienteViewModel viewModel)
        {
            var result = Cliente.RegistrarNovoCliente(viewModel.Nome, viewModel.DataDeNascimento, viewModel.Salario);

            if (result.IsFailure)
            {
                return(result.ToResult <ClienteDTO>());
            }

            var cliente = result.Value;

            await _clienteRepository.AdicionarAsync(cliente).ConfigureAwait(false);

            await _unitOfWork.SaveChangesAsync().ConfigureAwait(false);

            return(result.ToResult(new ClienteDTO
            {
                Id = cliente.Id,
                Nome = cliente.Nome,
                DataDeNascimento = cliente.DataDeNascimento,
                Salario = cliente.Salario
            }));
        }
Example #3
0
        public async Task <IActionResult> FinalizarPedido(ClienteViewModel viewModel)
        {
            var pedido = await _pedidoRepository.ObterPedidoEmRascunhoAsync();

            var cliente = await _clienteRepository.ObterPorEmailAsync(viewModel.Email);

            if (cliente is null)
            {
                cliente = new Cliente(viewModel.Nome, viewModel.Email, viewModel.Telefone);

                await _clienteRepository.AdicionarAsync(cliente);
            }

            if (pedido is null)
            {
                return(BadRequest("Pedido não encontrado"));
            }

            pedido.FinalizarPedido(cliente);

            _pedidoRepository.Atualizar(pedido);

            try
            {
                await _unitOfWork.CommitAsync();
            }
            catch (Exception)
            {
                return(BadRequest("Ocorreu um erro ao finalizar o produto"));
            }

            return(Ok(new
            {
                PedidoId = pedido.Id.ToString()
            }));
        }