示例#1
0
        public IActionResult ContasReceberCreateOrUpdate(ContasReceberVM contasReceberVM)
        {
            if ((int)contasReceberVM.Origem == 0)
            {
                contasReceberVM.Origem = OrigemContasReceberEnum.ContasReceber;
            }

            if (contasReceberVM.Seq == 0)
            {
                contasReceberVM.Seq = 1;
            }

            _contasReceberBU.Save
            (
                contasReceberVM.IDContasReceber,
                idCompany,
                idUser,
                contasReceberVM.IDEmpresa,
                contasReceberVM.NumeroTitulo,
                contasReceberVM.Seq,
                contasReceberVM.DataVencimento,
                contasReceberVM.Valor,
                contasReceberVM.ValorPago,
                contasReceberVM.Origem,
                contasReceberVM.LinkFatura,
                contasReceberVM.Chave,
                contasReceberVM.Observacao
            );

            return(Ok());
        }
示例#2
0
        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");
            }
        }