public VizualizarIndicadoModel VisualizarIndicado(int id, bool mostraTodos)
        {
            VizualizarIndicadoModel model = new VizualizarIndicadoModel();

            model.Infos = CarregaInformacoesIndicado(id);
            HistoriaService service = new HistoriaService();

            model.Historias = service.ListarHistoriasComMidias(id, mostraTodos);

            return(model);
        }
        public IndicadoAbusoModel CarregaDadosTriagemAbuso(int indicadoID)
        {
            HistoriaService    service = new HistoriaService();
            IndicadoAbusoModel retorno = new IndicadoAbusoModel();

            //carregando informações do indicado
            retorno.Informacoes = CarregaInformacoesIndicado(indicadoID);

            //carregando histórias reportadas do indicado e seus reports
            retorno.HistoriasReportadas = service.ListarHistoriasReportadas(retorno.Informacoes.Indicado.ID).ToList();

            return(retorno);
        }
        public RetornoModel RealizarTriagemAbuso(IndicadoAbusoModel model)
        {
            RetornoModel retorno = new RetornoModel {
                Mensagem = "Ok", Sucesso = true
            };

            //inserindo log
            dal.InserirLog(model.Informacoes.Indicado.ID);

            HistoriaService service = new HistoriaService();

            Indicado indicado = dal.Carregar(model.Informacoes.Indicado.ID);

            if (indicado != null)
            {
                indicado.DataModificacao = DateTime.Now;
                indicado.AlteracaoOrigem = enumAlteracaoOrigem.TriagemAbuso;
                indicado.UsuarioID       = model.Informacoes.Indicado.UsuarioID;
                indicado.RemoverGaleria  = model.Informacoes.Indicado.RemoverGaleria;

                if (model != null)
                {
                    if (model.HistoriasReportadas != null)
                    {
                        foreach (HistoriaReportModel item in model.HistoriasReportadas)
                        {
                            retorno = service.RealizarTriagemAbuso(item, model.Informacoes.Indicado.UsuarioID ?? 0);
                            if (!retorno.Sucesso)
                            {
                                return(retorno);
                            }
                        }
                    }
                }
                //atualizando dados do indicado
                dal.AtualizarIndicadoReportadoAbuso(indicado);
            }
            else
            {
                retorno = new RetornoModel {
                    Mensagem = "Erro ao carregar os dados do indicado", Sucesso = false
                };
            }
            return(retorno);
        }
        public RetornoModel RecusarIndicacao(IndicadoModel model)
        {
            HistoriaService historiaService = new HistoriaService();
            Historia        historiaTela    = model.Historia;
            Indicado        indicadoTela    = model.Indicado;

            model.Historia = historiaService.Carregar(model.Codigo);
            model.Indicado = dal.Carregar(model.Historia.IndicadoID ?? 0);
            if (model.Historia.ID != historiaTela.ID)
            {
                return(new RetornoModel()
                {
                    Sucesso = false, Mensagem = "Você não pode manipular um ID diferente do seu código."
                });
            }


            //se for responsavel
            if (model.Historia.CodigoIndicadoResponsavel == model.Codigo)
            {
                model.Historia.IndicadoAprovacaoResponsavel = enumAprovacao.naoAprovado;
                model.Historia.IndicadoAprovacao            = enumAprovacao.naoAprovado;

                EnviarEmailRecusaResponsavel(model);
            }
            else
            {
                model.Historia.IndicadoAprovacao         = enumAprovacao.naoAprovado;
                model.Historia.IndicadoAprovacaoOriginal = enumAprovacao.naoAprovado;
                EnviarEmailRecusaIndicado(model);
            }
            model.Historia.IndicadoID = null;
            HistoriaService service = new HistoriaService();

            service.Salvar(model.Historia);

            return(new RetornoModel()
            {
                Sucesso = true, Mensagem = "OK!"
            });
        }
        public RetornoModel ConfirmarIndicacao(IndicadoModel model)
        {
            RetornoModel retorno = new RetornoModel();

            retorno = ValidaDados(model);
            if (retorno.Sucesso)
            {
                HistoriaService      historiaService      = new HistoriaService();
                HistoriaMidiaService historiaMidiaService = new HistoriaMidiaService();
                Historia             historiaTela         = model.Historia;
                Indicado             indicadoTela         = model.Indicado;
                model.Historia        = historiaService.Carregar(model.Codigo);
                model.Historia.Midias = historiaMidiaService.Listar(model.Historia.ID, true);
                model.Responsavel     = (model.Historia.CodigoIndicadoResponsavel == model.Codigo);

                if (model.Historia.ID != historiaTela.ID)
                {
                    return(new RetornoModel()
                    {
                        Sucesso = false, Mensagem = "Você não pode manipular um ID diferente do seu código."
                    });
                }
                model.Historia.ComentarioIndicado = historiaTela.ComentarioIndicado;
                if (model.Responsavel)
                {
                    if ((model.Historia.IndicadoAprovacaoOriginal != enumAprovacao.aprovado) || (model.Historia.IndicadoAprovacaoResponsavel != enumAprovacao.pendente))
                    {
                        return(new RetornoModel {
                            Mensagem = "Não existe nenhuma pendência vinculada a este código.", Sucesso = false
                        });
                    }
                    model.Historia.ComentarioIndicadoResponsavel = historiaTela.ComentarioIndicado;
                }
                else
                {
                    if (model.Historia.IndicadoAprovacaoOriginal != enumAprovacao.pendente)
                    {
                        return(new RetornoModel {
                            Mensagem = "Não existe nenhuma pendência vinculada a este código.", Sucesso = false
                        });
                    }
                    model.Historia.ComentarioIndicadoOriginal = historiaTela.ComentarioIndicado;
                }
                if (historiaTela.Midias != null)
                {
                    if (model.Historia.Midias == null)
                    {
                        model.Historia.Midias = new List <HistoriaMidia>();
                    }
                    foreach (var htm in historiaTela.Midias)
                    {
                        if (htm.ID == 0)
                        {
                            htm.AdicionadoOrigem = ((model.Responsavel) ? enumAlteracaoOrigem.IndicadoResponsavel : enumAlteracaoOrigem.Indicado);
                            htm.InativoOrigem    = enumAlteracaoOrigem.Nenhum;
                            htm.DataCadastro     = DateTime.Now;
                            htm.HistoriaID       = model.Historia.ID;
                            htm.ArquivoTipo      = htm.ArquivoTipo;
                            model.Historia.Midias.Add(htm);
                            historiaMidiaService.Salvar(htm);
                        }
                        else if (htm.Inativo)
                        {
                            var midia = model.Historia.Midias.FirstOrDefault(t => t.ID == htm.ID);
                            if (midia != null)
                            {
                                midia.InativoOrigem = ((model.Responsavel) ? enumAlteracaoOrigem.IndicadoResponsavel : enumAlteracaoOrigem.Indicado);
                                midia.Inativo       = true;
                                historiaMidiaService.Salvar(midia);
                                model.Historia.Midias.Remove(midia);
                            }
                        }
                    }
                }
                if (model.Responsavel)
                {
                    model.Indicado = dal.Carregar(model.Historia.IndicadoID.Value);

                    if (model.Indicado.ID != indicadoTela.ID)
                    {
                        return(new RetornoModel()
                        {
                            Sucesso = false, Mensagem = "Você não pode manipular um ID diferente do seu código"
                        });
                    }

                    ConfirmarIndicacaoUpdateIndicado(indicadoTela, model.Indicado);

                    model.Historia.TriagemAprovacao             = enumAprovacao.pendente;
                    model.Historia.TriagemAprovacaoNormal       = enumAprovacao.pendente;
                    model.Historia.IndicadoAprovacaoResponsavel = enumAprovacao.aprovado;
                    model.Historia.IndicadoAprovacao            = enumAprovacao.aprovado;
                    model.Historia.AlteracaoOrigem = enumAlteracaoOrigem.IndicadoResponsavel;

                    model.Indicado.AlteracaoOrigem = enumAlteracaoOrigem.IndicadoResponsavel;
                }
                else
                {
                    if (model.Estrangeiro)
                    {
                        // Salva o RNE no DocumentoNumero e o Passaport no DocumentoNumeroComplemento
                        indicadoTela.DocumentoTipoID = enumDocumentoTipoNome.outro;
                    }
                    else
                    {
                        indicadoTela.DocumentoTipoID = enumDocumentoTipoNome.cpf;
                    }

                    model.Indicado = CarregarIndicadoPorDocumento(indicadoTela);
                    model.Historia.AlteracaoOrigem = enumAlteracaoOrigem.Indicado;

                    if (model.Indicado == null)
                    {
                        model.Indicado = indicadoTela;
                        model.Indicado.DataCadastro = DateTime.Now;
                    }
                    else
                    {
                        ConfirmarIndicacaoUpdateIndicado(indicadoTela, model.Indicado);
                    }

                    model.Indicado.AlteracaoOrigem = enumAlteracaoOrigem.Indicado;

                    if (MenorIdade(model.Indicado))
                    {
                        model.Historia.TriagemAprovacao             = enumAprovacao.semNecessidade;
                        model.Historia.TriagemAprovacaoNormal       = enumAprovacao.semNecessidade;
                        model.Historia.IndicadoAprovacaoResponsavel = enumAprovacao.pendente;
                        model.Historia.IndicadoAprovacaoOriginal    = enumAprovacao.aprovado;
                        model.Historia.IndicadoAprovacao            = enumAprovacao.pendente;
                        model.Historia.CodigoIndicadoResponsavel    = historiaService.GeraCodigo();
                        //zera os dados do robo para disparo para o responsavel
                        model.Historia.DataEmailAguardandoAprovacao       = DateTime.Now;
                        model.Historia.QuantidadeEmailAguardandoAprovacao = 0;
                    }
                    else // indicado maior de idade
                    {
                        model.Historia.TriagemAprovacao             = enumAprovacao.pendente;
                        model.Historia.TriagemAprovacaoNormal       = enumAprovacao.pendente;
                        model.Historia.IndicadoAprovacaoResponsavel = enumAprovacao.semNecessidade;
                        model.Historia.IndicadoAprovacaoOriginal    = enumAprovacao.aprovado;
                        model.Historia.IndicadoAprovacao            = enumAprovacao.aprovado;
                    }
                }

                //calculando cidade onde irá carregar a tocha
                CidadeParticipanteService cpService = new CidadeParticipanteService();
                model.Indicado.CidadeParticipanteID = cpService.CarregarPorCidade(model.Indicado.CidadeID).ID;
                model.Indicado.DataModificacao      = DateTime.Now;
                model.Historia.DataModificacao      = DateTime.Now;

                if (!String.IsNullOrEmpty(model.Indicado.FotoArquivoNome))
                {
                    model.IndicadoFotoInfo.file    = model.Indicado.FotoArquivoNome;
                    model.Indicado.FotoArquivoNome = GerarFotoArquivoNome(model.IndicadoFotoInfo);
                }

                //insere Indicado no banco se nao existir com mesmo documento senao atualiza
                if (model.Responsavel)
                {
                    SalvarResponsavelAprovacao(model.Indicado);
                }
                else
                {
                    model.Indicado.ID = SalvarConfirmarIndicacaoIndicado(model.Indicado);
                }
                model.Historia.IndicadoID = model.Indicado.ID;
                historiaService.Salvar(model.Historia);

                try
                {
                    //enviar emails
                    if (model.Responsavel)
                    {
                        EnviarEmailsConfirmacaoResponsavel(model);
                    }
                    else
                    {
                        EnviarEmailsConfirmacaoIndicado(model);
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.Error(ex);
                }
            }
            else
            {
                return(retorno);
            }

            return(new RetornoModel {
                Sucesso = true, Mensagem = "Ok"
            });
        }
        public RetornoModel <IndicadoModel> CarregarConfirmarIndicacao(string Codigo)
        {
            IndicadoModel        model   = new IndicadoModel();
            HistoriaService      sc      = new HistoriaService();
            HistoriaMidiaService scMidia = new HistoriaMidiaService();

            model.Codigo   = Codigo;
            model.Historia = sc.Carregar(Codigo); //buscando historia a partir do codigo do indicado OU RESPONSAVEL
            if (model.Historia == null)           // se a historia existe, monta o model
            {
                return(new RetornoModel <IndicadoModel> {
                    Mensagem = "Código inválido!", Sucesso = false
                });
            }
            model.Historia.Midias = scMidia.Listar(model.Historia.ID, true);
            model.Responsavel     = (Codigo == model.Historia.CodigoIndicadoResponsavel);
            if (model.Responsavel)
            {
                if ((model.Historia.IndicadoAprovacaoOriginal != enumAprovacao.aprovado) || (model.Historia.IndicadoAprovacaoResponsavel != enumAprovacao.pendente))
                {
                    string mensagem = "Não existe nenhuma pendência vinculada a este código.";
                    if (model.Historia.IndicadoAprovacaoResponsavel == enumAprovacao.aprovado)
                    {
                        mensagem = "Essa indicação já foi aprovada.";
                    }
                    else if (model.Historia.IndicadoAprovacaoResponsavel == enumAprovacao.naoAprovado)
                    {
                        mensagem = "Essa indicação já foi recusada.";
                    }
                    return(new RetornoModel <IndicadoModel> {
                        Mensagem = mensagem, Sucesso = false
                    });
                }
                model.Indicado           = dal.Carregar(model.Historia.IndicadoID.Value);
                model.Estrangeiro        = (model.Indicado.DocumentoTipoID != enumDocumentoTipoNome.cpf);
                model.Indicado.UsuarioID = 0;
            }
            else
            {
                if (model.Historia.IndicadoAprovacaoOriginal != enumAprovacao.pendente)
                {
                    string mensagem = "Não existe nenhuma pendência vinculada a este código.";
                    if (model.Historia.IndicadoAprovacaoOriginal == enumAprovacao.aprovado)
                    {
                        mensagem = "Essa indicação já foi aprovada.";
                    }
                    else if (model.Historia.IndicadoAprovacaoOriginal == enumAprovacao.naoAprovado)
                    {
                        mensagem = "Essa indicação já foi recusada.";
                    }
                    return(new RetornoModel <IndicadoModel> {
                        Mensagem = mensagem, Sucesso = false
                    });
                }
                model.Indicado       = new Indicado();
                model.Indicado.Nome  = model.Historia.IndicadoNome;
                model.Indicado.Email = model.Historia.IndicadoEmail;
            }
            model.Historia.CodigoIndicado            = null;
            model.Historia.CodigoIndicadoResponsavel = null;

            HistoriaCategoriaService categoriaService = new HistoriaCategoriaService();

            model.Categoria = categoriaService.Carregar(model.Historia.HistoriaCategoriaID);
            //buscando os estados
            EstadoService service = new EstadoService();

            model.Estados = service.Listar();

            ParentescoService parentescoService = new ParentescoService();

            model.Parentesco = parentescoService.Listar(true);

            model.IndicadoFotoInfo = CarregarFotoInfo(model.Indicado.FotoArquivoNome);
            if (model.IndicadoFotoInfo == null)
            {
                model.IndicadoFotoInfo = new UploadFotoModel();
            }

            return(new RetornoModel <IndicadoModel> {
                Retorno = model, Mensagem = "Código confirmado com sucesso!", Sucesso = true
            });
        }
        public ReportIndicadoHistoriasModel ExportarIndicadoHistorias(int id)
        {
            ReportIndicadoHistoriasModel retorno = null;

            //Carrega os dados do Indicado e hstorias
            VizualizarIndicadoModel model = new VizualizarIndicadoModel();

            model.Infos = CarregaInformacoesIndicado(id);
            HistoriaService service = new HistoriaService();

            model.Historias = service.ListarHistoriasComMidias(id, true);

            //converte os dados do indicado para a model do report
            retorno             = new ReportIndicadoHistoriasModel();
            retorno.rptIndicado = new List <ReportIndicadoHistoriasModel.ReportIndicado>();
            retorno.rptIndicado.Add(new ReportIndicadoHistoriasModel.ReportIndicado()
            {
                ID                    = model.Infos.Indicado.ID,
                Nome                  = model.Infos.Indicado.Nome,
                CidadeUF              = model.Infos.Indicado.Cidade.Nome + " - " + model.Infos.Indicado.Estado.UF,
                DataCadastro          = model.Infos.Indicado.DataCadastro,
                DataModificacao       = model.Infos.Indicado.DataModificacao,
                DataNascimento        = model.Infos.Indicado.DataNascimento,
                Email                 = model.Infos.Indicado.Email,
                ModificadoPor         = model.Infos.Indicado.AlteracaoOrigem.Description(),
                ParticiparEm          = model.Infos.Indicado.CidadeParticipante.Cidade.Nome + " - " + model.Infos.Indicado.CidadeParticipante.Cidade.Estado.UF,
                qtdHistoriasAprovadas = model.Infos.Aprovadas,
                qtdHistoriasModeradas = model.Infos.Moderadas,
                qtdHistoriasRecusadas = model.Infos.Recusadas,
                qtdIndicacoes         = model.Infos.TotalIndicacoes
            });

            retorno.rptIndicadoQualidade = new List <ReportIndicadoHistoriasModel.ReportIndicadoQualidade>();
            foreach (var item in model.Infos.Qualidades)
            {
                retorno.rptIndicadoQualidade.Add(new ReportIndicadoHistoriasModel.ReportIndicadoQualidade()
                {
                    QualidadeID   = item.ID,
                    QualidadeNome = item.Nome,
                    IndicadoID    = model.Infos.Indicado.ID
                });
            }

            retorno.rptIndicadoHistoria = new List <ReportIndicadoHistoriasModel.reportIndicadoHistoria>();
            foreach (var item in model.Historias)
            {
                retorno.rptIndicadoHistoria.Add(new ReportIndicadoHistoriasModel.reportIndicadoHistoria()
                {
                    HistoriaID      = item.Historia.ID,
                    Categoria       = item.Historia.HistoriaCategoria.Nome,
                    IndicadorNome   = item.Historia.IndicadorNome,
                    NotaHistoria    = string.Format("{0:0.00}", item.Historia.Nota),
                    StatusIndicado  = item.Historia.IndicadoAprovacao.Description(),
                    StatusModeracao = (item.Historia.IndicadoAprovacao == enumAprovacao.aprovado ||
                                       item.Historia.IndicadoAprovacao == enumAprovacao.aprovadoComRessalva
                                          ? (item.Historia.ModeracaoEncerrada ? "Encerrada" : "Em Andamento")
                                          : "Não Iniciada"),
                    StatusTriagem  = item.Historia.TriagemAprovacao.Description(),
                    TextoHistoria  = item.Historia.Texto,
                    TituloHistoria = item.Historia.Titulo,
                    IndicadoID     = model.Infos.Indicado.ID
                });
            }


            return(retorno);
        }