Commit b0eb270d authored by alissonalbuquerque's avatar alissonalbuquerque
Browse files

fix(admin/user): atualização de campos de campus e curso

feat(admin/pad/avaliador): impl de cadastro de avaliadores, ausente em validação
parent 1551eb52
......@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Models\AvaliadorPad;
use App\Models\AvaliadorPadDimensao;
use App\Models\Pad;
use App\Models\User;
use App\Models\Util\Dimensao;
......@@ -15,7 +16,7 @@ class AvaliadorPadController extends Controller
{
public function actionStore(Request $request)
{
dd($request->all());
//Verificar se um avaliador estiver deletado via soft delete, rehabilitar os dados e atualizalos em relação ao request, busca via user_id
// $validator = Validator::make(
// $request->all(), UserPad::rules(), UserPad::messages()
......@@ -26,25 +27,88 @@ class AvaliadorPadController extends Controller
// }
// $model = new UserPad();
// $model->fill($request->all());
// $model->save();
$pad = Pad::find($request->pad_id);
// $pad = Pad::find($request->pad_id);
//Recebe registro deletado via softdelete de AvaliadorPad se existir
$model = AvaliadorPad::wherePadId($request->pad_id)->whereUserId($request->user_id)->onlyTrashed()->first();
// return redirect()
// ->route('pad_edit', ['id' => $request->pad_id])
// ->with('success', sprintf('Professor cadastrado no PAD(%s) com Sucesso!', $pad->nome));
if($model) {
$model->restore();
$model->fill($request->all());
} else {
$model = new AvaliadorPad();
$model->fill($request->all());
}
if($model->save())
{
if($model->id) {
AvaliadorPadDimensao::whereAvaliadorPadId($model->id)->delete();
}
foreach($request->dimensoes_multiples as $dimensao) {
$avaliadorPadDimensao = new AvaliadorPadDimensao();
$avaliadorPadDimensao->avaliador_pad_id = $model->id;
$avaliadorPadDimensao->dimensao = $dimensao;
$avaliadorPadDimensao->save();
}
return redirect()
->route('pad_edit', ['id' => $request->pad_id])
->with('success', sprintf('Avaliador cadastrado no PAD(%s) com sucesso!', $pad->nome));
}
}
public function actionUpdate(Request $request, $id)
{
// $validator = Validator::make(
// $request->all(), UserPad::rules(), UserPad::messages()
// );
// if($validator->fails())
// {
// }
$model = AvaliadorPad::find($id);
$model->fill($request->all());
$pad = $model->pad;
if($model->save())
{
AvaliadorPadDimensao::whereAvaliadorPadId($model->id)->delete();
foreach($request->dimensoes_multiples as $dimensao) {
$avaliadorPadDimensao = new AvaliadorPadDimensao();
$avaliadorPadDimensao->avaliador_pad_id = $model->id;
$avaliadorPadDimensao->dimensao = $dimensao;
$avaliadorPadDimensao->save();
}
return redirect()
->route('pad_edit', ['id' => $request->pad_id])
->with('success', sprintf('Avaliador atualizado no PAD(%s) com sucesso!', $pad->nome));
}
}
public function actionDelete($id)
{
$model = AvaliadorPad::find($id);
$pad = $model->pad;
if($model->delete())
{
return redirect()
->route('pad_edit', ['id' => $pad->id])
->with('success', sprintf('Avaliador removido do PAD(%s) com sucesso!', $pad->nome));
}
return redirect()
->route('pad_edit', ['id' => $model->pad_id])
->with('fail', sprintf('Erro ao tentar remover Avaliador! PAD(%s)!', $pad->nome));
}
public function actionCreate($pad_id)
......@@ -66,8 +130,22 @@ class AvaliadorPadController extends Controller
}
public function actionEdit($id)
{
{
$model = AvaliadorPad::find($id);
$model->dimensoes_multiples = $model->dimensions->pluck('dimensao')->toArray();
$pad = Pad::find($model->pad_id);
$status = Status::listStatus();
$users = User::all();
$dimensoes = Dimensao::listDimensao();
return view('avaliator-pad.update', [
'pad' => $pad,
'model' => $model,
'users' => $users,
'status' => $status,
'dimensoes' => $dimensoes,
]);
}
public function ajaxValidation(Request $request)
......
......@@ -124,16 +124,16 @@ class CursoController extends Controller
$cursos = Curso::where([]);
if($campus_id) {
$cursos = $cursos->whereId($campus_id);
if($q) {
$cursos = $cursos->where('name', 'like', '%'.$q.'%');
}
if($id) {
$cursos = $cursos->whereId($id);
}
if($q) {
$cursos = $cursos->where('name', 'like', '%'.$q.'%');
if($campus_id) {
$cursos = $cursos->whereCampusId($campus_id);
}
$cursos = $cursos->get();
......
......@@ -207,10 +207,17 @@ class PadController extends Controller
{
$menu = Menu::PADS;
$pad = PAD::find($id);
$userPads = $pad->userPads;
$userPads = $pad->userPads()->paginate(50);
$avaliatorsPads = $pad->avaliadorPads;
$status = Constants::listStatus();
//Se a página atual for 1 remova o previous
//Se a página atual for lastPage remova o next
//Se houver um page="" no query selecionar a opção de professor por padrão [list]
//Criar variavel para retornar o active tab selecionado
// dd($pad->id);
// dd($userPads, $userPads->links());
return view('pad.admin.edit', [
'pad' => $pad,
......
......@@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use App\Imports\UsersImport;
use App\Models\AvaliadorPad;
use App\Models\Pad;
use App\Models\User;
use App\Models\UserType;
use App\Models\Util\MaskHelper;
......@@ -243,6 +245,7 @@ class UserController extends Controller
// QueryParams
$q = $request->query('q');
$id = $request->query('id');
$remove_avaliators_by_pad_id = $request->query('remove_avaliators_by_pad_id');
$user = User::where([]);
......@@ -254,6 +257,13 @@ class UserController extends Controller
$user = $user->where('name', 'like', '%'.$q.'%');
}
if($remove_avaliators_by_pad_id) {
$avaliadorPad = AvaliadorPad::wherePadId($remove_avaliators_by_pad_id);
$avaliadorPadIds = $avaliadorPad->get()->pluck('user_id')->toArray();
$user = $user->whereNotIn('id', $avaliadorPadIds);
}
$users = $user->get();
$array =
......
......@@ -28,16 +28,12 @@ class AvaliadorPad extends Model
return $this->belongsTo(PAD::class);
}
public static function find() {
return new UserPadQuery(get_called_class());
}
public function user() {
return $this->belongsTo(User::class);
}
public function dimensions() {
return $this->hasMany(Dimension::class);
return $this->hasMany(AvaliadorPadDimensao::class);
}
public static function rules()
......
......@@ -2,20 +2,23 @@
namespace App\Models;
use App\Models\Util\Dimensao;
use Illuminate\Database\Eloquent\Model;
class AvaliadorPadDimensao extends Model
{
protected $table = 'avaliador_pad_dimensao';
protected $fillable = ['id', 'avaliador_pad_id', 'dimensao'];
protected $dates = ['deleted_at'];
protected $dates = ['created_at', 'updated_at', 'deleted_at'];
public function avaliadorPad() {
return $this->belongsTo(AvaliadorPad::class);
}
public function __toString()
{
return Dimensao::listDimensao($this->dimensao);
}
}
......@@ -6,7 +6,7 @@ use App\Models\Util\Status;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\AvaliadorPad;
class Pad extends Model
{
......@@ -55,7 +55,7 @@ class Pad extends Model
* @return Collection<AvaliadorPad>
*/
public function avaliadorPads(){
return $this->hasMany(AvaliadorPad::class);
return $this->hasMany(AvaliadorPad::class, 'pad_id');
}
}
......@@ -43,6 +43,10 @@ class User extends Authenticatable
protected $dates = ['deleted_at'];
public function statusAsText() {
return $this->status !== null ? Status::listStatus($this->status) : '-';
}
public static function validator(array $attributes, $id = null, $ignoreStatus = true)
{
$rules = [
......@@ -142,23 +146,23 @@ class User extends Authenticatable
// }
/**
* Get Curso with curso.id = user.curso_id
* Get Curso with campus.id = user.campus_id
*
* @return Curso|null
* @return Campus|null
*/
public function curso()
public function campus()
{
return $this->belongsTo(Curso::class);
return $this->belongsTo(Campus::class);
}
/**
* Get Unidade with unidade.id = user.unidade_id
* Get Curso with curso.id = user.curso_id
*
* @return Unidade|null
* @return Curso|null
*/
public function unidade()
public function curso()
{
return $this->belongsTo(Unidade::class);
return $this->belongsTo(Curso::class);
}
/**
......
......@@ -17,6 +17,7 @@ class CreateAvaliadorPadDimensaoTable extends Migration
$table->id();
$table->foreignId('avaliador_pad_id')->constrained('avaliador_pad');
$table->tinyInteger('dimensao');
$table->timestamps();
$table->softDeletes();
});
}
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AlterAvaliadorPadDimensaoAddTimestampColumnsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('avaliador_pad_dimensao', function (Blueprint $table) {
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('avaliador_pad_dimensao', function (Blueprint $table) {
$table->dropColumn(['created_at', 'updated_at']);
});
}
}
......@@ -14,9 +14,9 @@ class DatabaseSeeder extends Seeder
public function run()
{
$this->call([
// UnidadeSeeder::class,
// CampusSeeder::class,
// CursoSeeder::class
UnidadeSeeder::class,
CampusSeeder::class,
CursoSeeder::class
]);
}
}
......@@ -32,4 +32,4 @@
'form_id' => 'form-user_pad',
'form_type' => 'create_and_update',
'route' => route('avaliador-pad_ajax_validation'),
])
\ No newline at end of file
])
......@@ -67,6 +67,10 @@
</div>
@php
$dimensoes_multiples = json_encode($model->dimensoes_multiples);
@endphp
<script type="text/javascript">
$('#user_id').select2(
......@@ -75,6 +79,7 @@
allowClear: true,
ajax: {
url: '{{ route("user_search") }}',
data: {remove_avaliators_by_pad_id : {{$pad->id}}},
dataType: 'json'
},
dropdownParent: $('#modal')
......@@ -85,4 +90,6 @@
dropdownParent: $('#modal')
});
$('#dimensoes_multiples').val({!! $dimensoes_multiples !!}).trigger('change')
</script>
\ No newline at end of file
<div class="mb-3">
<h3 class="h3"> Atualizar Avaliador (PAD) </h3>
</div>
<form id="form-user_pad" action="{{ route('avaliator-pad_update', ['id' => $model->id]) }}" method="post">
@csrf
@method('POST')
@include('avaliator-pad.form', [
'pad' => $pad,
'model' => $model,
'users' => $users,
'status' => $status,
])
<div class="mt-1 text-end">
<div class="modal-footer">
@include('components.buttons.btn-save', [
'id' => 'btn_submit',
'content' => 'Atualizar',
])
@include('components.buttons.btn-close_modal')
</div>
</div>
</form>
@include('pad.components.scripts.ajaxValidationById', [
'btn_submit_id' => 'btn_submit',
'form_id' => 'form-user_pad',
'form_type' => 'create_and_update',
'route' => route('avaliador-pad_ajax_validation'),
])
......@@ -110,10 +110,13 @@
<div class="border rounded px-2">
{{-- Create Professor --}}
<div class="text-end my-2">
<button type="button" class="btn btn-success user-pad-create"> Cadastrar Professor </button>
</div>
{{-- Create Professor --}}
{{-- Table --}}
<table id="user_pad-table" class="table table-hover">
<thead>
<tr>
......@@ -134,6 +137,21 @@
@endforeach
</tbody>
</table>
{{-- Table --}}
{{-- Pagination --}}
<ul class="pagination justify-content-end">
</ul>
<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>
{{-- Pagination --}}
</div>
......@@ -163,11 +181,26 @@
<td>{{ $avaliatorPad->user->name }}</td>
<td>{{ $avaliatorPad->pad->nome }}</td>
<td>
{{-- @foreach($avaliatorPad->dimensions as $dimension)
<span class="badge bg-primary">{{ $dimension->nome }}</span>
@endforeach --}}
@foreach($avaliatorPad->dimensions as $dimension)
<span class="badge bg-primary">{{ $dimension }}</span>
@endforeach
</td>
<td>
<div class="btn-group" role="group">
<div class="me-1">
@include('components.buttons.btn-edit-task', [
'btn_class' => 'btn-edit_avaliador_pad',
'btn_id' => $avaliatorPad->id,
])
</div>
<div class="me-1">
@include('components.buttons.btn-delete', [
'id' => $avaliatorPad->id,
'route' => route('avaliador-pad_delete', ['id' => $avaliatorPad->id])
])
</div>
</div>
</td>
<td>{{ $avaliatorPad->dimensao }}</td>
</tr>
@endforeach
</tbody>
......@@ -178,12 +211,8 @@
</div>
</div>
@include('components.modal', ['size' => 'modal-lg'])
@endsection
......@@ -201,4 +230,10 @@
'route' => route('avaliator-pad_create', ['pad_id' => $pad->id]),
'btn_class' => 'avaliator-pad-create',
])
@include('pad.components.scripts.dimensao.ensino.show_modal', [
'modal_id' => 'modal',
'route' => route('avaliador-pad_edit'),
'btn_class' => 'btn-edit_avaliador_pad',
])
@endsection
......@@ -85,6 +85,9 @@
<div class="form-group">
<label class="form-label" for="campus_id"> Campus </label>
<select class="form-control" name="campus_id" id="campus_id">
@if($model->campus_id)
<option value="{{$model->campus_id}}" selected> {{$model->campus}} </option>
@endif
</select>
</div>
</div>
......@@ -94,7 +97,11 @@
<div class="mb-4 col-6">
<div class="form-group">
<label class="form-label" for="curso_id"> Curso </label>
<select class="form-control" name="curso_id" id="curso_id"> </select>
<select class="form-control" name="curso_id" id="curso_id">
@if($model->curso_id)
<option value="{{$model->curso_id}}" selected> {{$model->curso}} </option>
@endif
</select>
</div>
</div>
@endif
......
......@@ -34,8 +34,11 @@
<table class="table table-hover mt-4">
<thead>
<tr>
<th class="w-50" scole="col">Nome</th>
<th class="w-50" scole="col">Email</th>
<th scole="col">Nome</th>
<th scole="col">Email</th>
<th scole="col">Status</th>
<th scole="col">Campus</th>
<th scole="col">Curso</th>
<th scole="col">Opções</th>
</tr>
</thead>
......@@ -44,6 +47,9 @@
<tr>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>{{ $user->statusAsText() }}</td>
<td>{{ $user->campus }}</td>
<td>{{ $user->curso }}</td>
<td>
<div class="btn-group" role="group">
<div class="me-1">
......
......@@ -72,13 +72,13 @@
allowClear: true,
ajax: {
url: '{{ route("curso_search") }}',
dataType: 'json',
data: function(params) {
return {
q: params.terms,
campus_id: $('#campus_id').val(),
q: params.term,
campus_id: $('#campus_id').val()
}
},
dataType: 'json'
},
});
......
......@@ -6,9 +6,9 @@ use Illuminate\Support\Facades\Route;
Route::prefix('/avaliator-pad')->group(function() {
Route::get('/create/{pad_id?}', [AvaliadorPadController::class, 'actionCreate'])->name('avaliator-pad_create');
Route::post('/store', [AvaliadorPadController::class, 'actionStore'])->name('avaliator-pad_store');
// Route::get('/edit/{id?}', [UserPadController::class, 'actionEdit'])->name('user-pad_edit');
// Route::post('/update/{id}', [UserPadController::class, 'actionUpdate'])->name('user-pad_update');
// Route::delete('/delete/{id}', [UserPadController::class, 'actionDelete'])->name('user-pad_delete');
Route::get('/edit/{id?}', [AvaliadorPadController::class, 'actionEdit'])->name('avaliador-pad_edit');
Route::post('/update/{id}', [AvaliadorPadController::class, 'actionUpdate'])->name('avaliator-pad_update');
Route::delete('/delete/{id}', [AvaliadorPadController::class, 'actionDelete'])->name('avaliador-pad_delete');
Route::post('/validate', [AvaliadorPadController::class, 'ajaxValidation'])->name('avaliador-pad_ajax_validation');
});
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