From 230703eb9042b5ade57e838e8aaaf4f3728df921 Mon Sep 17 00:00:00 2001 From: alissonalbuquerque Date: Mon, 4 Mar 2024 14:46:30 -0300 Subject: [PATCH] =?UTF-8?q?feat(task-time):=20add=20implementa=C3=A7=C3=A3?= =?UTF-8?q?o=20de=20'Hor=C3=A1rio=20Semana'=20para=20PDAs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AvaliadorTaskTimeController.php | 22 + app/Http/Controllers/TaskController.php | 5 + app/Http/Controllers/TaskTimeController.php | 88 ++- app/Models/TaskTime.php | 515 ++++++++++++++++-- app/Models/Util/MenuItemsAvaliador.php | 1 + app/Rules/ValidationLimitTime.php | 162 ++++++ .../card_horario.blade.php | 8 + .../views/avaliador-task-time/index.blade.php | 34 ++ .../buttons/btn-delete-by-alert.blade.php | 24 + .../components/cards/relatorio_pad.blade.php | 2 +- .../navigation_avaliador.blade.php | 11 +- resources/views/task-time/_form.blade.php | 0 resources/views/task-time/create.blade.php | 143 ++++- resources/views/task-time/index.blade.php | 119 +++- resources/views/task-time/update.blade.php | 192 +++++++ routes/Task.php | 1 + routes/TaskTime.php | 12 +- routes/avaliador.php | 21 + routes/web.php | 17 +- 19 files changed, 1284 insertions(+), 93 deletions(-) create mode 100644 app/Http/Controllers/AvaliadorTaskTimeController.php create mode 100644 app/Rules/ValidationLimitTime.php create mode 100644 resources/views/avaliador-task-time/card_horario.blade.php create mode 100644 resources/views/avaliador-task-time/index.blade.php create mode 100644 resources/views/components/buttons/btn-delete-by-alert.blade.php delete mode 100644 resources/views/task-time/_form.blade.php create mode 100644 resources/views/task-time/update.blade.php create mode 100644 routes/avaliador.php diff --git a/app/Http/Controllers/AvaliadorTaskTimeController.php b/app/Http/Controllers/AvaliadorTaskTimeController.php new file mode 100644 index 0000000..ecce6c9 --- /dev/null +++ b/app/Http/Controllers/AvaliadorTaskTimeController.php @@ -0,0 +1,22 @@ +id) + // ->join('pad', 'avaliador_pad.pad_id', '=', 'pad.id') + // ->get(); + + return view('avaliador-task-time.index', ['index_menu' => $menu]); + } +} diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index 145bb02..1a3663d 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -316,4 +316,9 @@ class TaskController extends Controller return Response::json($results); } + + public function searchById(Request $request) { + + dd($request->all()); + } } diff --git a/app/Http/Controllers/TaskTimeController.php b/app/Http/Controllers/TaskTimeController.php index 5f59d1b..b01dea1 100644 --- a/app/Http/Controllers/TaskTimeController.php +++ b/app/Http/Controllers/TaskTimeController.php @@ -5,6 +5,8 @@ namespace App\Http\Controllers; use App\Models\TaskTime; use App\Models\Util\Menu; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Response; +use Illuminate\Support\Facades\Validator; class TaskTimeController extends Controller { @@ -12,8 +14,6 @@ class TaskTimeController extends Controller { $menu = Menu::PADS; - $taskTimes = TaskTime::whereUserPadId($user_pad_id)->get(); - return view('task-time.index', [ 'menu' => $menu, 'user_pad_id' => $user_pad_id @@ -28,20 +28,92 @@ class TaskTimeController extends Controller public function save(Request $request) { - $array = TaskTime::splitTarefaAndType($request->get('tarefa_id')); + $model = new TaskTime($request->all()); - dd($request->get('tarefa_id'), $array); + if($model->save()) { + return redirect() + ->route('TaskTimeIndex', ['user_pad_id' => $model->user_pad_id]) + ->with('success', 'Cadastro realizado com sucesso!'); + } } - public function updateView() { - + public function edit($id) { + $model = TaskTime::find($id); + return view('task-time.update', [ + 'model' => $model + ]); } - public function update() { + public function update($id, Request $request) { + + $request->merge(['start_time' => TaskTime::traitHour($request->get('start_time'))]); + $request->merge(['end_time' => TaskTime::traitHour($request->get('end_time'))]); + + $model = TaskTime::find($id); + $model->fill($request->all()); + + if($model->save()) { + return redirect() + ->route('TaskTimeIndex', ['user_pad_id' => $model->user_pad_id]) + ->with('success', 'Atualizado com sucesso!'); + } + return redirect() + ->route('TaskTimeIndex', ['user_pad_id' => $model->user_pad_id]) + ->with('fail', 'Erro ao Atualizar!'); + } - public function delete() { + public function delete($id) { + $model = TaskTime::find($id); + + if($model->delete()) { + return redirect() + ->route('TaskTimeIndex', ['user_pad_id' => $model->user_pad_id]) + ->with('success', 'Deletado com sucesso!'); + } + + return redirect() + ->route('TaskTimeIndex', ['user_pad_id' => $model->user_pad_id]) + ->with('fail', 'Erro ao Deletar!'); + + } + + public function searchTask(Request $request) { + + $type = $request->get('type'); + $tarefa_id = $request->get('tarefa_id'); + + $model = new TaskTime(); + $model->tarefa_id = $tarefa_id; + $model->type = $type; + + $attributes = $model->tarefa->getAttributes(); + + return Response::json(['task' => $attributes]); + } + + public function ajaxValidation(Request $request) + { + $request->merge(['start_time' => TaskTime::traitHour($request->get('start_time'))]); + $request->merge(['end_time' => TaskTime::traitHour($request->get('end_time'))]); + + $attributes = [ + 'id' => $request->get('id'), + 'user_pad_id' => $request->get('user_pad_id'), + 'tarefa_id' => $request->get('tarefa_id'), + 'type' => $request->get('type'), + 'start_time' => $request->get('start_time'), + 'end_time' => $request->get('end_time'), + ]; + + $validator = Validator::make($request->all(), TaskTime::rules($attributes), TaskTime::messages()); + + if($validator->passes()) { + return Response::json(['message' => true, 'status' => 200]); + } + + return Response::json(['errors' => $validator->errors(), 'status' => 400]); } } diff --git a/app/Models/TaskTime.php b/app/Models/TaskTime.php index ef8555c..9ccbe6c 100644 --- a/app/Models/TaskTime.php +++ b/app/Models/TaskTime.php @@ -2,7 +2,37 @@ namespace App\Models; +use Illuminate\Validation\Rule; + +use App\Models\Tabelas\Ensino\EnsinoAtendimentoDiscente; +use App\Models\Tabelas\Ensino\EnsinoAula; +use App\Models\Tabelas\Ensino\EnsinoCoordenacaoRegencia; +use App\Models\Tabelas\Ensino\EnsinoMembroDocente; +use App\Models\Tabelas\Ensino\EnsinoOrientacao; +use App\Models\Tabelas\Ensino\EnsinoOutros; +use App\Models\Tabelas\Ensino\EnsinoParticipacao; +use App\Models\Tabelas\Ensino\EnsinoProjeto; +use App\Models\Tabelas\Ensino\EnsinoSupervisao; +use App\Models\Tabelas\Extensao\ExtensaoCoordenacao; +use App\Models\Tabelas\Extensao\ExtensaoOrientacao; +use App\Models\Tabelas\Extensao\ExtensaoOutros; +use App\Models\Tabelas\Gestao\GestaoCoordenacaoLaboratoriosDidaticos; +use App\Models\Tabelas\Gestao\GestaoCoordenacaoProgramaInstitucional; +use App\Models\Tabelas\Gestao\GestaoMembroCamaras; +use App\Models\Tabelas\Gestao\GestaoMembroComissao; +use App\Models\Tabelas\Gestao\GestaoMembroConselho; +use App\Models\Tabelas\Gestao\GestaoMembroTitularConselho; +use App\Models\Tabelas\Gestao\GestaoOutros; +use App\Models\Tabelas\Gestao\GestaoRepresentanteUnidadeEducacao; +use App\Models\Tabelas\Pesquisa\PesquisaCoordenacao; +use App\Models\Tabelas\Pesquisa\PesquisaLideranca; +use App\Models\Tabelas\Pesquisa\PesquisaOrientacao; +use App\Models\Tabelas\Pesquisa\PesquisaOutros; +use App\Rules\ValidationLimitTime; +use DateInterval; +use DateTime; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Collection; class TaskTime extends Model { @@ -39,6 +69,7 @@ class TaskTime extends Model CONST TYPE_GESTAO_MEMBRO_COMISSAO = 23; CONST TYPE_GESTAO_OUTROS = 24; + CONST WEEK_HOUR = 0; CONST WEEK_DAY_SUNDAY = 1; CONST WEEK_DAY_MONDAY = 2; CONST WEEK_DAY_TUESDAY = 3; @@ -49,114 +80,158 @@ class TaskTime extends Model protected $table = 'task_time'; - protected $fillable = ['user_pad_upe', 'tarefa_id', 'type', 'weekday', 'start_time', 'end_time']; + protected $fillable = ['user_pad_id', 'tarefa_id', 'type', 'weekday', 'start_time', 'end_time']; + + public static function rules($attributes) + { + return [ + 'cod_atividade' => ['required'], + 'slct_tarefa_id' => ['required'], + 'tarefa_id' => ['required', 'integer'], + 'type' => ['required', 'integer', Rule::in(array_keys(self::listTaskTypes()))], + 'weekday' => ['required', 'integer', Rule::in(array_keys(self::listWeekDays()))], + 'start_time' => ['required', 'date_format:H:i', 'after_or_equal:07:30', 'before_or_equal:21:15'], + // 'end_time' => ['required', 'date_format:H:i', 'after_or_equal:07:30', 'before_or_equal:21:15'], + 'end_time' => ['required', 'date_format:H:i', 'after_or_equal:07:30', 'before_or_equal:21:15', new ValidationLimitTime($attributes)], + ]; + } + + + public static function messages() + { + return [ + //cod_atividade + 'cod_atividade.required' => '', + + //tarefa_id + 'slct_tarefa_id.required' => 'O campo "Atividade" é obrigatório!', + + // //type + // 'type.required' => 'O campo "Atividade" é obrigatório!', + + //weekday + 'weekday.required' => 'O campo "Dia da Semana" é obrigatório!', + 'weekday.in' => 'Selecione uma opção da lista de "Dia da Semana"!', + 'weekday.integer' => 'O campo "Dia da Semana" deve cónter um inteiro!', + + //start_time + 'start_time.required' => 'O campo "Horário Inicial" é obrigatório!', + 'start_time.after_or_equal' => 'O valor minímo do "Horário Inicial" é 07:30!', + 'start_time.before_or_equal' => 'O valor máximo do "Horário Inicial" é 21:15!', + + //end_time + 'end_time.required' => 'O campo "Horário Final" é obrigatório!', + 'end_time.after_or_equal' => 'O valor minímo do "Horário Final" é 07:30!', + 'end_time.before_or_equal' => 'O valor máximo do "Horário Final" é 21:15!' + ]; + } public function tarefa() { // Return Ensino Models // - - - - - - - - - - - if($this->type === self::TYPE_ENSINO_ATENDIMENTO_DISCENTE) { + if($this->type == self::TYPE_ENSINO_ATENDIMENTO_DISCENTE) { return $this->hasOne(EnsinoAtendimentoDiscente::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_AULA) { + if($this->type == self::TYPE_ENSINO_AULA) { return $this->hasOne(EnsinoAula::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_COORDENACAO_REGENCIA) { + if($this->type == self::TYPE_ENSINO_COORDENACAO_REGENCIA) { return $this->hasOne(EnsinoCoordenacaoRegencia::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_MEMBRO_DOCENTE) { + if($this->type == self::TYPE_ENSINO_MEMBRO_DOCENTE) { return $this->hasOne(EnsinoMembroDocente::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_ORIENTACAO) { + if($this->type == self::TYPE_ENSINO_ORIENTACAO) { return $this->hasOne(EnsinoOrientacao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_OUTROS) { + if($this->type == self::TYPE_ENSINO_OUTROS) { return $this->hasOne(EnsinoOutros::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_PARTICIPACAO) { + if($this->type == self::TYPE_ENSINO_PARTICIPACAO) { return $this->hasOne(EnsinoParticipacao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_PROJETO) { + if($this->type == self::TYPE_ENSINO_PROJETO) { return $this->hasOne(EnsinoProjeto::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_ENSINO_SUPERVISAO) { + if($this->type == self::TYPE_ENSINO_SUPERVISAO) { return $this->hasOne(EnsinoSupervisao::class, 'id', 'tarefa_id'); } // - - - - - - - - - - // Return Pesquisa Models // - - - - - - - - - - - if($this->type === self::TYPE_PESQUISA_COORDENACAO) { + if($this->type == self::TYPE_PESQUISA_COORDENACAO) { return $this->hasOne(PesquisaCoordenacao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_PESQUISA_LIDERANCA) { + if($this->type == self::TYPE_PESQUISA_LIDERANCA) { return $this->hasOne(PesquisaLideranca::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_PESQUISA_ORIENTACAO) { + if($this->type == self::TYPE_PESQUISA_ORIENTACAO) { return $this->hasOne(PesquisaOrientacao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_PESQUISA_OUTROS) { + if($this->type == self::TYPE_PESQUISA_OUTROS) { return $this->hasOne(PesquisaOutros::class, 'id', 'tarefa_id'); } // - - - - - - - - - - // Return Extensao Models // - - - - - - - - - - - if($this->type === self::TYPE_EXTENSAO_COORDENACAO) { + if($this->type == self::TYPE_EXTENSAO_COORDENACAO) { return $this->hasOne(ExtensaoCoordenacao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_EXTENSAO_ORIENTACAO) { + if($this->type == self::TYPE_EXTENSAO_ORIENTACAO) { return $this->hasOne(ExtensaoOrientacao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_EXTENSAO_OUTROS) { + if($this->type == self::TYPE_EXTENSAO_OUTROS) { return $this->hasOne(ExtensaoOutros::class, 'id', 'tarefa_id'); } // - - - - - - - - - - // Return Gestao Models // - - - - - - - - - - - if($this->type === self::TYPE_GESTAO_COORDENACAO_LABORATORIOS_DIDATICOS) { + if($this->type == self::TYPE_GESTAO_COORDENACAO_LABORATORIOS_DIDATICOS) { return $this->hasOne(GestaoCoordenacaoLaboratoriosDidaticos::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_COORDENACAO_PROGRAMA_INSTITUCIONAL) { + if($this->type == self::TYPE_GESTAO_COORDENACAO_PROGRAMA_INSTITUCIONAL) { return $this->hasOne(GestaoCoordenacaoProgramaInstitucional::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_MEMBRO_CAMARAS) { + if($this->type == self::TYPE_GESTAO_MEMBRO_CAMARAS) { return $this->hasOne(GestaoMembroCamaras::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_MEMBRO_COMISSAO) { + if($this->type == self::TYPE_GESTAO_MEMBRO_COMISSAO) { return $this->hasOne(GestaoMembroComissao::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_MEMBRO_CONSELHO) { + if($this->type == self::TYPE_GESTAO_MEMBRO_CONSELHO) { return $this->hasOne(GestaoMembroConselho::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_MEMBRO_TITULAR_CONSELHO) { + if($this->type == self::TYPE_GESTAO_MEMBRO_TITULAR_CONSELHO) { return $this->hasOne(GestaoMembroTitularConselho::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_OUTROS) { + if($this->type == self::TYPE_GESTAO_OUTROS) { return $this->hasOne(GestaoOutros::class, 'id', 'tarefa_id'); } - if($this->type === self::TYPE_GESTAO_REPRESENTANTE_UNIDADE_EDUCACAO) { + if($this->type == self::TYPE_GESTAO_REPRESENTANTE_UNIDADE_EDUCACAO) { return $this->hasOne(GestaoRepresentanteUnidadeEducacao::class, 'id', 'tarefa_id'); } // - - - - - - - - - - @@ -166,9 +241,164 @@ class TaskTime extends Model return $this->hasOne(UserPad::class, 'id', 'user_pad_id'); } + /** + * @return string + */ + public function getCode() { + return $this->tarefa->cod_atividade; + } + + /** + * @return string + */ + public function getName() { + // Return Ensino Models + // - - - - - - - - - - + if($this->type == self::TYPE_ENSINO_ATENDIMENTO_DISCENTE) { + return $this->tarefa->componente_curricular; + } + + if($this->type == self::TYPE_ENSINO_AULA) { + return $this->tarefa->componente_curricular; + } + + if($this->type == self::TYPE_ENSINO_COORDENACAO_REGENCIA) { + return $this->tarefa->componente_curricular; + } + + if($this->type == self::TYPE_ENSINO_MEMBRO_DOCENTE) { + return $this->tarefa->nucleo; + } + + if($this->type == self::TYPE_ENSINO_ORIENTACAO) { + return $this->tarefa->atividade; + } + + if($this->type == self::TYPE_ENSINO_OUTROS) { + return $this->tarefa->atividade; + } + + if($this->type == self::TYPE_ENSINO_PARTICIPACAO) { + return $this->tarefa->curso; + } + + if($this->type == self::TYPE_ENSINO_PROJETO) { + return $this->tarefa->componente_curricular; + } + + if($this->type == self::TYPE_ENSINO_SUPERVISAO) { + return $this->tarefa->atividade; + } + // - - - - - - - - - - + + // Return Pesquisa Models + // - - - - - - - - - - + if($this->type == self::TYPE_PESQUISA_COORDENACAO) { + return $this->tarefa->titulo_projeto; + } + + if($this->type == self::TYPE_PESQUISA_LIDERANCA) { + return $this->tarefa->grupo_pesquisa; + } + + if($this->type == self::TYPE_PESQUISA_ORIENTACAO) { + return $this->tarefa->titulo_projeto; + } + + if($this->type == self::TYPE_PESQUISA_OUTROS) { + return $this->tarefa->atividade; + } + // - - - - - - - - - - + + // Return Extensao Models + // - - - - - - - - - - + if($this->type == self::TYPE_EXTENSAO_COORDENACAO) { + return $this->tarefa->titulo_projeto; + } + + if($this->type == self::TYPE_EXTENSAO_ORIENTACAO) { + return $this->tarefa->titulo_projeto; + } + + if($this->type == self::TYPE_EXTENSAO_OUTROS) { + return $this->tarefa->atividade; + } + // - - - - - - - - - - + + // Return Gestao Models + // - - - - - - - - - - + if($this->type == self::TYPE_GESTAO_COORDENACAO_LABORATORIOS_DIDATICOS) { + return $this->tarefa->nome; + } + + if($this->type == self::TYPE_GESTAO_COORDENACAO_PROGRAMA_INSTITUCIONAL) { + return $this->tarefa->nome; + } + + if($this->type == self::TYPE_GESTAO_MEMBRO_CAMARAS) { + return $this->tarefa->nome; + } + + if($this->type == self::TYPE_GESTAO_MEMBRO_COMISSAO) { + return $this->tarefa->nome; + } + + if($this->type == self::TYPE_GESTAO_MEMBRO_CONSELHO) { + return $this->tarefa->nome; + } + + if($this->type == self::TYPE_GESTAO_MEMBRO_TITULAR_CONSELHO) { + return $this->tarefa->nome; + } + + if($this->type == self::TYPE_GESTAO_OUTROS) { + return $this->tarefa->atividade; + } + + if($this->type == self::TYPE_GESTAO_REPRESENTANTE_UNIDADE_EDUCACAO) { + return $this->tarefa->nome; + } + // - - - - - - - - - - + } + + /** + * @return string + */ + public function intervalTime($format = 'H:i:s') { + + $startTime = DateTime::createFromFormat('H:i:s', $this->start_time); + + $endTime = DateTime::createFromFormat('H:i:s', $this->end_time); + + $interval = $startTime->diff($endTime); + + $dateTime = new DateTime('00:00'); + $dateTime->add($interval); // Popular com Interval + + return $dateTime->format($format); + } + + /** + * STATIC METHODS + */ + + public static function listWeekDaysTable($value = null) { + $values = [ + self::WEEK_HOUR => "HORÁRIO", + self::WEEK_DAY_MONDAY => "SEGUNDA-FEIRA", + self::WEEK_DAY_TUESDAY => "TERÇA-FEIRA", + self::WEEK_DAY_WEDNESDAY => "QUARTA-FEIRA", + self::WEEK_DAY_THURSDAY => "QUINTA-FEIRA", + self::WEEK_DAY_FRIDAY => "SEXTA-FEIRA", + self::WEEK_DAY_SATURDAY => "SÁBADO", + ]; + + return $value != null ? $values[$value] : $values; + } + public static function listWeekDays($value = null) { $values = [ - self::WEEK_DAY_SUNDAY => "DOMINGO", + // self::WEEK_DAY_SUNDAY => "DOMINGO", self::WEEK_DAY_MONDAY => "SEGUNDA-FEIRA", self::WEEK_DAY_TUESDAY => "TERÇA-FEIRA", self::WEEK_DAY_WEDNESDAY => "QUARTA-FEIRA", @@ -180,25 +410,234 @@ class TaskTime extends Model return $value != null ? $values[$value] : $values; } + public static function listTaskTypes($value = null) { + $values = [ + + self::TYPE_ENSINO_AULA => '', + self::TYPE_ENSINO_COORDENACAO_REGENCIA => '', + self::TYPE_ENSINO_ORIENTACAO => '', + self::TYPE_ENSINO_SUPERVISAO => '', + self::TYPE_ENSINO_ATENDIMENTO_DISCENTE => '', + self::TYPE_ENSINO_PROJETO => '', + self::TYPE_ENSINO_PARTICIPACAO => '', + self::TYPE_ENSINO_MEMBRO_DOCENTE => '', + self::TYPE_ENSINO_OUTROS => '', + + self::TYPE_PESQUISA_COORDENACAO => '', + self::TYPE_PESQUISA_ORIENTACAO => '', + self::TYPE_PESQUISA_LIDERANCA => '', + self::TYPE_PESQUISA_OUTROS => '', + + self::TYPE_EXTENSAO_COORDENACAO => '', + self::TYPE_EXTENSAO_ORIENTACAO => '', + self::TYPE_EXTENSAO_OUTROS => '', + + self::TYPE_GESTAO_COORDENACAO_LABORATORIOS_DIDATICOS => '', + self::TYPE_GESTAO_MEMBRO_CONSELHO => '', + self::TYPE_GESTAO_COORDENACAO_PROGRAMA_INSTITUCIONAL => '', + self::TYPE_GESTAO_MEMBRO_TITULAR_CONSELHO => '', + self::TYPE_GESTAO_MEMBRO_CAMARAS => '', + self::TYPE_GESTAO_REPRESENTANTE_UNIDADE_EDUCACAO => '', + self::TYPE_GESTAO_MEMBRO_COMISSAO => '', + self::TYPE_GESTAO_OUTROS => '', + ]; + + return $value != null ? $values[$value] : $values; + } + + /** + * @param $floatValue + * @return string|time + */ + public static function convertFloatToHour($floatValue) { + + $percent = $floatValue * 100.0; // float to percent + $one_percent_from_hour = 0.6; // 0.6 min + + $minutes = $one_percent_from_hour * $percent; // minutes + + // Criar um objeto DateTime com um intervalo de minutos + $interval = new DateInterval('PT' . $minutes . 'M'); + + // Criar um objeto DateTime base com 0 horas e 0 minutos + $dateTime = new DateTime('00:00'); + $dateTime->add($interval); // Popular com Interval + + return $dateTime->format('H:i:s'); + } + /** - * Explode string with format "id_{id}|type_{type}" to array ['tarefa_id' => 'integer', 'type' => 'integer'] - * @return array + * Recebe e formata uma string para formato H:i + * Pode ser recebido uma hora completa H:i:s ou uma hora padrão H:i + * @return string|date + */ + public static function traitHour(string|null $hour = "") + { + if(!empty($hour)) { + $hour_splited = explode(':', $hour ); + + $hour_h_i = "{$hour_splited[0]}:$hour_splited[1]"; + + return $hour_h_i; + } + + return $hour; + } + + /** + * @param $taskTimes + * @return DateTime + */ + public static function sumIntervalTimes(Collection $taskTimes) { + + $sumDateTime = new DateTime("00:00:00"); + + foreach($taskTimes as $taskTime) { + + $split_time = explode(":", $taskTime->intervalTime()); + + $hours = $split_time[0]; + $minutes = $split_time[1]; + $seconds = $split_time[2]; + + $sumDateTime->modify("+{$hours} hours +{$minutes} minutes +{$seconds} seconds"); + } + + return $sumDateTime; + } + + /** + * @param DateTime $dateTimeX + * @param DateTime $dateTimeY + * @return DateTime */ - public static function splitTarefaAndType(string $task_type) { + public static function sumDateTimes(DateTime $dateTimeX, DateTime $dateTimeY) + { + $time_x = $dateTimeX->format("H:i:s"); + $time_y = $dateTimeY->format("H:i:s"); + + $newDateTime = new DateTime($time_x); + + $split_time = explode(":", $time_y); - $split_task_type = explode("|", $task_type); + $hours = $split_time[0]; + $minutes = $split_time[1]; + $seconds = $split_time[2]; + + $newDateTime->modify("+{$hours} hours +{$minutes} minutes +{$seconds} seconds"); - $task_data = $split_task_type[0]; - $split_task = explode("_", $task_data); - $task_id = $split_task[1]; + return $newDateTime; + } + + /** @return mixed */ + public static function tarefaByStatic($type, $tarefa_id) + { + // Return Ensino Models + // - - - - - - - - - - + if($type == self::TYPE_ENSINO_ATENDIMENTO_DISCENTE) { + return EnsinoAtendimentoDiscente::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_AULA) { + return EnsinoAula::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_COORDENACAO_REGENCIA) { + return EnsinoCoordenacaoRegencia::find($tarefa_id); + } - $type_data = $split_task_type[1]; - $split_type = explode("_", $type_data); - $type = $split_type[1]; + if($type == self::TYPE_ENSINO_MEMBRO_DOCENTE) { + return EnsinoMembroDocente::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_ORIENTACAO) { + return EnsinoOrientacao::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_OUTROS) { + return EnsinoOutros::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_PARTICIPACAO) { + return EnsinoParticipacao::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_PROJETO) { + return EnsinoProjeto::find($tarefa_id); + } + + if($type == self::TYPE_ENSINO_SUPERVISAO) { + return EnsinoSupervisao::find($tarefa_id); + } + // - - - - - - - - - - + + // Return Pesquisa Models + // - - - - - - - - - - + if($type == self::TYPE_PESQUISA_COORDENACAO) { + return PesquisaCoordenacao::find($tarefa_id); + } + + if($type == self::TYPE_PESQUISA_LIDERANCA) { + return PesquisaLideranca::find($tarefa_id); + } + + if($type == self::TYPE_PESQUISA_ORIENTACAO) { + return PesquisaOrientacao::find($tarefa_id); + } + + if($type == self::TYPE_PESQUISA_OUTROS) { + return PesquisaOutros::find($tarefa_id); + } + // - - - - - - - - - - + + // Return Extensao Models + // - - - - - - - - - - + if($type == self::TYPE_EXTENSAO_COORDENACAO) { + return ExtensaoCoordenacao::find($tarefa_id); + } + + if($type == self::TYPE_EXTENSAO_ORIENTACAO) { + return ExtensaoOrientacao::find($tarefa_id); + } + + if($type == self::TYPE_EXTENSAO_OUTROS) { + return ExtensaoOutros::find($tarefa_id); + } + // - - - - - - - - - - + + // Return Gestao Models + // - - - - - - - - - - + if($type == self::TYPE_GESTAO_COORDENACAO_LABORATORIOS_DIDATICOS) { + return GestaoCoordenacaoLaboratoriosDidaticos::find($tarefa_id); + } + if($type == self::TYPE_GESTAO_COORDENACAO_PROGRAMA_INSTITUCIONAL) { + return GestaoCoordenacaoProgramaInstitucional::find($tarefa_id); + } + + if($type == self::TYPE_GESTAO_MEMBRO_CAMARAS) { + return GestaoMembroCamaras::find($tarefa_id); + } + + if($type == self::TYPE_GESTAO_MEMBRO_COMISSAO) { + return GestaoMembroComissao::find($tarefa_id); + } + + if($type == self::TYPE_GESTAO_MEMBRO_CONSELHO) { + return GestaoMembroConselho::find($tarefa_id); + } + + if($type == self::TYPE_GESTAO_MEMBRO_TITULAR_CONSELHO) { + return GestaoMembroTitularConselho::find($tarefa_id); + } - $data = ['tarefa_id' => $task_id, 'type' => $type]; + if($type == self::TYPE_GESTAO_OUTROS) { + return GestaoOutros::find($tarefa_id); + } - return $data; + if($type == self::TYPE_GESTAO_REPRESENTANTE_UNIDADE_EDUCACAO) { + return GestaoRepresentanteUnidadeEducacao::find($tarefa_id); + } + // - - - - - - - - - - } } diff --git a/app/Models/Util/MenuItemsAvaliador.php b/app/Models/Util/MenuItemsAvaliador.php index 8d443c0..6f8a1d1 100644 --- a/app/Models/Util/MenuItemsAvaliador.php +++ b/app/Models/Util/MenuItemsAvaliador.php @@ -8,4 +8,5 @@ class MenuItemsAvaliador const HOME = 0; const PADs = 1; const REPORT = 2; + const TASK_TIME = 3; } diff --git a/app/Rules/ValidationLimitTime.php b/app/Rules/ValidationLimitTime.php new file mode 100644 index 0000000..efa151b --- /dev/null +++ b/app/Rules/ValidationLimitTime.php @@ -0,0 +1,162 @@ + $user_pad_id, 'tarefa_id' => $tarefa_id, 'type' => $type, 'start_time' => $start_time, 'end_time' => $end_time] + */ + public function __construct($attributes = []) + { + $this->id = $attributes['id']; + $this->user_pad_id = $attributes['user_pad_id']; + $this->tarefa_id = $attributes['tarefa_id']; + $this->type = $attributes['type']; + $this->start_time = $attributes['start_time']; + $this->end_time = $attributes['end_time']; + + $this->task = TaskTime::tarefaByStatic($this->type, $this->tarefa_id); + + $this->limit_hours = TaskTime::convertFloatToHour($this->task->ch_semanal); + + $this->taskTimes = $this->getTaskTimes(); + + $this->taskTime = $this->createTaskTime(); + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + $limitDateTime = new DateTime($this->limit_hours); + $sumDateTime = TaskTime::sumIntervalTimes($this->taskTimes); + + $newDateTime = new DateTime($this->taskTime->intervalTime()); + + $totalDateTime = TaskTime::sumDateTimes($sumDateTime, $newDateTime); + + $this->outLineTime = $totalDateTime->diff($limitDateTime); + + // dd([ + // 'limite' => $limitDateTime, + // 'total' => $totalDateTime, + // 'interval' => $this->outLineTime + // ]); + + return $limitDateTime >= $totalDateTime; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + $limitDateTime = new DateTime($this->limit_hours); + + $sumDateTime = TaskTime::sumIntervalTimes($this->taskTimes); + + $diffInterval = $sumDateTime->diff($limitDateTime); + + $dateTime = new DateTime('00:00:00'); + + $dateTime->add($diffInterval); + + $diff_time = $dateTime->format('H:i'); + + $taskTime = $this->createTaskTime(); + $interval_time = $taskTime->intervalTime('H:i'); + + $msgError = "Carga horária disponível restante: {$diff_time} hora(s)!"; + $msgError .= $diff_time == "00:00"? " Atividade Indisponível!" : " Intervalo entre inicio e fim : {$interval_time} hora(s)!"; + + return $msgError; + } + + /** + * @return App\Models\TaskTime[] + */ + public function getTaskTimes() + { + $id = $this->id; + + return ( + TaskTime::where('user_pad_id', '=', $this->user_pad_id) + ->where('tarefa_id', '=', $this->tarefa_id) + ->where('type', '=', $this->type) + ->get() + ->reject(function(TaskTime $model, int $key) use ($id) { + return $model->id == $id; + }) + ); + } + + /** + * @return App\Models\TaskTime + */ + public function createTaskTime() + { + $model = new TaskTime(); + $model->user_pad_id = $this->user_pad_id; + $model->tarefa_id = $this->tarefa_id; + $model->type = $this->type; + $model->start_time = $this->start_time; + $model->end_time = $this->end_time; + + $model->start_time = "{$model->start_time}:00"; + $model->end_time = "{$model->end_time}:00"; + + return $model; + } +} diff --git a/resources/views/avaliador-task-time/card_horario.blade.php b/resources/views/avaliador-task-time/card_horario.blade.php new file mode 100644 index 0000000..020965c --- /dev/null +++ b/resources/views/avaliador-task-time/card_horario.blade.php @@ -0,0 +1,8 @@ +
+
+

