Commit 684cd0d3 authored by alissonalbuquerque's avatar alissonalbuquerque
Browse files

feat(search): add search em sessões de pad

parent 7bf03170
...@@ -7,6 +7,9 @@ use App\Http\Controllers\UserPadController; ...@@ -7,6 +7,9 @@ use App\Http\Controllers\UserPadController;
use App\Models\Avaliacao; use App\Models\Avaliacao;
use App\Models\AvaliadorPad; use App\Models\AvaliadorPad;
use App\Models\AvaliadorPadDimensao; use App\Models\AvaliadorPadDimensao;
use App\Search\AvaliadorPadSearch;
use App\Search\UserPadSearch;
use App\Search\UserSearch;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Pad; use App\Models\Pad;
use App\Models\Tabelas\Constants; use App\Models\Tabelas\Constants;
...@@ -202,31 +205,42 @@ class PadController extends Controller ...@@ -202,31 +205,42 @@ class PadController extends Controller
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *
* @param Illuminate\Http\Request
* @param integer $id * @param integer $id
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function edit($id) public function edit(mixed $id, Request $request)
{ {
$menu = Menu::PADS; $menu = Menu::PADS;
$pad = PAD::find($id); $pad = PAD::find($id);
$userPads = $pad->userPads()->paginate(50); $status = Pad::listStatus();
$avaliatorsPads = $pad->avaliadorPads;
$status = Constants::listStatus();
//Se a página atual for 1 remova o previous $user_pad_search = new UserPadSearch();
//Se a página atual for lastPage remova o next $user_pad_search->pad_id = $id;
//Se houver um page="" no query selecionar a opção de professor por padrão [list] $user_pad_search->paginate = 50;
//Criar variavel para retornar o active tab selecionado
// dd($pad->id); $avaliador_pad_search = new AvaliadorPadSearch();
// dd($userPads, $userPads->links()); $avaliador_pad_search->pad_id = $id;
$avaliador_pad_search->paginate = 50;
$query_params = $request->all();
if(isset($query_params['search_tab'])) {
$user_pads = ($query_params['search_tab'] == 'user_pad') ? $user_pad_search->search($query_params) : $user_pad_search->search();
$avaliador_pads = ($query_params['search_tab'] == 'avaliador_pad') ? $avaliador_pad_search->search($query_params) : $avaliador_pad_search->search();
} else {
$user_pads = $user_pad_search->search();
$avaliador_pads = $avaliador_pad_search->search();
}
return view('pad.admin.edit', [ return view('pad.admin.edit', [
'pad' => $pad, 'pad' => $pad,
'menu' => $menu, 'menu' => $menu,
'status' => $status, 'status' => $status,
'userPads' => $userPads, 'user_pads' => $user_pads,
'avaliatorsPads' => $avaliatorsPads 'avaliador_pads' => $avaliador_pads,
'user_pad_search' => $user_pad_search,
'avaliador_pad_search' => $avaliador_pad_search
]); ]);
} }
......
...@@ -21,11 +21,15 @@ class Pad extends Model ...@@ -21,11 +21,15 @@ class Pad extends Model
/** @var array */ /** @var array */
protected $dates = ['deleted_at']; protected $dates = ['deleted_at'];
const STATUS_ATIVO = 1;
const STATUS_INATIVO = 2;
const STATUS_ARQUIVADO = 3;
/** /**
* @return string * @return string
* */ * */
public function statusAsString() { public function statusAsString() {
return Status::listStatus($this->status); return self::listStatus($this->status);
} }
/** /**
...@@ -57,5 +61,16 @@ class Pad extends Model ...@@ -57,5 +61,16 @@ class Pad extends Model
public function avaliadorPads(){ public function avaliadorPads(){
return $this->hasMany(AvaliadorPad::class, 'pad_id'); return $this->hasMany(AvaliadorPad::class, 'pad_id');
} }
public static function listStatus($value = null) {
$values = [
self::STATUS_ATIVO => 'Ativo',
self::STATUS_INATIVO => 'Inativo',
self::STATUS_ARQUIVADO => 'Arquivado',
];
return $value !== null? $values[$value] : $values;
}
} }
...@@ -31,6 +31,7 @@ use App\Models\Pad; ...@@ -31,6 +31,7 @@ use App\Models\Pad;
use App\Models\Util\Status; use App\Models\Util\Status;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use DateTime;
//remover tabela de user_pad //remover tabela de user_pad
...@@ -111,6 +112,20 @@ class UserPad extends Model ...@@ -111,6 +112,20 @@ class UserPad extends Model
return $totalHoras; return $totalHoras;
} }
public function total_horas()
{
$date_interval = TaskTime::float_to_date_interval($this->totalHoras());
[$hours, $minutes] = [$date_interval->format('%h'), $date_interval->format('%i')];
$hours = strlen($hours) < 2 ? str_pad($hours, 2, '0', STR_PAD_LEFT) : $hours;
$minutes = strlen($minutes) < 2 ? str_pad($minutes, 2, '0', STR_PAD_LEFT) : $minutes;
$date_format = "{$hours}:{$minutes}";
return $date_format;
}
/* /*
* @RELATIONS (relações entre tarefas) * @RELATIONS (relações entre tarefas)
*/ */
......
<?php
namespace App\Search;
use App\Models\AvaliadorPad;
use App\Models\Pad;
use App\Models\User;
use App\Models\UserPad;
use Illuminate\Database\Eloquent\Model;
class AvaliadorPadSearch extends Model
{
/** @var string */
public $name;
/** @var string */
public $email;
/** @var integer */
public $user_id;
/** @var integer */
public $pad_id;
/** @var integer */
public $paginate;
/** @var array */
public $_attributes = ['name', 'email', 'user_id', 'pad_id', 'paginate'];
/** @return void */
public function load($params = [])
{
foreach($this->_attributes as $_attribute)
{
if(isset($this->$_attribute)) {
$this->$_attribute = $this->$_attribute;
} else if(isset($params[$_attribute])) {
$this->$_attribute = $params[$_attribute];
} else {
$this->$_attribute = null;
}
}
}
/** @return Illuminate\Database\Eloquent\Collection */
public function search($params = [])
{
/** @var Illuminate\Database\Eloquent\Builder */
$query = AvaliadorPad::where([]);
$query->join('users', 'users.id', '=', 'avaliador_pad.user_id');
$this->load($params);
if($this->name) {
$name = $this->name;
$query->where('users.name', "like", "%{$name}%");
}
if($this->email) {
$email = $this->email;
$query->where('users.email', "like", "%{$email}%");
}
if($this->user_id) {
$user_id = $this->user_id;
$query->where("user_id", '=', "{$user_id}");
}
if($this->pad_id) {
$pad_id = $this->pad_id;
$query->where("pad_id", '=', "{$pad_id}");
}
return $this->paginate ? $query->get()->paginate($this->paginate) : $query->get();
}
/** @return Illuminate\Database\Eloquent\Relations\BelongsTo */
public function user() {
return $this->belongsTo(User::class);
}
/** @return Illuminate\Database\Eloquent\Relations\BelongsTo */
public function pad() {
return $this->belongsTo(Pad::class);
}
}
<?php
namespace App\Search;
use App\Models\Pad;
use App\Models\User;
use App\Models\UserPad;
use Illuminate\Database\Eloquent\Model;
class UserPadSearch extends Model
{
/** @var string */
public $name;
/** @var string */
public $email;
/** @var integer */
public $user_id;
/** @var integer */
public $pad_id;
/** @var integer */
public $paginate;
/** @var array */
public $_attributes = ['name', 'email', 'user_id', 'pad_id', 'paginate'];
/** @return void */
public function load($params = [])
{
foreach($this->_attributes as $_attribute)
{
if(isset($this->$_attribute)) {
$this->$_attribute = $this->$_attribute;
} else if(isset($params[$_attribute])) {
$this->$_attribute = $params[$_attribute];
} else {
$this->$_attribute = null;
}
}
}
/** @return Illuminate\Database\Eloquent\Collection */
public function search($params = [])
{
/** @var Illuminate\Database\Eloquent\Builder */
$query = UserPad::where([]);
$query->join('users', 'users.id', '=', 'user_pad.user_id');
$this->load($params);
if($this->name) {
$name = $this->name;
$query->where('users.name', "like", "%{$name}%");
}
if($this->email) {
$email = $this->email;
$query->where('users.email', "like", "%{$email}%");
}
if($this->user_id) {
$user_id = $this->user_id;
$query->where("user_id", '=', "{$user_id}");
}
if($this->pad_id) {
$pad_id = $this->pad_id;
$query->where("pad_id", '=', "{$pad_id}");
}
return $this->paginate ? $query->get()->paginate($this->paginate) : $query->get();
}
/** @return Illuminate\Database\Eloquent\Relations\BelongsTo */
public function user() {
return $this->belongsTo(User::class);
}
/** @return Illuminate\Database\Eloquent\Relations\BelongsTo */
public function pad() {
return $this->belongsTo(Pad::class);
}
}
@php
/**
* @var $pad App\Models\Pad
* @var $menu integer
* @var $status integer
* @var $user_pads Illuminate\Database\Eloquent\Collection<App\Models\UserPad>
* @var $avaliador_pads Illuminate\Database\Eloquent\Collection<App\Models\AvaliadorPad>
* @var $user_pad_search App\Search\UserPadSearch
* @var $avaliador_pad_search App\Search\AvaliadorPadSearch
*/
@endphp
@extends('layouts.main') @extends('layouts.main')
@section('title', 'Novo') @section('title', 'Novo')
...@@ -110,6 +122,8 @@ ...@@ -110,6 +122,8 @@
<div class="border rounded px-2"> <div class="border rounded px-2">
@include('pad/admin/search/_user_pad_search', ['model' => $user_pad_search])
{{-- Create Professor --}} {{-- Create Professor --}}
<div class="text-end my-2"> <div class="text-end my-2">
<button type="button" class="btn btn-success user-pad-create"> Cadastrar Professor </button> <button type="button" class="btn btn-success user-pad-create"> Cadastrar Professor </button>
...@@ -122,17 +136,19 @@ ...@@ -122,17 +136,19 @@
<tr> <tr>
<th scope="col"> Professor </th> <th scope="col"> Professor </th>
<th scope="col"> PDA </th> <th scope="col"> PDA </th>
<th scope="col"> E-mail </th>
<th scope="col"> C.H </th> <th scope="col"> C.H </th>
<th scope="col"> Opções </th> <th scope="col"> Opções </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach($userPads as $userPad) @foreach($user_pads as $user_pad)
<tr> <tr>
<td>{{ $userPad->user }}</td> <td>{{ $user_pad->user }}</td>
<td>{{ $userPad->pad->nome }}</td> <td>{{ $user_pad->pad->nome }}</td>
<td> <span class="badge bg-primary">{{ $userPad->totalHoras() }}</span> </td> <td>{{ $user_pad->user->email }}</td>
<td> <span class="badge bg-primary">{{ $user_pad->total_horas() }}</span> </td>
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>
...@@ -140,18 +156,19 @@ ...@@ -140,18 +156,19 @@
{{-- Table --}} {{-- Table --}}
{{-- Pagination --}} {{-- Pagination --}}
@if($user_pads->hasPages())
<ul class="pagination justify-content-end"> <ul class="pagination justify-content-end">
</ul> @if(!$user_pads->onFirstPage())
<li class="page-item"> <a class="page-link" href="{{ $user_pads->previousPageUrl() }}" tabindex="-1" aria-disabled="true">< Anterior</a> </li>
@endif
@if($user_pads->hasMorePages())
<li class="page-item"> <a class="page-link" href="{{ $user_pads->nextPageUrl() }}">Próximo > </a> </li>
@endif
<ul class="pagination justify-content-end">
<li class="page-item"> <a class="page-link" href="#" tabindex="-1" aria-disabled="true">Anterior</a> </li>
<li class="page-item"><a class="page-link" href="">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"> <a class="page-link" href="#">Próximo</a> </li>
</ul> </ul>
{{-- Pagination --}} @endif
</div> </div>
...@@ -161,6 +178,8 @@ ...@@ -161,6 +178,8 @@
<div class="border rounded px-2"> <div class="border rounded px-2">
@include('pad/admin/search/_avaliador_pad_search', ['model' => $avaliador_pad_search])
<div class="text-end my-2"> <div class="text-end my-2">
<button type="button" class="btn btn-success avaliator-pad-create"> Cadastrar Avaliador </button> <button type="button" class="btn btn-success avaliator-pad-create"> Cadastrar Avaliador </button>
</div> </div>
...@@ -169,6 +188,7 @@ ...@@ -169,6 +188,7 @@
<thead> <thead>
<tr> <tr>
<th scope="col"> Avaliador </th> <th scope="col"> Avaliador </th>
<th scope="col"> E-mail </th>
<th scope="col"> PDA </th> <th scope="col"> PDA </th>
<th scope="col"> Dimensão </th> <th scope="col"> Dimensão </th>
<th scope="col"> Opções </th> <th scope="col"> Opções </th>
...@@ -176,12 +196,13 @@ ...@@ -176,12 +196,13 @@
</thead> </thead>
<tbody> <tbody>
@foreach($avaliatorsPads as $avaliatorPad) @foreach($avaliador_pads as $avaliador_pad)
<tr> <tr>
<td>{{ $avaliatorPad->user->name ?? 'UserID não selecionado!' }}</td> <td>{{ $avaliador_pad->user->name ?? 'UserID não selecionado!' }}</td>
<td>{{ $avaliatorPad->pad->nome }}</td> <td>{{ $avaliador_pad->user->email }}</td>
<td>{{ $avaliador_pad->pad->nome }}</td>
<td> <td>
@foreach($avaliatorPad->dimensions as $dimension) @foreach($avaliador_pad->dimensions as $dimension)
<span class="badge bg-primary">{{ $dimension }}</span> <span class="badge bg-primary">{{ $dimension }}</span>
@endforeach @endforeach
</td> </td>
...@@ -190,13 +211,13 @@ ...@@ -190,13 +211,13 @@
<div class="me-1"> <div class="me-1">
@include('components.buttons.btn-edit-task', [ @include('components.buttons.btn-edit-task', [
'btn_class' => 'btn-edit_avaliador_pad', 'btn_class' => 'btn-edit_avaliador_pad',
'btn_id' => $avaliatorPad->id, 'btn_id' => $avaliador_pad->id,
]) ])
</div> </div>
<div class="me-1"> <div class="me-1">
@include('components.buttons.btn-delete', [ @include('components.buttons.btn-delete', [
'id' => $avaliatorPad->id, 'id' => $avaliador_pad->id,
'route' => route('avaliador-pad_delete', ['id' => $avaliatorPad->id]) 'route' => route('avaliador-pad_delete', ['id' => $avaliador_pad->id])
]) ])
</div> </div>
</div> </div>
......
<?php
/**
* @var $model App\Search\AvaliadorPadSearch;
*/
?>
<div class="m-2 p-2">
<form action="{{ route('pad_edit', ['id' => $model->pad_id]) }}" method="get">
<div class="row">
<div>
<input type="hidden" name="search_tab" value="avaliador_pad">
</div>
<div>
<input type="hidden" name="pad_id" value="{{ $model->pad_id }}">
</div>
<div class="mb-3 col-6">
<div class="form-group">
<label class="form-label" for="name"> Nome </label>
<input type="text" name="name" id="name" class="form-control" placeholder="Nome" value="{{ $model->name }}">
</div>
</div>
<div class="mb-3 col-6">
<div class="form-group">
<label class="form-label" for="email"> E-Mail </label>
<input type="email" name="email" id="email" class="form-control" placeholder="E-Mail" value="{{ $model->email }}">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary"> Buscar </button>
</form>
</div>
<hr>
<?php
/**
* @var $model App\Search\UserPadSearch;
*/
?>
<div class="m-2 p-2">
<form action="{{ route('pad_edit', ['id' => $model->pad_id]) }}" method="get">
<div class="row">
<div>
<input type="hidden" name="search_tab" value="user_pad">
</div>
<div>
<input type="hidden" name="pad_id" value="{{ $model->pad_id }}">
</div>
<div class="mb-3 col-6">
<div class="form-group">
<label class="form-label" for="name"> Nome </label>
<input type="text" name="name" id="name" class="form-control" placeholder="Nome" value="{{ $model->name }}">
</div>
</div>
<div class="mb-3 col-6">
<div class="form-group">
<label class="form-label" for="email"> E-Mail </label>
<input type="email" name="email" id="email" class="form-control" placeholder="E-Mail" value="{{ $model->email }}">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary"> Buscar </button>
</form>
</div>
<hr>
...@@ -18,6 +18,8 @@ Route::prefix('/pad')->group(function () { ...@@ -18,6 +18,8 @@ Route::prefix('/pad')->group(function () {
Route::get('/{id}/professor/{professor_id}/atividades/pesquisa', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_pesquisa'); Route::get('/{id}/professor/{professor_id}/atividades/pesquisa', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_pesquisa');
Route::get('/{id}/professor/{professor_id}/atividades/gestao', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_gestao'); Route::get('/{id}/professor/{professor_id}/atividades/gestao', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_gestao');
Route::get('/{id}/professor/{professor_id}/atividades/extensao', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_extensao'); Route::get('/{id}/professor/{professor_id}/atividades/extensao', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_extensao');
// Route::get('/{id}/professor/{professor_id}/atividades/extensao', [PadController::class, 'professor_atividades'])->name('pad_professor_atividades_extensao');
}); });
/** PadProfessor */ /** PadProfessor */
......
...@@ -54,8 +54,11 @@ require __DIR__ . '/task_time.php'; ...@@ -54,8 +54,11 @@ require __DIR__ . '/task_time.php';
require __DIR__ . '/dimensao/dimensao.php'; require __DIR__ . '/dimensao/dimensao.php';
require __DIR__ . '/dimensao/ensino.php'; require __DIR__ . '/dimensao/ensino.php';
require __DIR__ . '/dimensao/gestao.php'; require __DIR__ . '/dimensao/gestao.php';
require __DIR__ . '/dimensao/pesquisa.php'; require __DIR__ . '/dimensao/pesquisa.php';
require __DIR__ . '/dimensao/extensao.php'; require __DIR__ . '/dimensao/extensao.php';
require __DIR__ . '/import/update_user.php'; require __DIR__ . '/import/update_user.php';
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment