From 3154936d37de60c32045228d73f9e71217629d79 Mon Sep 17 00:00:00 2001 From: alissonalbuquerque Date: Sun, 11 Sep 2022 11:43:47 -0300 Subject: [PATCH] =?UTF-8?q?add=20valida=C3=A7=C3=B5es=20dinamicas=20horas?= =?UTF-8?q?=20min=20&=20max?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PesquisaCoordenacaoController.php | 83 +++++++++++++++++-- .../Pesquisa/PesquisaLiderancaController.php | 52 ++++++++++-- .../Pesquisa/PesquisaOrientacaoController.php | 54 ++++++++++-- .../Tabelas/Pesquisa/PesquisaCoordenacao.php | 5 -- .../Tabelas/Pesquisa/PesquisaLideranca.php | 5 -- .../Tabelas/Pesquisa/PesquisaOrientacao.php | 5 -- app/Models/Util/CargaHoraria.php | 21 ----- app/Models/Util/CargaHorariaValidation.php | 77 +++++++++++++++++ app/Queries/CustomQuery.php | 5 ++ .../Pesquisa/PesquisaCoordenacaoQuery.php | 7 ++ app/Queries/Tabelas/TablesGenericGrouped.php | 39 +++++++++ 11 files changed, 299 insertions(+), 54 deletions(-) delete mode 100644 app/Models/Util/CargaHoraria.php create mode 100644 app/Models/Util/CargaHorariaValidation.php create mode 100644 app/Queries/Tabelas/TablesGenericGrouped.php diff --git a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaCoordenacaoController.php b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaCoordenacaoController.php index aa063f0..c458768 100644 --- a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaCoordenacaoController.php +++ b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaCoordenacaoController.php @@ -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]); diff --git a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaLiderancaController.php b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaLiderancaController.php index a441a2b..a6d6417 100644 --- a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaLiderancaController.php +++ b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaLiderancaController.php @@ -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]); diff --git a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaOrientacaoController.php b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaOrientacaoController.php index feeaf6e..8aa0c15 100644 --- a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaOrientacaoController.php +++ b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaOrientacaoController.php @@ -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]); diff --git a/app/Models/Tabelas/Pesquisa/PesquisaCoordenacao.php b/app/Models/Tabelas/Pesquisa/PesquisaCoordenacao.php index 33eadaf..6e73c81 100644 --- a/app/Models/Tabelas/Pesquisa/PesquisaCoordenacao.php +++ b/app/Models/Tabelas/Pesquisa/PesquisaCoordenacao.php @@ -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!', ]; } diff --git a/app/Models/Tabelas/Pesquisa/PesquisaLideranca.php b/app/Models/Tabelas/Pesquisa/PesquisaLideranca.php index 0c889df..374253f 100644 --- a/app/Models/Tabelas/Pesquisa/PesquisaLideranca.php +++ b/app/Models/Tabelas/Pesquisa/PesquisaLideranca.php @@ -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!', ]; } diff --git a/app/Models/Tabelas/Pesquisa/PesquisaOrientacao.php b/app/Models/Tabelas/Pesquisa/PesquisaOrientacao.php index 1c016d8..09c072f 100644 --- a/app/Models/Tabelas/Pesquisa/PesquisaOrientacao.php +++ b/app/Models/Tabelas/Pesquisa/PesquisaOrientacao.php @@ -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!', ]; } diff --git a/app/Models/Util/CargaHoraria.php b/app/Models/Util/CargaHoraria.php deleted file mode 100644 index 2204ee7..0000000 --- a/app/Models/Util/CargaHoraria.php +++ /dev/null @@ -1,21 +0,0 @@ -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 diff --git a/app/Queries/CustomQuery.php b/app/Queries/CustomQuery.php index 165ab04..8c94d2b 100644 --- a/app/Queries/CustomQuery.php +++ b/app/Queries/CustomQuery.php @@ -38,5 +38,10 @@ class CustomQuery { return $this->query->first(); } + + public function sum(string $column) + { + return $this->query->sum($column); + } } diff --git a/app/Queries/Tabelas/Pesquisa/PesquisaCoordenacaoQuery.php b/app/Queries/Tabelas/Pesquisa/PesquisaCoordenacaoQuery.php index 3d8e665..81f330c 100644 --- a/app/Queries/Tabelas/Pesquisa/PesquisaCoordenacaoQuery.php +++ b/app/Queries/Tabelas/Pesquisa/PesquisaCoordenacaoQuery.php @@ -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 diff --git a/app/Queries/Tabelas/TablesGenericGrouped.php b/app/Queries/Tabelas/TablesGenericGrouped.php new file mode 100644 index 0000000..588c0a1 --- /dev/null +++ b/app/Queries/Tabelas/TablesGenericGrouped.php @@ -0,0 +1,39 @@ +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 -- GitLab