@extends('admin.base-chamados') @section('page_title', 'Chamados | Admin RH') @section('styles') @endsection @section('nav') @include('admin.partials.nav-rh') @endsection {{-- ── Topbar ── --}} @section('page-header')

Chamados — RH

@endsection {{-- ── Stat cards ── --}} @section('stat-cards') @php $movimento = \App\Helpers\ChamadoHelper::movimentoDoDia($daily_chamado); $abertosHoje = $movimento['abertos']; $fechadosHoje = $movimento['solucionados']; // Contados no banco: $chamados é só a página visível da listagem. $totalAbertos = $cardTotalAbertos; $semInteracao = $cardSemInteracao; $preContratos = $cardNovos; @endphp

Atividade

{{ $abertosHoje }} {{ $fechadosHoje }}

abertos / fechados hoje

Pré-contratos

{{ $preContratos }}

contratações sem técnico atribuído

Sem interação

{{ $semInteracao }}

chamados há +3 dias parados

@endsection {{-- ── Filtros do dropdown principal ── --}} @section('toolbar-filters') Todos Seus Chamados Em aberto Em andamento Planejados Solucionados @endsection {{-- ── Botões de categoria na toolbar ── --}} @section('toolbar-extra') @if (in_array(auth()->user()->level, [2, 99]))
Contratações Assinatura Dúvidas Acesso
@endif @endsection {{-- ── Cabeçalho da tabela ── --}} @section('table-header')
ID
Solicitante
Chamado
Status
Equipe
Datas
@endsection {{-- ── Linhas da tabela ── --}} @section('table-rows') @include('admin.view.chamados') @endsection {{-- ── Modal: categorias por técnico ── --}} @section('modals') @if (in_array(auth()->user()->level, [2, 99])) @endif @endsection @section('scripts-extra') @if (in_array(auth()->user()->level, [2, 99])) (function () { const selectTec = document.getElementById('selectTecnicoCategoria'); const blocoCats = document.getElementById('blocoCategorias'); const loading = document.getElementById('loadingCategorias'); const btnSalvar = document.getElementById('btnSalvarCategorias'); let habilitadas = []; let userId = null; const container = document.getElementById('containerCategorias'); function renderCatBtns(categorias) { container.innerHTML = ''; categorias.forEach(cat => { const btn = document.createElement('button'); btn.type = 'button'; btn.className = 'saas-btn saas-cat-toggle ' + (habilitadas.includes(cat.id) ? 'saas-cat-on' : 'saas-cat-off'); btn.dataset.id = cat.id; btn.textContent = cat.name; btn.addEventListener('click', function () { const id = parseInt(btn.dataset.id); const idx = habilitadas.indexOf(id); if (idx >= 0) { habilitadas.splice(idx, 1); btn.classList.replace('saas-cat-on', 'saas-cat-off'); } else { habilitadas.push(id); btn.classList.replace('saas-cat-off', 'saas-cat-on'); } }); container.appendChild(btn); }); } selectTec.addEventListener('change', function () { userId = this.value; if (!userId) { blocoCats.style.display = 'none'; btnSalvar.disabled = true; return; } loading.style.display = 'block'; blocoCats.style.display = 'none'; btnSalvar.disabled = true; fetch(`/admin/rh/tecnicos/${userId}/categorias`, { headers: { 'Accept': 'application/json', 'X-Requested-With': 'XMLHttpRequest' } }) .then(r => r.json()) .then(data => { habilitadas = data.habilitadas; renderCatBtns(data.categorias); loading.style.display = 'none'; blocoCats.style.display = 'block'; btnSalvar.disabled = false; }) .catch(() => { loading.style.display = 'none'; }); }); btnSalvar.addEventListener('click', function () { if (!userId) return; btnSalvar.disabled = true; fetch(`/admin/rh/tecnicos/${userId}/categorias`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'X-CSRF-TOKEN': '{{ csrf_token() }}', }, body: JSON.stringify({ category_ids: habilitadas }), }) .then(r => r.json()) .then(() => { btnSalvar.disabled = false; btnSalvar.innerHTML = ' Salvo!'; setTimeout(() => { btnSalvar.innerHTML = ' Salvar'; }, 2000); }) .catch(() => { btnSalvar.disabled = false; }); }); $('#modalCategoriaTecnico').on('hidden.bs.modal', function () { selectTec.value = ''; blocoCats.style.display = 'none'; btnSalvar.disabled = true; habilitadas = []; userId = null; container.innerHTML = ''; }); })(); @endif @endsection