예제 #1
0
        public static AnaliseCreditoResult Analisar(IMovimento movimento)
        {
            AnaliseCreditoResult result = new AnaliseCreditoResult();

            //-------------------------------------------------------------------------
            // Buscar todos os movimentos em abertos que existem para este cliente
            //-------------------------------------------------------------------------

            Connection connection = null;
            ICliente cliente = movimento.DadoPessoa.Cliente as ICliente;

            if (movimento.New)
            {
                if (cliente != null)
                {
                    IOcorrencia ocorrencia = null;
                    IList<IOcorrencia> ocorrencias = cliente.Ocorrencias.Where(k => k.TipoOcorrencia == Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito).ToList();

                    try
                    {
                        if (cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.Bloqueado)
                        {
                            ocorrencia = new Ocorrencia();
                            ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito;
                            ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Bloqueio;
                            ocorrencia.Descricao = "Análise de Crédito - Cliente com restrição - Faturamento: " + movimento.EGUID.ToString();
                            ocorrencia.Data = DateTime.Now;
                            cliente.Ocorrencias.Add(ocorrencia);
                            cliente.Save();
                            return new AnaliseCreditoResult
                            {
                                Status = Enuns.Financeiro.StatusAnaliseResult.Bloqueado,
                            };
                        }

                        double total = movimento.ValorTotalLiquido;
                        if (movimento is IVendaCF)
                        {
                            IVendaCF cf = movimento as IVendaCF;
                            IList<IBaixaForma> bxs = cf.Baixa.Formas.Where(i => (i.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Parcelado ||
                                           i.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.CreditoConsumidor ||
                                           i.FormaPagamento.TipoForma == Enuns.Cadastro.TipoForma.Cheque)).ToList();
                            if (bxs.Count > 0)
                                total = bxs.Sum(i => i.ValorLiquido);
                            else
                            {
                                result.Status = Enuns.Financeiro.StatusAnaliseResult.Aprovado;
                                return result;
                            }
                        }
                        double limite = cliente.ValorLimiteCredto - cliente.ValorDocumentoAberto;
                        double risco = cliente.PercentualRisco > 0 ? (cliente.ValorLimiteCredto * ((cliente.PercentualRisco / 100))) : 0;

                        if (limite > total)
                        {
                            if (cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.AAutorizar)
                            {
                                ocorrencia = new Ocorrencia();
                                ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito;
                                ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Nenhuma;
                                ocorrencia.Descricao = "Análise de Crédito - Cliente a autorizar - Faturamento: " + movimento.EGUID.ToString();
                                ocorrencia.Data = DateTime.Now;

                                result.Status = Enuns.Financeiro.StatusAnaliseResult.AguardarAnalise;
                            }
                            else if (cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.ComRestricao ||
                                cliente.Situacao == Enuns.Cadastro.Pessoa.Situacao.SemCredito)
                            {
                                ocorrencia = new Ocorrencia();
                                ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito;
                                ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Bloqueio;
                                ocorrencia.Descricao = "Análise de Crédito - Cliente permitido faturamento somente a vista";
                                ocorrencia.Data = DateTime.Now;

                                result.Status = Enuns.Financeiro.StatusAnaliseResult.AprovadoSomenteAVista;
                            }
                            else
                            {
                                result.Status = Enuns.Financeiro.StatusAnaliseResult.Aprovado;
                            }
                        }
                        else
                        {
                            if ((limite + risco) > total)
                            {
                                result.Status = Enuns.Financeiro.StatusAnaliseResult.AprovadoComRisco;
                            }
                            else
                            {
                                result.Status = Enuns.Financeiro.StatusAnaliseResult.AguardarAnalise;
                                ocorrencia = new Ocorrencia();
                                ocorrencia.TipoOcorrencia = Enuns.Cadastro.Pessoa.TipoOcorrencia.AnaliseCredito;
                                ocorrencia.AcaoOcorrencia = Enuns.Cadastro.Pessoa.AcaoOcorrencia.Nenhuma;
                                ocorrencia.Descricao = "Análise de Crédito - Cliente a autorizar - Faturamento: " + movimento.EGUID.ToString();
                                ocorrencia.Data = DateTime.Now;
                            }
                        }
                        if (ocorrencia != null)
                            cliente.Ocorrencias.Add(ocorrencia);

                        cliente.Save();
                    }
                    finally
                    {
                        if (connection != null)
                            connection.Close();
                    }
                }
                else
                {
                    result.Status = Enuns.Financeiro.StatusAnaliseResult.ClienteNaoIdentificado;
                }
            }

            return result;
        }
예제 #2
0
 /// <summary>
 /// Método internal para salvar as analises de credito
 /// </summary>
 /// <param name="resultAnalise">Objeto com resultado da analise</param>
 protected internal void SalvaAnaliseCredito(AnaliseCreditoResult resultAnalise)
 {
     if(StatusAnaliseCredito == Enuns.Financeiro.StatusAnaliseResult.AguardarAnalise)
     {
         //Gravar a análise de crédito feito no movimento
         IAnaliseCredito analise = new AnaliseCredito(this);
         analise.Connection = Connection;
         analise.Atendente = Itens.FirstOrDefault().Vendedor;
         analise.Cliente = DadoPessoa.Cliente as Model.Cadastro.Pessoa.ICliente;
         analise.Movimento = this;
         analise.Motivo = Unimake.Convert.ToString(Enuns.Financeiro.StatusAnaliseCredito.AguardandoAnalise);
         analise.Status = Enuns.Financeiro.StatusAnaliseCredito.AguardandoAnalise;
         analise.DataHoraAnalise = DateTime.Now;
         analise.Save();
     }
 }