+
PAD: {{ $userPad->pad->nome }}
+
Status: {{ $userPad->pad->statusAsString() }}
+ +
+
diff --git a/resources/views/avaliador-task-time/index.blade.php b/resources/views/avaliador-task-time/index.blade.php new file mode 100644 index 0000000..084e021 --- /dev/null +++ b/resources/views/avaliador-task-time/index.blade.php @@ -0,0 +1,34 @@ +@extends('layouts.main') + +@section('header') + @include('layouts.header', [ + 'user' => Auth::user(), + ]) +@endsection + +@section('nav') + @include('layouts.navigation', ['menu' => $index_menu]) +@endsection +@section('title', 'Horários') +@section('body') +
+ +
+
+

Horários

+
+
+

Horários Disponíveis

+
+
+ {{-- @foreach($userPads as $userPad) + @include('avaliador-task-time.card_horario', ['userPad' => $userPad]) + @endforeach --}} +
+
+ + +
+ + +@endsection \ No newline at end of file diff --git a/resources/views/components/buttons/btn-delete-by-alert.blade.php b/resources/views/components/buttons/btn-delete-by-alert.blade.php new file mode 100644 index 0000000..5fe980e --- /dev/null +++ b/resources/views/components/buttons/btn-delete-by-alert.blade.php @@ -0,0 +1,24 @@ +{{-- + @include('components.buttons.btn-delete-by-alert', [ + '_id' => '', + '_class' => '', + '_route' => route('') + ]) +--}} + + + + + \ No newline at end of file diff --git a/resources/views/components/cards/relatorio_pad.blade.php b/resources/views/components/cards/relatorio_pad.blade.php index c90beef..1415806 100644 --- a/resources/views/components/cards/relatorio_pad.blade.php +++ b/resources/views/components/cards/relatorio_pad.blade.php @@ -1,6 +1,6 @@
-

