Exemple #1
0
        public ActionResult Index(int solicitacaoID)
        {
            try
            {
                //TODO: Nelson Neto - RETIRAR OS COMENTÁRIOS
                //int idSolicitacao = 124;
                int solicitacaoTipoID = 1;
                int papelID           = 1;
                var contratanteID     = (int)Geral.PegaAuthTicket("ContratanteId");

                ViewBag.Fluxo  = solicitacaoTipoID;
                ViewBag.Bancos = _bancoBP.ListarTodosPorNome();

                #region Ficha Cadastral

                FichaCadastralWebForLinkVM modelo = new FichaCadastralWebForLinkVM
                {
                    DadosBancarios        = new List <DadosBancariosVM>(),
                    DadosContatos         = new List <DadosContatoVM>(),
                    SolicitacaoFornecedor =
                        new SolicitacaoFornecedorVM {
                        Documentos = new List <SolicitacaoDocumentosVM>()
                    },
                    Aprovacao   = new AprovacaoVM(),
                    Solicitacao = new SolicitacaoVM {
                        Fluxo = new FluxoVM()
                    },
                    DadosBloqueio      = new DadosBloqueioVM(),
                    FornecedorRobo     = new FornecedorRoboVM(),
                    FornecedoresUnspsc = new List <FornecedorUnspscVM>()
                };

                #region BPs

                SOLICITACAO solicitacao = _solicitacaoService.BuscarPorSolicitacaoId(solicitacaoID);
                if (solicitacao == null)
                {
                    throw new Exception(string.Format("Solicitação com id {0} inexistente.", solicitacaoID));
                }
                SolicitacaoCadastroFornecedor cadastroPJPF = solicitacao.SolicitacaoCadastroFornecedor.FirstOrDefault();
                List <SolicitacaoModificacaoDadosBancario> cadastroBanco    = solicitacao.SolicitacaoModificacaoDadosBancario.ToList();
                List <SolicitacaoModificacaoDadosContato>  cadastroContatos = solicitacao.SolicitacaoModificacaoDadosContato.ToList();

                #endregion

                FichaCadastralWebForLinkVM fichaCadastralVM = new FichaCadastralWebForLinkVM()
                {
                    ID                      = solicitacao.ID,
                    ContratanteID           = solicitacao.CONTRATANTE_ID,
                    ContratanteFornecedorID = 0,
                    NomeEmpresa             = cadastroPJPF != null
                        ? cadastroPJPF.RAZAO_SOCIAL
                        : string.Empty,
                    RazaoSocial  = cadastroPJPF.RAZAO_SOCIAL,
                    NomeFantasia = cadastroPJPF.NOME_FANTASIA,
                    //CNAE = cadastroPJPF.CNAE,
                    CNPJ_CPF           = cadastroPJPF.CNPJ ?? cadastroPJPF.CPF,
                    InscricaoEstadual  = cadastroPJPF.INSCR_ESTADUAL,
                    InscricaoMunicipal = cadastroPJPF.INSCR_MUNICIPAL,
                    TipoLogradouro     = cadastroPJPF.TP_LOGRADOURO,
                    Endereco           = cadastroPJPF.ENDERECO,
                    Numero             = cadastroPJPF.NUMERO,
                    Complemento        = cadastroPJPF.COMPLEMENTO,
                    Cep            = cadastroPJPF.CEP,
                    Bairro         = cadastroPJPF.BAIRRO,
                    Cidade         = cadastroPJPF.CIDADE,
                    Estado         = cadastroPJPF.UF,
                    Pais           = cadastroPJPF.PAIS,
                    Observacao     = cadastroPJPF.OBSERVACAO,
                    TipoFornecedor = cadastroPJPF.PJPF_TIPO,
                    DadosBancarios = cadastroBanco.Select(x => new DadosBancariosVM()
                    {
                        Agencia             = x.AGENCIA,
                        Digito              = x.AG_DV,
                        Banco               = x.BANCO_ID,
                        ContaCorrente       = x.CONTA,
                        ContaCorrenteDigito = x.CONTA_DV,
                        NomeBanco           = x.T_BANCO.BANCO_NM,
                    }).ToList(),
                    DadosContatos = cadastroContatos.Select(x => new DadosContatoVM()
                    {
                        Celular      = x.CELULAR,
                        ContatoID    = x.CONTATO_PJPF_ID ?? 0,
                        EmailContato = x.EMAIL,
                        NomeContato  = x.NOME,
                        Telefone     = x.TELEFONE
                    }).ToList()
                };

                #endregion


                List <QUESTIONARIO> questionarioList = _cadastroUnicoBP.BuscarPorIdContratante(contratanteID);
                foreach (QUESTIONARIO questionario in questionarioList)
                {
                    List <QUESTIONARIO_ABA> abasQuestionario = questionario
                                                               .QIC_QUEST_ABA
                                                               .OrderBy(x => x.ORDEM)
                                                               .ToList();
                    List <AbaVM> questionarioAbas = new List <AbaVM>();
                    foreach (QUESTIONARIO_ABA aba in abasQuestionario)
                    {
                        List <QUESTIONARIO_PERGUNTA> perguntasAba = aba
                                                                    .QIC_QUEST_ABA_PERG
                                                                    .OrderBy(x => x.ORDEM)
                                                                    .ToList();
                        List <PerguntaVM> abaPerguntas = new List <PerguntaVM>();
                        foreach (QUESTIONARIO_PERGUNTA pergunta in perguntasAba)
                        {
                            QUESTIONARIO_PAPEL papelPergunta = pergunta
                                                               .QIC_QUEST_ABA_PERG_PAPEL
                                                               .FirstOrDefault(x => x.PAPEL_ID == papelID);
                            WFD_INFORM_COMPL resposta = pergunta
                                                        .WFD_INFORM_COMPL
                                                        .FirstOrDefault(x => x.PERG_ID == pergunta.ID);
                            if (papelPergunta.LEITURA)
                            {
                                PerguntaVM perguntaVM = Mapper.Map <PerguntaVM>(pergunta);
                                Mapper.Map <PerguntaVM>(papelPergunta);

                                if (pergunta.TP_DADO == "DOMINIO" && pergunta.DOMINIO == true)
                                {
                                    perguntaVM.DominioList =
                                        Mapper.Map <List <QUESTIONARIO_RESPOSTA>, List <SelectListItem> >(pergunta
                                                                                                          .QIC_QUEST_ABA_PERG_RESP
                                                                                                          .OrderBy(x => x.ORDEM).ToList());

                                    perguntaVM.DominioList.Insert(0,
                                                                  new SelectListItem()
                                    {
                                        Value    = "0",
                                        Text     = "--Selecione",
                                        Selected = true
                                    });
                                    perguntaVM.DominioListId = !string.IsNullOrEmpty(perguntaVM.Resposta)
                                        ? int.Parse(perguntaVM.Resposta)
                                        : 0;
                                }

                                if (pergunta.PERG_PAI != null)
                                {
                                    int pergPai = pergunta.PERG_PAI ?? 0;
                                    WFD_INFORM_COMPL informaCompl = _informacaoComplementarBP.BuscarPorPerguntaId(pergPai);

                                    //TODO: Validar LEITURA
                                    ///Validar se pode ser desbloqueado por resposta do pai
                                    /// pelo papel
                                    /// pela resposta anterior
                                    perguntaVM.Leitura = informaCompl != null;

                                    perguntaVM.PaiRespondido = informaCompl != null
                                        ? informaCompl.PERG_ID
                                        : 0;
                                }

                                //perguntaVM.Leitura = papelPergunta.
                                abaPerguntas.Add(perguntaVM);
                            }
                        }
                        //Mapear Lista de aba com Modelo de aba
                        AbaVM abaModelo = Mapper.Map <QUESTIONARIO_ABA, AbaVM>(aba);
                        abaModelo.PerguntaList = abaPerguntas;
                        questionarioAbas.Add(abaModelo);
                    }
                    //Mapear Lista de Questionários com Modelo de Questionários
                    QuestionarioVM questionarioModelo = Mapper.Map <QUESTIONARIO, QuestionarioVM>(questionario);
                    questionarioModelo.AbaList = questionarioAbas;
                    fichaCadastralVM.Questionarios.QuestionarioDinamicoList.Add(questionarioModelo);
                }
                return(View(fichaCadastralVM));
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                ViewBag.Message = ex.Message;
                return(View(new FichaCadastralWebForLinkVM()));
            }
        }
        public bool FinalizarFichaCadastral(FichaCadastralWebForLinkVM model)
        {
            var preenchimentoValido = false;

            #region Validar Dados do Questionario Dinâmico
            List <WFD_INFORM_COMPL> informacoesComplementar = new List <WFD_INFORM_COMPL>();
            if (model.Questionarios != null)
            {
                if (model.Questionarios.QuestionarioDinamicoList != null)
                {
                    foreach (var questionario in model.Questionarios.QuestionarioDinamicoList)
                    {
                        foreach (var aba in questionario.AbaList)
                        {
                            foreach (var pergunta in aba.PerguntaList)
                            {
                                #region Validar se os campos obrigatórios estão preenchidos
                                //if (pergunta.Obrigatorio)
                                //{
                                //    if (string.IsNullOrEmpty(pergunta.Resposta))
                                //    {
                                //        ModelState.AddModelError("QuestionarioDinamicoValidation", string.Format("Campo {0} obrigatório!", pergunta.Titulo));
                                //    }
                                //}
                                #endregion

                                //if (ModelState.IsValid)
                                //{
                                WFD_INFORM_COMPL infoCompleRespondida = new WFD_INFORM_COMPL()
                                {
                                    SOLICITACAO_ID = model.Solicitacao.ID,
                                    PERG_ID        = pergunta.Id,
                                    RESPOSTA       = pergunta.Resposta
                                };

                                switch (pergunta.TipoDado)
                                {
                                case "RadioButton":
                                {
                                    if (pergunta.DominioListId != 0)
                                    {
                                        infoCompleRespondida.RESPOSTA = pergunta.DominioListId.ToString();
                                    }
                                }
                                break;

                                case "Checkbox":
                                {
                                    string respostaIdentada = string.Empty;
                                    foreach (string resposta in pergunta.RespostaCheckbox)
                                    {
                                        if (!resposta.Equals("false"))
                                        {
                                            respostaIdentada = string.Concat(respostaIdentada, "^", resposta);
                                        }
                                    }
                                    if (!string.IsNullOrEmpty(respostaIdentada))
                                    {
                                        infoCompleRespondida.RESPOSTA = respostaIdentada.Remove(0, 1);
                                    }
                                }
                                break;
                                }
                                informacoesComplementar.Add(infoCompleRespondida);
                                //}
                            }
                        }
                    }
                }
            }
            #endregion

            FORNECEDOR_CATEGORIA categoria = _fornecedorCategoriaService.BuscarPorId((int)model.CategoriaId);

            if (model.TipoFornecedor != 1)
            {
                if (model.DadosEnderecos == null || !model.DadosEnderecos.Any())
                {
                    ModelState.AddModelError("DadosEnderecoValidation", "Informar ao menos um Endereço!");
                }
                else if (model.DadosEnderecos.Any(x => x.TipoEnderecoId == 0 || String.IsNullOrEmpty(x.Endereco) || String.IsNullOrEmpty(x.Numero) || String.IsNullOrEmpty(x.CEP)))
                {
                    ModelState.AddModelError("DadosEnderecoValidation", "Dados incompletos no Endereço!");
                }
            }

            if (!categoria.ISENTO_DADOSBANCARIOS && !model.ApenasSalvar)
            {
                if (!model.DadosBancarios.Any())
                {
                    ModelState.AddModelError("DadosBancariosValidation", "Informar ao menos um Dado Bancário!");
                    model.DadosBancarios.Add(new DadosBancariosVM());
                }
            }
            else
            {
                //REMOVE AS CRITICAS DOS DADOS BANCARIOS CASO A CATEGORIA SEJA ISENTA
                while (ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("Banco")).Value != null)
                {
                    ModelState.Remove(ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("Banco")));
                }

                while (ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("Agencia")).Value != null)
                {
                    ModelState.Remove(ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("Agencia")));
                }

                while (ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("ContaCorrente")).Value != null)
                {
                    ModelState.Remove(ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("ContaCorrente")));
                }

                while (ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("ContaCorrenteDigito")).Value != null)
                {
                    ModelState.Remove(ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosBancarios") && ms.Key.Contains("ContaCorrenteDigito")));
                }
            }

            if (!categoria.ISENTO_CONTATOS && !model.ApenasSalvar)
            {
                if (model.DadosContatos == null || !model.DadosContatos.Any())
                {
                    ModelState.AddModelError("DadosContatosValidation", "Informar os Dados do Contato!");
                    model.DadosContatos = new List <DadosContatoVM>();
                    model.DadosContatos.Add(new DadosContatoVM());
                }
            }
            else
            {
                //REMOVE AS CRITICAS DOS DADOS DE CONTATOS CASO A CATEGORIA SEJA ISENTA
                while (ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosContatos") && ms.Key.Contains("EmailContato")).Value != null)
                {
                    ModelState.Remove(ModelState.FirstOrDefault(ms => ms.Key.Contains("DadosContatos") && ms.Key.Contains("EmailContato")));
                }
            }

            if (!categoria.ISENTO_DOCUMENTOS && !model.ApenasSalvar && model.TipoFornecedor != 2)
            {
                List <SolicitacaoDocumentosVM> docsObrigatorios = model.SolicitacaoFornecedor.Documentos.Where(x => x.Obrigatorio == true && x.ArquivoSubido == null).ToList();
                if (docsObrigatorios.Any())
                {
                    ModelState.AddModelError("AnexosValidation", "Favor subir os arquivos dos documentos Exigíveis!");
                }
            }

            ModelState.Remove("SolicitacaoFornecedor.Assunto");
            ModelState.Remove("SolicitacaoFornecedor.DescricaoSolicitacao");
            ModelState.Remove("SolicitacaoFornecedor.Mensagem");
            ModelState.Remove("SolicitacaoFornecedor.DadosEnderecos.T_UF.UF_NM");

            int tipoPapel  = model.TipoPreenchimento.Equals((int)EnumTiposPreenchimento.Fornecedor) ? (int)EnumTiposPapel.Fornecedor : (int)EnumTiposPapel.Solicitante;
            int papelAtual = _papelService.BuscarPorContratanteETipoPapel(model.ContratanteID, tipoPapel).ID;
            foreach (var modeloErrado in ModelState.Values)
            {
                if (modeloErrado.Errors.Count != 0)
                {
                }
            }

            if (ModelState.IsValid)
            {
                try
                {
                    SolicitacaoCadastroFornecedor solicitacaoCadastroFornecedor = _solicitacaoCadastroFornecedorService.BuscarPorSolicitacaoId(model.Solicitacao.ID);
                    CompletarSolicitacaoCadastroPJPF(ref solicitacaoCadastroFornecedor, model);
                    _solicitacaoCadastroFornecedorService.AtualizarSolicitacao(solicitacaoCadastroFornecedor);

                    ManterDadosBancarios(model.DadosBancarios.Where(w => w.Banco != null && w.Agencia != null && w.ContaCorrente != null).ToList(), model.Solicitacao.ID, model.ContratanteID);
                    ManterDadosContatos(model.DadosContatos.Where(w => w.EmailContato != null).ToList(), solicitacaoCadastroFornecedor.SOLICITACAO_ID);
                    ManterDadosEnderecos(model.DadosEnderecos.Where(x => x.TipoEnderecoId > 0).ToList(), solicitacaoCadastroFornecedor.SOLICITACAO_ID);

                    ManterUnspsc(model.FornecedoresUnspsc.ToList(), model.Solicitacao.ID);

                    if (model.TipoFornecedor != (int)EnumTiposFornecedor.EmpresaEstrangeira)
                    {
                        ManterDocumentos(model.SolicitacaoFornecedor.Documentos, model.Solicitacao.ID, model.ContratanteID);
                    }

                    _informacaoComplementarService.InsertAll(informacoesComplementar);

                    model.ProrrogacaoPrazo = new ProrrogacaoPrazoVM();
                    if (solicitacaoCadastroFornecedor.WFD_SOLICITACAO.WFD_SOLICITACAO_PRORROGACAO.Any())
                    {
                        //Busca a ultima solicitacao de prorrogação, ou seja a ativa.
                        model.ProrrogacaoPrazo = ProrrogacaoPrazoVM.ToViewModel(solicitacaoCadastroFornecedor.WFD_SOLICITACAO.WFD_SOLICITACAO_PRORROGACAO.OrderBy(o => o.ID).LastOrDefault());
                    }
                    model.ProrrogacaoPrazo.PrazoPreenchimento = _contratanteConfiguracaoService.BuscarPrazo(solicitacaoCadastroFornecedor.WFD_SOLICITACAO);
                    if (model.ProrrogacaoPrazo.Aprovado != null)
                    {
                        if ((bool)model.ProrrogacaoPrazo.Aprovado)
                        {
                            model.ProrrogacaoPrazo.Status = "Aprovado";
                        }
                        else
                        {
                            model.ProrrogacaoPrazo.Status = "Reprovado";
                        }
                    }
                    else
                    {
                        model.ProrrogacaoPrazo.Status = "Aguardando Aprovação...";
                    }


                    if (!model.ApenasSalvar)
                    {
                        _tramite.AtualizarTramite(model.ContratanteID, model.Solicitacao.ID, model.Solicitacao.Fluxo.ID, papelAtual, (int)EnumStatusTramite.Aprovado, null);

                        ViewBag.MensagemSucesso = "Dados Enviados com Sucesso!";
                        ViewBag.StatusTramite   = (int)EnumStatusTramite.Aprovado;
                    }
                    else
                    {
                        ViewBag.MensagemSucesso = "Dados Salvos com Sucesso!";
                        ViewBag.StatusTramite   = (int)EnumStatusTramite.Aguardando;
                    }
                    preenchimentoValido = true;
                }
                catch (Exception e)
                {
                    ViewBag.MensagemErro  = "Erro ao tentar Salvar a ficha cadastral!";
                    ViewBag.StatusTramite = (int)EnumStatusTramite.Aguardando;
                    Log.Error(e);
                }
            }
            else
            {
                ViewBag.MensagemErro  = "Não foi possível enviar a Ficha Cadastral! Existem dados incompletos abaixo.";
                ViewBag.StatusTramite = (int)EnumStatusTramite.Aguardando;
            }

            model.Questionarios = new RetornoQuestionario <QuestionarioVM>
            {
                QuestionarioDinamicoList =
                    Mapper.Map <List <QuestionarioDinamico>, List <QuestionarioVM> >(
                        _cadastroUnicoBP.BuscarQuestionarioDinamico(new QuestionarioDinamicoFiltrosDTO()
                {
                    //PapelId = papelAtual,
                    UF            = "RJ",
                    ContratanteId = model.ContratanteID,
                    PapelId       = papelAtual,
                    CategoriaId   = categoria.ID,
                    Alteracao     = true,
                    SolicitacaoId = model.Solicitacao.ID
                })
                        )
            };
            PersistirDadosEnderecoEmMemoria();

            return(preenchimentoValido);
        }