diff --git a/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaCoordenacaoController.php b/app/Http/Controllers/Dimensao/Tabelas/Pesquisa/PesquisaCoordenacaoController.php index aa063f0b166964811fce16f7979bdf5c3a42b142..c458768c8f7398cf7b4c41ad248676b90d128d8a 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 a441a2b35f5747aadcbf0c9c27347502ab216c2b..a6d64174a0c4a4aa244fd2cb7959cca93960df0d 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 feeaf6e517746b9a21d83c99782179846a2b5a99..8aa0c15eaa30403bfc433fab953387853cf0b7ee 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 33eadaf589cd15b77d95d9a341b82b5a0ebdba9c..6e73c813a613dc1a50d33bb58a33e83ab9064dc5 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 0c889dfb67b13f52705c759253a959bc706dab1f..374253f1b9f1151f13ae6e303d562c96ad53cd06 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 1c016d898f7dbda7d69bbd27dd20ee0dae12cfa3..09c072ff308cd77c8396f38761f5b2c15f0a916d 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 2204ee7d4d58ccf12100367053d52f1a74547d2f..0000000000000000000000000000000000000000 --- 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 165ab04bbf19b2cbdd4a2ee67390391fff08a7b7..8c94d2bea39f7cc797cf95b182b531d07589bc11 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 3d8e6654c70907d964393b7eb4672c82c58de07f..81f330cd58dedc1bf08ce3a768a984e8072b1930 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 0000000000000000000000000000000000000000..588c0a10572ef729723498296e682e15f17cd386 --- /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