public IActionResult MovimentoEstoqueCreateOrUpdate(MovimentoEstoqueVM movimentoEstoqueVM) { _movimentoEstoqueBU.Save ( idCompany, idUser, OrigemMovimentoEstoqueEnum.MovimentacaoEstoque, 0, movimentoEstoqueVM.IDProduto, movimentoEstoqueVM.Tipo, movimentoEstoqueVM.Qtde, movimentoEstoqueVM.Observacao ); return(Ok()); }
public void FluxoPedido(int IDPedidoVenda, PedidoVendaStatusEnum Status, bool inTransaction = false) { PedidoVendaEN pedidoVendaEN = _repositoryPedidoVenda.GetByID(IDPedidoVenda); bool atualizaEstoque = true; if (pedidoVendaEN.Status == PedidoVendaStatusEnum.Aberto) { atualizaEstoque = false; } pedidoVendaEN.Status = Status; if (inTransaction == false) { _unitOfWork.BeginTransaction(); } try { _repositoryPedidoVenda.Edit(pedidoVendaEN); _unitOfWork.Commit(); if (atualizaEstoque && Status == PedidoVendaStatusEnum.Cancelado) { List <PedidoVendaItemEN> listPedidoVendaItem = _repositoryPedidoVendaItem.Where(obj => obj.IDPedido == pedidoVendaEN.IDPedido).ToList(); foreach (var itemPedido in listPedidoVendaItem) { _movimentoEstoqueBU.Save ( pedidoVendaEN.IDCompany, pedidoVendaEN.IDUser, OrigemMovimentoEstoqueEnum.PedidoVenda, itemPedido.IDPedido, itemPedido.IDProduto, TipoMovimentoEstoqueEnum.Entrada, itemPedido.Qtde, "Pedido de Venda [CANCELAMENTO]" ); } List <ContasReceberEN> listContasReceber = _repositoryContasReceber.Where(obj => obj.Chave == pedidoVendaEN.IDPedido && obj.Origem == OrigemContasReceberEnum.PedidoVenda).ToList(); var qtdeTitulosPagos = listContasReceber.Where(obj => obj.Status == ContasReceberStatusEnum.Baixado).Count(); if (qtdeTitulosPagos > 0) { throw new DomainException("Existem títulos pagos desse pedido. Cancelamento não permitido!"); } foreach (var itemContasReceber in listContasReceber) { itemContasReceber.Status = ContasReceberStatusEnum.Cancelado; _repositoryContasReceber.Edit(itemContasReceber); _unitOfWork.Commit(); } } else if (Status == PedidoVendaStatusEnum.AguardandoPagamento) { var listPedidoVendaItem = _repositoryPedidoVendaItem.Where(obj => obj.IDPedido == IDPedidoVenda).ToList(); var empresaEN = _repositoryEmpresa.GetByID(pedidoVendaEN.IDEmpresa); foreach (var itemPedido in listPedidoVendaItem) { //Criação Movimentação e Atualiza Estoque _movimentoEstoqueBU.Save ( pedidoVendaEN.IDCompany, pedidoVendaEN.IDUser, OrigemMovimentoEstoqueEnum.PedidoVenda, IDPedidoVenda, itemPedido.IDProduto, TipoMovimentoEstoqueEnum.Saida, itemPedido.Qtde, empresaEN.RazaoSocial ); } decimal valorTotalPedido = listPedidoVendaItem.Sum(obj => obj.ValorTotal); decimal valorTitulo = valorTotalPedido / (int)pedidoVendaEN.QtdeParcelas; decimal somaDosValorTitulo = 0; DateTime dataVencimento = pedidoVendaEN.DataCadastro.AddDays(10); int seq = 1; for (int iQtdeParcelas = 1; iQtdeParcelas <= (int)pedidoVendaEN.QtdeParcelas; iQtdeParcelas++) { somaDosValorTitulo += valorTitulo; //VERIFICA SE NA ÚLTIMA PARCELA EXISTE DIFERENÇA DE CENTAVOS if (iQtdeParcelas == (int)pedidoVendaEN.QtdeParcelas) { if (valorTotalPedido != somaDosValorTitulo) { decimal valorDiferenca = valorTotalPedido - somaDosValorTitulo; if (valorDiferenca < 0) { valorDiferenca = valorDiferenca * -1; } valorTitulo += valorDiferenca; } } //GRAVA O TÍTULO NO CONTAS A RECEBER _contasReceberBU.Save ( 0, pedidoVendaEN.IDCompany, pedidoVendaEN.IDUser, pedidoVendaEN.IDEmpresa, $"PED{pedidoVendaEN.IDPedido.ToString("00000")}_{iQtdeParcelas.ToString()}", seq, dataVencimento, valorTitulo, 0, OrigemContasReceberEnum.PedidoVenda, string.Empty, pedidoVendaEN.IDPedido, "Título gravado pelo fluxo de pedido." ); dataVencimento = dataVencimento.AddDays(30); seq += 1; } } if (inTransaction == false) { _unitOfWork.CommitTransaction(); } } catch (DomainException ex) { if (inTransaction == false) { _unitOfWork.RollbackTransaction(); } throw new DomainException(ex.Message); } catch { if (inTransaction == false) { _unitOfWork.RollbackTransaction(); } throw new DomainException("Erro ao atualizar status do pedido. Tente novamente mais tarde"); } }