public void Save(inscricao entity)
 {
     DataModel.Entry(entity).State = entity.id_inscricao == 0 ?
        EntityState.Added :
        EntityState.Modified;
     DataModel.SaveChanges();
 }
 public ActionResult List(inscricao entity, String message, String messageError)
 {
     ViewData["message"] = message;
     ViewData["messageError"] = messageError;
     if (string.IsNullOrEmpty(entity.usuario.nome_completo) && (entity.fk_id_juri == 0) &&
         string.IsNullOrEmpty(entity.status_inscricao) && (entity.fk_id_funcao == 0) &&
         string.IsNullOrEmpty(entity.usuario.num_matric_aluno))
     {
         return View(InscricaoRepository.GetAll());
     }
     else
     {
         return View(InscricaoRepository.GetAllByCriteria(entity.usuario.nome_completo ?? "", entity.fk_id_juri,
             entity.fk_id_funcao, entity.usuario.num_matric_aluno ?? "", entity.status_inscricao ?? ""));
     }
 }
        public ActionResult Index()
        {
            LoadFormJuri();
            LoadFormFuncao();

            inscricao inscricao = new inscricao();
            inscricao.funcao = new funcao();
            inscricao.usuario = new usuario();

            return View(new inscricao());
        }
        public bool validate(inscricao entity)
        {
            bool retorno = false;

            if (entity.fk_id_juri == 0)
            {
                ModelState.AddModelError("fk_id_juri", "Campo obrigatório");
                retorno = true;
            }

            return retorno;
        }
        public ActionResult Delete(int id, inscricao inscricao)
        {
            try
            {
                inscricao = InscricaoRepository.GetOne(id);
                if (inscricao.presenca.Count > 0)
                    return RedirectToAction("ListByIdJuri", new { id = inscricao.fk_id_juri, messageError = "Essa inscrição possui registros vinculados a seu cadastro. Não é possível excluí-la." });
                
                InscricaoRepository.Delete(inscricao);

                return RedirectToAction("ListByIdJuri", new { id = inscricao.fk_id_juri, message = "Inscrição excluída com sucesso!" });
            }
            catch
            {
                return View();
            }
        }
 public ActionResult Edit(int id, inscricao inscricao)
 {
     LoadFormFuncao();
     
     try
     {
         if (validate(inscricao))
             return View(inscricao);
         InscricaoRepository.Edit(inscricao);
         return RedirectToAction("ListByIdJuri", new { id = inscricao.fk_id_juri, message = "Inscrição editada com sucesso!" });
     }
     catch
     {
         return View();
     }
 }
        public ActionResult Create(inscricao inscricao)
        {
            LoadFormJuriToInscricao();
            LoadFormFuncao();
            LoadFormCurso();

            var user = UsuarioRepository.GetOne(((usuario)Session["Usuario"]).id_usuario);

            inscricao.status_inscricao = "Pendente";
            if (user.perfil.id_perfil != 4)
                inscricao.fk_id_funcao = 6;
            user.inscricao.Add(inscricao);

            try
            {
                if (validate(inscricao))
                    return View(inscricao);
                UsuarioRepository.Edit(user);

                return RedirectToAction("List", "Juri", new { id = inscricao.fk_id_juri, message = "Inscrição realizada com sucesso!" });
            }
            catch
            {
                return View(inscricao);
            }
        }
        public ActionResult Sortear(int id, inscricao inscricao, String messageError)
        {
            ViewData["messageError"] = messageError;
            List<inscricao> PromotorSort = new List<inscricao>();
            List<inscricao> AdvDefesaSort = new List<inscricao>();
            List<inscricao> EscrivaoSort = new List<inscricao>();
            List<inscricao> JuradoSort = new List<inscricao>();
            List<inscricao> OficJusticaSort = new List<inscricao>();
            List<inscricao> Assistente = new List<inscricao>();
            List<inscricao> SegurancaSort = new List<inscricao>();
            List<inscricao> ReuSort = new List<inscricao>();
            List<inscricao> JuizSort = new List<inscricao>();

            /*  OS CAMPOS ABAIXO ESTÃO COMENTADOS PORQUE DÁ ERRO NO SORTEIO SE NÃO TIVER UMA QUANTIDADE MÍNIMA DE INSCRIÇÕES FEITAS
                EM DETERMINADA FUNÇÃO MAIOR QUE O ÚLTIMO NÚMERO DE CADA LINHA DE CÓDIGO. DESCOMENTAR O CÓDIGO ABAIXO QUANDO TIVER
                MUITAS INSCRIÇÕES E FOR EXECUTAR O SORTEIO...  */


            // Verificando se há a quantidade mínima de inscrições para fazer o sorteio
            if (InscricaoRepository.GetPromotorByAuthorization(id).Count < 3 || 
                InscricaoRepository.GetAdvogadoDefesaByAuthorization(id).Count < 3 ||
                InscricaoRepository.GetEscrivaoByAuthorization(id).Count < 1 ||
                InscricaoRepository.GetJuradoByAuthorization(id).Count < 25 ||
                InscricaoRepository.GetOficialJusticaoByAuthorization(id).Count < 4 ||
                InscricaoRepository.GetSegurancaByAuthorization(id).Count < 4 ||
                InscricaoRepository.GetReuByAuthorization(id).Count < 1 ||
                InscricaoRepository.GetJuizByAuthorization(id).Count < 1 )
                return RedirectToAction("List", "Juri", new { messageError = "Não é possível realizar o sorteio porque a quantidade de inscrições autorizadas é insuficiente para preencher todas as funções obrigatórias." });

            // Realizando o sorteio
            PromotorSort = Sorteio(InscricaoRepository.GetPromotorByAuthorization(id), 3);
            AdvDefesaSort = Sorteio(InscricaoRepository.GetAdvogadoDefesaByAuthorization(id), 3);
            EscrivaoSort = Sorteio(InscricaoRepository.GetEscrivaoByAuthorization(id), 1);
            JuradoSort = Sorteio(InscricaoRepository.GetJuradoByAuthorization(id), 25);
            OficJusticaSort = Sorteio(InscricaoRepository.GetOficialJusticaoByAuthorization(id), 4);
            SegurancaSort = Sorteio(InscricaoRepository.GetSegurancaByAuthorization(id), 4);
            ReuSort = Sorteio(InscricaoRepository.GetReuByAuthorization(id), 1);
            JuizSort = Sorteio(InscricaoRepository.GetJuizByAuthorization(id), 1);
            Assistente = InscricaoRepository.GetAssistenteByAuthorization(id);


            // Cria uma lista de sorteados do júri simulado
            List<inscricao> sorteados = new List<inscricao>();
            foreach (var sort in PromotorSort)
                sorteados.Add(sort);
            foreach (var sort in AdvDefesaSort)
                sorteados.Add(sort);
            foreach (var sort in EscrivaoSort)
                sorteados.Add(sort);
            foreach (var sort in JuradoSort)
                sorteados.Add(sort);
            foreach (var sort in OficJusticaSort)
                sorteados.Add(sort);
            foreach (var sort in SegurancaSort)
                sorteados.Add(sort);
            foreach (var sort in ReuSort)
                sorteados.Add(sort);
            foreach (var sort in JuizSort)
                sorteados.Add(sort);
            foreach (var sort in Assistente)
                sorteados.Add(sort);

            //Atribui true a juri_sorteado para mostrar que o júri já foi sorteado e que suas inscrições estão encerradas
            juri juri = JuriRepository.GetOne(id);
            juri.juri_sorteado = true;
            JuriRepository.Edit(juri);

            //Cria a lista de presença
            List<inscricao> lst = InscricaoRepository.GetAllByAutorizados(juri.id_juri);

            foreach (var item in lst)
            {
                presenca temp = new presenca();
                temp.pfk_id_juri = juri.id_juri;
                temp.pfk_id_inscricao = item.id_inscricao;

                PresencaRepository.Create(temp);
            }


            return View(sorteados);
        }        
 public void Delete(inscricao entity)
 {
     DataModel.inscricao.Remove(entity);
     DataModel.SaveChanges();
 }
 public void Edit(inscricao entity)
 {
     Save(entity);
 }
 public void Create(inscricao entity)
 {
     DataModel.inscricao.Add(entity);
     DataModel.SaveChanges();
 }