Untitled
raw download clone
PHP
views 6
,
size 4676 b
<?php
declare(strict_types=1);

namespace App\Http\Controllers;

use App;
use Auth;
use Flash;
use Response;
use Carbon\Carbon;
use App\Http\Requests;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Entities\CursoSecaoItem;
use yajra\Datatables\Datatables;
use Casa\Traits\Select2ableTrait;
use yajra\Datatables\Html\Builder;
use Illuminate\Http\RedirectResponse;
use App\Repositories\MatriculaRepository;
use App\Repositories\CursoSecaoItemRepository;
use App\Repositories\AtividadeReaberturaRepository;
use App\Services\AtividadeReaberturaSendEmailService;
use Casa\Controller\AppBaseController as AppBaseController;

class AtividadeReaberturaController extends AppBaseController
{
    use Select2ableTrait;

    private $atividateReaberturaRepository;
    private $matriculaRepository;
    private $cursoSercaoItemRepository;


    public function __construct(
        AtividadeReaberturaRepository $atividadeReaberturaRepository,
        AtividadeReaberturaSendEmailService $atividadeReaberturaSendEmailService,
        CursoSecaoItemRepository $cursoSercaoItemRepository,
        MatriculaRepository $matriculaRepository
    ) {
        $this->atividateReaberturaRepository = $atividadeReaberturaRepository;
        $this->cursoSercaoItemRepository = $cursoSercaoItemRepository;
        $this->matriculaRepository = $matriculaRepository;
        $this->atividadeReaberturaSendEmailService = $atividadeReaberturaSendEmailService;
    }


    public function index(int $cursoSecaoItemId): View
    {
        $itens = $this->atividateReaberturaRepository->getItensBySectionItem($cursoSecaoItemId);
        $courseSectionItem = $this->cursoSercaoItemRepository->find($cursoSecaoItemId);
        $tipo = $courseSectionItem->conteudo_type;

        return view('atividadesreaberturas.index')
          ->with([
              'cursoSecaoItemId' => $cursoSecaoItemId,
              'itens' => $itens,
              'tipo' => $tipo
          ]);
    }

    public function store(Request $request, int $cursoSecaoItemId): RedirectResponse
    {
        try {
            $input = $request->all();
            $aluno_id = $input['usuario_id'];

            if ($input['data_fim'] < $input['data_inicio']) {
                Flash::error('A data final deve ser maior que a data inicial.');
                return redirect(route('atividadesReaberturas.index', $cursoSecaoItemId));
            }

            $cursoSessaoItem = $this->cursoSercaoItemRepository->find($cursoSecaoItemId);
            $curso_id = $cursoSessaoItem->cursos_secoes->curso_id;

            $matricula = $this->matriculaRepository->getMatricula($aluno_id, $curso_id);

            if (is_null($matricula)) {
                Flash::error('Esse aluno não está vinculado a esse curso ou a matricula não está ativa.');
                return redirect(route('atividadesReaberturas.index', $cursoSecaoItemId));
            }

            $this->atividateReaberturaRepository->setMatriculaId($matricula->id);
            $this->atividateReaberturaRepository->setOperadorId(Auth::id());
            $this->atividateReaberturaRepository->setDataInicio($input['data_inicio']);
            $this->atividateReaberturaRepository->setDataFim($input['data_fim']);
            $this->atividateReaberturaRepository->setCursoSecaoItemId((int) $input['cursoSecaoItemId']);
            $this->atividateReaberturaRepository->setJustificativa($input['justificativa']);
            $this->atividateReaberturaRepository->saveReabertura();

            $idReaberturaSalva = $this->atividateReaberturaRepository->getId();
            $this->atividadeReaberturaSendEmailService->generateEmail($idReaberturaSalva);


            Flash::success('Reabertura salva com sucesso.');
            return redirect(route('atividadesReaberturas.index', $cursoSecaoItemId));
        } catch (\Throwable $th) {
            Flash::error('Aconteceu um problema na hora de inserir a reabertura. Erro:' . $th);
            return redirect(route('atividadesReaberturas.index', $cursoSecaoItemId));
        }
    }

    public function destroy(Request $request, $id): RedirectResponse
    {
        try {
            $cursoSessaoItem = $this->atividateReaberturaRepository->find($id);
            $this->atividateReaberturaRepository->delete($id);
            
            Flash::success('Reabertura apagada com sucesso.');
            return redirect(route('atividadesReaberturas.index', $cursoSessaoItem->curso_secao_item_id));
        } catch (\Throwable $th) {
            return back()->withInput();
        }
    }
}
close fullscreen
Login or Register to edit or fork this paste. It's free.