Example #1
0
        /// <summary>
        /// Quita o débito de um funcionário.
        /// </summary>
        /// <param name="idFunc"></param>
        /// <returns></returns>
        public string Quitar(uint idFunc, decimal[] valores, uint[] formasPagto, uint[] tiposCartao, uint[] parcelasCartao,
                             uint[] contasBanco, uint[] depositoNaoIdentificado, uint[] cartaoNaoIdentificado, uint[] tiposBoleto, decimal[] taxaAntecip, string numAutConstrucard, bool recebimentoParcial,
                             bool gerarCredito, string chequesPagto, string obs)
        {
            UtilsFinanceiro.DadosRecebimento retorno = null;

            try
            {
                decimal totalASerPago = Math.Abs(GetSaldo(idFunc));

                decimal totalPago = 0;
                foreach (decimal v in valores)
                {
                    totalPago += v;
                }

                if (!recebimentoParcial && !gerarCredito && totalPago != totalASerPago)
                {
                    throw new Exception("Total pago (" + totalPago.ToString("C") + ") não confere com o total a ser pago (" + totalASerPago.ToString("C") + ").");
                }
                else if (!recebimentoParcial && gerarCredito && totalPago < totalASerPago)
                {
                    throw new Exception("Total pago (" + totalPago.ToString("C") + ") não pode ser menor que o total a ser pago (" + totalASerPago.ToString("C") + ").");
                }
                else if (recebimentoParcial && totalPago > totalASerPago)
                {
                    throw new Exception("Total pago (" + totalPago.ToString("C") + ") não pode ser maior que o total a ser pago (" + totalASerPago.ToString("C") + ").");
                }

                retorno = UtilsFinanceiro.Receber(null, UserInfo.GetUserInfo.IdLoja, null, null, null, null, null, null, null, null, null, null, null, 0, 0, null, null, totalASerPago, totalPago,
                                                  valores, formasPagto, contasBanco, depositoNaoIdentificado, cartaoNaoIdentificado, tiposCartao, tiposBoleto, taxaAntecip, 0, recebimentoParcial, false, 0,
                                                  numAutConstrucard, false, parcelasCartao, chequesPagto, false, UtilsFinanceiro.TipoReceb.CreditoValeFuncionario);

                if (retorno.ex != null)
                {
                    throw retorno.ex;
                }

                // Faz as movimentações de saída do controle de vales
                for (int i = 0; i < valores.Length; i++)
                {
                    if (valores[i] > 0 && formasPagto[i] > 0)
                    {
                        uint idConta = UtilsPlanoConta.GetPlanoContaVendaFunc(formasPagto[i], tiposCartao[i]);
                        Movimentar(idFunc, null, null, idConta, 1, valores[i], obs);
                    }
                }

                string textoRetorno = "Ok;Débito quitado";
                if (totalPago < totalASerPago)
                {
                    textoRetorno += " parcialmente. Ainda restam " + (totalASerPago - totalPago).ToString("C") + " a serem quitados.";
                }
                else
                {
                    textoRetorno += ".";
                }

                return(textoRetorno);
            }
            catch (Exception ex)
            {
                if (retorno != null)
                {
                    foreach (Cheques c in retorno.lstChequesInseridos)
                    {
                        ChequesDAO.Instance.Delete(c);
                    }

                    foreach (uint idCxDiario in retorno.idCxDiario)
                    {
                        CaixaDiarioDAO.Instance.DeleteByPrimaryKey(idCxDiario);
                    }

                    foreach (uint idCxGeral in retorno.idCxGeral)
                    {
                        CaixaGeralDAO.Instance.DeleteByPrimaryKey(idCxGeral);
                    }

                    foreach (uint idMovBanco in retorno.idMovBanco)
                    {
                        MovBancoDAO.Instance.DeleteByPrimaryKey(idMovBanco);
                    }

                    foreach (uint idParcCartao in retorno.idParcCartao)
                    {
                        ContasReceberDAO.Instance.DeleteByPrimaryKey(idParcCartao);
                    }
                }

                return("Erro;" + Glass.MensagemAlerta.FormatErrorMsg("Falha ao quitar débito.", ex));
            }
        }
