public async Task FinalizarConferenciaEnderecoRequisicao(FinalizarConferenciaEnderecoRequisicao requisicao, long idEmpresa, string idUsuarioExecucao)
        {
            using (var transacao = _unitOfWork.CreateTransactionScope())
            {
                LoteProdutoEndereco loteProdutoEndereco = _unitOfWork.LoteProdutoEnderecoRepository.PesquisarPorEndereco(requisicao.IdEnderecoArmazenagem);

                if (loteProdutoEndereco == null)
                {
                    throw new BusinessException("O produto não está instalado neste endereço.");
                }

                var qtdAnterior = loteProdutoEndereco.Quantidade;

                if (requisicao.QuantidadeFinal == 0)
                {
                    await _armazenagemService.RetirarVolumeEndereco(requisicao.IdEnderecoArmazenagem, loteProdutoEndereco.IdLote.Value, requisicao.IdProduto, idEmpresa, idUsuarioExecucao);
                }
                else
                {
                    await _armazenagemService.AjustarVolumeLote(new AjustarVolumeLoteRequisicao
                    {
                        IdEmpresa             = idEmpresa,
                        IdEnderecoArmazenagem = requisicao.IdEnderecoArmazenagem,
                        IdLote          = loteProdutoEndereco.IdLote.Value,
                        IdProduto       = requisicao.IdProduto,
                        IdUsuarioAjuste = idUsuarioExecucao,
                        Quantidade      = requisicao.QuantidadeFinal
                    });

                    await _unitOfWork.SaveChangesAsync();
                }

                var atividadeEstoque = _unitOfWork.AtividadeEstoqueRepository.GetById(requisicao.IdAtividadeEstoque);

                atividadeEstoque.QuantidadeInicial = qtdAnterior;
                atividadeEstoque.QuantidadeFinal   = requisicao.QuantidadeFinal;
                atividadeEstoque.IdUsuarioExecucao = idUsuarioExecucao;
                atividadeEstoque.DataExecucao      = DateTime.Now;
                atividadeEstoque.Finalizado        = true;

                await _unitOfWork.SaveChangesAsync();

                _coletorHistoricoService.GravarHistoricoColetor(new GravarHistoricoColetorRequisicao
                {
                    IdColetorAplicacao     = ColetorAplicacaoEnum.Armazenagem,
                    IdColetorHistoricoTipo = ColetorHistoricoTipoEnum.ConferirEndereco,
                    Descricao = $"Conferiu a atividade do endereço {atividadeEstoque.EnderecoArmazenagem.Codigo} do produto {atividadeEstoque.Produto.Referencia}," +
                                $" a quantidade anterior era de {atividadeEstoque.QuantidadeInicial} e quantidade conferida foi {atividadeEstoque.QuantidadeFinal}.",
                    IdEmpresa = idEmpresa,
                    IdUsuario = idUsuarioExecucao
                });

                await _unitOfWork.SaveChangesAsync();

                transacao.Complete();
            }
        }
        public async Task <IHttpActionResult> FinalizarConferenciaEndereco(FinalizarConferenciaEnderecoRequisicao requisicao)
        {
            if (!ModelState.IsValid)
            {
                return(ApiBadRequest(ModelState));
            }

            try
            {
                await _atividadeEstoqueService.FinalizarConferenciaEnderecoRequisicao(requisicao, IdEmpresa, IdUsuario);

                return(ApiOk());
            }
            catch (BusinessException ex)
            {
                return(ApiBadRequest(ex.Message));
            }
        }