File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/AtivosTi/EquipamentosController.php
Back
<?php namespace App\Http\Controllers\AtivosTi; use App\Http\Controllers\Controller; use App\Http\Requests\AtivosTi\EquipamentoRequest; use App\Http\Services\AtivosTi\AtivosTiService; use App\Models\AtivosTi\Equipamento; use App\Models\Demandas\Demanda; use App\Models\UnidadeOrganizacional; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\View\View; use Symfony\Component\HttpFoundation\StreamedResponse; class EquipamentosController extends Controller { private const PERMISSAO = 'GERENCIADOR_DE_ATIVOS_TI'; public function index(Request $request, AtivosTiService $service): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $query = Equipamento::with(['unidade', 'responsavel']) ->when($request->filled('busca'), fn($q) => $service->aplicarFiltroBuscaEquipamento($q, $request->get('busca'))) ->when($request->filled('status'), fn($q) => $q->where('status', $request->status)) ->when($request->filled('unidade_id'), fn($q) => $q->where('unidade_organizacional_id', $request->unidade_id)) ->orderBy('patrimonio'); $equipamentos = $query->paginate(20)->withQueryString(); $unidades = UnidadeOrganizacional::orderBy('name')->get(['id', 'name', 'abbreviation']); return view('admin.ativosTi.equipamentos.index', compact('equipamentos', 'unidades')); } public function create(): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'adicionar'); if ($response instanceof RedirectResponse) return $response; $unidades = UnidadeOrganizacional::orderBy('name')->get(['id', 'name', 'abbreviation']); return view('admin.ativosTi.equipamentos.create', compact('unidades')); } public function store(EquipamentoRequest $request): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'adicionar'); if ($response instanceof RedirectResponse) return $response; $equipamento = Equipamento::create($request->validated()); if ($request->anyFilled(['processador', 'memoria_ram', 'disco_rigido', 'placa_video'])) { $equipamento->especificacao()->create([ 'processador' => $request->input('processador'), 'memoria_ram' => $request->input('memoria_ram'), 'disco_rigido' => $request->input('disco_rigido'), 'placa_video' => $request->input('placa_video'), ]); } return redirect() ->route('admin.ativosTi.equipamentos.show', $equipamento) ->with('success', 'Equipamento cadastrado com sucesso.'); } public function show(Equipamento $equipamento): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $equipamento->load([ 'unidade', 'responsavel', 'licencas.unidade', 'licencas.usuario', 'demandas' => fn($q) => $q->with(['tiDetalhe', 'destinatarios.responsavel'])->orderBy('data_abertura', 'desc'), ]); return view('admin.ativosTi.equipamentos.show', compact('equipamento')); } public function edit(Equipamento $equipamento): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) return $response; $unidades = UnidadeOrganizacional::orderBy('name')->get(['id', 'name', 'abbreviation']); return view('admin.ativosTi.equipamentos.edit', compact('equipamento', 'unidades')); } public function update(EquipamentoRequest $request, Equipamento $equipamento): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) return $response; $equipamento->update($request->validated()); return redirect() ->route('admin.ativosTi.equipamentos.show', $equipamento) ->with('success', 'Equipamento atualizado com sucesso.'); } public function destroy(Equipamento $equipamento): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'excluir'); if ($response instanceof RedirectResponse) return $response; $equipamento->delete(); return redirect() ->route('admin.ativosTi.equipamentos.index') ->with('success', 'Equipamento excluído com sucesso.'); } public function laudo(Request $request, Equipamento $equipamento): View|RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'visualizar'); if ($response instanceof RedirectResponse) return $response; $equipamento->load(['unidade', 'responsavel', 'especificacao']); $demanda = null; if ($request->filled('demanda_id')) { // Restringe a demanda às que estão de fato vinculadas a este equipamento, // evitando IDOR (montar laudo com dados de solicitante de demanda alheia). $demanda = $equipamento->demandas() ->with(['tiDetalhe.setor', 'tiDetalhe.cliente', 'solicitante.pertence']) ->where('demandas.id', $request->demanda_id) ->first(); if (!$demanda) { return redirect() ->route('admin.ativosTi.equipamentos.show', $equipamento) ->with('error', 'Demanda não vinculada a este equipamento.'); } } $tecnico = Auth::user(); return view('admin.ativosTi.equipamentos.laudo', compact('equipamento', 'demanda', 'tecnico')); } public function buscar(Request $request): JsonResponse { $q = trim($request->get('q', '')); if (strlen($q) < 2) { return response()->json([]); } $equipamentos = Equipamento::where(function ($query) use ($q) { $query->where('patrimonio', 'like', "%{$q}%") ->orWhere('etiqueta_ti', 'like', "%{$q}%"); }) ->whereIn('status', ['ativo', 'em_manutencao']) ->limit(10) ->get(['id', 'patrimonio', 'etiqueta_ti', 'marca', 'modelo', 'status']) ->map(fn($e) => [ 'id' => $e->id, 'patrimonio' => $e->patrimonio, 'etiqueta' => $e->etiqueta_ti, 'label' => $e->patrimonio . ($e->etiqueta_ti ? ' / ' . $e->etiqueta_ti : '') . ($e->modelo ? ' — ' . $e->modelo : ''), 'status' => $e->status, ]); return response()->json($equipamentos); } public function vincularDemanda(Request $request, Demanda $demanda, AtivosTiService $service): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'adicionar'); if ($response instanceof RedirectResponse) return $response; $request->validate([ 'equipamento_id' => ['required', 'exists:equipamentos_ti,id'], ], [ 'equipamento_id.required' => 'Selecione um equipamento.', 'equipamento_id.exists' => 'Equipamento inválido.', ]); $equipamento = Equipamento::find($request->equipamento_id); $service->vincularDemanda($equipamento, $demanda); return redirect()->route('admin.demandas.show', $demanda) ->with('success', 'Equipamento vinculado à demanda.'); } public function desvincularDemanda(Demanda $demanda, Equipamento $equipamento, AtivosTiService $service): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) return $response; $service->desvincularDemanda($equipamento, $demanda); return redirect()->route('admin.demandas.show', $demanda) ->with('success', 'Equipamento removido da demanda.'); } public function vincularLicencaDemanda(Request $request, Demanda $demanda): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'adicionar'); if ($response instanceof RedirectResponse) return $response; $request->validate([ 'licenca_id' => ['required', 'exists:licencas_ti,id'], ], [ 'licenca_id.required' => 'Informe o ID da licença.', 'licenca_id.exists' => 'Licença inválida.', ]); $demanda->licencas()->syncWithoutDetaching([$request->licenca_id]); return redirect()->route('admin.demandas.show', $demanda) ->with('success', 'Licença vinculada à demanda.'); } public function desvincularLicencaDemanda(Demanda $demanda, int $licenca): RedirectResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) return $response; $demanda->licencas()->detach($licenca); return redirect()->route('admin.demandas.show', $demanda) ->with('success', 'Licença removida da demanda.'); } public function salvarEspecificacoes(Request $request, Equipamento $equipamento): RedirectResponse|JsonResponse { $response = $this->checkPermissao(self::PERMISSAO, 'editar'); if ($response instanceof RedirectResponse) return $response; $request->validate([ 'processador' => 'nullable|string|max:255', 'memoria_ram' => 'nullable|string|max:255', 'disco_rigido' => 'nullable|string|max:255', 'placa_video' => 'nullable|string|max:255', ]); $equipamento->especificacao()->updateOrCreate( ['equipamento_id' => $equipamento->id], $request->only(['processador', 'memoria_ram', 'disco_rigido', 'placa_video']) ); if ($request->expectsJson()) { return response()->json(['success' => true, 'message' => 'Especificações técnicas atualizadas com sucesso.']); } return redirect()->route('admin.ativosTi.equipamentos.show', $equipamento) ->with('success', 'Especificações técnicas atualizadas com sucesso.'); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings