From 48ba99c2ff7407e951bece8ee6250e461ce85f3e Mon Sep 17 00:00:00 2001 From: Felipe Fontana Date: Fri, 9 Feb 2024 10:45:05 -0400 Subject: [PATCH] =?UTF-8?q?Att:=20adicionando=20fun=C3=A7=C3=A3o=20de=20ca?= =?UTF-8?q?dastro=20de=20pesquisas=20de=20satisfa=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/FilasController.php | 42 ++-- .../Admin/PesquisaSatisfacaoController.php | 199 ++++++++++++++++++ .../PesquisaSatisfacaoOptionController.php | 146 +++++++++++++ .../Admin/RelatoriosController.php | 4 +- app/Models/Filas.php | 7 +- app/Models/PesquisaSatisfacao.php | 63 ++++++ app/Models/PesquisaSatisfacaoOption.php | 63 ++++++ app/Models/PesquisaSatisfacaoResposta.php | 34 +++ public/js/views/fila/atualizaFila.js | 26 ++- .../js/views/pesquisas/atualizaPesquisas.js | 48 +++++ .../atualizaPesquisasOptions.js | 20 ++ .../views/admin/cadastros/filas.blade.php | 23 +- .../views/admin/cadastros/pesquisas.blade.php | 94 +++++++++ .../admin/cadastros/pesquisasOption.blade.php | 85 ++++++++ .../admin/dashboard/agentesLogados.blade.php | 4 +- .../modal/edit/modalEditFila.blade.php | 7 + .../edit/modalEditPesquisaOption.blade.php | 53 +++++ .../modal/edit/modalEditPesquisas.blade.php | 60 ++++++ .../modal/insert/modalFila.blade.php | 11 + .../insert/modalPesquisaOption.blade.php | 46 ++++ .../modal/insert/modalPesquisas.blade.php | 64 ++++++ .../modal/insert/modalSystemMessage.blade.php | 1 + resources/views/layouts/menu.blade.php | 9 + routes/web.php | 6 +- 24 files changed, 1071 insertions(+), 44 deletions(-) create mode 100644 app/Http/Controllers/Admin/PesquisaSatisfacaoController.php create mode 100644 app/Http/Controllers/Admin/PesquisaSatisfacaoOptionController.php create mode 100644 app/Models/PesquisaSatisfacao.php create mode 100644 app/Models/PesquisaSatisfacaoOption.php create mode 100644 app/Models/PesquisaSatisfacaoResposta.php create mode 100644 public/js/views/pesquisas/atualizaPesquisas.js create mode 100644 public/js/views/pesquisas_options/atualizaPesquisasOptions.js create mode 100644 resources/views/admin/cadastros/pesquisas.blade.php create mode 100644 resources/views/admin/cadastros/pesquisasOption.blade.php create mode 100644 resources/views/components/modal/edit/modalEditPesquisaOption.blade.php create mode 100644 resources/views/components/modal/edit/modalEditPesquisas.blade.php create mode 100644 resources/views/components/modal/insert/modalPesquisaOption.blade.php create mode 100644 resources/views/components/modal/insert/modalPesquisas.blade.php diff --git a/app/Http/Controllers/Admin/FilasController.php b/app/Http/Controllers/Admin/FilasController.php index 7490528..902e5cb 100644 --- a/app/Http/Controllers/Admin/FilasController.php +++ b/app/Http/Controllers/Admin/FilasController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\PesquisaSatisfacao; use App\Models\Filas; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -11,6 +12,13 @@ use Illuminate\Support\Facades\Validator; class FilasController extends Controller { + + public function __construct( + protected PesquisaSatisfacao $pesquisaSatisfacaoRepository, + protected Filas $filasRepository + ) { + } + public function index(Request $request) { $user = auth()->user(); @@ -18,32 +26,19 @@ class FilasController extends Controller abort(404); } - $selected = (object) ['isSelected' => false, 'isAtivo' => 'ativo']; $filas = filas::class; $user = auth()->user(); $id_empresa = $user->empresa->first()->id; - if ($request->status) { + $pesquisas = $this->pesquisaSatisfacaoRepository->list(['id_empresa' => $id_empresa, 'status' => true]); - $status = $request->status == 'ativo' ? true : false; + $search = strtolower($request->pesquisa); + $status = $request->status === "desativado" ? false : true; - $selected = (object) ['isSelected' => true, 'isAtivo' => $request->status]; + $filas = $this->filasRepository->list(['id_empresa' => $id_empresa, 'status' => $status, 'search' => $search]); - $filas = $filas::where('is_ativa', $status); - } else { - $filas = $filas::where('is_ativa', true); - } - - if ($request->pesquisa) { - - $pesquisa = strtolower($request->pesquisa); - $filas->where(DB::raw('LOWER(queues.nome)'), 'like', "%$pesquisa%"); - } - - $filas = $filas->where('id_empresa', $id_empresa)->OrderBy('nome', 'asc')->get(); - - return view('admin.cadastros.filas', compact('filas', 'selected')); + return view('admin.cadastros.filas', compact('filas', 'pesquisas', 'status', 'search')); } public function create(Request $request) @@ -83,6 +78,7 @@ class FilasController extends Controller Filas::create([ 'nome' => strtoupper($request->nome), 'id_empresa' => $id_empresa, + 'id_pesquisa' => $request->pesquisa, 'is_ativa' => $is_ativa ]); @@ -100,9 +96,16 @@ class FilasController extends Controller return redirect('filas'); } + $id_empresa = $user->empresa->first()->id; + + $pesquisas = $this->pesquisaSatisfacaoRepository->list(['id_empresa' => $id_empresa, 'status' => true]); + $setor = Filas::find($id); $response = [ - 'data' => $setor, + 'data' => [ + 'setor' => $setor, + 'pesquisas' => $pesquisas + ], ]; return response()->json($response); @@ -140,6 +143,7 @@ class FilasController extends Controller Filas::where('id', $id)->update([ 'nome' => strtoupper($request->nome), + 'id_pesquisa' => $request->pesquisa, 'is_ativa' => $is_ativa ]); diff --git a/app/Http/Controllers/Admin/PesquisaSatisfacaoController.php b/app/Http/Controllers/Admin/PesquisaSatisfacaoController.php new file mode 100644 index 0000000..ec78616 --- /dev/null +++ b/app/Http/Controllers/Admin/PesquisaSatisfacaoController.php @@ -0,0 +1,199 @@ +user(); + if(Gate::forUser($user)->denies('show_pesquisas')){ + abort(404); + } + + $empresas = Helper::getEmpresas(); + + if (!is_int($empresas)){ + $empresasIds = $empresas->pluck('id')->toArray(); + } else { + $empresasIds = $empresas; + } + + $pesquisas = $this->pesquisaSatisfacaoRepository->list(["id_empresa" => $empresasIds]); + $numberChannels = $this->numberChannelRepository->list(["id_empresa" => $empresasIds]); + + return view('admin.cadastros.pesquisas', compact('pesquisas', 'numberChannels')); + } + + public function store(Request $request) + { + $user = auth()->user(); + if(Gate::forUser($user)->denies('store_pesquisas')){ + abort(404); + } + + $validator = Validator::make($request->all(), [ + 'descricao' => 'string|required', + 'nome' => [ + 'required', + function ($attribute, $value, $fail){ + $existingRecord = PesquisaSatisfacao::where('nome', strtoupper($value))->first(); + + if ($existingRecord) { + $fail('O nome já está em uso.'); + } + }, + ], + 'status' => 'required', + 'channel' => 'required' + ], [ + 'unique' => 'O nome já está em uso.', + 'required' => 'É preciso informar o campo :attribute.' + ]); + + if ($validator->fails()) { + return redirect()->back()->with('error', $validator->errors()->first()); + } + + $status = $request->status === "on" ? true : false; + + $this->pesquisaSatisfacaoRepository->create(strtoupper($request->nome),$request->descricao, $status, $request->channel); + + return redirect()->back()->with('status', 'Cadastrado com sucesso'); + } + + public function edit($id) + { + $user = auth()->user(); + if(Gate::forUser($user)->denies('update_pesquisas')){ + abort(404); + } + + if (empty($id)) { + return response()->json(['data' => 'Parametro ID é obrigatório']); + } + + $pesquisaData = PesquisaSatisfacao::find($id); + $user = auth()->user(); + $id_empresa = Helper::getEmpresas(); + + if (!is_int($id_empresa)){ + $empresasIds = $id_empresa->pluck('id')->toArray(); + } else { + $empresasIds = $id_empresa; + } + + $numberChannels = $this->numberChannelRepository->list(["id_empresa" => $empresasIds]); + $response = [ + 'data' => [ + 'status' => true, + 'numbers' => $numberChannels, + 'pesquisa_data' => $pesquisaData + ], + + ]; + + return response()->json($response); + } + + public function update(Request $request, $id) + { + $user = auth()->user(); + if(Gate::forUser($user)->denies('update_pesquisas')){ + abort(404); + } + + if (!($this->existeResposta($id) && (PesquisaSatisfacao::where('nome', strtoupper($request->nome))->where('id', $id)->where('descricao', $request->descricao)->where('id_number', $request->channel)->first()))){ + return redirect()->back()->with('error', 'Essa pesquisa já foi respondida e não pode ser alterada!'); + } + + $validator = Validator::make($request->all(), [ + 'descricao' => 'string|required', + 'nome' => [ + 'required', + function ($attribute, $value, $fail) use ($id){ + $existingRecord = PesquisaSatisfacao::where('nome', strtoupper($value))->where('id', '!=', $id)->first(); + + if ($existingRecord) { + $fail('O nome já está em uso.'); + } + }, + function ($attribute, $value, $fail) use ($id){ + $existingRecord = PesquisaSatisfacao::where('nome', strtoupper($value))->where('id', '!=', $id)->first(); + + if ($existingRecord) { + $fail('O nome já está em uso.'); + } + }, + ], + 'status' => 'required', + 'channel' => 'required' + ], [ + 'unique' => 'O nome já está em uso.', + 'required' => 'É preciso informar o campo :attribute.' + ]); + + if ($validator->fails()) { + return redirect()->back()->with('error', $validator->errors()->first()); + } + + $status = $request->status === "on" ? true : false; + + PesquisaSatisfacao::where("id", $id) + ->update([ + 'nome' => strtoupper($request->nome), + 'descricao' => $request->descricao, + 'status' => $status, + 'id_number' => $request->channel + ]); + + return redirect('pesquisas')->with('status', 'Atualizado com sucesso'); + } + + + public function destroy($id) + { + $user = auth()->user(); + if(Gate::forUser($user)->denies('destroy_pesquisas')){ + abort(404); + } + + $pesquisaOptions = $this->pesquisaSatisfacaoOptionRepository->list(['id_pesquisa' => $id]); + + if (count($pesquisaOptions) > 0) { + return redirect()->back()->with('error', 'Primeiramente é necessário deletar as opções da Pesquisa!'); + } + + PesquisaSatisfacao::where("id", $id) + ->delete(); + + return redirect('pesquisas')->with('status', 'deletado com sucesso'); + } + + private function existeResposta(int $id_pesquisa) { + if ($this->pesquisaSatisfacaoRespostaRepository->list(['id_pesquisa' => $id_pesquisa])) { + return true; + } else { + return false; + } + } + +} diff --git a/app/Http/Controllers/Admin/PesquisaSatisfacaoOptionController.php b/app/Http/Controllers/Admin/PesquisaSatisfacaoOptionController.php new file mode 100644 index 0000000..f38e1ab --- /dev/null +++ b/app/Http/Controllers/Admin/PesquisaSatisfacaoOptionController.php @@ -0,0 +1,146 @@ +back()->with('error', 'O parametro ID é obrigatório.'); + } + $options = $this->pesquisaSatisfacaoOptionRepository->list(["id_pesquisa" => $id]); + $id_pesquisa = $id; + + return view('admin.cadastros.pesquisasOption', compact('options', 'id_pesquisa')); + } + + public function store(Request $request) + { + if ($this->existeResposta($request->id_pesquisa)) { + return redirect()->back()->with('error', 'Essa pesquisa já foi respondida e não pode ser alterada!'); + } + + $validator = Validator::make($request->all(), [ + 'sequencia' => [ + 'required', + function ($attribute, $value, $fail) use ($request){ + $existingRecord = PesquisaSatisfacaoOption::where('id_pesquisa', $request->id_pesquisa)->where('opcao', $value)->first(); + + if ($existingRecord) { + $fail('A opção já está em uso.'); + } + }, + ], + ], [ + 'unique' => 'O :attribute já está em uso.' + ]); + + if ($validator->fails()) { + return redirect()->back()->with('error', $validator->errors()->first()); + } + + $created = $this->pesquisaSatisfacaoOptionRepository->create($request->sequencia, $request->descricao, $request->id_pesquisa); + if(!$created){ + redirect()->back()->with('error', 'Erro ao tentar cadastrar opção'); + } + + return redirect()->back()->with('status', 'Cadastrado com sucesso'); + } + + public function destroy($id_pesquisa, $id_option) + { + if ($this->existeResposta($id_pesquisa)) { + return redirect()->back()->with('error', 'Essa pesquisa já foi respondida e não pode ser alterada!'); + } + + PesquisaSatisfacaoOption::where("id", $id_option) + ->delete(); + + + return redirect()->back()->with('status', 'Deletado com sucesso'); + } + + public function edit(Request $request) + { + $id = $request->segment(4); + if (empty($id)) { + return response()->json(['data' => 'Parametro ID é obrigatório']); + } + + $optionData = PesquisaSatisfacaoOption::find($id); + $response = [ + 'data' => [ + 'status' => true, + 'option_data' => $optionData + ], + ]; + + return response()->json($response); + } + + + public function update(Request $request) + { + $id = $request->segment(4); + $id_pesquisa = $request->segment(2); + + if ($this->existeResposta($id_pesquisa)) { + return redirect()->back()->with('error', 'Essa pesquisa já foi respondida e não pode ser alterada!'); + } + + if (!$id) { + return redirect()->back()->with('error', 'ID não encontrado'); + } + + $validator = Validator::make($request->all(), [ + 'sequencia' => [ + 'required', + function ($attribute, $value, $fail) use ($id, $id_pesquisa){ + $existingRecord = PesquisaSatisfacaoOption::where('id_pesquisa', $id_pesquisa)->where('opcao', $value)->where('id', '!=', $id)->first(); + + if ($existingRecord) { + $fail('A opção já está em uso.'); + } + }, + ], + ], [ + 'unique' => 'O :attribute já está em uso.' + ]); + + if ($validator->fails()) { + return redirect()->back()->with('error', $validator->errors()->first()); + } + + PesquisaSatisfacaoOption::where("id", $id) + ->update([ + 'opcao' => $request->sequencia, + 'descricao' => $request->descricao, + 'data_reg' => date("Y-m-d") + ]); + + return redirect()->back()->with('status', 'Atualizado com sucesso'); + } + + private function existeResposta(int $id_pesquisa) { + if ($this->pesquisaSatisfacaoRespostaRepository->list(['id_pesquisa' => $id_pesquisa])) { + return true; + } else { + return false; + } + } +} diff --git a/app/Http/Controllers/Admin/RelatoriosController.php b/app/Http/Controllers/Admin/RelatoriosController.php index 79f2703..e2f98ab 100644 --- a/app/Http/Controllers/Admin/RelatoriosController.php +++ b/app/Http/Controllers/Admin/RelatoriosController.php @@ -35,7 +35,7 @@ class RelatoriosController extends Controller $fila = Filas::where('id', $id_fila)->where('id_empresa', $id_empresa)->first(); - $agentesNaFila = Supervisor::where('fila', $fila->nome)->get(); + $agentesNaFila = Supervisor::where('fila', $fila->name)->get(); $agentesNaFila = DB::table('supervisor as s') ->leftJoin('atendimento as a', function ($join) { @@ -45,7 +45,7 @@ class RelatoriosController extends Controller ->where(DB::raw('DATE(a.data_reg)'), $data_atual); }) ->select('s.*', DB::raw('COALESCE(COUNT(a.id), 0) AS qtde_atendimento')) - ->where('s.fila', $fila->nome) + ->where('s.fila', $fila->name) ->groupBy('s.id') ->get(); diff --git a/app/Models/Filas.php b/app/Models/Filas.php index c7bcb4d..f55906c 100644 --- a/app/Models/Filas.php +++ b/app/Models/Filas.php @@ -18,11 +18,14 @@ class Filas extends Model 'nome', 'id_empresa', 'is_ativa', + 'id_pesquisa' ]; public function list(array $params) { - $filas = DB::table('queues as q')->select("q.id", "q.nome as name"); + $filas = DB::table('queues as q') + ->leftJoin('pesquisa_satisfacao as ps', 'ps.id', '=', 'q.id_pesquisa') + ->select('q.id', 'q.nome as name', 'q.id_empresa', 'q.is_ativa', 'q.id_pesquisa', 'ps.nome as name_pesquisa'); if (is_array($params['id_empresa'])) { // Se $params['id_empresa'] for um array, use a condição whereIn @@ -33,7 +36,7 @@ class Filas extends Model } if (isset($params['search'])) { - $filas->where(DB::raw('LOWER(u.nome)'), 'LIKE', "%{$params['search']}%"); + $filas->where(DB::raw('LOWER(q.nome)'), 'LIKE', "%{$params['search']}%"); } if (isset($params['status'])) { diff --git a/app/Models/PesquisaSatisfacao.php b/app/Models/PesquisaSatisfacao.php new file mode 100644 index 0000000..a47835a --- /dev/null +++ b/app/Models/PesquisaSatisfacao.php @@ -0,0 +1,63 @@ +join('number_channel as nc', 'nc.id', '=', 'p.id_number') + ->select('p.*'); + + if (is_array($params['id_empresa'])) { + // Se $params['id_empresa'] for um array, use a condição whereIn + $pesquisas->whereIn('nc.id_empresa', $params['id_empresa']); + } else { + // Se for um único valor, use a condição normal + $pesquisas->where('nc.id_empresa', $params['id_empresa']); + } + + if(isset($params['id_number'])){ + $pesquisas->where('p.id_number', $params['id_number']); + } + + if(isset($params['nome'])){ + $pesquisas->where('p.nome', $params['nome']); + } + + if(isset($params['status'])){ + $pesquisas->where('p.status', $params['status']); + } + + return $pesquisas->get(); + } + + public function create(string $nome, string $description, bool $status, string|int $id_number) + { + DB::table('pesquisa_satisfacao')->insert([ + 'nome' => strtoupper($nome), + 'descricao' => $description, + 'status' => $status, + 'id_number' => $id_number, + 'data_reg' => date('Y-m-d') + ]); + } +} diff --git a/app/Models/PesquisaSatisfacaoOption.php b/app/Models/PesquisaSatisfacaoOption.php new file mode 100644 index 0000000..d77dce7 --- /dev/null +++ b/app/Models/PesquisaSatisfacaoOption.php @@ -0,0 +1,63 @@ +belongsTo(PesquisaSatisfacao::class, 'id_pesquisa')->first(); + } + + public function list(array $params) + { + $options = DB::table('pesquisa_satisfacao_option as po') + ->join("pesquisa_satisfacao as p", "p.id", "=", "po.id_pesquisa") + ->select("po.*", "p.nome as pesquisa_nome"); + + if (isset($params['opcao'])) { + $options->where('po.opcao', $params['opcao']); + } + + if (isset($params['id_pesquisa'])) { + $options->where('po.id_pesquisa', $params['id_pesquisa']); + } + + return $options->orderBy('opcao', 'asc')->get(); + } + + public function create(string|int $sequence, string $descricao, string|int $id_pesquisa) + { + DB::beginTransaction(); + try { + DB::table("pesquisa_satisfacao_option")->insert([ + 'opcao' => $sequence, + 'descricao' => $descricao, + 'id_pesquisa' => $id_pesquisa, + 'data_reg' => date('Y-m-d') + ]); + + DB::commit(); + return true; + } catch (\Throwable $th) { + DB::rollBack(); + return false; + } + } +} diff --git a/app/Models/PesquisaSatisfacaoResposta.php b/app/Models/PesquisaSatisfacaoResposta.php new file mode 100644 index 0000000..8f5a635 --- /dev/null +++ b/app/Models/PesquisaSatisfacaoResposta.php @@ -0,0 +1,34 @@ +select('psr.*'); + + if(isset($params['id_pesquisa'])){ + $pesquisas->where('psr.id_pesquisa', $params['id_pesquisa']); + } + + return $pesquisas->get(); + } +} diff --git a/public/js/views/fila/atualizaFila.js b/public/js/views/fila/atualizaFila.js index b1510db..fc8b20c 100644 --- a/public/js/views/fila/atualizaFila.js +++ b/public/js/views/fila/atualizaFila.js @@ -5,17 +5,33 @@ function atualizarFila(id_fila) { success: function({ data }) { - console.log(data) + const fila_data = data.setor; + const pesquisas = data.pesquisas; const modal = document.querySelector('.modal-edit'); modal.style.display = 'block'; - modal.querySelector('form').action = `/filas/editar/${data.id}`; - modal.querySelector("input[name='nome']").value = data.nome; + modal.querySelector('form').action = `/filas/editar/${fila_data.id}`; + modal.querySelector("input[name='nome']").value = fila_data.nome; const containerCheckbox = modal.querySelector(".container-checkbox"); - if (!data.is_ativa) { + if (!fila_data.is_ativa) { containerCheckbox.innerHTML = ` Sim - Não` + Não` } + const containerChannels = modal.querySelector("select[name='pesquisa']"); + containerChannels.innerHTML = + ` ` + pesquisas.forEach(pesquisa => { + if (fila_data.id_pesquisa === pesquisa.id) { + containerChannels.innerHTML += + ` ` + + } else { + containerChannels.innerHTML += + ` ` + } + }) + } }); diff --git a/public/js/views/pesquisas/atualizaPesquisas.js b/public/js/views/pesquisas/atualizaPesquisas.js new file mode 100644 index 0000000..1899970 --- /dev/null +++ b/public/js/views/pesquisas/atualizaPesquisas.js @@ -0,0 +1,48 @@ +function atualizaRedirect(id_pesquisa) { + $.ajax({ + type: "get", + url: `pesquisas/${id_pesquisa}/edit`, + success: function({ + data + }) { + const pesquisa_data = data.pesquisa_data; + const numbers_channels = data.numbers; + const modal = document.querySelector('.modal-edit'); + modal.style.display = 'block'; + modal.querySelector('form').action = `pesquisas/${id_pesquisa}`; + + modal.querySelector("input[name='nome']").value = pesquisa_data.nome; + modal.querySelector("textarea[name='descricao']").value = pesquisa_data.descricao; + + const containerRadioStatus = document.querySelector(".container-radio-status"); + + if (pesquisa_data.status) { + containerRadioStatus.innerHTML = + ` Sim + Não` + } else { + containerRadioStatus.innerHTML = + ` Sim + Não` + } + + const containerChannels = modal.querySelector("select[name='channel']"); + numbers_channels.forEach(channel => { + if (pesquisa_data.id_number === channel.id) { + containerChannels.innerHTML = + ` ` + + } else { + containerChannels.innerHTML = + ` ` + + } + }) + + } + }); +} + +function fecharModal() { + document.querySelector('.modal-edit').style.display = 'none'; +} \ No newline at end of file diff --git a/public/js/views/pesquisas_options/atualizaPesquisasOptions.js b/public/js/views/pesquisas_options/atualizaPesquisasOptions.js new file mode 100644 index 0000000..bbdcc1e --- /dev/null +++ b/public/js/views/pesquisas_options/atualizaPesquisasOptions.js @@ -0,0 +1,20 @@ +function atualizaOptions(id_option) { + $.ajax({ + type: "get", + url: `options/${id_option}/edit`, + success: function({ + data + }) { + const pesquisa_data = data.option_data; + const modal = document.querySelector('.modal-edit'); + modal.style.display = 'block'; + modal.querySelector('form').action = `options/${id_option}`; + modal.querySelector("input[name='sequencia']").value = pesquisa_data.opcao; + modal.querySelector("textarea[name='descricao']").value = pesquisa_data.descricao; + } + }); +} + +function fecharModal() { + document.querySelector('.modal-edit').style.display = 'none'; +} \ No newline at end of file diff --git a/resources/views/admin/cadastros/filas.blade.php b/resources/views/admin/cadastros/filas.blade.php index 7f76651..fd7863b 100644 --- a/resources/views/admin/cadastros/filas.blade.php +++ b/resources/views/admin/cadastros/filas.blade.php @@ -26,20 +26,15 @@ @@ -51,6 +46,7 @@ ID Nome + Pesquisa Status Ações @@ -60,7 +56,8 @@ @foreach($filas as $fila) {{$fila->id}} - {{$fila->nome}} + {{$fila->name}} + {{$fila->name_pesquisa}} @if($fila->is_ativa) ATIVO @@ -95,6 +92,6 @@ - - + + \ No newline at end of file diff --git a/resources/views/admin/cadastros/pesquisas.blade.php b/resources/views/admin/cadastros/pesquisas.blade.php new file mode 100644 index 0000000..5d1f9b8 --- /dev/null +++ b/resources/views/admin/cadastros/pesquisas.blade.php @@ -0,0 +1,94 @@ + +
+ @if (session('status')) +
+ {{ session('status') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + +
+
+

+ Pesquisas de Satisfação +

+ @can('store_redirect') + + @endcan +
+
+ +
+ + + + + + + + + + + + + @foreach ($pesquisas as $pesquisa) + + + + + + @if ($pesquisa->status) + + @else + + @endif + + + + + + @endforeach + +
IDNomeDescriçãoStatusOpçõesAções
{{ $pesquisa->id }}{{ $pesquisa->nome }} + {{ $pesquisa->descricao }}ATIVODESATIVADO + @can('show_redirect_option') + Editar Opções + @endcan + + @can('edit_redirect') + + @endcan + @can('destroy_redirect') +
+ @csrf + @method('delete') + +
+ @endcan +
+
+
+ + + + + + +
diff --git a/resources/views/admin/cadastros/pesquisasOption.blade.php b/resources/views/admin/cadastros/pesquisasOption.blade.php new file mode 100644 index 0000000..6aa58f2 --- /dev/null +++ b/resources/views/admin/cadastros/pesquisasOption.blade.php @@ -0,0 +1,85 @@ + +
+ Voltar + + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + +
+
+ +
+
+

Configuração Options

+

Adicione, edite ou remova suas opções da pesquisa

+
+ @can('store_redirect_option') + + @endcan +
+ +
+ + + + + + + + + + + @foreach ($options as $option) + + + + + + + + @endforeach + +
IDOpçãoDescriçãoAções
{{ $option->id }} + + {{ $option->opcao }} + + {{ $option->descricao }} + + @can('edit_redirect_option') + + @endcan + @can('destroy_redirect_option') +
+ @csrf + @method('delete') + +
+ @endcan +
+
+
+
+
+ + + + +
diff --git a/resources/views/admin/dashboard/agentesLogados.blade.php b/resources/views/admin/dashboard/agentesLogados.blade.php index 44e637e..0fc3ac4 100644 --- a/resources/views/admin/dashboard/agentesLogados.blade.php +++ b/resources/views/admin/dashboard/agentesLogados.blade.php @@ -9,7 +9,7 @@ @endif

- Agentes na Fila - {{$fila->nome}} + Agentes na Fila - {{$fila->name}}

@@ -37,7 +37,7 @@

- Atendimentos em Espera - {{$fila->nome}} + Atendimentos em Espera - {{$fila->name}}

diff --git a/resources/views/components/modal/edit/modalEditFila.blade.php b/resources/views/components/modal/edit/modalEditFila.blade.php index b030c64..57fb7e4 100644 --- a/resources/views/components/modal/edit/modalEditFila.blade.php +++ b/resources/views/components/modal/edit/modalEditFila.blade.php @@ -21,6 +21,13 @@ +
+ + +
Sim diff --git a/resources/views/components/modal/edit/modalEditPesquisaOption.blade.php b/resources/views/components/modal/edit/modalEditPesquisaOption.blade.php new file mode 100644 index 0000000..438f0a8 --- /dev/null +++ b/resources/views/components/modal/edit/modalEditPesquisaOption.blade.php @@ -0,0 +1,53 @@ +@props(['id_pesquisa']) + + + + \ No newline at end of file diff --git a/resources/views/components/modal/edit/modalEditPesquisas.blade.php b/resources/views/components/modal/edit/modalEditPesquisas.blade.php new file mode 100644 index 0000000..f95de9a --- /dev/null +++ b/resources/views/components/modal/edit/modalEditPesquisas.blade.php @@ -0,0 +1,60 @@ +@props(['numberChannels']) + + diff --git a/resources/views/components/modal/insert/modalFila.blade.php b/resources/views/components/modal/insert/modalFila.blade.php index 66c8887..d5a5f42 100644 --- a/resources/views/components/modal/insert/modalFila.blade.php +++ b/resources/views/components/modal/insert/modalFila.blade.php @@ -21,6 +21,17 @@
+
+ + +
diff --git a/resources/views/components/modal/insert/modalPesquisaOption.blade.php b/resources/views/components/modal/insert/modalPesquisaOption.blade.php new file mode 100644 index 0000000..7b84998 --- /dev/null +++ b/resources/views/components/modal/insert/modalPesquisaOption.blade.php @@ -0,0 +1,46 @@ +@props(['id_pesquisa']) + + + \ No newline at end of file diff --git a/resources/views/components/modal/insert/modalPesquisas.blade.php b/resources/views/components/modal/insert/modalPesquisas.blade.php new file mode 100644 index 0000000..0203e16 --- /dev/null +++ b/resources/views/components/modal/insert/modalPesquisas.blade.php @@ -0,0 +1,64 @@ +@props(['numberChannels']) + + diff --git a/resources/views/components/modal/insert/modalSystemMessage.blade.php b/resources/views/components/modal/insert/modalSystemMessage.blade.php index 8076f4b..0d2a78b 100644 --- a/resources/views/components/modal/insert/modalSystemMessage.blade.php +++ b/resources/views/components/modal/insert/modalSystemMessage.blade.php @@ -45,6 +45,7 @@ +
diff --git a/resources/views/layouts/menu.blade.php b/resources/views/layouts/menu.blade.php index 5c73a51..3375ecd 100644 --- a/resources/views/layouts/menu.blade.php +++ b/resources/views/layouts/menu.blade.php @@ -89,6 +89,15 @@ @endcan + @can('show_pesquisas') +
  • + + + Pesquisas + +
  • + @endcan + @can('show_system_message')
  • diff --git a/routes/web.php b/routes/web.php index 9e0d429..fa3de54 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,6 +21,8 @@ use App\Http\Controllers\Admin\SupervisorController; use App\Http\Controllers\Admin\SystemMessageController; use App\Http\Controllers\Admin\TemplatesController; use App\Http\Controllers\Admin\NumberChannelController; +use App\Http\Controllers\Admin\PesquisaSatisfacaoController; +use App\Http\Controllers\Admin\PesquisaSatisfacaoOptionController; use Illuminate\Support\Facades\Route; Route::middleware(['auth', 'verified'])->group(function () { @@ -32,7 +34,9 @@ Route::middleware(['auth', 'verified'])->group(function () { 'contatos' => ContatosController::class, 'templates' => TemplatesController::class, 'horarios' => HorariosController::class, - 'horarios.options' => HorariosOptionController::class + 'horarios.options' => HorariosOptionController::class, + 'pesquisas' => PesquisaSatisfacaoController::class, + 'pesquisas.options' => PesquisaSatisfacaoOptionController::class, ]); Route::delete('/templates/deletar/{id}', [TemplatesController::class, 'deletar'])->name('templatesDeletar');