Commit 3154936d authored by alissonalbuquerque's avatar alissonalbuquerque
Browse files

add validações dinamicas horas min & max

parent 9606f85b
......@@ -4,13 +4,16 @@ namespace App\Http\Controllers\Dimensao\Tabelas\Pesquisa;
use App\Http\Controllers\Controller;
use App\Models\Avaliacao;
use App\Models\Planejamento;
use App\Models\Tabelas\Constants;
use App\Models\Tabelas\Pesquisa\PesquisaCoordenacao;
use App\Models\Util\Avaliacao as UtilAvaliacao;
use App\Models\Util\CargaHorariaValidation;
use App\Models\Util\Dimensao;
use App\Models\Util\MenuItemsTeacher;
use App\Models\Util\PadTables;
use App\Models\Util\Status;
use App\Queries\Tabelas\TablesGenericGrouped;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Validator;
......@@ -67,9 +70,31 @@ class PesquisaCoordenacaoController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request) {
$validator = Validator::make($request->all(), PesquisaCoordenacao::rules(), PesquisaCoordenacao::messages());
public function create(Request $request)
{
if($request->user_pad_id && $request->cod_dimensao)
{
$agroup = new TablesGenericGrouped(PesquisaCoordenacao::class, $request->user_pad_id, $request->cod_dimensao);
$planejamento = Planejamento::initQuery()->whereCodDimensao($request->cod_dimensao)->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaCoordenacao::rules(), $cargaHoraria->rules()),
array_merge(PesquisaCoordenacao::messages(), $cargaHoraria->messages())
);
} else {
$validator = Validator::make(
$request->all(),
array_merge(PesquisaCoordenacao::rules(), CargaHorariaValidation::defaultRules()),
array_merge(PesquisaCoordenacao::messages(), CargaHorariaValidation::defaultMessages())
);
}
if($validator->fails())
{
......@@ -110,9 +135,31 @@ class PesquisaCoordenacaoController extends Controller
}
public function update($id, Request $request) {
$validator = Validator::make($request->all(), PesquisaCoordenacao::rules(), PesquisaCoordenacao::messages());
public function update($id, Request $request)
{
if($request->user_pad_id && $request->cod_dimensao)
{
$agroup = new TablesGenericGrouped(PesquisaCoordenacao::class, $request->user_pad_id, $request->cod_dimensao);
$planejamento = Planejamento::initQuery()->whereCodDimensao($request->cod_dimensao)->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaCoordenacao::rules(), $cargaHoraria->rules()),
array_merge(PesquisaCoordenacao::messages(), $cargaHoraria->messages())
);
} else {
$validator = Validator::make(
$request->all(),
array_merge(PesquisaCoordenacao::rules(), CargaHorariaValidation::defaultRules()),
array_merge(PesquisaCoordenacao::messages(), CargaHorariaValidation::defaultMessages())
);
}
$model = PesquisaCoordenacao::find($id);
$model->fill($request->all());
......@@ -167,7 +214,29 @@ class PesquisaCoordenacaoController extends Controller
public function ajaxValidation(Request $request)
{
$validator = Validator::make($request->all(), PesquisaCoordenacao::rules(), PesquisaCoordenacao::messages());
if($request->user_pad_id && $request->cod_dimensao)
{
$agroup = new TablesGenericGrouped(PesquisaCoordenacao::class, $request->user_pad_id, $request->cod_dimensao);
$planejamento = Planejamento::initQuery()->whereCodDimensao($request->cod_dimensao)->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaCoordenacao::rules(), $cargaHoraria->rules()),
array_merge(PesquisaCoordenacao::messages(), $cargaHoraria->messages())
);
} else {
$validator = Validator::make(
$request->all(),
array_merge(PesquisaCoordenacao::rules(), CargaHorariaValidation::defaultRules()),
array_merge(PesquisaCoordenacao::messages(), CargaHorariaValidation::defaultMessages())
);
}
if($validator->passes()) {
return Response::json(['message' => true, 'status' => 200]);
......
......@@ -4,13 +4,16 @@ namespace App\Http\Controllers\Dimensao\Tabelas\Pesquisa;
use App\Http\Controllers\Controller;
use App\Models\Avaliacao;
use App\Models\Planejamento;
use App\Models\Tabelas\Constants;
use App\Models\Tabelas\Pesquisa\PesquisaLideranca;
use App\Models\Util\Avaliacao as UtilAvaliacao;
use App\Models\Util\CargaHorariaValidation;
use App\Models\Util\Dimensao;
use App\Models\Util\MenuItemsTeacher;
use App\Models\Util\PadTables;
use App\Models\Util\Status;
use App\Queries\Tabelas\TablesGenericGrouped;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Validator;
......@@ -62,9 +65,22 @@ class PesquisaLiderancaController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request) {
public function create(Request $request)
{
$agroup = new TablesGenericGrouped(PesquisaLideranca::class, $request->user_pad_id);
$planejamento = Planejamento::initQuery()->whereCodDimensao('P-1')->first();
$validator = Validator::make($request->all(), PesquisaLideranca::rules(), PesquisaLideranca::messages());
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaLideranca::rules(), $cargaHoraria->rules()),
array_merge(PesquisaLideranca::messages(), $cargaHoraria->messages())
);
if($validator->fails())
{
......@@ -105,9 +121,22 @@ class PesquisaLiderancaController extends Controller
}
public function update($id, Request $request) {
public function update($id, Request $request)
{
$agroup = new TablesGenericGrouped(PesquisaLideranca::class, $request->user_pad_id);
$planejamento = Planejamento::initQuery()->whereCodDimensao('P-1')->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$validator = Validator::make($request->all(), PesquisaLideranca::rules(), PesquisaLideranca::messages());
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaLideranca::rules(), $cargaHoraria->rules()),
array_merge(PesquisaLideranca::messages(), $cargaHoraria->messages())
);
$model = PesquisaLideranca::find($id);
$model->fill($request->all());
......@@ -162,7 +191,20 @@ class PesquisaLiderancaController extends Controller
public function ajaxValidation(Request $request)
{
$validator = Validator::make($request->all(), PesquisaLideranca::rules(), PesquisaLideranca::messages());
$agroup = new TablesGenericGrouped(PesquisaLideranca::class, $request->user_pad_id);
$planejamento = Planejamento::initQuery()->whereCodDimensao('P-1')->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaLideranca::rules(), $cargaHoraria->rules()),
array_merge(PesquisaLideranca::messages(), $cargaHoraria->messages())
);
if($validator->passes()) {
return Response::json(['message' => true, 'status' => 200]);
......
......@@ -4,13 +4,16 @@ namespace App\Http\Controllers\Dimensao\Tabelas\Pesquisa;
use App\Http\Controllers\Controller;
use App\Models\Avaliacao;
use App\Models\Planejamento;
use App\Models\Tabelas\Constants;
use App\Models\Tabelas\Pesquisa\PesquisaOrientacao;
use App\Models\Util\Avaliacao as UtilAvaliacao;
use App\Models\Util\CargaHorariaValidation;
use App\Models\Util\Dimensao;
use App\Models\Util\MenuItemsTeacher;
use App\Models\Util\PadTables;
use App\Models\Util\Status;
use App\Queries\Tabelas\TablesGenericGrouped;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Validator;
......@@ -62,9 +65,22 @@ class PesquisaOrientacaoController extends Controller
*
* @return \Illuminate\Http\Response
*/
public function create(Request $request) {
public function create(Request $request)
{
$agroup = new TablesGenericGrouped(PesquisaOrientacao::class, $request->user_pad_id);
$planejamento = Planejamento::initQuery()->whereCodDimensao('P-3')->first();
$validator = Validator::make($request->all(), PesquisaOrientacao::rules(), PesquisaOrientacao::messages());
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaOrientacao::rules(), $cargaHoraria->rules()),
array_merge(PesquisaOrientacao::messages(), $cargaHoraria->messages())
);
if($validator->fails())
{
......@@ -105,9 +121,22 @@ class PesquisaOrientacaoController extends Controller
}
public function update($id, Request $request) {
$validator = Validator::make($request->all(), PesquisaOrientacao::rules(), PesquisaOrientacao::messages());
public function update($id, Request $request)
{
$agroup = new TablesGenericGrouped(PesquisaOrientacao::class, $request->user_pad_id);
$planejamento = Planejamento::initQuery()->whereCodDimensao('P-3')->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaOrientacao::rules(), $cargaHoraria->rules()),
array_merge(PesquisaOrientacao::messages(), $cargaHoraria->messages())
);
$model = PesquisaOrientacao::find($id);
$model->fill($request->all());
......@@ -162,7 +191,20 @@ class PesquisaOrientacaoController extends Controller
public function ajaxValidation(Request $request)
{
$validator = Validator::make($request->all(), PesquisaOrientacao::rules(), PesquisaOrientacao::messages());
$agroup = new TablesGenericGrouped(PesquisaOrientacao::class, $request->user_pad_id);
$planejamento = Planejamento::initQuery()->whereCodDimensao('P-3')->first();
$ch_min = $planejamento->ch_semanal;
$ch_max = $planejamento->ch_maxima;
$ch_sum = $agroup->agroup()->sum('ch_semanal');
$cargaHoraria = new CargaHorariaValidation($ch_min, $ch_max, $ch_sum);
$validator = Validator::make(
$request->all(),
array_merge(PesquisaOrientacao::rules(), $cargaHoraria->rules()),
array_merge(PesquisaOrientacao::messages(), $cargaHoraria->messages())
);
if($validator->passes()) {
return Response::json(['message' => true, 'status' => 200]);
......
......@@ -43,7 +43,6 @@ class PesquisaCoordenacao extends Model
'linha_grupo_pesquisa' => ['required', 'string', 'max:255'],
'funcao' => ['required', 'integer', Rule::in(array_keys(Constants::listFuncaoProjeto()))],
'cod_dimensao' => ['required', 'string', Rule::in(array_keys(self::listPlanejamentos()))],
'ch_semanal' => CargaHoraria::ch_semanal(),
];
}
......@@ -67,10 +66,6 @@ class PesquisaCoordenacao extends Model
//'cod_dimensao'
'cod_dimensao.required' => 'O campo "Resolução" é obrigatório',
'cod_dimensao.in' => 'Selecione uma opção da lista de "Resolução"',
//ch_semanal
'ch_semanal.required' => 'O campo "CH. Semanal" é obrigatório!',
'ch_semanal.min' => 'Carga horária semanal miníma é de 1 Hora!',
];
}
......
......@@ -40,7 +40,6 @@ class PesquisaLideranca extends Model
'cod_atividade' => ['required', 'string', 'max:255'],
'grupo_pesquisa' => ['required', 'string', 'max:255'],
'funcao' => ['required', 'integer', Rule::in(array_keys(Constants::listFuncaoProjeto()))],
'ch_semanal' => ['required', 'integer', 'min:1'],
];
}
......@@ -57,10 +56,6 @@ class PesquisaLideranca extends Model
'funcao.required' => 'O campo "Função" é obrigatório!',
'funcao.integer' => 'O campo "Função" deve cónter um inteiro!',
'funcao.in' => 'Selecione uma opção da lista de "Função"!',
//ch_semanal
'ch_semanal.required' => 'O campo "CH. Semanal" é obrigatório!',
'ch_semanal.min' => 'Carga horária semanal miníma é de 1 Hora!',
];
}
......
......@@ -42,7 +42,6 @@ class PesquisaOrientacao extends Model
'titulo_projeto' => ['required', 'string', 'max:255'],
'nome_orientando' => ['required', 'string', 'max:255'],
'funcao' => ['required', 'integer', Rule::in(array_keys(Constants::listFuncaoOrientador()))],
'ch_semanal' => CargaHoraria::ch_semanal(CargaHoraria::create_ch_min(2)),
];
}
......@@ -62,10 +61,6 @@ class PesquisaOrientacao extends Model
'funcao.required' => 'O campo "Função" é obrigatório!',
'funcao.integer' => 'O campo "Função" deve cónter um inteiro!',
'funcao.in' => 'Selecione uma opção da lista de "Função"!',
//ch_semanal
'ch_semanal.required' => 'O campo "CH. Semanal" é obrigatório!',
'ch_semanal.min' => 'Carga horária semanal miníma é de 2 Horas!',
];
}
......
<?php
namespace App\Models\Util;
class CargaHoraria
{
public const CH_MIN = 'min:1';
public static function create_ch_min(int $ch_min) {
return sprintf('min:%d', $ch_min);
}
public static function create_ch_max(int $ch_max) {
return sprintf('max:%d', $ch_max);
}
public static function ch_semanal($ch_min = self::CH_MIN, $ch_max = '')
{
return ['required', 'integer', $ch_min, $ch_max];
}
}
\ No newline at end of file
<?php
namespace App\Models\Util;
class CargaHorariaValidation
{
public const CH_MIN = 'min:1';
public const CH_MAX = '';
/** @var integer|null */
public $ch_min;
/** @var integer|null */
public $ch_max;
/** @var string */
public $ch_sum;
public function __construct($ch_min, $ch_max, $ch_sum)
{
$this->ch_min = $ch_min;
$this->ch_max = $ch_max;
$this->ch_sum = $ch_sum;
}
public function rules()
{
$ch_min = $this->ch_min !== null? sprintf('min:%d', $this->ch_min) : self::CH_MIN;
$ch_max = $this->ch_max !== null? sprintf('max:%d', $this->ch_max - $this->ch_sum) : self::CH_MAX;
return [
'ch_semanal' => ['required', 'integer', $ch_min, $ch_max]
];
}
public function messages()
{
$ch_min = $this->ch_min !== null && $this->ch_min > 1 ? sprintf('"CH. Semanal" miníma é de %d Hora(s)!', $this->ch_min) : '"CH. Semanal" miníma é de 1 Hora(s)!';
$ch_max = '';
if($this->ch_max !== null)
{
if($this->ch_max - $this->ch_sum !== 0)
{
$ch_max = sprintf('"CH. Semanal" máxima atual para preenchimento é de %d Hora(s)! %d Hora(s) já adicionadas', ($this->ch_max - $this->ch_sum), $this->ch_sum);
} else {
$ch_max = "Limite de horas preenchidas alcançado!";
}
} else {
$ch_max = '';
}
return [
'ch_semanal.required' => 'O campo "CH. Semanal" é obrigatório!',
'ch_semanal.integer' => '"CH. Semanal" deve conter um inteiro no seguinte formato: 1, 2, 3...!',
'ch_semanal.min' => $ch_min,
'ch_semanal.max' => $ch_max,
];
}
public static function defaultRules()
{
return [
'ch_semanal' => ['required', 'integer']
];
}
public static function defaultMessages()
{
return [
'ch_semanal.required' => 'O campo "CH. Semanal" é obrigatório!',
'ch_semanal.integer' => '"CH. Semanal" deve conter um inteiro no seguinte formato: 1, 2, 3...!',
];
}
}
\ No newline at end of file
......@@ -38,5 +38,10 @@ class CustomQuery
{
return $this->query->first();
}
public function sum(string $column)
{
return $this->query->sum($column);
}
}
......@@ -21,4 +21,11 @@ class PesquisaCoordenacaoQuery extends CustomQuery
return self::$instance;
}
public function whereCodDimensao($cod_dimensao, $operator = '=')
{
$this->query = $this->query->where('cod_dimensao', $operator, $cod_dimensao);
return self::$instance;
}
}
\ No newline at end of file
<?php
namespace App\Queries\Tabelas;
class TablesGenericGrouped
{
/** @var string */
public $class;
/** @var string */
public $user_pad_id;
/** @var string */
public $cod_dimensao;
public function __construct($class, $user_pad_id, $cod_dimensao = null)
{
$this->class = $class;
$this->user_pad_id = $user_pad_id;
$this->cod_dimensao = $cod_dimensao;
}
public function agroup()
{
$query = $this->class::initQuery();
if($this->user_pad_id)
{
$query->whereUserPad($this->user_pad_id);
}
if($this->cod_dimensao)
{
$query->whereCodDimensao($this->cod_dimensao);
}
return $query;
}
}
\ 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