Example #2
0
        /// <summary>
        /// Faz a devolução de um pagamento.
        /// </summary>
        public uint Devolver(uint idCliente, DateTime data, decimal[] valores, uint[] idFormaPagto, uint[] idContaBanco, uint[] depositoNaoIdentificado, uint[] idTipoCartao,
                             uint[] numeroParcelas, uint[] idTipoBoleto, decimal[] taxaAntecip, string chequesPagto, string numAutConstrucard, decimal creditoUtilizado,
                             string obs, bool caixaDiario)
        {
            Glass.FilaOperacoes.ReceberDevolucaoPagto.AguardarVez();

            using (var transaction = new GDATransaction())
            {
                try
                {
                    transaction.BeginTransaction();

                    UtilsFinanceiro.DadosRecebimento retorno = null;

                    decimal totalDevolucao = 0;
                    foreach (decimal v in valores)
                    {
                        totalDevolucao += v;
                    }

                    // Insere o registro da devolução
                    DevolucaoPagto dev = new DevolucaoPagto();
                    dev.IdCliente = idCliente;
                    dev.Valor     = totalDevolucao;
                    dev.Situacao  = (int)DevolucaoPagto.SituacaoDevolucao.Aberta;
                    dev.Obs       = obs;
                    uint idDevolucaoPagto = Insert(transaction, dev);
                    dev.IdDevolucaoPagto = idDevolucaoPagto;

                    if (idDevolucaoPagto == 0)
                    {
                        throw new Exception("Falha ao inserir devolução de pagamento. Registro 0.");
                    }

                    #region Cheques

                    // Cheques próprios
                    List <Cheques> lstChequesInseridos = new List <Cheques>();

                    // Guarda os ids dos cheques de terceiros
                    string idsChequeTerc = String.Empty;
                    string idsChequeProp = String.Empty;

                    for (int i = 0; i < idFormaPagto.Length; i++)
                    {
                        // Se a forma de pagamento for cheques próprios cadastra os cheques
                        if ((idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio || idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro) &&
                            !String.IsNullOrEmpty(chequesPagto))
                        {
                            Cheques cheque;

                            // Separa os cheques guardando-os em um vetor
                            string[] vetCheque = chequesPagto.TrimEnd(' ').TrimEnd('|').Split('|');

                            if (idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeProprio)
                            {
                                #region Cadastra os cheques próprios

                                // Para cada cheque próprio informado, cadastra o mesmo, guardando os ids que cada um retorna
                                foreach (string c in vetCheque)
                                {
                                    // Divide o cheque para pegar suas propriedades
                                    string[] dadosCheque = c.Split('\t');

                                    if (dadosCheque[0] == "proprio") // Se for cheque próprio
                                    {
                                        // Insere cheque no BD
                                        cheque = ChequesDAO.Instance.GetFromString(c);
                                        if (cheque.Situacao == (int)Cheques.SituacaoCheque.Compensado)
                                        {
                                            cheque.DataReceb = data;
                                        }
                                        cheque.IdDevolucaoPagto = idDevolucaoPagto;
                                        cheque.IdCheque         = ChequesDAO.Instance.InsertBase(transaction, cheque);

                                        if (cheque.IdCheque < 1)
                                        {
                                            throw new Exception("retorno do insert do cheque=0");
                                        }

                                        // Adiciona este cheque à lista de cheques inseridos
                                        lstChequesInseridos.Add(cheque);
                                    }
                                }

                                #endregion

                                #region Gera Movimentação Bancária

                                // Salva o id de cada cheque próprio utilizado na devolução de pagamento
                                foreach (Cheques c in lstChequesInseridos)
                                {
                                    idsChequeProp += c.IdCheque.ToString() + ",";
                                }

                                // Para cada cheque "Compensado" utilizado neste pagamento, debita o valor da conta bancária associada ao mesmo
                                foreach (Cheques c in lstChequesInseridos)
                                {
                                    if (c.Situacao == (int)Cheques.SituacaoCheque.Compensado)
                                    {
                                        ContaBancoDAO.Instance.MovContaDevolucaoPagto(transaction, c.IdContaBanco.Value,
                                                                                      UtilsPlanoConta.GetPlanoContaDevolucaoPagto(idFormaPagto[i], 0, 0), (int)UserInfo.GetUserInfo.IdLoja,
                                                                                      idDevolucaoPagto, idCliente, 2, c.Valor, data);
                                    }
                                }

                                #endregion
                            }
                            // Se a forma de pagamento for cheques de terceiros
                            else if (idFormaPagto[i] == (uint)Glass.Data.Model.Pagto.FormaPagto.ChequeTerceiro)
                            {
                                // Verifica cheque por cheque
                                foreach (string c in vetCheque)
                                {
                                    // Divide o cheque para pegar suas propriedades
                                    string[] dadosCheque = c.Split('\t');

                                    if (dadosCheque[0] == "terceiro") // Se for cheque de terceiro
                                    {
                                        // Salva o id do cheque
                                        idsChequeTerc += dadosCheque[18] + ",";
                                    }
                                }
                            }
                        }
                    }

                    #endregion

                    dev.ValorCreditoAoCriar = ClienteDAO.Instance.GetCredito(transaction, idCliente);
                    dev.Cheques             = idsChequeProp + idsChequeTerc.TrimEnd(',');

                    retorno = UtilsFinanceiro.Receber(transaction, UserInfo.GetUserInfo.IdLoja, null, null, null, null, null, null, null, null, null, null, null,
                                                      idCliente, idDevolucaoPagto, null, data.ToString(), totalDevolucao, totalDevolucao, valores, idFormaPagto, idContaBanco, depositoNaoIdentificado, new uint[] { }, idTipoCartao,
                                                      idTipoCartao, taxaAntecip, 0, false, false, creditoUtilizado, numAutConstrucard, caixaDiario, numeroParcelas, String.Concat(idsChequeTerc.TrimEnd(',')),
                                                      false, UtilsFinanceiro.TipoReceb.DevolucaoPagto);

                    if (retorno.ex != null)
                    {
                        throw retorno.ex;
                    }

                    dev.CreditoGeradoCriar    = retorno.creditoGerado;
                    dev.CreditoUtilizadoCriar = creditoUtilizado;
                    Update(transaction, dev);

                    transaction.Commit();
                    transaction.Close();

                    return(idDevolucaoPagto);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    transaction.Close();
                    throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao efetuar a devolução de pagamento.", ex));
                }
                finally
                {
                    Glass.FilaOperacoes.ReceberDevolucaoPagto.ProximoFila();
                }
            }
        }