File manager - Edit - /var/www/html/portal/app/Http/Controllers/Accounts/Chamados/ChamadosController.php
Back
<?php namespace App\Http\Controllers\Accounts\Chamados; use App\Http\Controllers\Controller; use App\Models\Accounts\Chamados\Chamado; use Illuminate\Http\Request; use App\Http\Requests\Accounts\Chamados\ChamadoRequest; use App\Http\Requests\Accounts\Chamados\ChamadoShowRequet; use App\Http\Services\Accounts\Chamados\ChamadoService; use App\Http\Services\Accounts\Chamados\ChamadoArquivoService; use Illuminate\Support\Facades\Auth; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Http\RedirectResponse; use Illuminate\View\View; use Carbon\Carbon; class ChamadosController extends Controller { private $permissao = "GERENCIADOR_DE_CONTA_ANGRA"; public function index(Request $request): View|LengthAwarePaginator|RedirectResponse { $response = $this->checkPermissao($this->permissao, "visualizar"); if ($response instanceof RedirectResponse) { return $response; } $user = Auth::user(); $ChamadoService = new ChamadoService(); $chamados = $ChamadoService->index($request); $chamadoIds = $chamados->getCollection()->pluck('id')->map(fn ($id) => (string) $id)->all(); $mensagensNaoLidasPorChamado = $ChamadoService->contarMensagensNaoLidasPorChamados($chamadoIds, (string) $user->id); return view('admin.contaAngra.chamados.index', compact('chamados', 'user', 'mensagensNaoLidasPorChamado')); } public function create(Request $request): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, "adicionar"); if ($response instanceof RedirectResponse) { return $response; } $user = Auth::user(); $ChamadoService = new ChamadoService(); $preparaConvenios = $ChamadoService->getConvenios(); if ($preparaConvenios == null) { return redirect()->route('admin.contaAngra.chamados.index') ->with('info', '* Para abrir um atendimento, é necessário possuir pelo menos uma adesão a um serviço da Conta Angra.'); } $convenios = $ChamadoService->preparaConvenios($preparaConvenios); $preset = $request->only(['convenio', 'assunto', 'credenciamento_id']); return view('admin.contaAngra.chamados.create', compact(['user', 'convenios', 'preset'])); } public function store(ChamadoRequest $request): RedirectResponse { $response = $this->checkPermissao($this->permissao, "adicionar"); if ($response instanceof RedirectResponse) { return $response; } $array_chamado = [ 'user_id' => Auth::user()->id, 'convenio' => $request->convenio, 'convenioAtual' => $request->convenio, 'numeroChamado' => Carbon::now()->format('YmdHis'), 'assunto' => $request->assunto, ]; if ($request->filled('credenciamento_id')) { $array_chamado['credenciamento_id'] = $request->credenciamento_id; } $ChamadoService = new ChamadoService(); return $ChamadoService->store($request, $array_chamado); } public function edit(Chamado $chamado): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } $user = Auth::user(); $ChamadoService = new ChamadoService(); $preparaConvenios = $ChamadoService->getConvenios(); if ($preparaConvenios == null) { return redirect()->route('admin.contaAngra.chamados.edit') ->with('info', '* Para abrir um atendimento, é necessário possuir pelo menos uma adesão a um serviço da Conta Angra.'); } $convenios = $ChamadoService->preparaConvenios($preparaConvenios); return view('admin.contaAngra.chamados.edit', compact(['user', 'convenios', 'chamado'])); } public function update(ChamadoRequest $request, Chamado $chamado): RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } $request->validated(); $array_chamado = [ 'user_id' => Auth::user()->id, 'convenio' => $request->convenio, 'convenioAtual' => $request->convenio, 'numeroChamado' => Carbon::now()->format('YmdHis'), 'assunto' => $request->assunto, ]; $ChamadoService = new ChamadoService(); return $ChamadoService->update($request, $chamado, $array_chamado); } public function destroy(Request $request, Chamado $chamado): RedirectResponse { $response = $this->checkPermissao($this->permissao, "excluir"); if ($response instanceof RedirectResponse) { return $response; } $ChamadoService = new ChamadoService(); foreach ($chamado->mensagens as $mensagem) { foreach ($mensagem->arquivos as $arquivo) { $this->handleFileDestroyArquivo($arquivo->link); $ChamadoService->destroyArquivo($arquivo); } $ChamadoService->destroyMensagem($mensagem); } return $ChamadoService->destroy($chamado); } public function show(Chamado $chamado): View|RedirectResponse { $response = $this->checkPermissao($this->permissao, "editar"); if ($response instanceof RedirectResponse) { return $response; } $user = Auth::user(); $ChamadoService = new ChamadoService(); // Verifica se há pesquisa de satisfação pendente $PesquisaSatisfacaoService = new \App\Http\Services\Accounts\Chamados\ChamadoPesquisaSatisfacaoService(); $temPesquisaPendente = $PesquisaSatisfacaoService->temPesquisaPendente($chamado); // Se houver pesquisa pendente, redireciona para a pesquisa if ($temPesquisaPendente) { return redirect() ->route('admin.contaAngra.chamados.pesquisa-satisfacao.show', $chamado->id) ->with('warning', __('Por favor, responda a pesquisa de satisfação para continuar.')); } $mensagens = $ChamadoService->getMensagens($chamado); $status = $ChamadoService->getStatusChamado(); $ChamadoService->marcarMensagensComoVisualizadas($chamado, $user->id); return view('admin.contaAngra.chamados.show', compact(['user', 'mensagens', 'chamado', 'status'])); } public function novaMensagem(ChamadoShowRequet $request, Chamado $chamado): RedirectResponse { $response = $this->checkPermissao($this->permissao, "adicionar"); if ($response instanceof RedirectResponse) { return $response; } $request->validated(); $user = Auth::user(); $ChamadoService = new ChamadoService(); $ChamadoArquivoService = new ChamadoArquivoService(); $array_mensagem = [ "chamado_id" => $chamado->id, "owner_id" => $user->id, "user_id" => $user->id, "mensagem" => $request->mensagem, ]; $mensagem = $ChamadoService->novaMensagem($array_mensagem); if($mensagem instanceof RedirectResponse){ return $mensagem; } if ($request->hasFile('link')) { foreach ($request->file('link') as $file) { if (!$file->isValid()) { continue; } $link = $this->handleFileUploadLoop($file, 'link', 'arquivos'); if ($link === null) { continue; // Arquivo rejeitado pela validação do FileUploadHelper } $array_arquivo = [ "user_id" => Auth::user()->id, "owner_id" => $mensagem->id, "nome" => \App\Helpers\FileUploadHelper::sanitizeOriginalFileName($file), "tipo" => "Imagem", "link" => $link, ]; if (($arquivo = $ChamadoArquivoService->save($array_arquivo)) instanceof RedirectResponse) { return $arquivo; } } if($request->boolean('finalizado')){ $array_chamado = ["statusChamado" => "Finalizado"]; $ChamadoArquivoService->updateChamado($chamado, $array_chamado); $chamado->refresh(); if ($chamado->credenciamento_id && $chamado->user && $chamado->user->email) { \Illuminate\Support\Facades\Mail::to($chamado->user->email)->send(new \App\Mail\Cultura\Credenciamento\RecursoResultadoCredenciamentoMail($chamado)); } // Após finalizar, redireciona para pesquisa de satisfação return redirect() ->route("admin.contaAngra.chamados.pesquisa-satisfacao.show", $chamado->id) ->with("success", __("* Chamado finalizado com sucesso! Por favor, responda a pesquisa de satisfação.")); } } return redirect() ->route("admin.contaAngra.chamados.show", $chamado->id) ->with("success", __("* Nova mensagem adicionada com sucesso a solicitação!")); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings