File manager - Edit - /var/www/html/portalHomolog/app/Http/Controllers/IndicadoresTi/IndicadoresTiController.php
Back
<?php namespace App\Http\Controllers\IndicadoresTi; use App\Http\Controllers\Controller; use App\Http\Requests\IndicadoreTiRequest; use App\Http\Services\IndicadoresTi\IndicadoresTiService; use App\Models\IndicadoresTi\Chamado; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\View\View; class IndicadoresTiController extends Controller { public function __construct(private readonly IndicadoresTiService $service) {} public function index(Request $request): View { $query = $this->service->aplicarFiltros($request); $user = auth()->user(); $permissoes = $user->permissoes->pluck('permissao'); $viewData = $this->service->dadosBase() + [ 'chamadosAbertos' => $this->service->getChamadosAbertos($request), 'filterParams' => $request->only(['status', 'prioridade', 'setor_id', 'busca']), 'unidadesDoUsuario' => $user->unidades()->orderBy('abbreviation')->get(), ]; if ($permissoes->contains('DIRETOR_TI')) { $viewData['meusChamados'] = $this->service->getMeusChamadosDiretor($query, $user); $viewData['outrosChamadosPorSetor'] = $this->service->getOutrosChamadosPorSetor($query, $user); } elseif ($permissoes->contains('INDICADORES_TI')) { $userUnidadeIds = $user->unidades()->pluck('unidades_organizacionais.id'); $viewData['meusChamados'] = $this->service->getMeusChamadosIndicadores($query, $user); $viewData['outrosChamadosPorUnidade'] = $this->service->getOutrosChamadosPorUnidade($query, $user, $userUnidadeIds); } else { $empty = Chamado::whereRaw('1 = 0'); $viewData['meusChamados'] = (clone $empty)->paginate(15, ['*'], 'minha_page')->withQueryString(); $viewData['outrosChamados'] = (clone $empty)->paginate(15, ['*'], 'outros_page')->withQueryString(); } return view('admin.indicadoresTi.index', $viewData); } public function store(IndicadoreTiRequest $request): RedirectResponse { $dados = $request->validated(); if (empty($dados['solicitante_id']) || empty($dados['solicitante_tipo'])) { return back()->withErrors(['solicitante_id' => 'Selecione um cliente ou usuário.'])->withInput(); } $this->service->resolverSolicitante($dados); $this->service->criarChamado($dados, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', __('Chamado criado com sucesso.')); } public function show(Request $request, int $chamado): RedirectResponse { Chamado::findOrFail($chamado); $this->service->abrirAba($request, $chamado); return redirect() ->route('admin.indicadoresTi.index', $request->only(['status', 'prioridade', 'setor_id', 'busca'])); } public function update(IndicadoreTiRequest $request, int $chamado): RedirectResponse { $model = Chamado::findOrFail($chamado); if ($request->boolean('reabrir') && $model->status === 'atendido') { $this->service->reabrirChamado($model, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', __('Chamado reaberto com sucesso.')); } if ($model->status === 'atendido') { return redirect()->back()->withErrors(__('Chamado concluído. Marque "Reabrir" para editar.')); } $dados = $request->validated(); $this->service->resolverSolicitante($dados); $this->service->atualizarChamado($model, $dados, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', __('Chamado atualizado com sucesso.')); } public function concluir(Request $request, int $chamado): RedirectResponse { $model = Chamado::with('participantes')->findOrFail($chamado); $user = Auth::user(); $isDiretorTi = $user->permissoes->pluck('permissao')->contains('DIRETOR_TI'); if (!$isDiretorTi && !$model->isParticipante($user->id)) { return back()->withErrors([ 'chamado' => 'Você não é participante deste chamado. Adicione-se como participante primeiro para poder concluí-lo.', ]); } $this->service->concluirChamado($model, $user, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', __('Chamado concluído com sucesso.')); } public function adicionarParticipante(Request $request, int $chamado): RedirectResponse { $model = Chamado::with('participantes')->findOrFail($chamado); if ($model->status === 'atendido') { return back()->withErrors(['participante' => 'Não é possível adicionar participantes a um chamado já concluído.']); } $userId = $request->input('user_id', Auth::id()); $user = Auth::user(); $isDiretorTi = $user->permissoes->pluck('permissao')->contains('DIRETOR_TI'); if ($userId !== Auth::id() && !$isDiretorTi && $model->atendente_id !== Auth::id()) { return back()->withErrors(['participante' => 'Apenas o responsável ou o diretor podem adicionar outros participantes.']); } if ($model->isParticipante($userId)) { return redirect() ->route('admin.indicadoresTi.index', $request->only(['status', 'prioridade', 'setor_id', 'busca'])) ->with('info', 'Usuário já é participante deste chamado.'); } $this->service->adicionarParticipante($model, $userId, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', 'Participante adicionado com sucesso.'); } public function removerParticipante(Request $request, int $chamado): RedirectResponse { $model = Chamado::with('participantes')->findOrFail($chamado); $userId = $request->input('user_id', Auth::id()); $user = Auth::user(); $isDiretorTi = $user->permissoes->pluck('permissao')->contains('DIRETOR_TI'); if ($userId === $model->atendente_id) { return back()->withErrors(['participante' => 'O responsável não pode ser removido. Transfira a responsabilidade antes.']); } if ($userId !== Auth::id() && !$isDiretorTi) { return back()->withErrors(['participante' => 'Você só pode remover a si mesmo como participante.']); } $this->service->removerParticipante($model, $userId, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', 'Participante removido.'); } public function destroy(Request $request, int $chamado): RedirectResponse { $model = Chamado::findOrFail($chamado); $this->service->excluirChamado($model, $request); return redirect() ->route('admin.indicadoresTi.index') ->with('success', __('Chamado excluído com sucesso.')); } public function fecharAba(Request $request, int $chamado): RedirectResponse { $this->service->fecharAba($request, $chamado); return redirect() ->route('admin.indicadoresTi.index', $request->only(['status', 'prioridade', 'setor_id', 'busca'])); } public function storeCliente(Request $request): JsonResponse { $dados = $request->validate([ 'nome' => ['required', 'string', 'max:255'], 'cpf' => ['nullable', 'string', 'max:14'], 'matricula' => ['nullable', 'string', 'max:50'], 'setor' => ['nullable', 'string', 'max:255'], 'telefone' => ['nullable', 'string', 'max:50'], ]); if (empty($dados['cpf']) && empty($dados['matricula'])) { return response()->json([ 'success' => false, 'message' => 'Informe o CPF ou a Matrícula do cliente.', ], 422); } if (!empty($dados['cpf'])) { $clientePorCpf = $this->service->buscarClientePorCpf($dados['cpf']); if ($clientePorCpf) { return response()->json([ 'success' => false, 'message' => 'Já existe um cliente cadastrado com esse CPF.', 'cliente_id' => $clientePorCpf->id, 'nome' => $clientePorCpf->nome, ], 409); } } $userPorNome = $this->service->buscarUsuarioPorNome($dados['nome']); if ($userPorNome) { return response()->json([ 'success' => false, 'message' => 'Já existe um usuário com esse nome.', 'user_id' => $userPorNome->id, 'nome' => $userPorNome->name, ], 409); } $cliente = $this->service->criarCliente($dados); return response()->json([ 'success' => true, 'id' => $cliente->id, 'nome' => $cliente->nome, 'cpf' => $cliente->cpf, 'matricula' => $cliente->matricula, 'tipo' => 'cliente', ]); } public function buscarClientes(Request $request): JsonResponse { return response()->json( $this->service->buscarSolicitantes($request->get('q', '')) ); } public function buscarUnidades(Request $request): JsonResponse { return response()->json( $this->service->buscarUnidades($request->get('q', '')) ); } public function assuntosPorSetor(int $setor): JsonResponse { return response()->json($this->service->assuntosPorSetor($setor)); } public function subassuntosPorAssunto(int $assunto): JsonResponse { return response()->json($this->service->subassuntosPorAssunto($assunto)); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings