File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/ContaAngra/ChamadosTiController.php
Back
<?php namespace App\Http\Controllers\ContaAngra; use App\Http\Controllers\Controller; use App\Http\Requests\Demandas\DemandaInteragirRequest; use App\Http\Requests\Demandas\DemandaTiAbrirRequest; use App\Http\Resources\Demandas\DemandaResource; use App\Http\Services\AtivosTi\AtivosTiService; use App\Models\AtivosTi\Equipamento; use App\Models\Demandas\Demanda; use App\Models\Demandas\DemandaAnexo; use App\Models\IndicadoresTi\Setor; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Validation\ValidationException; use Illuminate\View\View; use Symfony\Component\HttpFoundation\StreamedResponse; class ChamadosTiController extends Controller { public function __construct(private readonly DemandaResource $resource) {} public function index(): RedirectResponse { return redirect()->route('admin.contaAngra.chamados.index'); } public function create(): View { $setores = Setor::where('publico', true)->orderBy('nome')->get(['id', 'nome']); return view('admin.contaAngra.chamadosTi.create', compact('setores')); } public function store(DemandaTiAbrirRequest $request, AtivosTiService $eqService): RedirectResponse { $dados = $request->validated(); $setor = Setor::find($dados['setor_id']); $dados['solicitante_tipo'] = 'usuario'; $dados['solicitante_id'] = Auth::id(); $dados['canal'] = 'portal'; $dados['status'] = 'pendente'; $dados['prioridade'] = 'media'; $dados['modulo'] = 'ti'; if ($setor?->unidade_organizacional_id) { $dados['destinatario_unidade_id'] = $setor->unidade_organizacional_id; } $equipamentoId = $dados['equipamento_id'] ?? null; unset($dados['equipamento_id']); $demanda = $this->resource->criar($dados, Auth::user()); if ($equipamentoId) { $equipamento = Equipamento::find($equipamentoId); $eqService->vincularDemanda($equipamento, $demanda); } return redirect() ->route('admin.contaAngra.chamadosTi.show', $demanda->id) ->with('success', 'Chamado aberto com sucesso! Protocolo: ' . $demanda->numero); } public function show(string $id): View|RedirectResponse { $demanda = Demanda::where('id', $id) ->where('user_id', Auth::id()) ->where('modulo', 'ti') ->where('canal', 'portal') ->with([ 'tiDetalhe.setor', 'tiDetalhe.assunto', 'tiDetalhe.subassunto', 'destinatarios.unidade', 'destinatarios.responsavel', 'anexos', 'logs.autor', 'logs.anexos', ]) ->first(); if (!$demanda) { return redirect()->route('admin.contaAngra.chamados.index') ->with('error', 'Chamado não encontrado.'); } return view('admin.contaAngra.chamadosTi.show', compact('demanda')); } public function interagir(DemandaInteragirRequest $request, string $chamadoTi): RedirectResponse { $demanda = Demanda::where('id', $chamadoTi) ->where('user_id', Auth::id()) ->where('modulo', 'ti') ->where('canal', 'portal') ->first(); if (!$demanda) { return redirect()->route('admin.contaAngra.chamados.index') ->with('error', 'Chamado não encontrado.'); } if (in_array($demanda->status, ['atendido', 'cancelado'])) { return redirect()->route('admin.contaAngra.chamadosTi.show', $chamadoTi) ->with('error', 'Este chamado está encerrado e não aceita mais interações.'); } try { $this->resource->interagir( $demanda, 'parecer', $request->input('conteudo'), Auth::user(), $request->file('anexos') ?? [] ); } catch (ValidationException $e) { return redirect()->route('admin.contaAngra.chamadosTi.show', $chamadoTi) ->withErrors($e->errors()) ->with('warning', 'Comentário registrado, mas um ou mais arquivos foram rejeitados.'); } return redirect()->route('admin.contaAngra.chamadosTi.show', $chamadoTi) ->with('success', 'Comentário enviado com sucesso.'); } public function servirAnexo(string $chamadoTi, int $anexo): StreamedResponse|RedirectResponse { $anexoModel = DemandaAnexo::where('demanda_id', $chamadoTi) ->whereHas('demanda', fn ($d) => $d->where('user_id', Auth::id())->where('modulo', 'ti')->where('canal', 'portal')) ->findOrFail($anexo); if (!Storage::disk('public')->exists($anexoModel->caminho)) { return redirect()->route('admin.contaAngra.chamados.index') ->with('error', 'Arquivo não encontrado.'); } return Storage::disk('public')->response($anexoModel->caminho, $anexoModel->nome_original, [ 'Content-Disposition' => 'inline; filename="' . addslashes($anexoModel->nome_original) . '"', ]); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings