-
Notifications
You must be signed in to change notification settings - Fork 454
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #732 from portabilis/portabilis-patch-2020-11-13
[2.4] Portabilis patch 13/11/2020
- Loading branch information
Showing
128 changed files
with
2,502 additions
and
1,420 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
<?php | ||
|
||
namespace App\Http\Controllers; | ||
|
||
use App\Http\Requests\BatchExemptionRequest; | ||
use App\Jobs\BatchExemptionJob; | ||
use App\Models\LegacyRegistration; | ||
use App\Models\LegacyStageType; | ||
use App\Process; | ||
use App\Services\Exemption\BatchExemptionService; | ||
use App\Services\Exemption\ExemptionService; | ||
use Illuminate\Contracts\Bus\Dispatcher; | ||
use Illuminate\Http\Request; | ||
use Illuminate\Support\Facades\DB; | ||
use Illuminate\View\View; | ||
|
||
class BatchExemptionController extends Controller | ||
{ | ||
/** | ||
* @param Request $request | ||
* @return View | ||
*/ | ||
public function index(Request $request) | ||
{ | ||
if (!$request->user()->isAdmin() && !$request->user()->isInstitutional()) { | ||
return back()->withErrors(['Error' => ['Você não tem permissão para acessar este recurso']]); | ||
} | ||
|
||
$this->breadcrumb('Dispensa em lote', [ | ||
url('intranet/educar_configuracoes_index.php') => 'Configurações', | ||
]); | ||
|
||
$this->menu(Process::BATCH_EXEMPTION); | ||
|
||
return view('exemption.batch', [ | ||
'stageTypes' => LegacyStageType::active()->get()->keyBy('cod_modulo')->toJson(), | ||
]); | ||
} | ||
|
||
public function exempt(BatchExemptionRequest $request) | ||
{ | ||
$query = LegacyRegistration::active(); | ||
|
||
$registrations = $this->addFilters($request, $query); | ||
|
||
if (count($registrations) == 0) { | ||
return redirect()->route('batch-exemption.index')->with('error', 'Nenhuma matrícula encontrada com os filtros selecionados'); | ||
} | ||
|
||
$exemptionService = new ExemptionService($request->user()); | ||
$exemptionService->isBatch = true; | ||
$exemptionService->keepAbsences = (bool) $request->get('manter_frequencias', false); | ||
$batchExemptionService = new BatchExemptionService($exemptionService); | ||
|
||
foreach($registrations as $registration) { | ||
$batchExemptionService->addRegistration( | ||
$registration, | ||
$request->get('ref_cod_componente_curricular'), | ||
$request->get('exemption_type'), | ||
$request->get('observacoes'), | ||
$request->get('stage'), | ||
); | ||
} | ||
|
||
$job = new BatchExemptionJob($batchExemptionService, DB::getDefaultConnection(), $request->user()); | ||
app(Dispatcher::class)->dispatch($job); | ||
|
||
return redirect() | ||
->route('batch-exemption.index') | ||
->with('success', sprintf('Serão criadas dispensas para %s matrículas. Você será notificado no final do processo', count($registrations))); | ||
} | ||
|
||
private function addFilters(Request $request, $query) | ||
{ | ||
if ($request->get('ano')) { | ||
$query->where('ano', $request->get('ano')); | ||
} | ||
|
||
if ($request->get('ref_cod_escola')) { | ||
$query->where('ref_ref_cod_escola', $request->get('ref_cod_escola')); | ||
} | ||
|
||
if ($request->get('ref_cod_curso')) { | ||
$query->where('ref_cod_curso', $request->get('ref_cod_curso')); | ||
} | ||
|
||
if ($request->get('ref_cod_serie')) { | ||
$query->where('ref_ref_cod_serie', $request->get('ref_cod_serie')); | ||
} | ||
|
||
if ($request->get('ref_cod_turma')) { | ||
$schoolClassId = $request->get('ref_cod_turma'); | ||
$query->whereHas('enrollments', function ($enrollmentQuery) use ($schoolClassId) { | ||
$enrollmentQuery->where('ref_cod_turma', $schoolClassId); | ||
}); | ||
} | ||
|
||
if ($request->get('situacao')) { | ||
$query->where('aprovado', $request->get('situacao')); | ||
} | ||
|
||
$query->whereHas('enrollments', function($enrollmentQuery) { | ||
$enrollmentQuery->where('ativo', 1); | ||
}); | ||
|
||
return $query->get(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
|
||
namespace App\Http\Middleware; | ||
|
||
use Closure; | ||
use Illuminate\Auth\Access\AuthorizationException; | ||
use Illuminate\Auth\Middleware\Authorize as AuthorizeMiddleware; | ||
use Illuminate\Http\Request; | ||
use Illuminate\Http\Response; | ||
use Illuminate\Support\Str; | ||
|
||
class Authorize extends AuthorizeMiddleware | ||
{ | ||
/** | ||
* @param Request $request | ||
* @param Closure $next | ||
* @param string $ability | ||
* @param mixed ...$models | ||
* | ||
* @throws AuthorizationException | ||
* | ||
* @return Response | ||
*/ | ||
public function handle($request, Closure $next, $ability, ...$models) | ||
{ | ||
$arguments = $this->getGateArguments($request, $models); | ||
|
||
if (Str::contains($ability, ':')) { | ||
[$ability, $arguments] = explode(':', $ability); | ||
} | ||
|
||
try { | ||
$this->gate->authorize($ability, $arguments); | ||
} catch (AuthorizationException $a) { | ||
return back()->withErrors(['Error' => ['Você não tem permissão para acessar este recurso']]); | ||
} | ||
|
||
return $next($request); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
<?php | ||
|
||
namespace App\Http\Requests; | ||
|
||
use Illuminate\Foundation\Http\FormRequest; | ||
|
||
class BatchExemptionRequest extends FormRequest | ||
{ | ||
/** | ||
* Get the validation rules that apply to the request. | ||
* | ||
* @return array | ||
*/ | ||
public function rules() | ||
{ | ||
return [ | ||
'ano' => [ | ||
'required', | ||
'date_format:Y', | ||
], | ||
'ref_cod_instituicao' => 'required', | ||
'ref_cod_componente_curricular' => 'required', | ||
'exemption_type' => 'required', | ||
'stage' => 'required', | ||
]; | ||
} | ||
|
||
/** | ||
* @return array | ||
*/ | ||
public function messages() | ||
{ | ||
return [ | ||
'ano.required' => 'O ano é obrigatório.', | ||
'ano.date_format' => 'O campo Ano deve ser um ano válido.', | ||
'ref_cod_instituicao.required' => 'A instituição é obrigatória.', | ||
'ref_cod_componente_curricular.required' => 'Você precisa selecionar pelo menos um componente curricular.', | ||
'exemption_type.required' => 'O tipo de dispensa é obrigatório.', | ||
'stage.required' => 'Você precisa selecionar pelo menos uma etapa.', | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
<?php | ||
|
||
namespace App\Jobs; | ||
|
||
use App\Jobs\Concerns\ShouldNotificate; | ||
use App\Services\Exemption\BatchExemptionService; | ||
use App\User; | ||
use Illuminate\Bus\Queueable; | ||
use Illuminate\Queue\SerializesModels; | ||
use Illuminate\Queue\InteractsWithQueue; | ||
use Illuminate\Contracts\Queue\ShouldQueue; | ||
use Illuminate\Foundation\Bus\Dispatchable; | ||
use Illuminate\Support\Facades\DB; | ||
use Throwable; | ||
|
||
class BatchExemptionJob implements ShouldQueue | ||
{ | ||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, ShouldNotificate; | ||
|
||
/** | ||
* @var array | ||
*/ | ||
private $importArray; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
private $databaseConnection; | ||
|
||
/** | ||
* @var BatchExemptionService | ||
*/ | ||
private $batchExemptionService; | ||
|
||
/** | ||
* @var User | ||
*/ | ||
private $user; | ||
|
||
|
||
public function __construct(BatchExemptionService $batchExemptionService, $databaseConnection, User $user) | ||
{ | ||
$this->batchExemptionService = $batchExemptionService; | ||
$this->databaseConnection = $databaseConnection; | ||
$this->user = $user; | ||
} | ||
|
||
/** | ||
* Execute the job. | ||
* | ||
* @return void | ||
* @throws Throwable | ||
*/ | ||
public function handle() | ||
{ | ||
DB::setDefaultConnection($this->databaseConnection); | ||
DB::beginTransaction(); | ||
|
||
try { | ||
$this->batchExemptionService->handle(); | ||
} catch (Throwable $exception) { | ||
DB::rollBack(); | ||
|
||
$this->notificateError(); | ||
throw $exception; | ||
} | ||
|
||
$this->notificateSuccess(); | ||
DB::commit(); | ||
} | ||
|
||
public function tags() | ||
{ | ||
return [ | ||
$this->databaseConnection, | ||
'batch-exemption' | ||
]; | ||
} | ||
|
||
public function getSuccessMessage() | ||
{ | ||
return 'O processo de Dispensa em lote foi finalizado.'; | ||
} | ||
|
||
public function getErrorMessage() | ||
{ | ||
return 'Não foi possível finalizar o processo de dispensa em lote.'; | ||
} | ||
|
||
public function getNotificationUrl() | ||
{ | ||
return '/consulta-dispensas'; | ||
} | ||
|
||
public function getUser() | ||
{ | ||
return $this->user; | ||
} | ||
} |
Oops, something went wrong.