From 92a5a813f834fb8af343ed9dee8b53998e67c7a6 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Sun, 17 May 2026 12:07:17 -0300 Subject: [PATCH 1/9] =?UTF-8?q?Reformula=C3=A7=C3=A3o=20das=20rotas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adicionado o prefixo de 'equivalencias' para rotas relacionadas diretamente à requisição de equivalências, evitando prolixidade nas rotas dentro de routes/web.php. Não muda o funcionamento mas torna o arquivo de rotas mais limpo e organizado. --- routes/web.php | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/routes/web.php b/routes/web.php index 3fe1ece..ee82ab1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,31 +18,31 @@ Route::get('/', [WorkflowController::class, 'home'])->name('workflows.index'); -Route::middleware(['auth'])->group(function () { +Route::middleware(['auth'])->prefix('equivalencias')->group(function () { Route::middleware('can:equivalencias')->group(function () { - Route::get('/equivalencias', [EquivalenciaController::class, 'index']) + Route::get('/', [EquivalenciaController::class, 'index']) ->name('equivalencias.index'); - Route::get('/equivalencias/{codcur}/{codhab}', [EquivalenciaController::class, 'show']) + Route::get('/{codcur}/{codhab}', [EquivalenciaController::class, 'show']) ->name('equivalencias.show'); Route::post('/equivalencia/estado-edicao', [EquivalenciaController::class, 'saveEditModeState']) ->name('equivalencias.save-edit-mode-state'); - Route::post('/equivalencias/{codcur}/{codhab}', [EquivalenciaController::class, 'store']) + Route::post('/{codcur}/{codhab}', [EquivalenciaController::class, 'store']) ->name('equivalencias.store'); - Route::put('/equivalencias/{codcur}/{codhab}/{equivalencia}', [EquivalenciaController::class, 'update']) + Route::put('/{codcur}/{codhab}/{equivalencia}', [EquivalenciaController::class, 'update']) ->name('equivalencias.update'); - Route::delete('/equivalencias/{codcur}/{codhab}/{equivalencia}', [EquivalenciaController::class, 'destroy']) + Route::delete('/{codcur}/{codhab}/{equivalencia}', [EquivalenciaController::class, 'destroy']) ->name('equivalencias.destroy'); - Route::post('/equivalencias/{codcur}/{codhab}/{equivalencia}/equivalencias', [EquivalenciaController::class, 'addEquivalencia']) + Route::post('/{codcur}/{codhab}/{equivalencia}/equivalencias', [EquivalenciaController::class, 'addEquivalencia']) ->name('equivalencias.add-equivalencia'); - Route::put('/equivalencias/{codcur}/{codhab}/{equivalencia}/equivalencias/{equivalenciaFilha}', [EquivalenciaController::class, 'updateEquivalencia']) + Route::put('/{codcur}/{codhab}/{equivalencia}/equivalencias/{equivalenciaFilha}', [EquivalenciaController::class, 'updateEquivalencia']) ->name('equivalencias.update-equivalencia'); - Route::delete('/equivalencias/{codcur}/{codhab}/{equivalencia}/equivalencias/{equivalenciaFilha}', [EquivalenciaController::class, 'destroyEquivalencia']) + Route::delete('/{codcur}/{codhab}/{equivalencia}/equivalencias/{equivalenciaFilha}', [EquivalenciaController::class, 'destroyEquivalencia']) ->name('equivalencias.destroy-equivalencia'); - Route::delete('/equivalencias/{codcur}/{codhab}/{equivalencia}/equivalencias/{equivalenciaFilha}/grupo', [EquivalenciaController::class, 'destroyEquivalenciaGrupo']) + Route::delete('/{codcur}/{codhab}/{equivalencia}/equivalencias/{equivalenciaFilha}/grupo', [EquivalenciaController::class, 'destroyEquivalenciaGrupo']) ->name('equivalencias.destroy-equivalencia-grupo'); - Route::get('/equivalencias/newreq', [AproveitamentoController::class, 'create'])->name('equivalencias.newreq-create'); - Route::post('/equivalencias/newreq', [AproveitamentoController::class, 'store'])->name('equivalencias.newreq-store'); + Route::get('/newreq', [AproveitamentoController::class, 'create'])->name('equivalencias.newreq-create'); + Route::post('/newreq', [AproveitamentoController::class, 'store'])->name('equivalencias.newreq-store'); }); Route::get('/createdefinition', [WorkflowController::class, 'createDefinition'])->name('workflows.create-definition'); From 9e22b00b33862a591797c982c5971c1433925905 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Sun, 17 May 2026 14:19:32 -0300 Subject: [PATCH 2/9] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20inicial=20da=20fu?= =?UTF-8?q?n=C3=A7=C3=A3o=20index=20e=20remanejo=20de=20alguns=20arquivos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Função index implementada, de maneira bem primitiva, exibindo apenas o nome (com um link para a função show), o estado atual da requisição e o grupo que ela pertence. Além disso, as views relacionadas à um pedido de aproveitamento, foram movidas para o diretório resources/aproveitamentos. Por fim, os códigos estão documentadsos (ainda na versão inicial). --- .../Controllers/AproveitamentoController.php | 64 ++++++++++++++++++- config/laravel-usp-theme.php | 2 +- .../{ => aproveitamentos}/createReq.blade.php | 5 +- .../views/aproveitamentos/index.blade.php | 39 +++++++++++ routes/web.php | 2 + 5 files changed, 107 insertions(+), 5 deletions(-) rename resources/views/{ => aproveitamentos}/createReq.blade.php (62%) create mode 100644 resources/views/aproveitamentos/index.blade.php diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index 8898202..d11a779 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -6,6 +6,7 @@ use App\Models\Equivalencia; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use PhpParser\Node\Expr\FuncCall; use Uspdev\Forms\Form; use Illuminate\Support\Facades\Validator; @@ -21,7 +22,7 @@ class AproveitamentoController extends Controller public function create() { $formHtml = app(Form::class)->generateHtml(config('app.initial_form')); - return view('createReq',['formHtml' => $formHtml]); + return view('aproveitamentos.createReq',['formHtml' => $formHtml]); } /** @@ -117,7 +118,8 @@ public function store(Request $request) 'semestre' => $request['semestre_dis' . $i], 'frequencia' => $request['freq_dis' . $i], 'nota' => $request['nota_dis' . $i], - 'criado_por_id' => $cur_dis->alterado_por_id = $user_id, + 'criado_por_id' => $user_id, + 'alterado_por_id' => $user_id, ]); // Salva a relação entre a i-ésima disciplina cursada e a disciplina requerida na tabela @@ -132,6 +134,62 @@ public function store(Request $request) } } - // TODO - Retorno para a rota de 'show'. + // Redireciona para a rota de show do pedido de aproveitamento criado + return redirect()->route('equivalencias.req-show', ['group' => $eq_group]); + } + + /** + * Função index, apresenta todas as requisições feitas pelo usuário + * @return \Illuminate\Contracts\View\View + */ + public function index() + { + // Recupera o id do user + $user_id = Auth::user()->id; + + // Busca na tabela de equivalências as requisições feitas pelo usuário + // Retorna em formato de array, ordenado pelo tempo de criação, de forma decrescente (mais novo -> mais velho) + $reqs = Equivalencia::where('criado_por_id', $user_id)->orderBy('created_at', 'desc')->get()->toArray(); + + $curr_group = 0; // Variável auxiliar + $requisitions = []; // Variável para exibição das requisições + + // Percorre todas as requisições encontradas na busca anterior + foreach($reqs as $req) + { + // TODO - Verificar o que será necessário adicionar aqui para a exibição + + // Recupera o nome da disciplina pelo id + $dis_name = Disciplina::where('id',$req['requerida_id'])->value('nomdis'); + + // Verifica se o grupo da requisição atual é o que está sendo utilizado, senão o atribui + if($curr_group != $req['grupo']){$curr_group = $req['grupo'];} + + // Verifica se existe já um registro do grupo atual, se não, o cria + if(!isset($requisitions[$dis_name .'_gp' . $curr_group])) + { + $requisitions[$dis_name . '_gp'. $curr_group] = [ + 'nomdis' => $dis_name, + 'estado' => $req['estado'], + 'grupo' => $req['grupo'], + ]; + } + + } + + // Retorna a view para exibição dos registros criados no loop acima + return view('aproveitamentos.index',['requisicoes' => $requisitions]); + } + + // TODO - implementar a função show + + /** + * Função para exibição de um pedido de aproveitamento - Placeholder + * @param int $group + * @return never + */ + public function show(int $group) + { + dd('PLACEHOLDER_DA_SHOW'); } } diff --git a/config/laravel-usp-theme.php b/config/laravel-usp-theme.php index 1c95116..04292ec 100644 --- a/config/laravel-usp-theme.php +++ b/config/laravel-usp-theme.php @@ -47,7 +47,7 @@ ], [ 'text' => 'Meus requerimentos', - 'url' => 'showuserobjects', + 'url' => 'equivalencias/index', 'can' => 'user', ], [ diff --git a/resources/views/createReq.blade.php b/resources/views/aproveitamentos/createReq.blade.php similarity index 62% rename from resources/views/createReq.blade.php rename to resources/views/aproveitamentos/createReq.blade.php index 75597d2..ba90678 100644 --- a/resources/views/createReq.blade.php +++ b/resources/views/aproveitamentos/createReq.blade.php @@ -5,6 +5,9 @@
Nova Requisição - Aproveitamento de estudos
-
{!! $formHtml !!}
+ +
+
{!! $formHtml !!}
+
@endsection \ No newline at end of file diff --git a/resources/views/aproveitamentos/index.blade.php b/resources/views/aproveitamentos/index.blade.php new file mode 100644 index 0000000..0b5a0e7 --- /dev/null +++ b/resources/views/aproveitamentos/index.blade.php @@ -0,0 +1,39 @@ +@extends('layouts.app') + +@section('content') + +
+
+ Minhas requisições +
+
+
+ + + + + + + + + + + @foreach ($requisicoes as $reqinfo) + + + + + + + @endforeach + +
Disciplina requeridaEstado atualGrupoAções
+ + {{ $reqinfo['nomdis'] }} + + {{ $reqinfo['estado'] ?? 'PLACEHOLDERS_NULO' }}{{ $reqinfo['grupo'] }}PLACEHOLDER_AÇÕES
+
+
+
+ +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index ee82ab1..f09e1cd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -43,6 +43,8 @@ Route::get('/newreq', [AproveitamentoController::class, 'create'])->name('equivalencias.newreq-create'); Route::post('/newreq', [AproveitamentoController::class, 'store'])->name('equivalencias.newreq-store'); + Route::get('/index',[AproveitamentoController::class, 'index'])->name('equivalencias.req-index'); + Route::get('/req/show/{group}',[AproveitamentoController::class, 'show'])->name('equivalencias.req-show'); }); Route::get('/createdefinition', [WorkflowController::class, 'createDefinition'])->name('workflows.create-definition'); From 6b50ac4101b1c615b35bd8e132d2ac502c7cb471 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Mon, 18 May 2026 11:45:27 -0300 Subject: [PATCH 3/9] =?UTF-8?q?Iniciando=20implementa=C3=A7=C3=A3o=20do=20?= =?UTF-8?q?show?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rota e função criadas, trabalhando agora no front-end (exibição dos dados) --- .../Controllers/AproveitamentoController.php | 34 ++++++++++++++++--- .../views/aproveitamentos/index.blade.php | 4 ++- .../views/aproveitamentos/show.blade.php | 20 +++++++++++ 3 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 resources/views/aproveitamentos/show.blade.php diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index d11a779..3232cf8 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -6,7 +6,6 @@ use App\Models\Equivalencia; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use PhpParser\Node\Expr\FuncCall; use Uspdev\Forms\Form; use Illuminate\Support\Facades\Validator; @@ -31,7 +30,7 @@ public function create() * @param Request $request * @return \Illuminate\Validation\Validator */ - private static function validate_req(Request $request) + private static function validate_req(Request $request): Validator { // Regras para a disciplina requerida $rules = [ @@ -93,6 +92,7 @@ public function store(Request $request) $eq_group = Equivalencia::proximoGrupo(); // Salva a disciplina requerida no banco de dados de disciplinas e cria um objeto para referencia + // TODO - Verificar se disciplina já não existe no banco de dados (dado que essa é uma disciplina da USP), e fazer esse link ou criar o novo objeto $req_dis = Disciplina::create([ 'coddis' => $request['coddis4'], 'nomdis' => $request['disciplina4'], @@ -186,10 +186,36 @@ public function index() /** * Função para exibição de um pedido de aproveitamento - Placeholder * @param int $group - * @return never */ public function show(int $group) { - dd('PLACEHOLDER_DA_SHOW'); + $eqs = Equivalencia::where('grupo', $group)->get()->toArray(); + $req_dis = Disciplina::where('id', $eqs[0]['requerida_id'])->firstOrFail(); + + $show_data = []; + $show_data['requerida'] = [ + 'coddis' => $req_dis->coddis, + 'nomdis' => $req_dis->nomdis, + 'sglund' => $req_dis->sglund, + ]; + + foreach($eqs as $eq) + { + $cur_dis = Disciplina::where('id', $eq['cursada_id'])->firstOrFail(); + + $show_data['cursadas'][] = [ + 'coddis' => $cur_dis->coddis, + 'nomdis' => $cur_dis->nomdis, + // 'ementa' => TODO - Encontrar maneira de exibir a ementa + 'semestre' => $cur_dis->semestre, + 'ano' => $cur_dis->ano, + 'freq' => $cur_dis->frequencia, + 'nota' => $cur_dis->nota, + 'creditos' => $cur_dis->creditos, + 'carga_hr' => $cur_dis->carga_horaria + ]; + } + + return view('aproveitamentos.show', ['show_data' => $show_data]); } } diff --git a/resources/views/aproveitamentos/index.blade.php b/resources/views/aproveitamentos/index.blade.php index 0b5a0e7..9627a96 100644 --- a/resources/views/aproveitamentos/index.blade.php +++ b/resources/views/aproveitamentos/index.blade.php @@ -25,7 +25,9 @@ {{ $reqinfo['nomdis'] }} - {{ $reqinfo['estado'] ?? 'PLACEHOLDERS_NULO' }} + + {{ $reqinfo['estado'] ?? 'PLACEHOLDERS_NULO' }} + {{ $reqinfo['grupo'] }} PLACEHOLDER_AÇÕES diff --git a/resources/views/aproveitamentos/show.blade.php b/resources/views/aproveitamentos/show.blade.php new file mode 100644 index 0000000..0129e8f --- /dev/null +++ b/resources/views/aproveitamentos/show.blade.php @@ -0,0 +1,20 @@ +@extends('layouts.app') + +@section('content') +
+
+

+ Requisição de equivalência → + + {{$show_data['requerida']['coddis'] .' - ' . $show_data['requerida']['nomdis'] }} + +

+
+
+ @foreach ($show_data['cursada'] as $cursada) + + @endforeach +
+
+ +@endsection \ No newline at end of file From 0ce6a10fa53f02237d084fb18108e3b6a3ea5788 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Wed, 20 May 2026 08:45:26 -0300 Subject: [PATCH 4/9] =?UTF-8?q?Exibi=C3=A7=C3=A3o=20inicial=20da=20rota=20?= =?UTF-8?q?show?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Exibição primitiva das informações de um requerimento de equivalência. Dados apenas como placeholder e interface à ser modificada. --- .../views/aproveitamentos/show.blade.php | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/resources/views/aproveitamentos/show.blade.php b/resources/views/aproveitamentos/show.blade.php index 0129e8f..fc0046d 100644 --- a/resources/views/aproveitamentos/show.blade.php +++ b/resources/views/aproveitamentos/show.blade.php @@ -11,8 +11,35 @@
- @foreach ($show_data['cursada'] as $cursada) - +
+
+
Código
+
Nome
+
Semestre
+
Ano
+
Frequência
+
Nota
+
Créditos
+
Carga horária
+
+
+
+ @foreach ($show_data['cursadas'] as $cursada) +
+
+
{{ $cursada['coddis'] }}
+
{{ $cursada['nomdis'] }}
+
{{ $cursada['semestre'] }}°
+
{{ $cursada['ano'] }}
+
{{ $cursada['freq'] }}%
+
{{ $cursada['nota'] }}
+
{{ $cursada['creditos'] }}
+
{{ $cursada['carga_hr'] }}
+
+
+ @if (!$loop->last) +
+ @endif @endforeach
From 6e24b6b3e5e00d758577c03be1bb7bf54baeb979 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Wed, 20 May 2026 09:30:34 -0300 Subject: [PATCH 5/9] Gerando a formsubmission do requerimento --- app/Http/Controllers/AproveitamentoController.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index 3232cf8..fc64370 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -28,9 +28,9 @@ public function create() * Gera o validator para os dados de entrada da requisição de equivalencia, com as regras especifícas * para este tipo de requisição * @param Request $request - * @return \Illuminate\Validation\Validator + * @return mixed */ - private static function validate_req(Request $request): Validator + private static function validate_req(Request $request) { // Regras para a disciplina requerida $rules = [ @@ -83,8 +83,11 @@ public function store(Request $request) } // ID do usuário que fez a requisição - $user_id = Auth::user()->id; + $user_id = $request->user()->id; + // Gera a submissão do formulário e a salve no banco de dados + $submission = (new Form(['editable' => true]))->handleSubmission($request); + // Dados de entrada $request = $request->input(); From cca5833590838c85c42bc0aac2eec05e29204c04 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Wed, 20 May 2026 11:38:34 -0300 Subject: [PATCH 6/9] =?UTF-8?q?Adicionada=20fun=C3=A7=C3=A3o=20para=20remo?= =?UTF-8?q?=C3=A7=C3=A3o=20de=20requerimentos=20de=20equivalencia.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Função destroy() em AproveitamentoController. A função utiliza da remoção em cascata dos foreignKeys das tabelas de equivalencia e disciplinas, ou seja, basta excluir o registro da disciplina na tabela 'disciplinas' para que o registro do pedido em 'equivalencias' seja removido por consequência. Por fim, remove o registro da disciplina requerida na tabela 'disciplinas'. Botão para remoção adicionado na rota 'index'. --- .../Controllers/AproveitamentoController.php | 37 +++++++++++++++++-- .../views/aproveitamentos/index.blade.php | 4 +- routes/web.php | 1 + 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index fc64370..2921bcf 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Auth; use Uspdev\Forms\Form; use Illuminate\Support\Facades\Validator; +use Uspdev\Forms\Models\FormSubmission; class AproveitamentoController extends Controller { @@ -85,9 +86,9 @@ public function store(Request $request) // ID do usuário que fez a requisição $user_id = $request->user()->id; - // Gera a submissão do formulário e a salve no banco de dados + // Gera a submissão do formulário e a salva no banco de dados $submission = (new Form(['editable' => true]))->handleSubmission($request); - + // Dados de entrada $request = $request->input(); @@ -95,6 +96,7 @@ public function store(Request $request) $eq_group = Equivalencia::proximoGrupo(); // Salva a disciplina requerida no banco de dados de disciplinas e cria um objeto para referencia + // TODO - Verificar se disciplina já não existe no banco de dados (dado que essa é uma disciplina da USP), e fazer esse link ou criar o novo objeto $req_dis = Disciplina::create([ 'coddis' => $request['coddis4'], @@ -138,7 +140,7 @@ public function store(Request $request) } // Redireciona para a rota de show do pedido de aproveitamento criado - return redirect()->route('equivalencias.req-show', ['group' => $eq_group]); + return redirect()->route('equivalencias.req-show', ['group' => $eq_group])->with('alert-success','Requerimento para '. $req_dis->nomdis .' registrado com sucesso !'); } /** @@ -221,4 +223,33 @@ public function show(int $group) return view('aproveitamentos.show', ['show_data' => $show_data]); } + + /** + * Remove um pedido de aproveitamento do banco de dados + * @param int $group + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(int $group) + { + // Busca todos os registros de equivalencia do mesmo grupo (mesmo requerimento) + $eqs = Equivalencia::where('grupo', $group)->get(); + + // Recupera a disciplina requerida + $req_dis = Disciplina::where('id', $eqs[0]->requerida_id)->firstOrFail(); + + $req_name = $req_dis->nomdis; // Guarda o nome da disciplina requerida + + // Percorre todos os registros de equivalencia do grupo + foreach($eqs as $eq) + { + // Remove o registro de cada disciplina cursada, e por consequência, o registro de equivalência + $cur_dis = Disciplina::find($eq->cursada_id); + if($cur_dis){$cur_dis->delete();} + } + + // Remove a disciplina requerida + $req_dis->delete(); + + return redirect()->back()->with('alert-success','Requerimento de equivalência para '. $req_name . ' removido com sucesso.'); + } } diff --git a/resources/views/aproveitamentos/index.blade.php b/resources/views/aproveitamentos/index.blade.php index 9627a96..b747612 100644 --- a/resources/views/aproveitamentos/index.blade.php +++ b/resources/views/aproveitamentos/index.blade.php @@ -29,7 +29,9 @@ {{ $reqinfo['estado'] ?? 'PLACEHOLDERS_NULO' }} {{ $reqinfo['grupo'] }} - PLACEHOLDER_AÇÕES + + Remover + @endforeach diff --git a/routes/web.php b/routes/web.php index f09e1cd..9aa7e4a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,6 +45,7 @@ Route::post('/newreq', [AproveitamentoController::class, 'store'])->name('equivalencias.newreq-store'); Route::get('/index',[AproveitamentoController::class, 'index'])->name('equivalencias.req-index'); Route::get('/req/show/{group}',[AproveitamentoController::class, 'show'])->name('equivalencias.req-show'); + Route::get('/req/destroy/{group}',[AproveitamentoController::class, 'destroy'])->name('equivalencias.req-destroy'); }); Route::get('/createdefinition', [WorkflowController::class, 'createDefinition'])->name('workflows.create-definition'); From 186d875132d80cdcaa72bf781d4f9287362ec9df Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Thu, 21 May 2026 13:32:45 -0300 Subject: [PATCH 7/9] Salvando arquivos no banco de dados --- .../Controllers/AproveitamentoController.php | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index 2921bcf..506a516 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Arquivo; use App\Models\Disciplina; use App\Models\Equivalencia; use Illuminate\Http\Request; @@ -88,6 +89,10 @@ public function store(Request $request) // Gera a submissão do formulário e a salva no banco de dados $submission = (new Form(['editable' => true]))->handleSubmission($request); + // dd($submission); + + // TODO - Ver o motivo da 'duplicação' do file e corrigir par não ter campo vazio + $sub_data = $submission->data; // Dados de entrada $request = $request->input(); @@ -96,8 +101,7 @@ public function store(Request $request) $eq_group = Equivalencia::proximoGrupo(); // Salva a disciplina requerida no banco de dados de disciplinas e cria um objeto para referencia - - // TODO - Verificar se disciplina já não existe no banco de dados (dado que essa é uma disciplina da USP), e fazer esse link ou criar o novo objeto + $req_dis = Disciplina::create([ 'coddis' => $request['coddis4'], 'nomdis' => $request['disciplina4'], @@ -129,13 +133,32 @@ public function store(Request $request) // Salva a relação entre a i-ésima disciplina cursada e a disciplina requerida na tabela // de equivalências. - Equivalencia::create([ + $eq = Equivalencia::create([ 'grupo' => $eq_group, 'requerida_id' => $req_dis->id, 'cursada_id' => $cur_dis->id, 'criado_por_id' => $user_id, 'alterado_por_id'=> $user_id, - ]); + ]); + + // Registra o histórico escolar do aluno no primeiro registro de equivalência na tabela de arquivos + if($i == 1) + { + Arquivo::create([ + 'equivalencia_id' => $eq->id, + 'tipo' => 'historico', + 'nome' => $sub_data['hist_esc']['original_name'], + 'path' => $sub_data['hist_esc']['stored_path'] + ]); + } + + // Registra o arquivos da ementa disciplina cursada na tabela de arquivos + Arquivo::create([ + 'equivalencia_id' => $eq->id, + 'tipo' => 'ementa', + 'nome' => $sub_data['file_dis' .$i]['original_name'], + 'path' => $sub_data['file_dis' .$i]['stored_path'], + ]); } } From 70d962fcddfb42bdbed7bba717c7d430deab7ef0 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Thu, 21 May 2026 23:21:16 -0300 Subject: [PATCH 8/9] =?UTF-8?q?Incrementa=C3=A7=C3=A3o=20de=20campo=20na?= =?UTF-8?q?=20tabela=20equivalencias,=20e=20outros=20adicionais.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A tabela de equivalencias agora possui também o campo 'submission_id', que armazena o id da submissão de formulário referente ao requerimento de equivalencia. Com esse dado, é mais simples de recuperar os arquivos de ementa/histórico escolar e também de editar um pedido do requerimento, utilizando do auxílio da bibli- oteca de formulários. Para além disso, a função edit foi implementada, podendo editar a requisiçaõ de equivalência (utilizando od artifício supracitado). Placeholdar pra função update também criado. Por fim, foi adicionada uma documentação básica das funções faltantes. --- .../Controllers/AproveitamentoController.php | 48 +++++++++++++++++-- app/Models/Equivalencia.php | 2 + ...4_06_174059_create_equivalencias_table.php | 7 +++ .../views/aproveitamentos/edit.blade.php | 13 +++++ .../views/aproveitamentos/show.blade.php | 9 +++- routes/web.php | 2 + 6 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 resources/views/aproveitamentos/edit.blade.php diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index 506a516..00cbbe2 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -9,7 +9,9 @@ use Illuminate\Support\Facades\Auth; use Uspdev\Forms\Form; use Illuminate\Support\Facades\Validator; +use Uspdev\Forms\Models\FormDefinition; use Uspdev\Forms\Models\FormSubmission; +use Illuminate\Contracts\View\View; class AproveitamentoController extends Controller { @@ -20,7 +22,7 @@ class AproveitamentoController extends Controller * gerando o html dinâmicamente a partir da biblioteca de formulários. * @return \Illuminate\Contracts\View\View */ - public function create() + public function create(): View { $formHtml = app(Form::class)->generateHtml(config('app.initial_form')); return view('aproveitamentos.createReq',['formHtml' => $formHtml]); @@ -139,6 +141,7 @@ public function store(Request $request) 'cursada_id' => $cur_dis->id, 'criado_por_id' => $user_id, 'alterado_por_id'=> $user_id, + 'submission_id' => $submission->id, ]); // Registra o histórico escolar do aluno no primeiro registro de equivalência na tabela de arquivos @@ -170,7 +173,7 @@ public function store(Request $request) * Função index, apresenta todas as requisições feitas pelo usuário * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): View { // Recupera o id do user $user_id = Auth::user()->id; @@ -215,11 +218,14 @@ public function index() * Função para exibição de um pedido de aproveitamento - Placeholder * @param int $group */ - public function show(int $group) + public function show(int $group): View { + + // Recupera os registros de equivalencia e a a disciplina requerida $eqs = Equivalencia::where('grupo', $group)->get()->toArray(); $req_dis = Disciplina::where('id', $eqs[0]['requerida_id'])->firstOrFail(); + // Array que armazena os dados a serem exibidos, divido em disciplina requerida e cursadas $show_data = []; $show_data['requerida'] = [ 'coddis' => $req_dis->coddis, @@ -227,14 +233,23 @@ public function show(int $group) 'sglund' => $req_dis->sglund, ]; + // Percorre todos os registros de equivalência atrelados ao grupo foreach($eqs as $eq) { + // Recupera a disciplina cursada neste registro $cur_dis = Disciplina::where('id', $eq['cursada_id'])->firstOrFail(); + // Recupera o arquivo atrelado àquele registro + $file = Arquivo::where('equivalencia_id',$eq['id'])->firstOrFail(); + + // Adiciona as informaçẽos da disciplina cursada ao array $show_data['cursadas'][] = [ 'coddis' => $cur_dis->coddis, 'nomdis' => $cur_dis->nomdis, - // 'ementa' => TODO - Encontrar maneira de exibir a ementa + 'ementa_file' => [ + 'name' => $file->nome, + 'path' => $file->path + ], 'semestre' => $cur_dis->semestre, 'ano' => $cur_dis->ano, 'freq' => $cur_dis->frequencia, @@ -275,4 +290,29 @@ public function destroy(int $group) return redirect()->back()->with('alert-success','Requerimento de equivalência para '. $req_name . ' removido com sucesso.'); } + + /** + * Summary of edit + * @param int $submission_id + * @return View + */ + public function edit(int $submission_id): View + { + // Recupera a submissão e a definição de formulário atreladas à equivalência + $submission = FormSubmission::where('id', $submission_id)->firstOrFail(); + $formDef = FormDefinition::where('id', $submission->form_definition_id)->firstOrFail(); + + // Gera o html para a edição do formulário + $formHtml = app(Form::class)->generateHtml($formDef->name, $submission); + + return view('aproveitamentos.edit',['formHtml' => $formHtml, 'submission' => $submission]); + } + + // public function update(Request $request) + // { + // $path = $request->path(); + // $eq_group = (int)explode('/',$path)[3]; + + // dd($request->path()); + // } } diff --git a/app/Models/Equivalencia.php b/app/Models/Equivalencia.php index 459310d..f0ec14b 100644 --- a/app/Models/Equivalencia.php +++ b/app/Models/Equivalencia.php @@ -20,6 +20,7 @@ class Equivalencia extends Model 'tipo', 'codcur', 'codhab', + 'submission_id', 'criado_por_id', 'alterado_por_id', ]; @@ -34,6 +35,7 @@ class Equivalencia extends Model 'cursada_id' => 'integer', 'codcur' => 'integer', 'codhab' => 'integer', + 'submission_id' => 'integer', ]; public function requerida() diff --git a/database/migrations/2026_04_06_174059_create_equivalencias_table.php b/database/migrations/2026_04_06_174059_create_equivalencias_table.php index 4110ac7..0f20383 100644 --- a/database/migrations/2026_04_06_174059_create_equivalencias_table.php +++ b/database/migrations/2026_04_06_174059_create_equivalencias_table.php @@ -46,12 +46,19 @@ public function up(): void ->constrained('users') ->cascadeOnDelete(); + $table->foreignId('submission_id') + ->constrained('form_submissions') + ->cascadeOnDelete(); + // Para evitar que tenhamos mais de uma equivalência com a mesma disciplina cursada no mesmo grupo. // Esse unique não impede que tenhamos a mesma disciplina cursada em grupos diferentes, // o que é permitido (ex: 2 equivalências diferentes, ambas com a mesma disciplina cursada, mas em grupos diferentes). // Ele só impede que tenhamos 2 equivalências iguais (mesmo grupo, mesma disciplina cursada). $table->unique(['grupo', 'cursada_id']); + $table->unique(['cursada_id','submission_id']); + + $table->timestamps(); }); } diff --git a/resources/views/aproveitamentos/edit.blade.php b/resources/views/aproveitamentos/edit.blade.php new file mode 100644 index 0000000..ed5709d --- /dev/null +++ b/resources/views/aproveitamentos/edit.blade.php @@ -0,0 +1,13 @@ +@extends('layouts.app') + +@section('content') + +
+ Requisição - {{ $submission->data['disciplina4'] }} +
+ +
+
{!! $formHtml !!}
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/aproveitamentos/show.blade.php b/resources/views/aproveitamentos/show.blade.php index fc0046d..a415390 100644 --- a/resources/views/aproveitamentos/show.blade.php +++ b/resources/views/aproveitamentos/show.blade.php @@ -35,10 +35,17 @@
{{ $cursada['nota'] }}
{{ $cursada['creditos'] }}
{{ $cursada['carga_hr'] }}
+ {{-- --}} @if (!$loop->last) -
+
@endif @endforeach diff --git a/routes/web.php b/routes/web.php index 9aa7e4a..ed0cbd1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -46,6 +46,8 @@ Route::get('/index',[AproveitamentoController::class, 'index'])->name('equivalencias.req-index'); Route::get('/req/show/{group}',[AproveitamentoController::class, 'show'])->name('equivalencias.req-show'); Route::get('/req/destroy/{group}',[AproveitamentoController::class, 'destroy'])->name('equivalencias.req-destroy'); + Route::get('/req/edit/{group}',[AproveitamentoController::class, 'edit'])->name('equivalencias.req-edit'); + Route::post('/req/edit/{group}',[AproveitamentoController::class, 'update'])->name('equivalencias.req-update'); }); Route::get('/createdefinition', [WorkflowController::class, 'createDefinition'])->name('workflows.create-definition'); From 25a423a58cc0aac2e934b1a0c7ec0b9b9b216322 Mon Sep 17 00:00:00 2001 From: ViniReiwz Date: Sat, 30 May 2026 10:40:13 -0300 Subject: [PATCH 9/9] CRUD completo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Finalizaão do CRUD, ou seja funções create, update e destroy implementadas, junto com as funções auxiliares (index, show, edit, etc.) Novidades - Função update. A função update recebe como parâmetro uma requisição (Request) a ser atualizadda, ou seja, a requisição versa sobre dados já existentes. Dessa forma, recuperamos o grupo de equivalências à que se refere e recuperamos o id da submissão de formulários atrelada aquele pedido. Sendo assim, passamos os dados para a função store, que agora trata tanto a criação de registros novos ou a atualização de existentes, explicitada nas funções auxiliares: private static function create_req(...); private static function update_req(...); Que são responsáveis por criar novos registros e atualizar registros existentes, respectivamente. A função edit serve para exibir o formulário da subissão, com os dados pré-preenchidos, aptos à serem modificados. --- .../Controllers/AproveitamentoController.php | 213 +++++++++++++----- .../views/aproveitamentos/index.blade.php | 1 + .../views/aproveitamentos/show.blade.php | 78 ++++--- routes/web.php | 4 +- 4 files changed, 204 insertions(+), 92 deletions(-) diff --git a/app/Http/Controllers/AproveitamentoController.php b/app/Http/Controllers/AproveitamentoController.php index 00cbbe2..b16f52a 100644 --- a/app/Http/Controllers/AproveitamentoController.php +++ b/app/Http/Controllers/AproveitamentoController.php @@ -63,50 +63,29 @@ private static function validate_req(Request $request) } /** - * Função que persiste os dados de uma requisição de aproveitamento - * na tabela de disciplinas e também na tabela de equivalência + * Função auxiliar para criar registros de equivalência no banco de dados * @param Request $request - * @return \Illuminate\Http\RedirectResponse + * @param FormSubmission $submission + * @return array{eq_group: int, modo: string, req_name: string|null} */ - public function store(Request $request) + private static function create_req(Request $request, FormSubmission $submission) { - // Transforma os semestres da disciplina cursada do formato ordinal (1° ou 2°) para inteiro (1 ou 2) - for($i = 1; $i < 4; $i++) - { - if(!is_null($request->input('semestre_dis' . $i))) - {$request->merge(['semestre_dis' . $i => (int)$request->input('semestre_dis' . $i)]);} - } - - // Gera o validator - $validator = static::validate_req($request); - - // Caso alguma falha seja encontrada, retorna com os erros - if($validator->fails()) - { - return redirect()->back()->withErrors($validator)->withInput(); - } - // ID do usuário que fez a requisição $user_id = $request->user()->id; - // Gera a submissão do formulário e a salva no banco de dados - $submission = (new Form(['editable' => true]))->handleSubmission($request); - // dd($submission); - // TODO - Ver o motivo da 'duplicação' do file e corrigir par não ter campo vazio $sub_data = $submission->data; // Dados de entrada - $request = $request->input(); + $input = $request->input(); // Próximo grupo de equivalências do banco de dados $eq_group = Equivalencia::proximoGrupo(); // Salva a disciplina requerida no banco de dados de disciplinas e cria um objeto para referencia - $req_dis = Disciplina::create([ - 'coddis' => $request['coddis4'], - 'nomdis' => $request['disciplina4'], + 'coddis' => $input['coddis4'], + 'nomdis' => $input['disciplina4'], 'ies' => 'USP', 'criado_por_id' => $user_id, 'alterado_por_id' => $user_id, @@ -116,19 +95,19 @@ public function store(Request $request) for($i = 1; $i < 4; $i++) { // Verifica se a disciplina foi preenchida (coddis{$i} preenchido) - if(!empty($request['coddis' . $i])) + if(!empty($input['coddis' . $i])) { // Salva a i-ésima disciplina no banco de dados de disciplinas e gera um objeto para referência $cur_dis = Disciplina::create([ - 'coddis' => $request['coddis' . $i], - 'nomdis' => $request['disciplina' . $i], - 'creditos' => $request['credit_dis' . $i], - 'carga_horaria' => $request['cghr_dis' . $i], - 'ies' => $request['unidade_ies'], - 'ano' => $request['ano_dis' . $i], - 'semestre' => $request['semestre_dis' . $i], - 'frequencia' => $request['freq_dis' . $i], - 'nota' => $request['nota_dis' . $i], + 'coddis' => $input['coddis' . $i], + 'nomdis' => $input['disciplina' . $i], + 'creditos' => $input['credit_dis' . $i], + 'carga_horaria' => $input['cghr_dis' . $i], + 'ies' => $input['unidade_ies'], + 'ano' => $input['ano_dis' . $i], + 'semestre' => $input['semestre_dis' . $i], + 'frequencia' => $input['freq_dis' . $i], + 'nota' => $input['nota_dis' . $i], 'criado_por_id' => $user_id, 'alterado_por_id' => $user_id, ]); @@ -165,8 +144,123 @@ public function store(Request $request) } } - // Redireciona para a rota de show do pedido de aproveitamento criado - return redirect()->route('equivalencias.req-show', ['group' => $eq_group])->with('alert-success','Requerimento para '. $req_dis->nomdis .' registrado com sucesso !'); + return ['eq_group' => $eq_group, 'req_name' => $req_dis->nomdis, 'modo' => 'criado']; + } + + /** + * Função auxiliar para atualizar os registros existentes após mudanças feitas pelo usuário + * @param Request $request + * @param FormSubmission $submission + * @return array{eq_group: int|mixed, modo: string, req_name: string|null|null} + */ + private static function update_req(Request $request, FormSubmission $submission) + { + // ID do usuário que fez a requisição + $user_id = $request->user()->id; + + // TODO - Ver o motivo da 'duplicação' do file e corrigir par não ter campo vazio + $sub_data = $submission->data; + + // Recupera o grupo de equivalências atrelado à submissão + $eqs = Equivalencia::where('submission_id', $request->id)->get(); + if(empty($eqs)){return [];} + + // Dados de entrada + $input = $request->input(); + + // Recupera a disciplina requerida do pedido de aproveitamento + $req_dis = Disciplina::where('id',$eqs[0]->requerida_id)->firstOrFail(); + $eq_group = $eqs[0]->grupo; + + // Atualiza o registro da disciplina requerida + $req_dis->update([ + 'coddis' => $input['coddis4'], + 'nomdis' => $input['disciplina4'], + 'ies' => 'USP', + 'alterado_por_id' => $user_id, + ]); + + // Percorre todos os registros de equivalencia (todas as disciplinas cursadas) + for($i = 0; $i < sizeof($eqs); $i++) + { + // Recupera a disciplina cursada, e atualiza de acordo com as modificações + $cur_dis = Disciplina::where('id', $eqs[$i]->cursada_id)->firstOrFail(); + $cur_dis->update([ + 'coddis' => $input['coddis' . ($i + 1)], + 'nomdis' => $input['disciplina' . ($i + 1)], + 'creditos' => $input['credit_dis' . ($i + 1)], + 'carga_horaria' => $input['cghr_dis' . ($i + 1)], + 'ies' => $input['unidade_ies'], + 'ano' => $input['ano_dis' . ($i + 1)], + 'semestre' => $input['semestre_dis' . ($i + 1)], + 'frequencia' => $input['freq_dis' . ($i + 1)], + 'nota' => $input['nota_dis' . ($i + 1)], + 'alterado_por_id' => $user_id, + ]); + + // Recupera os arquivos atrelados à um registro de equivalência + $files = Arquivo::where('equivalencia_id', $eqs[$i]->id)->get(); + foreach($files as $file) + { + // Verifica se é histŕoico ou ementa e atualiza com os respectivos dados de entrada + $field = ''; + if($file->tipo == 'historico') + { + $field = 'hist_esc'; + } + else{ $field = 'file_dis' . ($i + 1); } + + $file->update([ + 'nome' => $sub_data[$field]['original_name'], + 'path' => $sub_data[$field]['stored_path'], + ]); + } + } + + // Retorna um vetor com dados relevantes para o redirect + return ['eq_group' => $eq_group, 'req_name' => $req_dis->nomdis, 'modo' => 'atualizado']; + } + + /** + * Função que persiste os dados de uma requisição de aproveitamento + * na tabela de disciplinas e também na tabela de equivalência + * @param Request $request + * @return \Illuminate\Http\RedirectResponse + */ + public function store(Request $request) + { + $request_id = $request->id ?? null; + + // Transforma os semestres da disciplina cursada do formato ordinal (1° ou 2°) para inteiro (1 ou 2) + for($i = 1; $i < 4; $i++) + { + if(!is_null($request->input('semestre_dis' . $i))) + { $request->merge(['semestre_dis' . $i => (int)$request->input('semestre_dis' . $i)]); } + } + + // Gera o validator + $validator = static::validate_req($request); + + // Caso alguma falha seja encontrada, retorna com os erros + if($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); } + + + // Gera (ou recupera) a submissão do formulário e a salva no banco de dados + $submission = (new Form(['editable' => true]))->handleSubmission($request); + + if(isset($request_id)) { $data = self::update_req($request, $submission); } + else { $data = self::create_req($request, $submission); } + + if(!isset($data)) + { + return redirect()->back()->with('alert-danger', 'Nao há equivalências para a submissão editada'); + } + else + { + // Redireciona para a rota de show do pedido de aproveitamento criado + return redirect()->route('equivalencias.req-show', ['group' => $data['eq_group']])->with('alert-success','Requerimento para '. $data['req_name'] . ' ' . $data['modo'] . ' com sucesso !'); + } + } /** @@ -220,11 +314,10 @@ public function index(): View */ public function show(int $group): View { - // Recupera os registros de equivalencia e a a disciplina requerida $eqs = Equivalencia::where('grupo', $group)->get()->toArray(); $req_dis = Disciplina::where('id', $eqs[0]['requerida_id'])->firstOrFail(); - + // Array que armazena os dados a serem exibidos, divido em disciplina requerida e cursadas $show_data = []; $show_data['requerida'] = [ @@ -255,7 +348,8 @@ public function show(int $group): View 'freq' => $cur_dis->frequencia, 'nota' => $cur_dis->nota, 'creditos' => $cur_dis->creditos, - 'carga_hr' => $cur_dis->carga_horaria + 'carga_hr' => $cur_dis->carga_horaria, + 'ies' => $cur_dis->ies ]; } @@ -292,27 +386,38 @@ public function destroy(int $group) } /** - * Summary of edit - * @param int $submission_id + * Função que possibilita a edição de uma requisição de equivalência + * @param int $group * @return View */ - public function edit(int $submission_id): View + public function edit(int $group): View { + // Recupera o id da submissão atrelada ao pedido de equivalência + $submission_id = Equivalencia::where('grupo',$group)->firstOrFail()->submission_id; + // Recupera a submissão e a definição de formulário atreladas à equivalência $submission = FormSubmission::where('id', $submission_id)->firstOrFail(); $formDef = FormDefinition::where('id', $submission->form_definition_id)->firstOrFail(); // Gera o html para a edição do formulário - $formHtml = app(Form::class)->generateHtml($formDef->name, $submission); + $formHtml = (new Form(['method' => 'PUT']))->generateHtml($formDef->name, $submission); return view('aproveitamentos.edit',['formHtml' => $formHtml, 'submission' => $submission]); } - // public function update(Request $request) - // { - // $path = $request->path(); - // $eq_group = (int)explode('/',$path)[3]; - - // dd($request->path()); - // } + /** + * Atualiza os registros de equivalencia de acordo com as modificações do usuário + * @param Request $request + * @return \Illuminate\Http\RedirectResponse + */ + public function update(Request $request) + { + // Recupera o caminho e extrai o grupo de equivalências a partir dele + $path = $request->path(); + $eq_group = (int)explode('/',$path)[3]; + + // Recupera o id da submissão atrelada ao pedido de equivalência + $request->id = Equivalencia::where('grupo',$eq_group)->firstOrFail()->submission_id; + return $this->store($request); + } } diff --git a/resources/views/aproveitamentos/index.blade.php b/resources/views/aproveitamentos/index.blade.php index b747612..cbd8107 100644 --- a/resources/views/aproveitamentos/index.blade.php +++ b/resources/views/aproveitamentos/index.blade.php @@ -31,6 +31,7 @@ {{ $reqinfo['grupo'] }} Remover + Editar @endforeach diff --git a/resources/views/aproveitamentos/show.blade.php b/resources/views/aproveitamentos/show.blade.php index a415390..58e5e88 100644 --- a/resources/views/aproveitamentos/show.blade.php +++ b/resources/views/aproveitamentos/show.blade.php @@ -11,44 +11,50 @@
-
-
-
Código
-
Nome
-
Semestre
-
Ano
-
Frequência
-
Nota
-
Créditos
-
Carga horária
+
+
+ + + + + + + + + + + + + + + + @foreach ($show_data['cursadas'] as $cursada) + + + + + + + + + + + {{-- --}} + + @if (!$loop->last) +
+ @endif + @endforeach + +
CódigoNomeSemestreAnoFrequênciaNotaCréditosCarga horáriaIES
{{ $cursada['coddis'] }}{{ $cursada['nomdis'] }}{{ $cursada['semestre'] }}°{{ $cursada['ano'] }}{{ $cursada['freq'] }}%{{ $cursada['nota'] }}{{ $cursada['creditos'] }}{{ $cursada['carga_hr'] }}{{ $cursada['ies'] }}
-
- @foreach ($show_data['cursadas'] as $cursada) -
-
-
{{ $cursada['coddis'] }}
-
{{ $cursada['nomdis'] }}
-
{{ $cursada['semestre'] }}°
-
{{ $cursada['ano'] }}
-
{{ $cursada['freq'] }}%
-
{{ $cursada['nota'] }}
-
{{ $cursada['creditos'] }}
-
{{ $cursada['carga_hr'] }}
- {{-- --}} -
-
- @if (!$loop->last) -
- @endif - @endforeach
- @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index ed0cbd1..8d369da 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,7 +29,7 @@ Route::post('/{codcur}/{codhab}', [EquivalenciaController::class, 'store']) ->name('equivalencias.store'); Route::put('/{codcur}/{codhab}/{equivalencia}', [EquivalenciaController::class, 'update']) - ->name('equivalencias.update'); + ->name('equivalencias.update')->whereNumber('codcur')->whereNumber('codhab'); Route::delete('/{codcur}/{codhab}/{equivalencia}', [EquivalenciaController::class, 'destroy']) ->name('equivalencias.destroy'); Route::post('/{codcur}/{codhab}/{equivalencia}/equivalencias', [EquivalenciaController::class, 'addEquivalencia']) @@ -47,7 +47,7 @@ Route::get('/req/show/{group}',[AproveitamentoController::class, 'show'])->name('equivalencias.req-show'); Route::get('/req/destroy/{group}',[AproveitamentoController::class, 'destroy'])->name('equivalencias.req-destroy'); Route::get('/req/edit/{group}',[AproveitamentoController::class, 'edit'])->name('equivalencias.req-edit'); - Route::post('/req/edit/{group}',[AproveitamentoController::class, 'update'])->name('equivalencias.req-update'); + Route::put('/req/edit/{group}',[AproveitamentoController::class, 'update'])->name('equivalencias.req-update'); }); Route::get('/createdefinition', [WorkflowController::class, 'createDefinition'])->name('workflows.create-definition');