Example #1
0
        public ActionResult CadastrarSolicitacao(int?idSol)
        {
            Usuario user = GetSessionUser();

            SolicitacaoDocumento sol = new SolicitacaoDocumento();

            if (idSol.HasValue)
            {
                if (user.Permissao == EnumPermissaoUsuario.coordenador)
                {
                    var retorno = solicitacaoRepository.GetSolicitacaoByCoordenador(User.Identity.Name).Where(x => x.TipoSolicitacao == EnumTipoSolicitacao.aluno).ToList();
                    if (!retorno.Any(x => x.IdSolicitacao == idSol))
                    {
                        return(PartialView("_UnauthorizedPartial", "Error"));
                    }
                }

                sol = solicitacaoRepository.GetSolicitacaoById((int)idSol);

                // marca a solicitação como visualizada
                if (sol.Status == EnumStatusSolicitacao.pendente)
                {
                    sol.Status = EnumStatusSolicitacao.visualizado;
                    solicitacaoRepository.PersisteSolicitacao(sol);
                }
            }

            //retorna model
            return(PartialView("_CadastroSolicitacao", sol));
        }
        public ActionResult CarregarSolicitacao(int?idSol)
        {
            SolicitacaoDocumento sol = new SolicitacaoDocumento();

            if (idSol.HasValue)
            {
                sol = solicitacaoRepository.GetSolicitacaoById((int)idSol);

                if (User.Identity.Name == sol.AlunoCurso.Aluno.IdUsuario)
                {
                    // marca a solicitação como visualizada
                    if (sol.Status == EnumStatusSolicitacao.pendente)
                    {
                        sol.Status = EnumStatusSolicitacao.visualizado;
                        solicitacaoRepository.PersisteSolicitacao(sol);
                    }
                }
                else
                {
                    return(null);
                }
            }

            return(PartialView("_VisualizacaoSolicitacao", sol));
        }
        public object ExcluirSolicitacao(SolicitacaoDocumento sol)
        {
            Usuario user = GetSessionUser();

            if (user.Permissao == EnumPermissaoUsuario.coordenador)
            {
                var retorno = solicitacaoRepository.GetSolicitacaoByCoordenador(User.Identity.Name);
                if (!retorno.Any(x => x.IdSolicitacao == sol.IdSolicitacao))
                {
                    return(Json(new { Status = false, Type = "error", Message = "Não autorizado!" }, JsonRequestBehavior.AllowGet));
                }
            }

            var s = solicitacaoRepository.GetSolicitacaoById(sol.IdSolicitacao);

            if (s.Status == EnumStatusSolicitacao.pendente) //regra q soh deleta se status for pendente
            {
                if (documentoRepository.DeletaArquivo(s.Documento, true))
                {
                    Utilidades.SalvaLog(user, EnumAcao.Excluir, s, s.IdSolicitacao);
                    return(Json(new { Status = true, Type = "success", Message = "Solicitação deletada com sucesso!" }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                }
            }
            return(Json(new { Status = false, Type = "error", Message = "Só é possível realizar exclusão de solicitações pendentes." }, JsonRequestBehavior.AllowGet));
        }
Example #4
0
        //public string AlteraStatus(SolicitacaoDocumento sol, EnumStatusSolicitacao e)
        //{
        //    SolicitacaoDocumento soli = db.SolicitacaoDocumento.Find(sol.IdSolicitacao);
        //    soli.Status = e;

        //    if(db.SaveChanges()>0)
        //    {
        //        return "Sucesso";
        //    }
        //    else
        //    {
        //        return "Erro";
        //    }
        //}
        #endregion

        private string ComparaInfos(SolicitacaoDocumento sol)
        {
            DocumentosModel      db2            = new DocumentosModel();
            SolicitacaoDocumento solicitacaoOld = (from sd in db2.SolicitacaoDocumento where sd.IdSolicitacao == sol.IdSolicitacao select sd).FirstOrDefault();

            //db.Entry(solicitacaoOld).Reload();
            solicitacaoOld = Utilidades.ComparaValores(solicitacaoOld, sol, new string[] { "DataLimite", "DataAtendimento", "Status", "IdFuncionario", "Observacao" });

            if (solicitacaoOld.Status == EnumStatusSolicitacao.cancelado)
            {
                db2.Documento.Remove(solicitacaoOld.Documento);
            }

            if (solicitacaoOld == null)
            {
                return("Mantido");
            }
            if (db2.SaveChanges() > 0)
            {
                return("Alterado");
            }
            else
            {
                return("Erro");
            }
        }
Example #5
0
        public string AlteraDocumento(SolicitacaoDocumento sol)
        {
            SolicitacaoDocumento solic = db.SolicitacaoDocumento.Find(sol.IdSolicitacao);

            try
            {
                if (solic.Documento != null)
                {
                    DocumentoRepository docRep = new DocumentoRepository();
                    docRep.DeletaArquivo(solic.Documento, false);
                }
            }
            catch
            {
            }
            solic.DataAbertura = DateTime.Now;
            solic.DataLimite   = solic.DataAbertura.AddDays(7);

            solic.Documento               = solic.Documento == null ? new Documento() : solic.Documento;
            solic.Documento.arquivo       = sol.Documento.arquivo;
            solic.Documento.NomeDocumento = sol.Documento.NomeDocumento;
            solic.Documento.IdAlunoCurso  = solic.IdAlunoCurso;
            solic.Documento.IdTipoDoc     = sol.Documento.IdTipoDoc;

            string msgDoc = DirDoc.SalvaArquivo(solic.Documento);

            if (db.SaveChanges() > 0)
            {
                return("Alterado");
            }
            return("Erro");
        }
        public bool DeletaArquivo(Documento doc, bool deletaDoc)
        {
            SolicitacaoDocumento sol = new SolicitacaoDocumento();

            try
            {
                doc = db.Documento.Find(doc.IdDocumento);
                if (string.IsNullOrEmpty(doc.CaminhoDocumento) || DirDoc.DeletaArquivo(doc.CaminhoDocumento))
                {
                    doc.NomeDocumento    = "";
                    doc.CaminhoDocumento = null;

                    if (deletaDoc)
                    {
                        if (doc.SolicitacaoDocumento.Count() > 0)
                        {
                            sol        = db.SolicitacaoDocumento.Find(doc.SolicitacaoDocumento.FirstOrDefault().IdSolicitacao);
                            sol.Status = EnumStatusSolicitacao.excluido;

                            doc.SolicitacaoDocumento.Clear();
                        }
                        db.Documento.Remove(doc);
                    }


                    return(db.SaveChanges() > 0);
                }
            }
            catch (Exception ex)
            {
                return(false);
            }

            return(false);
        }
        public ActionResult CadastrarSolicitacao(int?idSol)
        {
            PopularDropDownsCadastro();
            SolicitacaoDocumento sol = new SolicitacaoDocumento();
            Usuario user             = GetSessionUser();

            if (idSol.HasValue)
            {
                if (user.Permissao == EnumPermissaoUsuario.coordenador)
                {
                    var retorno = solicitacaoRepository.GetSolicitacaoByCoordenador(User.Identity.Name).Where(x => x.TipoSolicitacao == EnumTipoSolicitacao.secretaria).ToList();
                    if (!retorno.Any(x => x.IdSolicitacao == idSol))
                    {
                        return(PartialView("_UnauthorizedPartial", "Error"));
                    }
                }

                sol = solicitacaoRepository.GetSolicitacaoById((int)idSol);
                PopularDropDownAlunos(sol.AlunoCurso.Curso.IdCurso);
            }
            else
            {
                ViewBag.Alunos = new SelectList(new List <SelectListItem>()
                {
                    new SelectListItem()
                    {
                        Text  = "Selecione um curso",
                        Value = ""
                    }
                }, "Value", "Text");
            }

            //retorna model
            return(PartialView("_CadastroSolicitacao", sol));
        }
        public object CancelarSolicitacao(SolicitacaoDocumento solic)
        {
            Usuario user = GetSessionUser();

            try
            {
                var sol = solicitacaoRepository.GetSolicitacaoById(solic.IdSolicitacao);
                sol.Status = EnumStatusSolicitacao.cancelado;

                string msg = solicitacaoRepository.PersisteSolicitacao(sol);

                if (msg != "Erro")
                {
                    Utilidades.SalvaLog(user, EnumAcao.Cancelar, sol, sol.IdSolicitacao);

                    return(Json(new { Status = true, Type = "success", Message = "Solicitação salva com sucesso", ReturnUrl = Url.Action("Index") }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception e)
            {
                return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
            }
        }
Example #9
0
 public string PersisteSolicitacao(SolicitacaoDocumento sol)
 {
     if (sol.IdSolicitacao > 0)
     {
         return(ComparaInfos(sol));
     }
     else
     {
         db.SolicitacaoDocumento.Add(sol);
     }
     try
     {
         if (db.SaveChanges() > 0)
         {
             return("Cadastrado");
         }
         else
         {
             return("Erro");
         }
     }
     catch (Exception e)
     {
         return("Erro");
     }
 }
        public ActionResult CarregaModalConfirmacao(EnumStatusSolicitacao novoStatus, int idSol)
        {
            SolicitacaoDocumento sol = new SolicitacaoDocumento {
                IdSolicitacao = idSol, Status = novoStatus
            };

            return(PartialView("_CancelamentoSolicitacao", sol));
        }
        public bool AdicionaHoras(int cargaHoraria, int idSolicitacaoDocumento)
        {
            SolicitacaoDocumento sol = db.SolicitacaoDocumento.Find(idSolicitacaoDocumento);

            sol.AlunoCurso.HoraCompleta += cargaHoraria;

            return(db.SaveChanges() > 0);
        }
        public ActionResult CadastrarSolicitacao(int?idSol)
        {
            SolicitacaoDocumento sol = new SolicitacaoDocumento();

            if (idSol.HasValue)
            {
                sol = solicitacaoRepository.GetSolicitacaoById((int)idSol);
            }
            return(PartialView("_CadastroSolicitacao", sol));
        }
Example #13
0
 public bool DeletaArquivo(SolicitacaoDocumento sol)
 {
     if (sol.Documento != null && sol.Documento.CaminhoDocumento != null)
     {
         File.Delete(sol.Documento.CaminhoDocumento);
         sol.Documento.CaminhoDocumento = null;
     }
     db.SolicitacaoDocumento.Remove(sol);
     return(db.SaveChanges() > 0);
 }
Example #14
0
 public Models.SolicitacaoDocumentoEmail ConverToEmailModel(SolicitacaoDocumento sol, string url)
 {
     return(new Models.SolicitacaoDocumentoEmail
     {
         UrlSistema = url,
         DataAtendimento = sol.DataAtendimento,
         DataLimite = sol.DataLimite,
         NomeAluno = sol.AlunoCurso != null && sol.AlunoCurso.Aluno != null && sol.AlunoCurso.Aluno.Usuario != null ?
                     sol.AlunoCurso.Aluno.Usuario.Nome : "",
         EmailAluno = sol.AlunoCurso != null && sol.AlunoCurso.Aluno != null && sol.AlunoCurso.Aluno.Usuario != null ?
                      sol.AlunoCurso.Aluno.Usuario.E_mail : "",
         EmailFuncionario = sol.Funcionario != null && sol.Funcionario.Usuario != null ? sol.Funcionario.Usuario.E_mail : "",
         NomeCurso = sol.AlunoCurso != null && sol.AlunoCurso.Curso != null ? sol.AlunoCurso.Curso.Nome : "",
         NomeTipoDocumento = sol.Documento != null && sol.Documento.TipoDocumento != null ? sol.Documento.TipoDocumento.TipoDocumento1 : "",
         Observacao = sol.Observacao,
         Status = sol.Status
     });
 }
Example #15
0
        public object AlterarStatus(SolicitacaoDocumento solic, int?Horas)
        {
            Usuario user = GetSessionUser();

            try
            {
                if (user.Permissao == EnumPermissaoUsuario.coordenador)
                {
                    var retorno = solicitacaoRepository.GetSolicitacaoByCoordenador(User.Identity.Name);
                    if (!retorno.Any(x => x.IdSolicitacao == solic.IdSolicitacao))
                    {
                        return(Json(new { Status = false, Type = "error", Message = "Não autorizado!" }, JsonRequestBehavior.AllowGet));
                    }
                }

                if (solic.Status == EnumStatusSolicitacao.concluido && !Horas.HasValue)
                {
                    return(Json(new { Status = false, Type = "error", Message = "Informe a quantidade de horas." }, JsonRequestBehavior.AllowGet));
                }
                else if (solic.Status == EnumStatusSolicitacao.reprovado && string.IsNullOrEmpty(solic.Observacao))
                {
                    return(Json(new { Status = false, Type = "error", Message = "Informe a observação sobre reprovação." }, JsonRequestBehavior.AllowGet));
                }
                var ok = true;

                var sol = solicitacaoRepository.GetSolicitacaoById(solic.IdSolicitacao);
                sol.Status = solic.Status;

                if (sol.Status == EnumStatusSolicitacao.reprovado)
                {
                    sol.Observacao = solic.Observacao;
                }
                else if (sol.Status == EnumStatusSolicitacao.concluido)
                {
                    ok = alunoRepository.AdicionaHoras(Horas.Value, sol.IdSolicitacao);
                }

                var msg = "";
                if (ok)
                {
                    msg = solicitacaoRepository.PersisteSolicitacao(sol);
                }
                else
                {
                    return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                }

                if (msg != "Erro")
                {
                    try
                    {
                        if (sol.Status == EnumStatusSolicitacao.reprovado && !string.IsNullOrEmpty(sol.Documento.CaminhoDocumento))
                        {
                            documentoRepository.DeletaArquivo(sol.Documento, false);
                            //DirDoc.DeletaArquivo(sol.Documento.CaminhoDocumento);
                            //sol.Documento.CaminhoDocumento = null;
                        }

                        var acao = sol.Status == EnumStatusSolicitacao.concluido ? "aprovada" :
                                   sol.Status == EnumStatusSolicitacao.reprovado ? "reprovada" : "";

                        var    url              = System.Web.Hosting.HostingEnvironment.MapPath("~/Views/Email/AlteracaoStatusSolicitacaoHoras.cshtml");
                        string viewCode         = System.IO.File.ReadAllText(url);
                        var    solicitacaoEmail = solicitacaoRepository.ConverToEmailModel(sol, Url.Action("Login", "Account", null, Request.Url.Scheme));

                        var html = RazorEngine.Razor.Parse(viewCode, solicitacaoEmail);
                        var to   = new[] { solicitacaoEmail.EmailAluno };
                        var from = System.Configuration.ConfigurationManager.AppSettings["MailFrom"].ToString();
                        Email.EnviarEmail(from, to, "Solicitação de horas complementares " + acao, html);
                    }
                    catch (Exception e)
                    {
                    }

                    if (sol.Status == EnumStatusSolicitacao.concluido)
                    {
                        Utilidades.SalvaLog(user, EnumAcao.Aprovar, sol, sol.IdSolicitacao);
                    }
                    else if (sol.Status == EnumStatusSolicitacao.reprovado)
                    {
                        Utilidades.SalvaLog(user, EnumAcao.Reprovar, sol, sol.IdSolicitacao);
                    }

                    return(Json(new { Status = true, Type = "success", Message = "Solicitação salva com sucesso", ReturnUrl = Url.Action("Index") }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception e)
            {
                return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
            }
        }
        public ActionResult CarregaModalExclusao(int idSol)
        {
            SolicitacaoDocumento sol = solicitacaoRepository.GetSolicitacaoById(idSol);

            return(PartialView("_ExclusaoSolicitacao", sol));
        }
        public object EnviarDocumento(SolicitacaoDocumento sol, HttpPostedFileBase uploadFile)
        {
            Usuario user = GetSessionUser();

            try
            {
                if (uploadFile == null)
                {
                    return(Json(new { Status = false, Type = "error", Message = "Selecione um documento" }, JsonRequestBehavior.AllowGet));
                }


                var solicitacao = solicitacaoRepository.GetSolicitacaoById(sol.IdSolicitacao);

                if (solicitacao.AlunoCurso.Aluno.Usuario.IdUsuario == User.Identity.Name)
                {
                    solicitacao.Status          = EnumStatusSolicitacao.processando;
                    solicitacao.DataAtendimento = DateTime.Now;

                    solicitacao.Documento.arquivo       = DirDoc.converterFileToArray(uploadFile);
                    solicitacao.Documento.NomeDocumento = uploadFile.FileName;

                    string msgDoc = DirDoc.SalvaArquivo(solicitacao.Documento);
                    switch (msgDoc)
                    {
                    case "Falha ao persistir":
                        return(Json(new { Status = false, Type = "error", Message = msgDoc }, JsonRequestBehavior.AllowGet));

                    case "Falha ao criptografar":
                        return(Json(new { Status = false, Type = "error", Message = msgDoc }, JsonRequestBehavior.AllowGet));

                    default:
                        string msg = solicitacaoRepository.PersisteSolicitacao(solicitacao);

                        if (msg != "Erro")
                        {
                            try
                            {
                                var    url      = System.Web.Hosting.HostingEnvironment.MapPath("~/Views/Email/SolicitacaoDocumentoAtendida.cshtml");
                                string viewCode = System.IO.File.ReadAllText(url);

                                var solicitacaoEmail = solicitacaoRepository.ConverToEmailModel(sol, Url.Action("Login", "Account", null, Request.Url.Scheme));
                                var html             = RazorEngine.Razor.Parse(viewCode, solicitacaoEmail);

                                if (!string.IsNullOrEmpty(solicitacaoEmail.EmailFuncionario))
                                {
                                    var to   = new[] { solicitacaoEmail.EmailFuncionario };
                                    var from = System.Configuration.ConfigurationManager.AppSettings["MailFrom"].ToString();

                                    Email.EnviarEmail(from, to, string.Format("Solicitação de documento atendida - {0} - {1}", solicitacaoEmail.NomeTipoDocumento, solicitacaoEmail.NomeAluno), html);
                                }
                            }
                            catch (Exception)
                            {
                            }
                            Utilidades.SalvaLog(user, EnumAcao.Persistir, solicitacao, solicitacao.IdSolicitacao);
                            return(Json(new { Status = true, Type = "success", Message = "Solicitação salva com sucesso", ReturnUrl = Url.Action("Index") }, JsonRequestBehavior.AllowGet));
                        }
                        else
                        {
                            return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                        }
                    }
                }
                else
                {
                    return(Json(new { Status = false, Type = "error", Message = "Não autorizado!" }, JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception e)
            {
                return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
            }
        }
        public object SalvarSolicitacao(SolicitacaoDocumento sol, HttpPostedFileBase uploadFile)
        {
            Usuario user = GetSessionUser();

            string msg = "Erro";

            if (uploadFile == null)
            {
                return(Json(new { Status = false, Type = "error", Message = "Selecione um documento" }, JsonRequestBehavior.AllowGet));
            }

            try
            {
                var edit = true;
                sol.Status       = sol.IdSolicitacao > 0 ? sol.Status : EnumStatusSolicitacao.pendente;
                sol.DataAbertura = DateTime.Now;
                AlunoCurso al = new AlunoCurso();

                if (sol.IdSolicitacao == 0)
                {
                    al = cursoRepository.GetAlunoCurso(User.Identity.Name);

                    sol.IdAlunoCurso    = al.IdAlunoCurso;
                    sol.TipoSolicitacao = EnumTipoSolicitacao.aluno;

                    edit = false;

                    sol.Documento               = new Documento();
                    sol.Documento.arquivo       = DirDoc.converterFileToArray(uploadFile);
                    sol.Documento.NomeDocumento = uploadFile.FileName;
                    sol.Documento.IdAlunoCurso  = sol.IdAlunoCurso;

                    sol.Documento.IdTipoDoc = tipoDocumentoRepository.GetTipoDoc("certificado").IdTipoDoc;

                    string msgDoc = DirDoc.SalvaArquivo(sol.Documento);

                    sol.DataLimite = sol.DataAbertura.AddDays(7);
                    msg            = solicitacaoRepository.PersisteSolicitacao(sol);
                }
                else
                {
                    sol.Documento               = new Documento();
                    sol.Documento.arquivo       = DirDoc.converterFileToArray(uploadFile);
                    sol.Documento.NomeDocumento = uploadFile.FileName;
                    sol.Documento.IdAlunoCurso  = sol.IdAlunoCurso;

                    sol.Documento.IdTipoDoc = tipoDocumentoRepository.GetTipoDoc("certificado").IdTipoDoc;

                    msg = solicitacaoRepository.AlteraDocumento(sol);
                }

                if (msg != "Erro")
                {
                    if (!edit)
                    {
                        try
                        {
                            sol.AlunoCurso = al;
                            var solicitacaoEmail = solicitacaoRepository.ConverToEmailModel(sol, Url.Action("Login", "Account", null, Request.Url.Scheme));

                            var    url      = System.Web.Hosting.HostingEnvironment.MapPath("~/Views/Email/NovaSolicitacaoHoras.cshtml");
                            string viewCode = System.IO.File.ReadAllText(url);

                            var html = RazorEngine.Razor.Parse(viewCode, solicitacaoEmail);

                            var toEmail = new List <Usuario>();
                            var coord   = cursoRepository.GetCoordenadorByCurso(al.IdCurso);
                            toEmail = usuarioRepository.GetUsuariosSecretaria();
                            if (coord != null && coord.Usuario != null)
                            {
                                toEmail.Add(coord.Usuario);
                            }
                            if (toEmail.Any(x => !string.IsNullOrEmpty(x.E_mail)))
                            {
                                var to   = toEmail.Where(x => !string.IsNullOrEmpty(x.E_mail)).Select(x => x.E_mail).ToArray();
                                var from = System.Configuration.ConfigurationManager.AppSettings["MailFrom"].ToString();
                                Email.EnviarEmail(from, to, "Nova solicitação de horas complementares", html);
                            }
                        }
                        catch (Exception e)
                        {
                        }
                    }
                    Utilidades.SalvaLog(user, EnumAcao.Persistir, sol, (sol.IdSolicitacao > 0 ? (int?)sol.IdSolicitacao : null));
                    return(Json(new { Status = true, Type = "success", Message = "Solicitação salva com sucesso", ReturnUrl = Url.Action("Index") }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception e)
            {
                return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
            }
        }
        public object SalvarSolicitacao(SolicitacaoDocumento sol)
        {
            Usuario user = GetSessionUser();

            var edit = true;

            sol.Status       = sol.IdSolicitacao > 0 ? sol.Status : EnumStatusSolicitacao.pendente;
            sol.DataAbertura = DateTime.Now;
            if (sol.IdSolicitacao == 0)
            {
                sol.IdAlunoCurso = cursoRepository.GetAlunoCurso(sol.AlunoCurso.IdAluno, sol.AlunoCurso.IdCurso).IdAlunoCurso;
            }
            sol.AlunoCurso      = null;
            sol.TipoSolicitacao = EnumTipoSolicitacao.secretaria;
            if (sol.IdSolicitacao == 0)
            {
                edit = false;
                Documento d = new Documento();
                d.IdTipoDoc     = (int)sol.TipoDocumento;
                d.IdAlunoCurso  = sol.IdAlunoCurso;
                d.Data          = sol.DataAbertura;
                d.NomeDocumento = "";

                sol.Documento = d;
            }

            if (ModelState.IsValid)
            {
                try
                {
                    // valida se o aluno está matriculado no curso que coordena
                    if (user.Permissao == EnumPermissaoUsuario.coordenador)
                    {
                        var        cursos = cursoRepository.GetCursoByCoordenador(User.Identity.Name);
                        AlunoCurso ac     = cursoRepository.GetAlunoCurso(sol.IdAlunoCurso);
                        if (!cursos.Contains(ac.Curso))
                        {
                            return(Json(new { Status = false, Type = "error", Message = "Não autorizado!" }, JsonRequestBehavior.AllowGet));
                        }
                    }

                    string msg = solicitacaoRepository.PersisteSolicitacao(sol);

                    if (msg != "Erro")
                    {
                        try
                        {
                            DocumentosModel db2              = new DocumentosModel();
                            var             solicitacao      = db2.SolicitacaoDocumento.Find(sol.IdSolicitacao);
                            var             solicitacaoEmail = solicitacaoRepository.ConverToEmailModel(solicitacao, Url.Action("Login", "Account", null, Request.Url.Scheme));

                            if (edit)
                            {
                                var    url      = System.Web.Hosting.HostingEnvironment.MapPath("~/Views/Email/AlteracaoSolicitacaoDocumento.cshtml");
                                string viewCode = System.IO.File.ReadAllText(url);

                                var html = RazorEngine.Razor.Parse(viewCode, solicitacaoEmail);
                                if (!string.IsNullOrEmpty(solicitacaoEmail.EmailAluno))
                                {
                                    var to   = new[] { solicitacaoEmail.EmailAluno };
                                    var from = System.Configuration.ConfigurationManager.AppSettings["MailFrom"].ToString();
                                    Email.EnviarEmail(from, to, "Alteração em solicitação de documento - " + solicitacaoEmail.NomeTipoDocumento, html);
                                }
                            }
                            else
                            {
                                var    url      = System.Web.Hosting.HostingEnvironment.MapPath("~/Views/Email/NovaSolicitacaoDocumento.cshtml");
                                string viewCode = System.IO.File.ReadAllText(url);

                                var html = RazorEngine.Razor.Parse(viewCode, solicitacaoEmail);
                                if (!string.IsNullOrEmpty(solicitacaoEmail.EmailAluno))
                                {
                                    var to   = new[] { solicitacaoEmail.EmailAluno };
                                    var from = System.Configuration.ConfigurationManager.AppSettings["MailFrom"].ToString();
                                    Email.EnviarEmail(from, to, "Nova solicitação de documento - " + solicitacaoEmail.NomeTipoDocumento, html);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                        }

                        Utilidades.SalvaLog(user, EnumAcao.Persistir, sol, (sol.IdSolicitacao > 0 ? (int?)sol.IdSolicitacao : null));
                        return(Json(new { Status = true, Type = "success", Message = "Solicitação salva com sucesso", ReturnUrl = Url.Action("Index") }, JsonRequestBehavior.AllowGet));
                    }
                    else
                    {
                        return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                    }
                }
                catch (Exception e)
                {
                    return(Json(new { Status = false, Type = "error", Message = "Ocorreu um erro ao realizar esta operação." }, JsonRequestBehavior.AllowGet));
                }
            }
            else
            {
                return(Json(new { Status = false, Type = "error", Message = "Campos inválidos" }, JsonRequestBehavior.AllowGet));
            }
        }