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; }
/// <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(); } }