buscar == null) { $eventos = Evento::all()->sortBy('nome'); // $comissaoEvento = ComissaoEvento::all(); // $eventos = Evento::where('coordenadorId', Auth::user()->id)->get(); $hoje = Carbon::today('America/Recife'); $hoje = $hoje->toDateString(); return view('coordenador.home', ['eventos' => $eventos, 'hoje' => $hoje, 'palavra' => '', 'flag' => 'false']); } else { $eventos = Evento::where('nome', 'ilike', '%' . $request->buscar . '%')->get(); $hoje = Carbon::today('America/Recife'); $hoje = $hoje->toDateString(); return view('coordenador.home', ['eventos' => $eventos, 'hoje' => $hoje, 'palavra' => $request->buscar, 'flag' => 'true']); } } public function listar() { // $eventos = Evento::all()->sortBy('nome'); // $comissaoEvento = ComissaoEvento::all(); // $eventos = Evento::where('coordenadorId', Auth::user()->id)->get(); return view('evento.listarEvento', ['eventos' => $eventos]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $coordenadors = CoordenadorComissao::with('user')->get(); $naturezas = Natureza::orderBy('nome')->get(); $yesterday = Carbon::yesterday('America/Recife'); $ods = ObjetivoDeDesenvolvimentoSustentavel::with('metas')->get(); $yesterday = $yesterday->toDateString(); return view('evento.criarEvento', ['coordenadors' => $coordenadors, 'naturezas' => $naturezas, 'ontem' => $yesterday, 'ods' => $ods]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { /** @var Carbon */ $mytime = Carbon::now('America/Recife'); /** @var Carbon */ $yesterday = Carbon::yesterday('America/Recife'); /** @var string */ $yesterday = $yesterday->toDateString(); /** @var integer */ $user_id = Auth()->user()->id; if (isset($request->docTutorial)) { $request->validate([ 'docTutorial' => ['file', 'max:2048', new ExcelRule($request->file('docTutorial'))], ]); } // Validar campos comuns $validatedData = $request->validate([ 'nome' => ['required', 'string'], 'descricao' => ['required', 'string', 'max:1500'], 'tipo' => ['required', 'string'], 'natureza' => ['required'], 'coordenadorId' => ['required'], 'nome_docExtra' => [Rule::requiredIf($request->check_docExtra != null), 'max:255'], 'inicioSubmissao' => ['required', 'date', 'after:yesterday'], 'fimSubmissao' => ['required', 'date', 'after_or_equal:inicioSubmissao'], 'inicioRevisao' => ['required', 'date', 'after:yesterday'], 'fimRevisao' => ['required', 'date', 'after:inicioRevisao', 'after:fimSubmissao'], 'resultado_preliminar' => ['required', 'date', 'after_or_equal:fimRevisao'], 'inicio_recurso' => ['required', 'date', 'after_or_equal:resultado_preliminar'], 'fim_recurso' => ['required', 'date', 'after:inicio_recurso'], 'resultado_final' => ['required', 'date', 'after:fim_recurso'], 'dt_inicioRelatorioParcial' => $request->dt_inicioRelatorioParcial ? ['date', 'after:resultado_preliminar'] : [], 'dt_fimRelatorioParcial' => $request->dt_fimRelatorioParcial ? ['date', 'after_or_equal:dt_inicioRelatorioParcial'] : [], 'dt_inicioRelatorioFinal' => $request->dt_inicioRelatorioFinal ? ['date', 'after:dt_fimRelatorioParcial'] : [], 'dt_fimRelatorioFinal' => $request->dt_fimRelatorioFinal ? ['date', 'after_or_equal:dt_inicioRelatorioFinal'] : [], 'pdfEdital' => [($request->pdfEditalPreenchido !== 'sim' ? 'required' : ''), 'file', 'mimes:pdf', 'max:2048'], 'pdfRecurso' => [($request->pdfRecursoPreenchido !== 'sim' ? 'required' : ''), 'file', 'mimes:pdf', 'max:2048'], 'modeloDocumento' => [($request->modeloDocumentoPreenchido !== 'sim' ? 'required' : ''), 'file', 'mimes:pdf', 'max:2048'], ]); // Validação específica para Avaliação por Barema if (in_array('barema', $request->tipoAvaliacao)) { $validateBarema = $request->validate([ 'pontuacao' => ['required', 'numeric'], 'inputFieldBarema.*.nome' => ['required', 'string'], 'inputFieldBarema.*.nota_maxima' => ['required', 'numeric'], 'inputFieldBarema.*.prioridade' => ['required'], ]); } // Validação específica para Avaliação por Currículo Lattes if (in_array('curriculo', $request->tipoAvaliacao)) { $validateCurriculo = $request->validate([ 'pontuacao_curriculo' => ['required', 'numeric'], 'inputFieldCurriculo.*.nome' => ['required', 'string'], 'inputFieldCurriculo.*.nota_maxima' => ['required', 'numeric'], 'inputFieldCurriculo.*.prioridade' => ['required'], ]); } // Substituição do tipo "OUTRA" pelo valor informado if ($request->tipo === 'OUTRA' && $request->outra_descricao) { $request->tipo = $request->outra_descricao; } // Salvamento do Evento $evento = new Evento(); $evento->nome = $request->nome; $evento->descricao = $request->descricao; $evento->tipo = $request->tipo; $evento->natureza = $request->natureza_id; $evento->inicioSubmissao = $request->inicioSubmissao; $evento->fimSubmissao = $request->fimSubmissao; $evento->inicioRevisao = $request->inicioRevisao; $evento->fimRevisao = $request->fimRevisao; $evento->inicio_recurso = $request->inicio_recurso; $evento->fim_recurso = $request->fim_recurso; $evento->resultado_preliminar = $request->resultado_preliminar; $evento->resultado_final = $request->resultado_final; $evento->quantidade_ods = $request->quantidade_ods; if ($request->dt_inicioRelatorioParcial) { $evento->dt_inicioRelatorioParcial = $request->dt_inicioRelatorioParcial; } if ($request->dt_fimRelatorioParcial) { $evento->dt_fimRelatorioParcial = $request->dt_fimRelatorioParcial; } if ($request->dt_inicioRelatorioFinal) { $evento->dt_inicioRelatorioFinal = $request->dt_inicioRelatorioFinal; } if ($request->dt_fimRelatorioFinal) { $evento->dt_fimRelatorioFinal = $request->dt_fimRelatorioFinal; } $evento->coordenadorId = $request->coordenadorId; $evento->criador_id = $user_id; $evento->numParticipantes = $request->numParticipantes; $evento->consu = $request->has('consu'); $evento->cotaDoutor = $request->has('cotaDoutor'); $evento->obrigatoriedade_docExtra = $request->has('obrigatoriedade_docExtra'); $evento->tipoAvaliacao = 'campos'; // ou o valor correto conforme a implementação $evento->save(); // Salva o evento primeiro para obter o ID // Salvamento dos Campos de Avaliação if ($request->has('inputFieldBarema')) { foreach ($request->inputFieldBarema as $field) { $campoAval = new CampoAvaliacao(); $campoAval->nome = $field['nome'] . '-b'; // Adiciona o sufixo '-b' para Barema $campoAval->nota_maxima = $field['nota_maxima']; $campoAval->descricao = $field['descricao'] ?? null; $campoAval->prioridade = $field['prioridade']; $campoAval->evento_id = $evento->id; $campoAval->save(); } } if ($request->has('inputFieldCurriculo')) { foreach ($request->inputFieldCurriculo as $field) { $campoAval = new CampoAvaliacao(); $campoAval->nome = $field['nome'] . '-c'; // Adiciona o sufixo '-c' para Currículo $campoAval->nota_maxima = $field['nota_maxima']; $campoAval->descricao = $field['descricao'] ?? null; $campoAval->prioridade = $field['prioridade']; $campoAval->evento_id = $evento->id; $campoAval->save(); } } // Salvamento dos Anexos $this->armazenarAnexosTemp($request, $evento); return redirect()->route('admin.editais')->with(['mensagem' => 'Edital criado com sucesso!']); } /** * Armazena os anexos temporários. * * @return Evento */ public function armazenarAnexosTemp(Request $request, Evento $evento) { if (!(is_null($request->pdfEdital))) { $pasta = 'pdfEdital/' . $evento->id; $evento->pdfEdital = Storage::putFileAs($pasta, $request->pdfEdital, 'edital.pdf'); } if (!(is_null($request->modeloDocumento))) { $extension = $request->modeloDocumento->extension(); $path = 'modeloDocumento/' . $evento->id; $nome = "modelo" . "." . $extension; $evento->modeloDocumento = Storage::putFileAs($path, $request->modeloDocumento, $nome); } if (!(is_null($request->pdfFormAvalRelatorio))) { $pasta = 'pdfFormAvalRelatorio/' . $evento->id; $evento->formAvaliacaoRelatorio = Storage::putFileAs($pasta, $request->pdfFormAvalRelatorio, 'formulario_de_avaliacao_do_relatorio.pdf'); } if (!(is_null($request->pdfRecurso))) { $pasta = 'pdfRecurso/' . $evento->id; $nome = "recurso.pdf"; $evento->docRecurso = Storage::putFileAs($pasta, $request->pdfRecurso, $nome); } if (!(is_null($request->pdfRelatorio))) { $pasta = 'pdfRelatorio/' . $evento->id; $nome = "relatorio.pdf"; $evento->docRelatorio = Storage::putFileAs($pasta, $request->pdfRelatorio, $nome); } $evento->anexosStatus = 'final'; // Atualiza o status dos anexos para 'final' $evento->save(); return $evento; } /** @return Evento */ /** * Display the specified resource. * * @param \App\Evento $evento * @return \Illuminate\Http\Response */ public function show($id) { $evento = Evento::find($id); $proponente = Proponente::where('user_id', Auth::user()->id)->first(); if ($proponente != null) { $hasTrabalho = false; $hasFile = false; $trabalhos = $proponente->trabalhos()->where('evento_id', $evento->id)->get(); $trabalhosCount = $proponente->trabalhos()->where('evento_id', $evento->id)->count(); if ($trabalhosCount != 0) { $hasTrabalho = true; $hasFile = true; } } else { $hasTrabalho = false; $hasFile = false; $trabalhos = 0; $trabalhosCount = 0; } $trabalhosId = Trabalho::where('evento_id', $evento->id)->select('id')->get(); $hoje = Carbon::today('America/Recife'); $hoje = $hoje->toDateString(); // dd(false); return view('evento.visualizarEvento', [ 'evento' => $evento, 'trabalhos' => $trabalhos, // 'trabalhosCoautor' => $trabalhosCoautor, 'hasTrabalho' => $hasTrabalho, // 'hasTrabalhoCoautor' => $hasTrabalhoCoautor, 'hasFile' => $hasFile, 'hoje' => $hoje ]); } public function showNaoLogado($id) { $evento = Evento::find($id); $hasTrabalho = false; $hasTrabalhoCoautor = false; $hasFile = false; $trabalhos = null; $trabalhosCoautor = null; $hoje = Carbon::today('America/Recife'); $hoje = $hoje->toDateString(); // dd(false); return view('evento.visualizarEvento', [ 'evento' => $evento, 'trabalhos' => $trabalhos, 'trabalhosCoautor' => $trabalhosCoautor, 'hasTrabalho' => $hasTrabalho, 'hasTrabalhoCoautor' => $hasTrabalhoCoautor, 'hasFile' => $hasFile, 'hoje' => $hoje ]); } /** * Show the form for editing the specified resource. * * @param \App\Evento $evento * @return \Illuminate\Http\Response */ public function edit($id) { $evento = Evento::find($id); // Se for uma string, converta para array if (is_string($evento->tipoAvaliacao)) { $evento->tipoAvaliacao = explode(',', $evento->tipoAvaliacao); } // Recuperar os campos de avaliação de Barema $camposBarema = CampoAvaliacao::where('evento_id', $evento->id) ->where('nome', 'LIKE', '%-b') // Filtra os campos de Barema ->get(); // Recuperar os campos de avaliação de Currículo Lattes $camposCurriculo = CampoAvaliacao::where('evento_id', $evento->id) ->where('nome', 'LIKE', '%-c') // Filtra os campos de Currículo Lattes ->get(); $coordenadores = CoordenadorComissao::with('user')->get(); $naturezas = Natureza::orderBy('nome')->get(); $yesterday = Carbon::yesterday('America/Recife')->toDateString(); return view('evento.editarEvento', [ 'evento' => $evento, 'coordenadores' => $coordenadores, 'naturezas' => $naturezas, 'ontem' => $yesterday, 'camposBarema' => $camposBarema, // Passa os campos de Barema para a view 'camposCurriculo' => $camposCurriculo, // Passa os campos de Currículo para a view ]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Evento $evento * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // Validações dos campos $request->validate([ 'nome' => 'required|string|max:255', 'tipo' => 'required|string', 'natureza' => 'required|integer', 'descricao' => 'required|string', 'inicioSubmissao' => 'required|date', 'fimSubmissao' => 'required|date', 'inicioRevisao' => 'required|date', 'fimRevisao' => 'required|date', 'resultado_preliminar' => 'required|date', 'inicio_recurso' => 'required|date', 'fim_recurso' => 'required|date', 'resultado_final' => 'required|date', 'pdfEdital' => 'nullable|file|mimes:pdf|max:2048', 'modeloDocumento' => 'nullable|file|mimes:pdf|max:2048', 'pdfRecurso' => 'nullable|file|mimes:pdf|max:2048', 'pdfRelatorio' => 'nullable|file|mimes:pdf|max:2048', 'pdfFormAvalRelatorio' => 'nullable|file|mimes:pdf|max:2048', ]); // Busca o evento no banco de dados $evento = Evento::findOrFail($id); // Atualiza os campos básicos $evento->nome = $request->nome; $evento->tipo = $request->tipo; $evento->natureza_id = $request->natureza_id; $evento->descricao = $request->descricao; $evento->inicioSubmissao = $request->inicioSubmissao; $evento->fimSubmissao = $request->fimSubmissao; $evento->inicioRevisao = $request->inicioRevisao; $evento->fimRevisao = $request->fimRevisao; $evento->resultado_preliminar = $request->resultado_preliminar; $evento->inicio_recurso = $request->inicio_recurso; $evento->fim_recurso = $request->fim_recurso; $evento->resultado_final = $request->resultado_final; $evento->coordenadorId = $request->coordenadorId; // Verifica se algum arquivo foi enviado e armazena if ($request->hasFile('pdfEdital')) { $evento->pdfEdital = $request->file('pdfEdital')->store('pdfEdital'); } if ($request->hasFile('modeloDocumento')) { $evento->modeloDocumento = $request->file('modeloDocumento')->store('modeloDocumento'); } if ($request->hasFile('pdfRecurso')) { $evento->pdfRecurso = $request->file('pdfRecurso')->store('pdfRecurso'); } if ($request->hasFile('pdfRelatorio')) { $evento->pdfRelatorio = $request->file('pdfRelatorio')->store('pdfRelatorio'); } if ($request->hasFile('pdfFormAvalRelatorio')) { $evento->pdfFormAvalRelatorio = $request->file('pdfFormAvalRelatorio')->store('pdfFormAvalRelatorio'); } // Atualiza as avaliações (Barema e Currículo) if ($request->has('tipoAvaliacao')) { $evento->tipoAvaliacao = implode(',', $request->tipoAvaliacao); } DB::table('campo_avaliacaos')->where('evento_id', $id)->delete(); // Campos dinâmicos de Barema if ($request->has('inputFieldBarema')) { foreach ($request->inputFieldBarema as $field) { $campoAval = new CampoAvaliacao(); $campoAval->nome = $field['nome'] . '-b'; // Adiciona o sufixo '-b' para Barema $campoAval->nota_maxima = $field['nota_maxima']; $campoAval->descricao = $field['descricao'] ?? null; $campoAval->prioridade = $field['prioridade']; $campoAval->evento_id = $evento->id; $campoAval->save(); } } if ($request->has('inputFieldCurriculo')) { foreach ($request->inputFieldCurriculo as $field) { $campoAval = new CampoAvaliacao(); $campoAval->nome = $field['nome'] . '-c'; // Adiciona o sufixo '-c' para Currículo $campoAval->nota_maxima = $field['nota_maxima']; $campoAval->descricao = $field['descricao'] ?? null; $campoAval->prioridade = $field['prioridade']; $campoAval->evento_id = $evento->id; $campoAval->save(); } } // Salva as alterações no banco de dados $evento->save(); // Redireciona com mensagem de sucesso return redirect()->route('admin.editais', $evento->id)->with('success', 'Evento atualizado com sucesso!'); } /** * Remove the specified resource from storage. * * @param \App\Evento $evento * @return \Illuminate\Http\Response */ public function destroy($id) { $evento = Evento::find($id); // $areas = Area::where('eventoId', $id); $atividades = Atividade::where('eventoId', $id); $comissao = ComissaoEvento::where('eventosId', $id); $revisores = Revisor::where('eventoId', $id); $trabalhos = Trabalho::where('evento_id', $id); $camposAvaliacao = CampoAvaliacao::where('evento_id', $id); // if(isset($areas)){ // $areas->delete(); // } if (isset($atividades)) { $atividades->delete(); } if (isset($comissao)) { $comissao->delete(); } if (isset($revisores)) { $revisores->delete(); } if (isset($trabalhos)) { $trabalhos->delete(); Trabalho::withTrashed()->where('evento_id', $id)->update(['evento_id' => null]); } if (isset($camposAvaliacao)) { $camposAvaliacao->delete(); CampoAvaliacao::withTrashed()->where('evento_id', $id)->update(['evento_id' => null]); } $pdfEditalPath = 'pdfEdital/' . $evento->id; if (Storage::disk()->exists($pdfEditalPath)) { Storage::deleteDirectory($pdfEditalPath); } $modeloDocumentoPath = 'modeloDocumento/' . $evento->id; if (Storage::disk()->exists($modeloDocumentoPath)) { Storage::deleteDirectory($modeloDocumentoPath); } DB::table('avaliador_evento')->where('evento_id', $evento->id)->delete(); $evento->delete(); return redirect()->back()->with(['mensagem' => 'Edital deletado com sucesso!']); } public function detalhes(Request $request) { $evento = Evento::find($request->eventoId); $this->authorize('isCoordenador', $evento); $ComissaoEvento = ComissaoEvento::where('eventosId', $evento->id)->get(); // dd($ComissaoEventos); $ids = []; foreach ($ComissaoEvento as $ce) { array_push($ids, $ce->userId); } $users = User::find($ids); $areas = Area::where('eventoId', $evento->id)->get(); $areasId = Area::where('eventoId', $evento->id)->select('id')->get(); $trabalhosId = Trabalho::whereIn('areaId', $areasId)->select('id')->get(); $revisores = Revisor::where('eventoId', $evento->id)->get(); $modalidades = Modalidade::all(); $areaModalidades = AreaModalidade::whereIn('areaId', $areasId)->get(); $trabalhos = Trabalho::whereIn('areaId', $areasId)->orderBy('id')->get(); $trabalhosEnviados = Trabalho::whereIn('areaId', $areasId)->count(); $trabalhosPendentes = Trabalho::whereIn('areaId', $areasId)->where('avaliado', 'processando')->count(); $trabalhosAvaliados = Atribuicao::whereIn('trabalhoId', $trabalhosId)->where('parecer', '!=', 'processando')->count(); $numeroRevisores = Revisor::where('eventoId', $evento->id)->count(); $numeroComissao = ComissaoEvento::where('eventosId', $evento->id)->count(); // $atribuicoesProcessando; // dd($trabalhosEnviados); $revs = Revisor::where('eventoId', $evento->id)->with('user')->get(); return view('coordenador.detalhesEvento', [ 'evento' => $evento, 'areas' => $areas, 'revisores' => $revisores, 'revs' => $revs, 'users' => $users, 'modalidades' => $modalidades, 'areaModalidades' => $areaModalidades, 'trabalhos' => $trabalhos, 'trabalhosEnviados' => $trabalhosEnviados, 'trabalhosAvaliados' => $trabalhosAvaliados, 'trabalhosPendentes' => $trabalhosPendentes, 'numeroRevisores' => $numeroRevisores, 'numeroComissao' => $numeroComissao ]); } public function numTrabalhos(Request $request) { $evento = Evento::find($request->eventoId); $this->authorize('isCoordenador', $evento); $validatedData = $request->validate([ 'eventoId' => ['required', 'integer'], 'trabalhosPorAutor' => ['required', 'integer'], 'numCoautor' => ['required', 'integer'] ]); $evento->numMaxTrabalhos = $request->trabalhosPorAutor; $evento->numMaxCoautores = $request->numCoautor; $evento->save(); return redirect()->route('coord.detalhesEvento', ['eventoId' => $request->eventoId]); } public function setResumo(Request $request) { $evento = Evento::find($request->eventoId); $this->authorize('isCoordenador', $evento); $validatedData = $request->validate([ 'eventoId' => ['required', 'integer'], 'hasResumo' => ['required', 'string'] ]); if ($request->hasResumo == 'true') { $evento->hasResumo = true; } else { $evento->hasResumo = false; } $evento->save(); return redirect()->route('coord.detalhesEvento', ['eventoId' => $request->eventoId]); } public function setFotoEvento(Request $request) { $evento = Evento::find($request->eventoId); $this->authorize('isCoordenador', $evento); // dd($request); $validatedData = $request->validate([ 'eventoId' => ['required', 'integer'], 'fotoEvento' => ['required', 'file', 'mimes:png'] ]); $file = $request->fotoEvento; $path = 'public/eventos/' . $evento->id; $nome = '/logo.png'; Storage::putFileAs($path, $file, $nome); $evento->fotoEvento = $path . $nome; $evento->save(); return redirect()->route('coord.detalhesEvento', ['eventoId' => $request->eventoId]); } public function areaParticipante() { $eventos = Evento::all(); return view('user.areaParticipante', ['eventos' => $eventos]); } public function listComissao() { $comissaoEvento = ComissaoEvento::where('userId', Auth::user()->id)->get(); $eventos = Evento::all(); $evnts = []; foreach ($comissaoEvento as $comissao) { foreach ($eventos as $evento) { if ($comissao->eventosId == $evento->id) { array_push($evnts, $evento); } } } return view('user.comissoes', ['eventos' => $evnts]); } public function listComissaoTrabalhos(Request $request) { $evento = Evento::find($request->eventoId); $areasId = Area::where('eventoId', $evento->id)->select('id')->get(); $trabalhos = Trabalho::whereIn('areaId', $areasId)->orderBy('id')->get(); return view('user.areaComissao', ['trabalhos' => $trabalhos]); } public function baixarEdital($id) { $path = "pdfEdital/{$id}/edital.pdf"; if (Storage::disk('local')->exists($path)) { ob_end_clean(); // Resolve problemas de buffer antes do download return Storage::download($path, 'edital.pdf'); } return abort(404, 'Arquivo de edital não encontrado.'); } public function baixarModelos($id) { $path = "modeloDocumento/{$id}/modelo.pdf"; if (Storage::disk('local')->exists($path)) { ob_end_clean(); return Storage::download($path, 'modelo.pdf'); } return abort(404, 'Arquivo de modelo de documento não encontrado.'); } public function baixarFormularioAvaliacaoRelatorio($id) { $path = "pdfFormAvalRelatorio/{$id}/formulario_de_avaliacao_do_relatorio.pdf"; if (Storage::disk('local')->exists($path)) { ob_end_clean(); return Storage::download($path, 'formulario_de_avaliacao_do_relatorio.pdf'); } return abort(404, 'Formulário de avaliação do relatório não encontrado.'); } public function baixarRecurso($id) { $path = "pdfRecurso/{$id}/recurso.pdf"; if (Storage::disk('local')->exists($path)) { ob_end_clean(); return Storage::download($path, 'recurso.pdf'); } return abort(404, 'Arquivo de recurso não encontrado.'); } public function baixarRelatorio($id) { $path = "pdfRelatorio/{$id}/relatorio.pdf"; if (Storage::disk('local')->exists($path)) { ob_end_clean(); return Storage::download($path, 'relatorio.pdf'); } return abort(404, 'Relatório não encontrado.'); } public function getMetas($odsId) { { try { $ods = ObjetivoDeDesenvolvimentoSustentavel::with('metas')->findOrFail($odsId); $response = [ 'ods' => $ods->nome, 'metas' => $ods->metas, ]; return response()->json($response); } catch (\Exception $e) { return response()->json(['error' => 'Erro ao carregar as metas'], 500); } } } }