Commit d562618b authored by alissonalbuquerque's avatar alissonalbuquerque
Browse files

Merge branch 'feat_task_time'

parents 5e8018e0 230703eb
<?php
namespace App\Http\Controllers;
use App\Models\Util\MenuItemsAvaliador;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AvaliadorTaskTimeController extends Controller
{
public function index()
{
$menu = MenuItemsAvaliador::TASK_TIME;
$user = Auth::user();
// $userPads =
// AvaliadorPad::where('user_id', '=', $user->id)
// ->join('pad', 'avaliador_pad.pad_id', '=', 'pad.id')
// ->get();
return view('avaliador-task-time.index', ['index_menu' => $menu]);
}
}
...@@ -81,7 +81,7 @@ class PadController extends Controller ...@@ -81,7 +81,7 @@ class PadController extends Controller
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function view($id) public function view($id)
{ {
$ensinoTotalHoras = $ensinoTotalHoras =
EnsinoAtendimentoDiscente::whereUserPadId($id)->sum('ch_semanal') EnsinoAtendimentoDiscente::whereUserPadId($id)->sum('ch_semanal')
+ EnsinoAula::whereUserPadId($id)->sum('ch_semanal') + EnsinoAula::whereUserPadId($id)->sum('ch_semanal')
......
<?php
namespace App\Http\Controllers;
use App\Models\Tabelas\Ensino\EnsinoAtendimentoDiscente;
use App\Models\Tabelas\Ensino\EnsinoCoordenacaoRegencia;
use App\Models\Tabelas\Ensino\EnsinoOrientacao;
use App\Models\Tabelas\Ensino\EnsinoParticipacao;
use App\Models\Tabelas\Ensino\EnsinoSupervisao;
use App\Models\Tabelas\Ensino\EnsinoAula;
use App\Models\Tabelas\Ensino\EnsinoMembroDocente;
use App\Models\Tabelas\Ensino\EnsinoOutros;
use App\Models\Tabelas\Ensino\EnsinoProjeto;
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\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\GestaoMembroCamaras;
use App\Models\Tabelas\Gestao\GestaoMembroConselho;
use App\Models\Tabelas\Gestao\GestaoOutros;
use App\Models\Tabelas\Gestao\GestaoCoordenacaoProgramaInstitucional;
use App\Models\Tabelas\Gestao\GestaoMembroComissao;
use App\Models\Tabelas\Gestao\GestaoMembroTitularConselho;
use App\Models\Tabelas\Gestao\GestaoRepresentanteUnidadeEducacao;
use App\Models\TaskTime;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Response;
class TaskController extends Controller
{
public function search(Request $request) {
$q = $request->query('q');
$user_pad_id = $request->query('user_pad_id');
//ENSINO
//---------------------------------------------
$type_ensino_aula = TaskTime::TYPE_ENSINO_AULA;
$list_ensino_aula =
EnsinoAula::whereUserPadId($user_pad_id)->get()->map(function(EnsinoAula $model) use ($type_ensino_aula) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_aula}",
'text' => $model->componente_curricular
];
});
$type_ensino_coordenacao_regencia = TaskTime::TYPE_ENSINO_COORDENACAO_REGENCIA;
$list_ensino_coordenacao_regencia =
EnsinoCoordenacaoRegencia::whereUserPadId($user_pad_id)->get()->map(function(EnsinoCoordenacaoRegencia $model) use ($type_ensino_coordenacao_regencia) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_coordenacao_regencia}",
'text' => $model->componente_curricular
];
});
$type_ensino_orientacao = TaskTime::TYPE_ENSINO_ORIENTACAO;
$list_ensino_orientacao =
EnsinoOrientacao::whereUserPadId($user_pad_id)->get()->map(function(EnsinoOrientacao $model) use ($type_ensino_orientacao) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_orientacao}",
'text' => $model->atividade
];
});
$type_ensino_supervisao = TaskTime::TYPE_ENSINO_SUPERVISAO;
$list_ensino_supervisao =
EnsinoSupervisao::whereUserPadId($user_pad_id)->get()->map(function(EnsinoSupervisao $model) use ($type_ensino_supervisao) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_supervisao}",
'text' => $model->atividade
];
});
$type_ensino_atendimento_discente = TaskTime::TYPE_ENSINO_ATENDIMENTO_DISCENTE;
$list_ensino_atendimento_discente =
EnsinoAtendimentoDiscente::whereUserPadId($user_pad_id)->get()->map(function(EnsinoAtendimentoDiscente $model) use ($type_ensino_atendimento_discente) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_atendimento_discente}",
'text' => $model->componente_curricular
];
});
$type_ensino_projeto = TaskTime::TYPE_ENSINO_PROJETO;
$list_ensino_projeto =
EnsinoProjeto::whereUserPadId($user_pad_id)->get()->map(function(EnsinoProjeto $model) use ($type_ensino_projeto) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_projeto}",
'text' => $model->componente_curricular
];
});
$type_ensino_participacao = TaskTime::TYPE_ENSINO_PARTICIPACAO;
$list_ensino_participacao =
EnsinoParticipacao::whereUserPadId($user_pad_id)->get()->map(function(EnsinoParticipacao $model) use ($type_ensino_participacao) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_participacao}",
'text' => $model->curso
];
});
$type_ensino_membro_docente = TaskTime::TYPE_ENSINO_MEMBRO_DOCENTE;
$list_ensino_membro_docente =
EnsinoMembroDocente::whereUserPadId($user_pad_id)->get()->map(function(EnsinoMembroDocente $model) use ($type_ensino_membro_docente) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_membro_docente}",
'text' => $model->nucleo
];
});
$type_ensino_outros = TaskTime::TYPE_ENSINO_OUTROS;
$list_ensino_outros =
EnsinoOutros::whereUserPadId($user_pad_id)->get()->map(function(EnsinoOutros $model) use ($type_ensino_outros) {
return [
'id' => "id_{$model->id}|type_{$type_ensino_outros}",
'text' => $model->atividade
];
});
//---------------------------------------------
//PESQUISA
//---------------------------------------------
$type_pesquisa_coordenacao = TaskTime::TYPE_PESQUISA_COORDENACAO;
$list_pesquisa_coordenacao =
PesquisaCoordenacao::whereUserPadId($user_pad_id)->get()->map(function(PesquisaCoordenacao $model) use ($type_pesquisa_coordenacao) {
return [
'id' => "id_{$model->id}|type_{$type_pesquisa_coordenacao}",
'text' => $model->titulo_projeto
];
});
$type_pesquisa_orientacao = TaskTime::TYPE_PESQUISA_ORIENTACAO;
$list_pesquisa_orientacao =
PesquisaOrientacao::whereUserPadId($user_pad_id)->get()->map(function(PesquisaOrientacao $model) use ($type_pesquisa_orientacao) {
return [
'id' => "id_{$model->id}|type_{$type_pesquisa_orientacao}",
'text' => $model->titulo_projeto
];
});
$type_pesquisa_lideranca = TaskTime::TYPE_PESQUISA_LIDERANCA;
$list_pesquisa_lideranca =
PesquisaLideranca::whereUserPadId($user_pad_id)->get()->map(function(PesquisaLideranca $model) use ($type_pesquisa_lideranca) {
return [
'id' => "id_{$model->id}|type_{$type_pesquisa_lideranca}",
'text' => $model->grupo_pesquisa
];
});
$type_pesquisa_outros = TaskTime::TYPE_PESQUISA_OUTROS;
$list_pesquisa_outros =
PesquisaOutros::whereUserPadId($user_pad_id)->get()->map(function(PesquisaOutros $model) use ($type_pesquisa_outros) {
return [
'id' => "id_{$model->id}|type_{$type_pesquisa_outros}",
'text' => $model->atividade
];
});
//---------------------------------------------
//EXTENSÃO
//---------------------------------------------
$type_extensao_coordenacao = TaskTime::TYPE_EXTENSAO_COORDENACAO;
$list_extensao_coordenacao =
ExtensaoCoordenacao::whereUserPadId($user_pad_id)->get()->map(function(ExtensaoCoordenacao $model) use ($type_extensao_coordenacao) {
return [
'id' => "id_{$model->id}|type_{$type_extensao_coordenacao}",
'text' => $model->titulo_projeto
];
});
$type_extensao_orientacao = TaskTime::TYPE_EXTENSAO_ORIENTACAO;
$list_extensao_orientacao =
ExtensaoOrientacao::whereUserPadId($user_pad_id)->get()->map(function(ExtensaoOrientacao $model) use ($type_extensao_orientacao) {
return [
'id' => "id_{$model->id}|type_{$type_extensao_orientacao}",
'text' => $model->titulo_projeto
];
});
$type_extensao_outros = TaskTime::TYPE_EXTENSAO_OUTROS;
$list_extensao_outros =
ExtensaoOutros::whereUserPadId($user_pad_id)->get()->map(function(ExtensaoOutros $model) use ($type_extensao_outros) {
return [
'id' => "id_{$model->id}|type_{$type_extensao_outros}",
'text' => $model->atividade
];
});
//---------------------------------------------
//GESTÃO
//---------------------------------------------
$type_gestao_coordenacao_laboratorios_didaticos = TaskTime::TYPE_GESTAO_COORDENACAO_LABORATORIOS_DIDATICOS;
$list_gestao_coordenacao_laboratorios_didaticos =
GestaoCoordenacaoLaboratoriosDidaticos::whereUserPadId($user_pad_id)->get()->map(function(GestaoCoordenacaoLaboratoriosDidaticos $model) use ($type_gestao_coordenacao_laboratorios_didaticos) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_coordenacao_laboratorios_didaticos}",
'text' => $model->nome
];
});
$type_gestao_membro_conselho = TaskTime::TYPE_GESTAO_MEMBRO_CONSELHO;
$list_gestao_membro_conselho =
GestaoMembroConselho::whereUserPadId($user_pad_id)->get()->map(function(GestaoMembroConselho $model) use ($type_gestao_membro_conselho) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_membro_conselho}",
'text' => $model->nome
];
});
$type_gestao_coordenacao_programa_institucional = TaskTime::TYPE_GESTAO_COORDENACAO_PROGRAMA_INSTITUCIONAL;
$list_gestao_coordenacao_programa_institucional =
GestaoCoordenacaoProgramaInstitucional::whereUserPadId($user_pad_id)->get()->map(function(GestaoCoordenacaoProgramaInstitucional $model) use ($type_gestao_coordenacao_programa_institucional) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_coordenacao_programa_institucional}",
'text' => $model->nome
];
});
$type_gestao_membro_titular_conselho = TaskTime::TYPE_GESTAO_MEMBRO_TITULAR_CONSELHO;
$list_gestao_membro_titular_conselho =
GestaoMembroTitularConselho::whereUserPadId($user_pad_id)->get()->map(function(GestaoMembroTitularConselho $model) use ($type_gestao_membro_titular_conselho) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_membro_titular_conselho}",
'text' => $model->nome
];
});
$type_gestao_membro_camaras = TaskTime::TYPE_GESTAO_MEMBRO_CAMARAS;
$list_gestao_membro_camaras =
GestaoMembroCamaras::whereUserPadId($user_pad_id)->get()->map(function(GestaoMembroCamaras $model) use ($type_gestao_membro_camaras) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_membro_camaras}",
'text' => $model->nome
];
});
$type_gestao_representante_unidade_educacao = TaskTime::TYPE_GESTAO_REPRESENTANTE_UNIDADE_EDUCACAO;
$list_gestao_representante_unidade_educacao =
GestaoRepresentanteUnidadeEducacao::whereUserPadId($user_pad_id)->get()->map(function(GestaoRepresentanteUnidadeEducacao $model) use ($type_gestao_representante_unidade_educacao) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_representante_unidade_educacao}",
'text' => $model->nome
];
});
$type_gestao_membro_comissao = TaskTime::TYPE_GESTAO_MEMBRO_COMISSAO;
$list_gestao_membro_comissao =
GestaoMembroComissao::whereUserPadId($user_pad_id)->get()->map(function(GestaoMembroComissao $model) use ($type_gestao_membro_comissao) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_membro_comissao}",
'text' => $model->nome
];
});
$type_gestao_outros = TaskTime::TYPE_GESTAO_OUTROS;
$list_gestao_outros =
GestaoOutros::whereUserPadId($user_pad_id)->get()->map(function(GestaoOutros $model) use ($type_gestao_outros) {
return [
'id' => "id_{$model->id}|type_{$type_gestao_outros}",
'text' => $model->atividade
];
});
//---------------------------------------------
$dimension_collections = [
$list_ensino_aula,
$list_ensino_coordenacao_regencia,
$list_ensino_orientacao,
$list_ensino_supervisao,
$list_ensino_atendimento_discente,
$list_ensino_projeto,
$list_ensino_participacao,
$list_ensino_membro_docente,
$list_ensino_outros,
$list_pesquisa_coordenacao,
$list_pesquisa_orientacao,
$list_pesquisa_lideranca,
$list_pesquisa_outros,
$list_extensao_coordenacao,
$list_extensao_orientacao,
$list_extensao_outros,
$list_gestao_coordenacao_laboratorios_didaticos,
$list_gestao_membro_conselho,
$list_gestao_coordenacao_programa_institucional,
$list_gestao_membro_titular_conselho,
$list_gestao_membro_camaras,
$list_gestao_representante_unidade_educacao,
$list_gestao_membro_comissao,
$list_gestao_outros,
];
$combined_collections = collect([]);
$list_tasks =
collect($dimension_collections)
->reduce(
function ($carry, $collection) {
return $carry->concat($collection);
},
$combined_collections
);
$results = ['results' => $list_tasks];
return Response::json($results);
}
public function searchById(Request $request) {
dd($request->all());
}
}
...@@ -2,31 +2,118 @@ ...@@ -2,31 +2,118 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Models\TaskTime;
use App\Models\Util\Menu;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Validator;
class TaskTimeController extends Controller class TaskTimeController extends Controller
{ {
public function index() { public function index($user_pad_id)
{
$menu = Menu::PADS;
return view('task-time.index', [
'menu' => $menu,
'user_pad_id' => $user_pad_id
]);
} }
public function createView() { public function create($user_pad_id) {
return view('task-time.create', [
'user_pad_id' => $user_pad_id]
);
}
public function save(Request $request) {
$model = new TaskTime($request->all());
if($model->save()) {
return redirect()
->route('TaskTimeIndex', ['user_pad_id' => $model->user_pad_id])
->with('success', 'Cadastro realizado com sucesso!');
}
}
public function edit($id) {
$model = TaskTime::find($id);
return view('task-time.update', [
'model' => $model
]);
} }
public function create() { 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 updateView() { 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 update() { 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 delete() { 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]);
} }
} }
This diff is collapsed.
...@@ -8,4 +8,5 @@ class MenuItemsAvaliador ...@@ -8,4 +8,5 @@ class MenuItemsAvaliador
const HOME = 0; const HOME = 0;
const PADs = 1; const PADs = 1;
const REPORT = 2; const REPORT = 2;
const TASK_TIME = 3;
} }
<?php
namespace App\Rules;
use App\Models\TaskTime;
use DateTime;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Database\Eloquent\Collection;
class ValidationLimitTime implements Rule
{
/** @var string|integer */
protected $id;
/** @var string|integer */
protected $user_pad_id;
/** @var string|integer */
protected $tarefa_id;
/** @var string|integer */
protected $type;
/** @var string|date */
protected $start_time;
/** @var string|date */
protected $end_time;
/** @var string */
protected $limit_hours;
/** @var DateInterval */
protected $outLineTime;
/** @var mixed */
protected $task;
/** @var TaskTime */
protected $taskTime;
/** @var Collection */
protected $taskTimes;
/**
* Create a new rule instance.
*
* @param array $attributes
* @return void
*
* Example
* $attributes = ['user_pad_id' => $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;
}
}
<div class="card mx-2" style="width: 12rem;">
<div class="card-body">
<h3 class="text-center"> <i class="bi bi-clock-fill"></i> </h3>
<h5 class="text-center"> PAD: {{ $userPad->pad->nome }} </h4>
<h5 class="text-center"> Status: {{ $userPad->pad->statusAsString() }} </h4>
<a class="stretched-link" href="{{ route('pad_relatório', ['id' => $userPad->id]) }}"></a>
</div>
</div>
@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')
<div class="tab-content">
<div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab">
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
<h1 class="h2">Horários</h1>
</div>
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3">
<h3> <i class="bi bi-clock-fill"></i> Horários Disponíveis </h3>
</div>
<div class="d-flex">
{{-- @foreach($userPads as $userPad)
@include('avaliador-task-time.card_horario', ['userPad' => $userPad])
@endforeach --}}
</div>
</div>
</div>
@endsection
\ No newline at end of file
{{--
@include('components.buttons.btn-delete-by-alert', [
'_id' => '',
'_class' => '',
'_route' => route('')
])
--}}
<!-- Button trigger alert -->
<button type="button" id="{{ $_id }}" class="btn btn-danger {{$_class}}">
<i class="bi bi-trash"></i>
</button>
<script>
$('.{{$_class}}').click(function(e)
{
const _id = $(this).attr('id')
const is_delete = confirm('Você tem certeza que deseja excluir esse item?')
if(is_delete) {
$('#form-delete-'+_id).submit()
}
})
</script>
\ No newline at end of file
{{--
@include('components.buttons.btn-show-modal', [
'_id' => '',
'_icon' => '',
'_class' => '',
'_content' => '',
'_target_class' => '',
])
--}}
@php
$_id = !isset($_id) ? '' : $_id;
$_icon = !isset($_icon) ? '' : "bi bi-{$_icon}";
$_class = !isset($_class) ? "btn {$_target_class}" : "btn {$_class} {$_target_class}";
$_content = !isset($_content) ? '' : $_content;
@endphp
<div class="btn-show-modal">
<button type="button" id="{{$_id}}" class="{{$_class}}">
<i class="{{$_icon}}"></i> {{$_content}}
</button>
</div>
\ No newline at end of file
<div class="card mx-2" style="width: 12rem;"> <div class="card mx-2" style="width: 12rem;">
<div class="card-body"> <div class="card-body">
<h3 class="text-center"> <i class="bi bi-file-bar-graph-fill"></i> </h3> <h3 class="text-center"> <i class="bi bi-file-earmark-word-fill"></i> </h3>
<h5 class="text-center"> PDA: {{ $userPad->pad->nome }} </h4> <h5 class="text-center"> PAD: {{ $userPad->pad->nome }} </h4>
<h5 class="text-center"> Status: {{ $userPad->pad->statusAsString() }} </h4> <h5 class="text-center"> Status: {{ $userPad->pad->statusAsString() }} </h4>
<a class="stretched-link" href="{{ route('pad_relatório', ['id' => $userPad->id]) }}"></a> <a class="stretched-link" href="{{ route('pad_relatório', ['id' => $userPad->id]) }}"></a>
</div> </div>
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
$home_active = $index_menu === MenuItemsAvaliador::HOME ? 'active' : ''; $home_active = $index_menu === MenuItemsAvaliador::HOME ? 'active' : '';
$report_active = $index_menu === MenuItemsAvaliador::REPORT ? 'active' : ''; $report_active = $index_menu === MenuItemsAvaliador::REPORT ? 'active' : '';
$task_time_active = $index_menu === MenuItemsAvaliador::TASK_TIME ? 'active' : '';
@endphp @endphp
<!-- SidebarMenu : Vertical Options --> <!-- SidebarMenu : Vertical Options -->
...@@ -19,10 +20,12 @@ ...@@ -19,10 +20,12 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="{{ route('avaliador_relatorio') }}" class="custom-nav-link {{ $report_active }}"> <a href="{{ route('avaliador_relatorio') }}" class="custom-nav-link {{ $report_active }}">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-bar-graph-fill" viewBox="0 0 16 16"> <i class="bi bi-file-earmark-word-fill"></i> Relatórios
<path d="M12 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zm-2 11.5v-6a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-.5.5h-1a.5.5 0 0 1-.5-.5zm-2.5.5a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-.5.5h-1zm-3 0a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h1a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-1z"/>
</svg>
Relatórios
</a> </a>
</li> </li>
{{-- <li class="nav-item">
<a href="{{ route('avaliador_task_time_index') }}" class="custom-nav-link {{ $task_time_active }}">
<i class="bi bi-clock-fill"></i> Horários
</a>
</li> --}}
</ul> </ul>
\ No newline at end of file
...@@ -177,9 +177,9 @@ ...@@ -177,9 +177,9 @@
$yes = YesOrNo::YES; $yes = YesOrNo::YES;
$no = YesOrNo::NO; $no = YesOrNo::NO;
@endphp @endphp
<script type="text/javascript"> <script type="text/javascript">
/** Interpolação: PHP => JS*/ /** Interpolação: PHP => JS*/
const yes = "{{ $yes }}" const yes = "{{ $yes }}"
const no = "{{ $no }}" const no = "{{ $no }}"
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
]) ])
--}} --}}
<script type="text/javascript"> <script type="text/javascript">
$('.{{ $btn_class }}').click(function(e) { $('.{{ $btn_class }}').click(function(e) {
......
...@@ -71,6 +71,14 @@ ...@@ -71,6 +71,14 @@
</div> </div>
</div> </div>
<div class="card mx-2" style="width: 10rem;">
<div class="card-body">
<h2 class="text-center"> <i class="bi bi-clock"></i> </h2>
<h3 class="text-center">Horário</h3>
<a class="stretched-link btn-pad-horario" href="{{ route('TaskTimeIndex', ['user_pad_id' => $user_pad_id]) }}"></a>
</div>
</div>
<div class="card mx-2" style="width: 10rem;"> <div class="card mx-2" style="width: 10rem;">
<div class="card-body"> <div class="card-body">
<h2 class="text-center"> <i class="bi bi-exclamation-circle-fill"></i> </h2> <h2 class="text-center"> <i class="bi bi-exclamation-circle-fill"></i> </h2>
......
@php
use App\Models\TaskTime;
@endphp
<form id="task-time-form" action="{{ route('TaskTimeSave') }}" method="post">
@csrf
@method('POST')
<div class="row">
<input type="hidden" id="user_pad_id" name="user_pad_id" value="{{ $user_pad_id }}">
<input type="hidden" id="tarefa_id" name="tarefa_id" value="">
<input type="hidden" id="type" name="type" value="">
<input type="hidden" id="id" name="id" value="">
<div class="mb-4 col-sm-2">
<div class="">
<label class="form-label" for="cod_atividade">Cód. Atividade</label>
<input class="form-control @error('cod_atividade') is-invalid @enderror ajax-errors" type="text" name="cod_atividade" id="cod_atividade" readonly>
</div>
@include('components.divs.errors', [
'field' => 'cod_atividade_create'
])
</div>
<div class="col-sm-10">
<div class="mt-3">
<label for="weekday">Dia da Semana</label>
<select name="weekday" id="weekday" class="form-select @error('weekday') is-invalid @enderror ajax-errors">
@foreach(TaskTime::listWeekDays() as $id => $text)
<option value="{{$id}}">{{$text}}</option>
@endforeach
</select>
@include('components.divs.errors', [
'field' => 'weekday_create'
])
</div>
</div>
<div class="col-sm-12">
<div class="">
<label for="slct_tarefa_id">Atividade</label>
<select name="slct_tarefa_id" id="slct_tarefa_id" class="form-select @error('slct_tarefa_id') is-invalid @enderror ajax-errors">
</select>
</div>
@include('components.divs.errors', [
'field' => 'slct_tarefa_id_create'
])
</div>
<div class="col-sm-6">
<div class="mt-3">
<label class="form-label" for="start_time">Horário Inicial</label>
<input type="time" min="07:30" max="21:15" name="start_time" id="start_time" class="form-control @error('start_time') is-invalid @enderror ajax-errors" >
@include('components.divs.errors', [
'field' => 'start_time_create',
])
</div>
</div>
<div class="col-sm-6">
<div class="mt-3">
<label class="form-label" for="end_time">Horário Final</label>
<input type="time" min="07:30" max="21:15" name="end_time" id="end_time" class="form-control @error('end_time') is-invalid @enderror ajax-errors" >
@include('components.divs.errors', [
'field' => 'end_time_create',
])
</div>
</div>
</div>
<div class="mt-1 text-end">
<div class="modal-footer">
@include('components.buttons.btn-save', [
'id' => 'btn_submit',
'content' => 'Cadastrar',
])
@include('components.buttons.btn-close_modal')
</div>
</div>
</form>
@include('pad.components.scripts.ajaxValidation', [
'btn_submit_id' => 'btn_submit',
'form_id' => 'task-time-form',
'route' => route('TaskTimeValidation'),
'form_type' => 'create',
])
<script type="text/javascript">
$('#weekday').select2(
{
allowClear: true,
placeholder: 'Dia da Semana',
dropdownParent: $('#modal')
})
$('#slct_tarefa_id').select2(
{
allowClear: true,
placeholder: 'Tarefa',
language: {
noResults: function() {
return "Resultados não Encontrados";
}
},
ajax: {
url: '{{ route("TaskSearch") }}',
data: function(params) {
return {
q: params.term,
user_pad_id : {{$user_pad_id}}
}
},
dataType: 'json'
},
dropdownParent: $('#modal')
})
$('#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!');
}
});
}
})
</script>
@extends('layouts.main')
@section('title', 'Início')
@section('header')
@include('layouts.header', [
'user' => Auth::user(),
])
@endsection
@section('nav')
@include('layouts.navigation', ['menu' => $menu])
@endsection
@section('body')
<div class="container">
@include('components.alerts')
@include('components.buttons.btn-show-modal', [
'_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
<div class="my-4">
<table class="table table-hover">
<thead>
<tr>
@foreach(TaskTime::listWeekDaysTable() as $key => $weekday)
<th scope="col">{{$weekday}}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach($calendar as $rowHour)
<tr>
@foreach ($rowHour as $model)
@if(gettype($model) == 'string')
<th scope="col">{{ $model }}</th>
@endif
@if(gettype($model) == 'object')
<td>
<a href="#modal" class="btn btn-edit_task" id="{{ $model->id }}">
{{ "{$model->getCode()} : {$model->getName()}" }}
</a>
</td>
@endif
@endforeach
</tr>
@endforeach
</tbody>
</table>
</div>
@include('components.modal', ['size' => 'modal-lg', 'header' => ''])
</div>
@endsection
@section('scripts')
@include('pad.components.scripts.dimensao.ensino.show_modal', [
'modal_id' => 'modal',
'route' => route('TaskTimeCreate', ['user_pad_id' => $user_pad_id]),
'btn_class' => 'task-time-create',
])
@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)
<tr>
@foreach($taskTimes as $model)
@if(gettype($model) == 'string')
<th>{{ $model }}</th>
@endif
@if(gettype($model) == 'object')
@endif
@endforeach
</tr>
@endforeach --}}
\ No newline at end of file
@php
use App\Models\TaskTime;
/**
* @var App\Models\TaskTime $model
*/
@endphp
<form id="form-delete-{{$model->id}}" action="{{ route('TaskTimeDelete', ['id' => $model->id]) }}" method="post">
@method('DELETE')
@csrf
</form>
<form id="task-time-update-form" action="{{ route('TaskTimeUpdate', ['id' => $model->id]) }}" method="post">
@csrf
@method('POST')
<div class="row">
<input type="hidden" id="user_pad_id" name="user_pad_id" value="{{ $model->user_pad_id }}">
<input type="hidden" id="tarefa_id" name="tarefa_id" value="{{ $model->tarefa_id }}">
<input type="hidden" id="type" name="type" value="{{ $model->type }}">´
<input type="hidden" id="id" name="id" value="{{ $model->id }}">
<div class="mb-4 col-sm-2">
<div class="">
<label class="form-label" for="cod_atividade">Cód. Atividade</label>
<input type="text" id="cod_atividade" name="cod_atividade" value="{{ $model->tarefa->cod_atividade }}" readonly class="form-control @error('cod_atividade') is-invalid @enderror ajax-errors">
</div>
@include('components.divs.errors', [
'field' => 'cod_atividade_update'
])
</div>
<div class="col-sm-10">
<div class="mt-3">
<label for="weekday">Dia da Semana</label>
<select name="weekday" id="weekday" class="form-select @error('weekday') is-invalid @enderror ajax-errors">
@foreach(TaskTime::listWeekDays() as $id => $text)
@if( $model->weekday == $id)
<option selected value="{{$id}}">{{$text}}</option>
@else
<option value="{{$id}}">{{$text}}</option>
@endif
@endforeach
</select>
@include('components.divs.errors', [
'field' => 'weekday_update'
])
</div>
</div>
<div class="col-sm-12">
<div class="">
<label for="slct_tarefa_id">Atividade</label>
<select name="slct_tarefa_id" id="slct_tarefa_id" class="form-select @error('slct_tarefa_id') is-invalid @enderror ajax-errors">
<option selected value="{{$model->tarefa_id}}">{{$model->getName()}}</option>
</select>
</div>
@include('components.divs.errors', [
'field' => 'slct_tarefa_id'
])
</div>
<div class="col-sm-6">
<div class="mt-3">
<label class="form-label" for="start_time">Horário Inicial</label>
<input type="time" name="start_time" id="start_time" value="{{$model->start_time}}" class="form-control @error('start_time') is-invalid @enderror ajax-errors" >
@include('components.divs.errors', [
'field' => 'start_time_update',
])
</div>
</div>
<div class="col-sm-6">
<div class="mt-3">
<label class="form-label" for="end_time">Horário Final</label>
<input type="time" name="end_time" id="end_time" value="{{$model->end_time}}" class="form-control @error('end_time') is-invalid @enderror ajax-errors" >
@include('components.divs.errors', [
'field' => 'end_time_update',
])
</div>
</div>
</div>
<div class="mt-4">
<div class="modal-footer">
<div class="text-start">
@include('components.buttons.btn-delete-by-alert', [
'_id' => $model->id,
'_class' => "delete_task_time",
])
</div>
<div class="text-end">
@include('components.buttons.btn-save', [
'id' => 'btn_submit',
'content' => 'Atualizar',
])
@include('components.buttons.btn-close_modal')
</div>
</div>
</div>
</form>
@include('pad.components.scripts.ajaxValidation', [
'btn_submit_id' => 'btn_submit',
'form_id' => 'task-time-update-form',
'route' => route('TaskTimeValidation'),
'form_type' => 'update',
])
<script type="text/javascript">
$('#weekday').select2(
{
allowClear: true,
placeholder: 'Dia da Semana',
dropdownParent: $('#modal')
})
$('#slct_tarefa_id').select2(
{
allowClear: true,
placeholder: 'Tarefa',
language: {
noResults: function() {
return "Resultados não Encontrados";
}
},
ajax: {
url: '{{ route("TaskSearch") }}',
data: function(params) {
return {
q: params.term,
user_pad_id : {{$model->user_pad_id}}
}
},
dataType: 'json'
},
dropdownParent: $('#modal')
})
$('#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!');
}
});
}
})
</script>
<?php
use App\Http\Controllers\TaskController;
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
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