+

PAD: {{ $userPad->pad->nome }}
Status: {{ $userPad->pad->statusAsString() }}
diff --git a/resources/views/layouts/user-navigation/navigation_avaliador.blade.php b/resources/views/layouts/user-navigation/navigation_avaliador.blade.php index fac25d3..831fd56 100644 --- a/resources/views/layouts/user-navigation/navigation_avaliador.blade.php +++ b/resources/views/layouts/user-navigation/navigation_avaliador.blade.php @@ -7,6 +7,7 @@ $home_active = $index_menu === MenuItemsAvaliador::HOME ? 'active' : ''; $report_active = $index_menu === MenuItemsAvaliador::REPORT ? 'active' : ''; + $task_time_active = $index_menu === MenuItemsAvaliador::TASK_TIME ? 'active' : ''; @endphp @@ -19,10 +20,12 @@ + {{-- --}} \ No newline at end of file diff --git a/resources/views/task-time/_form.blade.php b/resources/views/task-time/_form.blade.php deleted file mode 100644 index e69de29..0000000 diff --git a/resources/views/task-time/create.blade.php b/resources/views/task-time/create.blade.php index a0dcd56..2a7d96e 100644 --- a/resources/views/task-time/create.blade.php +++ b/resources/views/task-time/create.blade.php @@ -2,30 +2,80 @@ use App\Models\TaskTime; @endphp -
+ @csrf @method('POST') -
-
- - +
+ + + + + + + + + +
+
+ + +
+ + @include('components.divs.errors', [ + 'field' => 'cod_atividade_create' + ]) +
+ +
+
+ + + + @include('components.divs.errors', [ + 'field' => 'weekday_create' + ]) +
+
+ +
+
+ + +
+ + @include('components.divs.errors', [ + 'field' => 'slct_tarefa_id_create' + ])
-
-
-
- - +
+
+ + + + @include('components.divs.errors', [ + 'field' => 'start_time_create', + ]) +
+ +
+
+ + + + @include('components.divs.errors', [ + 'field' => 'end_time_create', + ]) +
+
+
@@ -41,6 +91,13 @@ +@include('pad.components.scripts.ajaxValidation', [ + 'btn_submit_id' => 'btn_submit', + 'form_id' => 'task-time-form', + 'route' => route('TaskTimeValidation'), + 'form_type' => 'create', +]) + \ No newline at end of file + $('#slct_tarefa_id').on('change', function(e) + { + const type = $('#type') + const tarefa_id = $('#tarefa_id') + + $('#cod_atividade').val('') + + if($(this).val()) { + const value = $(this).val() + const split_data = value.split('|') + + const split_tarefa_id = split_data[0].split('_') + const split_type = split_data[1].split('_') + + const _tarefa_id = split_tarefa_id[1] + const _type = split_type[1] + + type.val(_type) + tarefa_id.val(_tarefa_id) + + $.ajax({ + url: '{{ route("TaskTimeSearchTask") }}', + type: 'GET', + data: { + tarefa_id: _tarefa_id, + type: _type + }, + dataType: 'json', + success: (response) => { + const cod_atividade = response.task.cod_atividade + $('#cod_atividade').val(cod_atividade) + }, + error: (xhr, status, error) => { + console.error('Erro na requisição!'); + } + }); + } + }) + + diff --git a/resources/views/task-time/index.blade.php b/resources/views/task-time/index.blade.php index 3d4b881..08de9e3 100644 --- a/resources/views/task-time/index.blade.php +++ b/resources/views/task-time/index.blade.php @@ -19,12 +19,96 @@ @include('components.alerts') @include('components.buttons.btn-show-modal', [ - // '_id' => 'btn-task-time-create', '_class' => 'btn-success', '_content' => 'Cadastrar', '_target_class' => 'task-time-create', ]) + @php + use App\Models\TaskTime; + + // $hours = ['07:30', '08:20', '09:10', '10:00', '10:50', '11:40', '12:30', '13:30', '14:30', '15:30', '16:30', '17:30', '19:00', '19:45', '20:30', '21:15']; + + $rangeHours = [ + ['07:30', '08:20'], + ['08:20', '09:10'], + ['09:10', '10:00'], + ['10:00', '10:50'], + ['10:50', '11:40'], + ['11:40', '12:30'], + ['12:30', '13:30'], + ['13:30', '14:30'], + ['14:30', '15:30'], + ['15:30', '16:30'], + ['16:30', '17:30'], + ['17:30', '19:00'], + ['19:00', '19:45'], + ['19:45', '20:30'], + ['20:30', '21:15'], + ['21:15', '21:15'], + ]; + + $calendar = []; + + $row = []; + + foreach ($rangeHours as $rangeHour) + { + $start_time = $rangeHour[0]; + $end_time = $rangeHour[1]; + + $row[0] = $start_time; + + foreach (array_keys(TaskTime::listWeekDays()) as $weekday) + { + $row[$weekday] = + TaskTime::where('user_pad_id', '=', $user_pad_id) + ->where('weekday', '=', $weekday) + ->where(function($query) use ($rangeHour) { + $query->orWhereBetween('start_time', $rangeHour)->orWhereBetween('end_time', $rangeHour); + })->first(); + + $row[$weekday] = $row[$weekday] ? $row[$weekday] : ''; + } + + $calendar[] = $row; + } + @endphp + +
+ + + + + @foreach(TaskTime::listWeekDaysTable() as $key => $weekday) + + @endforeach + + + + @foreach($calendar as $rowHour) + + @foreach ($rowHour as $model) + + @if(gettype($model) == 'string') + + @endif + + @if(gettype($model) == 'object') + + @endif + + @endforeach + + @endforeach + +
{{$weekday}}
{{ $model }} + + {{ "{$model->getCode()} : {$model->getName()}" }} + +
+
+ @include('components.modal', ['size' => 'modal-lg', 'header' => ''])
@@ -39,4 +123,35 @@ 'btn_class' => 'task-time-create', ]) -@endsection \ No newline at end of file + @include('pad.components.scripts.dimensao.ensino.show_modal', [ + 'modal_id' => 'modal', + 'route' => route('TaskTimeEdit'), + 'btn_class' => 'btn-edit_task', + ]) + +@endsection + +{{-- @include('components.buttons.btn-edit', [ + 'route' => route('TaskTimeEdit', ['id' => $model->id]) +]) + +@include('components.buttons.btn-delete', [ + 'id' => $model->id, + 'route' => route('TaskTimeDelete', ['id' => $model->id]) +]) --}} + +{{-- @foreach($listTaskTime as $key => $taskTimes) + + @foreach($taskTimes as $model) + + @if(gettype($model) == 'string') + {{ $model }} + @endif + + @if(gettype($model) == 'object') + + @endif + + @endforeach + +@endforeach --}} \ No newline at end of file diff --git a/resources/views/task-time/update.blade.php b/resources/views/task-time/update.blade.php new file mode 100644 index 0000000..f1c19f6 --- /dev/null +++ b/resources/views/task-time/update.blade.php @@ -0,0 +1,192 @@ +@php + use App\Models\TaskTime; + + /** + * @var App\Models\TaskTime $model + */ +@endphp + +
+ @method('DELETE') + @csrf +
+ +
+ @csrf + @method('POST') + +
+ + + + + + ´ + + + +
+
+ + +
+ + @include('components.divs.errors', [ + 'field' => 'cod_atividade_update' + ]) +
+ +
+
+ + + + @include('components.divs.errors', [ + 'field' => 'weekday_update' + ]) +
+
+ +
+
+ + +
+ + @include('components.divs.errors', [ + 'field' => 'slct_tarefa_id' + ]) +
+ +
+
+ + + + @include('components.divs.errors', [ + 'field' => 'start_time_update', + ]) +
+
+ +
+
+ + + + @include('components.divs.errors', [ + 'field' => 'end_time_update', + ]) +
+
+
+ +
+ +
+ +
+ +@include('pad.components.scripts.ajaxValidation', [ + 'btn_submit_id' => 'btn_submit', + 'form_id' => 'task-time-update-form', + 'route' => route('TaskTimeValidation'), + 'form_type' => 'update', +]) + + diff --git a/routes/Task.php b/routes/Task.php index dc4e16c..dd14d70 100644 --- a/routes/Task.php +++ b/routes/Task.php @@ -5,4 +5,5 @@ use Illuminate\Support\Facades\Route; Route::prefix('/tarefa/geral')->group(function () { Route::get('/search', [TaskController::class, 'search'])->name('TaskSearch'); + Route::get('/search-by-id', [TaskController::class, 'searchById'])->name('TaskSearchById'); }); \ No newline at end of file diff --git a/routes/TaskTime.php b/routes/TaskTime.php index 6566e57..eb56010 100644 --- a/routes/TaskTime.php +++ b/routes/TaskTime.php @@ -7,9 +7,9 @@ Route::prefix('/tarefa/horario')->group(function () { Route::get('/index/{user_pad_id}', [TaskTimeController::class, 'index'])->name('TaskTimeIndex'); Route::get('/create/{user_pad_id}', [TaskTimeController::class, 'create'])->name('TaskTimeCreate'); Route::post('/save', [TaskTimeController::class, 'save'])->name('TaskTimeSave'); - //edit - //update - //delete - //move - -}); \ No newline at end of file + Route::get('/edit/{id?}', [TaskTimeController::class, 'edit'])->name('TaskTimeEdit'); + Route::post('/update/{id}', [TaskTimeController::class, 'update'])->name('TaskTimeUpdate'); + Route::delete('/delete/{id}', [TaskTimeController::class, 'delete'])->name('TaskTimeDelete'); + Route::get('/search-task', [TaskTimeController::class, 'searchTask'])->name('TaskTimeSearchTask'); + Route::post('/validation', [TaskTimeController::class, 'ajaxValidation'])->name('TaskTimeValidation'); +}); diff --git a/routes/avaliador.php b/routes/avaliador.php new file mode 100644 index 0000000..4edaa30 --- /dev/null +++ b/routes/avaliador.php @@ -0,0 +1,21 @@ +group(function () { + Route::get('/index', [AvaliadorController::class, 'index'])->name('avaliador_index'); + Route::put('/avaliar', [AvaliadorController::class, 'avaliar'])->name('avaliador_avaliar'); + Route::get('/create', [AvaliadorController::class, 'create'])->name('avaliador_create'); + Route::post('/store', [AvaliadorController::class, 'store'])->name('avaliador_store'); + Route::get('/edit/{id}', [AvaliadorController::class, 'edit'])->name('avaliador_edit'); + Route::post('/update/{id}', [AvaliadorController::class, 'update'])->name('avaliador_update'); + Route::delete('/delete/{id}', [AvaliadorController::class, 'destroy'])->name('avaliador_delete'); + Route::get('/relatorio', [AvaliadorController::class, 'relatorio'])->name('avaliador_relatorio'); + Route::get('/relatorio/{id}', [PadController::class, 'relatorio'])->name('pad_relatório'); + Route::get('/relatorio/{id}/pdf', [PadController::class, 'generatePDF'])->name('pad_relatório_pdf'); + + Route::get('/horario/index', [AvaliadorTaskTimeController::class, 'index'])->name('avaliador_task_time_index'); +}); diff --git a/routes/web.php b/routes/web.php index 3a5ac77..b8d1fc4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -29,7 +29,11 @@ require __DIR__ . '/auth.php'; require __DIR__ . '/profile.php'; require __DIR__ . '/pad.php'; + +require __DIR__ . '/avaliador.php'; + require __DIR__ . '/avaliador_pad.php'; + require __DIR__ . '/professor_pad.php'; require __DIR__ . '/unidade.php'; @@ -97,19 +101,6 @@ Route::prefix('/professor')->group(function () { Route::delete('/delete/{id}', [ProfessorController::class, 'destroy'])->name('professor_delete'); }); -Route::prefix('/avaliador')->group(function () { - Route::get('/index', [AvaliadorController::class, 'index'])->name('avaliador_index'); - Route::put('/avaliar', [AvaliadorController::class, 'avaliar'])->name('avaliador_avaliar'); - Route::get('/create', [AvaliadorController::class, 'create'])->name('avaliador_create'); - Route::post('/store', [AvaliadorController::class, 'store'])->name('avaliador_store'); - Route::get('/edit/{id}', [AvaliadorController::class, 'edit'])->name('avaliador_edit'); - Route::post('/update/{id}', [AvaliadorController::class, 'update'])->name('avaliador_update'); - Route::delete('/delete/{id}', [AvaliadorController::class, 'destroy'])->name('avaliador_delete'); - Route::get('/relatorio', [AvaliadorController::class, 'relatorio'])->name('avaliador_relatorio'); - Route::get('/relatorio/{id}', [PadController::class, 'relatorio'])->name('pad_relatório'); - Route::get('/relatorio/{id}/pdf', [PadController::class, 'generatePDF'])->name('pad_relatório_pdf'); -}); - Route::prefix('/user')->group(function () { Route::get('/edit/perfil/{tab?}', [UserController::class, 'editPerfil'])->name('edit_perfil'); Route::post('/update/perfil', [UserController::class, 'updatePerfil'])->name('update_perfil'); -- GitLab