Skip to content

Commit

Permalink
Merge pull request #732 from portabilis/portabilis-patch-2020-11-13
Browse files Browse the repository at this point in the history
[2.4] Portabilis patch 13/11/2020
  • Loading branch information
edersoares authored Nov 23, 2020
2 parents e60b1a6 + bd92dea commit 4ca47d6
Show file tree
Hide file tree
Showing 128 changed files with 2,502 additions and 1,420 deletions.
7 changes: 1 addition & 6 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,10 @@ indent_style = space
indent_size = 4

[*.php]
indent_size = 4
max_line_length = 120

[{*.html,*.less,*.sass,*.css,*.js,*.json,*.tpl}]
[{*.html, *.less, *.sass, *.css, *.js, *.json, *.tpl, *.vue, *.yml}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[*.yml]
indent_style = space
indent_size = 2
5 changes: 5 additions & 0 deletions app/Http/Controllers/Api/SchoolClassController.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,9 @@ public function getCalendars(Request $request, SchoolClassService $schoolClassSe

return $schoolClassService->getCalendars($schoolClass);
}

public function getStages(LegacySchoolClass $schoolClass)
{
return $schoolClass->stages;
}
}
108 changes: 108 additions & 0 deletions app/Http/Controllers/BatchExemptionController.php
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();
}
}
5 changes: 3 additions & 2 deletions app/Http/Controllers/SettingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class SettingController extends Controller
{
/**
* @param Request $request
*
* @return View
*/
public function index(Request $request)
Expand All @@ -22,8 +23,8 @@ public function index(Request $request)

$this->menu(Process::SETTINGS);

if(!$request->user()->isAdmin()) {
return redirect('/intranet/educar_configuracoes_index.php');
if (!$request->user()->isAdmin()) {
return back()->withErrors(['Error' => ['Você não tem permissão para acessar este recurso']]);
}

$categories = SettingCategory::whereHas('settings')->orderBy('id', 'desc')->get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class UpdateSchoolClassReportCardController extends Controller
public function index(Request $request)
{
if (!$request->user()->isAdmin() && !$request->user()->isInstitutional()) {
return redirect('/');
return back()->withErrors(['Error' => ['Você não tem permissão para acessar este recurso']]);
}

$this->breadcrumb('Atualização de boletins em lote', [
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class Kernel extends HttpKernel
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'can' => \App\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
Expand Down
40 changes: 40 additions & 0 deletions app/Http/Middleware/Authorize.php
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);
}
}
42 changes: 42 additions & 0 deletions app/Http/Requests/BatchExemptionRequest.php
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.',
];
}
}
99 changes: 99 additions & 0 deletions app/Jobs/BatchExemptionJob.php
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;
}
}
Loading

0 comments on commit 4ca47d6

Please sign in to comment.