File manager - Edit - /var/www/html/portalHomolog/resources/views/admin/demandas/show.blade.php
Back
@extends('layouts.admin.theme') @section('title', env('APP_NAME') . ' :: ' . __('Demanda') . ' #' . $demanda->numero) <link rel="stylesheet" href="{{ asset('pmar/css/demandas.css') }}?v={{ filemtime(public_path('pmar/css/demandas.css')) }}"> @section('content') <div class="card shadow-sm"> @include('components.buttons._headLineButtonsBackAdd', [ 'headLine' => "<i class='fa-solid fa-clipboard-list'></i> " . __('Demanda') . " <span class='fw-normal fs-6 ms-1'>#{{ $demanda->numero }}</span>", 'routeBack' => 'admin.demandas.index', 'routeBackParams' => [], 'nameBack' => __('Quadro'), 'permission' => 'GERENCIADOR_DEMANDAS', ]) <div class="card-body"> @if (session('success')) <div class="alert alert-success alert-dismissible fade show"> {{ session('success') }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> @endif @if (session('error')) <div class="alert alert-danger alert-dismissible fade show"> {{ session('error') }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> @endif @if (session('warning')) <div class="alert alert-warning alert-dismissible fade show"> {{ session('warning') }} <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> @endif @if ($errors->any()) <div class="alert alert-danger alert-dismissible fade show"> <ul class="mb-0"> @foreach ($errors->all() as $e) <li>{{ $e }}</li> @endforeach </ul> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> @endif @if ($demandaFechada) <div class="alert alert-secondary d-flex align-items-center gap-2 mb-3"> <i class="fa-solid fa-lock fa-fw"></i> <span> <strong>{{ __('Demanda encerrada.') }}</strong> {{ __('Nenhuma alteração pode ser feita. Reabra a demanda para retomar as interações.') }} </span> </div> @endif <div class="row g-5 align-items-start"> <div class="col-12 col-lg-8"> <div class="card border-0 bg-gradient rounded-3 mb-4"> <div class="card-body p-4"> <div class="d-flex flex-wrap gap-2 mb-3 align-items-center"> <x-badges.status-demandas :status="$demanda->status" :label="$statusLabels[$demanda->status] ?? $demanda->status" /> <span class="badge bg-{{ $demanda->prioridade_color }} text-{{ $demanda->prioridade_text_color }} px-3 py-2"> {{ __($prioridades[$demanda->prioridade] ?? $demanda->prioridade) }} </span> </div> <h3 class="fw-bold mb-2" style="line-height: 1.4;">{{ $demanda->titulo }}</h3> @if ($demanda->descricao) <p class="text-muted small lh-base mb-0">{{ $demanda->descricao }}</p> @endif </div> </div> <div class="card border rounded-3 mb-3"> <div class="card-body"> <h6 class="fw-semibold mb-3"> <i class="fa-solid fa-paperclip text-secondary"></i> {{ __('Anexos') }} @if ($demanda->anexos->isNotEmpty()) <span class="badge bg-light text-muted border ms-1">{{ $demanda->anexos->count() }}</span> @endif </h6> @forelse ($demanda->anexos as $anexo) <div class="d-flex align-items-center gap-2 py-1 border-bottom"> <i class="fa-solid {{ $anexo->getIcone() }} text-muted fa-fw flex-shrink-0"></i> <a href="{{ route('admin.demandas.anexos.view', [$demanda->id, $anexo->id]) }}" target="_blank" rel="noopener noreferrer" class="flex-grow-1 small text-truncate text-body" title="{{ $anexo->nome_original }}"> {{ $anexo->nome_original }} </a> <span class="text-muted small text-nowrap">{{ $anexo->getTamanhoLegivel() }}</span> <div class="d-flex align-items-center gap-1 flex-shrink-0"> <a href="{{ route('admin.demandas.anexos.download', [$demanda->id, $anexo->id]) }}" class="btn btn-sm btn-outline-secondary" title="{{ __('Baixar') }}"> <i class="fa-solid fa-download"></i> </a> @if ($isCriador && $perm['editar'] && !$demandaFechada) <form action="{{ route('admin.demandas.anexos.destroy', [$demanda->id, $anexo->id]) }}" method="POST" class="m-0" data-confirm="{{ __('Confirmar remoção do anexo?') }}"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-outline-danger" title="{{ __('Remover') }}"> <i class="fa-solid fa-xmark"></i> </button> </form> @endif </div> </div> @empty <p class="text-muted small mb-0">{{ __('Nenhum anexo.') }}</p> @endforelse </div> </div> <div class="card border rounded-3 mb-3"> <div class="card-body"> <div class="d-flex align-items-center gap-2 mb-3"> <h6 class="fw-semibold mb-0"> <i class="fa-solid fa-list-check text-primary"></i> {{ __('Subtarefas') }} </h6> @if ($subtarefaTotal > 0) <small class="text-muted dm-subtarefa-counter">{{ $subtarefaConcluidas }}/{{ $subtarefaTotal }}</small> @endif </div> @if ($subtarefaTotal > 0) <div class="progress mb-3 demanda-progress"> <div class="progress-bar bg-success" style="width:{{ $subtarefaPct }}%"></div> </div> @endif <div id="subtarefas-lista" data-url-toggle="{{ route('admin.demandas.subtarefas.toggle', [$demanda->id, '__ID__']) }}"> @forelse ($demanda->subtarefas as $sub) <div class="d-flex align-items-start gap-2 py-2 border-bottom subtarefa-item" data-id="{{ $sub->id }}"> <input type="checkbox" class="form-check-input subtarefa-check flex-shrink-0 mt-1" {{ $sub->concluida ? 'checked' : '' }} {{ $perm['adicionar'] && !$demandaFechada && $sub->podeToggle($userUnidades, $userId) ? '' : 'disabled' }}> <div class="flex-grow-1 min-w-0"> <span class="small {{ $sub->concluida ? 'text-decoration-line-through text-muted' : '' }}"> {{ $sub->titulo }} </span> @if ($sub->concluida && $sub->conclusor) <div class="text-muted" style="font-size:.7rem;"> <i class="fa-solid fa-circle-check text-success"></i> {{ $sub->conclusor->name }} @if ($sub->concluida_em) · {{ $sub->concluida_em->format('d/m/Y H:i') }} @endif </div> @endif </div> @if ($sub->responsavel) <span class="badge bg-light text-secondary border small text-nowrap flex-shrink-0 mt-1"> <i class="fa-solid fa-user fa-xs"></i> {{ $sub->responsavel->name }} </span> @elseif ($sub->unidade) <span class="badge bg-light text-secondary border small text-nowrap flex-shrink-0 mt-1"> {{ $sub->unidade->abbreviation ?: $sub->unidade->name }} </span> @endif @if ($perm['editar'] && !$demandaFechada) <form action="{{ route('admin.demandas.subtarefas.destroy', [$demanda->id, $sub->id]) }}" method="POST" class="d-flex align-items-center flex-shrink-0 mt-1"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-outline-danger" title="{{ __('Remover') }}"> <i class="fa-solid fa-xmark"></i> </button> </form> @endif </div> @empty <p class="text-muted small">{{ __('Nenhuma subtarefa ainda.') }}</p> @endforelse </div> @if ($perm['adicionar'] && !$demandaFechada) <form action="{{ route('admin.demandas.subtarefas.store', $demanda->id) }}" method="POST" class="mt-3"> @csrf <div class="d-flex gap-2 mb-2"> <input type="text" name="titulo" class="form-control form-control-sm @error('titulo') is-invalid @enderror" placeholder="{{ __('Nova subtarefa…') }}" required maxlength="255"> <button type="submit" class="btn btn-sm btn-outline-primary flex-shrink-0"> <i class="fa-solid fa-plus"></i> </button> </div> @if ($destsUnidade->isNotEmpty()) <select name="unidade_id" class="form-select form-select-sm mb-2"> <option value="">- {{ __('Nenhuma unidade') }} -</option> @foreach ($destsUnidade as $dest) @if ($dest->unidade) <option value="{{ $dest->unidade_id }}"> {{ $dest->unidade->abbreviation ?: $dest->unidade->name }} </option> @endif @endforeach </select> @endif @if ($destsUsuario->isNotEmpty()) <select name="responsavel_id" class="form-select form-select-sm mt-2"> <option value="">- {{ __('Nenhum responsável') }} -</option> @foreach ($destsUsuario as $dest) @if ($dest->responsavel) <option value="{{ $dest->responsavel_id }}"> {{ $dest->responsavel->name }} </option> @endif @endforeach </select> @endif </form> @endif </div> </div> <div class="card border rounded-3"> <div class="card-body"> <h6 class="fw-semibold mb-3"> <i class="fa-solid fa-reply text-secondary"></i> {{ __('Respostas') }} @if ($pareceres->isNotEmpty()) <span class="badge bg-light text-muted border ms-1">{{ $pareceres->count() }}</span> @endif </h6> <div class="dm-respostas-scroll"> @forelse ($pareceres as $p) <div class="card border-start border-4 border-secondary mb-2"> <div class="card-body py-2 px-3"> <div class="d-flex justify-content-between align-items-center mb-1"> <span class="small fw-semibold">{{ optional($p->autor)->name ?? __('Sistema') }}</span> <small class="text-muted">{{ $p->created_at->format('d/m/Y H:i') }}</small> </div> <p class="mb-0 small text-muted lh-base">{!! nl2br(e($p->conteudo)) !!}</p> @if ($p->anexos->isNotEmpty()) <div class="mt-2 d-flex flex-wrap gap-1"> @foreach ($p->anexos as $pa) <a href="{{ route('admin.demandas.anexos.view', [$demanda->id, $pa->id]) }}" target="_blank" rel="noopener noreferrer" class="btn btn-sm btn-outline-secondary py-0 px-2" title="{{ $pa->nome_original }}"> <i class="fa-solid {{ $pa->getIcone() }} me-1"></i> <span class="small">{{ Str::limit($pa->nome_original, 24) }}</span> </a> <a href="{{ route('admin.demandas.anexos.download', [$demanda->id, $pa->id]) }}" class="btn btn-sm btn-outline-secondary py-0 px-2" title="{{ __('Baixar') }}"> <i class="fa-solid fa-download"></i> </a> @endforeach </div> @endif </div> </div> @empty <p class="text-muted small">{{ __('Nenhuma resposta ainda.') }}</p> @endforelse </div> @if ($perm['adicionar'] && !$demandaFechada) <form action="{{ route('admin.demandas.interagir', $demanda->id) }}" method="POST" enctype="multipart/form-data" class="mt-3"> @csrf <input type="hidden" name="tipo" value="parecer"> <textarea name="conteudo" rows="3" class="form-control mb-2 @error('conteudo') is-invalid @enderror" placeholder="{{ __('Escreva uma resposta…') }}" required minlength="5">{{ old('conteudo') }}</textarea> @error('conteudo') <div class="invalid-feedback">{{ $message }}</div> @enderror <div class="mb-2"> <input type="file" name="anexos[]" multiple class="form-control form-control-sm @error('anexos') is-invalid @enderror @error('anexos.*') is-invalid @enderror" accept=".jpg,.jpeg,.png,.gif,.webp,.pdf,.doc,.docx,.xls,.xlsx"> @error('anexos') <div class="invalid-feedback d-block">{{ $message }}</div> @enderror @error('anexos.*') <div class="invalid-feedback d-block">{{ $message }}</div> @enderror </div> <div class="d-flex justify-content-end"> <button type="submit" class="btn btn-sm btn-primary flex-shrink-0"> <i class="fa-solid fa-reply"></i> {{ __('Responder') }} </button> </div> </form> @endif </div> </div> </div> <div class="col-12 col-lg-4 dm-sidebar-sticky"> <div class="accordion" id="sidebarAccordion"> <div class="accordion-item border rounded-3 mb-3 shadow-sm"> <h2 class="accordion-header"> <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#detailsCollapse"> <i class="fa-solid fa-info-circle text-primary me-2"></i>{{ __('Detalhes') }} </button> </h2> <div id="detailsCollapse" class="accordion-collapse collapse show" data-bs-parent="#sidebarAccordion"> <div class="accordion-body p-0"> <ul class="list-group list-group-flush small"> <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Número') }}</span> <strong class="text-primary">{{ $demanda->numero }}</strong> </li> <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Abertura') }}</span> <span>{{ optional($demanda->data_abertura)->format('d/m/Y H:i') ?? '-' }}</span> </li> @if ($demanda->data_fechamento) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Fechamento') }}</span> <span>{{ $demanda->data_fechamento->format('d/m/Y H:i') }}</span> </li> @endif @if ($demanda->prazo) @php $prazoPast = $demanda->prazo->isPast() && !in_array($demanda->status, ['atendido', 'cancelado']); @endphp <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Prazo') }}</span> <span class="{{ $prazoPast ? 'text-danger fw-semibold' : '' }}"> @if ($prazoPast) <i class="fa-solid fa-triangle-exclamation fa-xs me-1"></i> @endif {{ $demanda->prazo->format('d/m/Y') }} </span> </li> @endif @if ($demanda->numero_sei) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Processo SEI') }}</span> <span class="text-end">{{ $demanda->numero_sei }}</span> </li> @endif @if ($demanda->url_sei) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('URL SEI') }}</span> <a href="{{ $demanda->url_sei }}" target="_blank" rel="noopener" class="text-end small text-truncate" style="max-width:60%">{{ $demanda->url_sei }}</a> </li> @endif @if ($demanda->solicitante_nome !== '-') <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Solicitante') }}</span> <span class="text-end">{{ $demanda->solicitante_nome }}</span> </li> @endif @if ($destsUsuario->isNotEmpty()) <li class="list-group-item"> <div class="d-flex justify-content-between align-items-start"> <span class="text-muted">{{ $destsUsuario->count() > 1 ? __('Responsáveis') : __('Responsável') }}</span> <div class="text-end"> @foreach ($destsUsuario as $r) <div class="small">{{ $r->responsavel?->name ?? '-' }}</div> @endforeach </div> </div> </li> @endif @if ($demanda->unidade) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Unidade') }}</span> <span class="text-end">{{ $demanda->unidade->abbreviation ?? $demanda->unidade->name }}</span> </li> @endif @if ($demanda->secretaria) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Secretaria') }}</span> <span class="text-end">{{ $demanda->secretaria->abbreviation ?? $demanda->secretaria->name }}</span> </li> @endif </ul> </div> </div> </div> @if ($demanda->tiDetalhe) <div class="accordion-item border rounded-3 mb-3 shadow-sm"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#tiDetailCollapse"> <i class="fa-solid fa-headset text-primary me-2"></i>{{ __('Atendimento TI') }} </button> </h2> <div id="tiDetailCollapse" class="accordion-collapse collapse" data-bs-parent="#sidebarAccordion"> <div class="accordion-body p-0"> <ul class="list-group list-group-flush small"> @if ($demanda->canal) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Canal') }}</span> <span>{{ __(\App\Models\Demandas\Demanda::CANAL[$demanda->canal] ?? $demanda->canal) }}</span> </li> @endif @if ($demanda->tiDetalhe->setor_nome) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Setor') }}</span> <span class="text-end">{{ $demanda->tiDetalhe->setor_nome }}</span> </li> @endif @if ($demanda->tiDetalhe->assunto_nome) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Assunto') }}</span> <span class="text-end">{{ $demanda->tiDetalhe->assunto_nome }}</span> </li> @endif @if ($demanda->tiDetalhe->subassunto_nome) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Subassunto') }}</span> <span class="text-end">{{ $demanda->tiDetalhe->subassunto_nome }}</span> </li> @endif @if ($demanda->tiDetalhe->local) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Local') }}</span> <span class="text-end">{{ $demanda->tiDetalhe->local }}</span> </li> @endif @if ($demanda->tiDetalhe->cliente) <li class="list-group-item d-flex justify-content-between align-items-center"> <span class="text-muted">{{ __('Solicitante') }}</span> <div class="text-end"> <div>{{ $demanda->tiDetalhe->cliente->nome }}</div> @if ($demanda->tiDetalhe->cliente->cpf) <div class="text-muted" style="font-size:.7rem"> {{ $demanda->tiDetalhe->cliente->cpf }}</div> @endif </div> </li> @endif </ul> </div> </div> </div> @endif <div class="accordion-item border rounded-3 mb-3 shadow-sm"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#forwardedCollapse"> <i class="fa-solid fa-share text-primary me-2"></i>{{ __('Encaminhados para') }} </button> </h2> <div id="forwardedCollapse" class="accordion-collapse collapse" data-bs-parent="#sidebarAccordion"> <div class="accordion-body p-3"> @if ($destsParaAceitar->isNotEmpty() && !$demandaFechada) <div class="mb-4 pb-3 border-bottom"> <p class="text-uppercase text-warning fw-bold mb-3" style="font-size:.65rem;letter-spacing:.07em"> <i class="fa-solid fa-hand-point-right fa-xs me-1"></i>{{ __('Ação necessária') }} </p> @foreach ($destsParaAceitar as $destAceitar) <div class="mb-3 p-2 bg-light rounded"> <div class="small fw-semibold mb-2"> <i class="fa-solid fa-building fa-xs text-primary me-1"></i>{{ $destAceitar->nome_display }} </div> <form action="{{ route('admin.demandas.destinatarios.aceitar', [$demanda->id, $destAceitar->id]) }}" method="POST"> @csrf @method('PATCH') <button type="submit" class="btn btn-sm btn-warning w-100"> <i class="fa-solid fa-check me-1"></i>{{ __('Aceitar') }} </button> </form> </div> @endforeach </div> @endif @if ($demanda->destinatarios->isNotEmpty()) <div class="mb-3"> <p class="text-uppercase text-muted fw-bold mb-2" style="font-size:.65rem;letter-spacing:.07em"> {{ __('Encaminhados') }} </p> @foreach ($demanda->destinatarios as $dest) <div class="mb-2"> <div class="d-flex align-items-center justify-content-between gap-2 mb-1"> <div class="small fw-semibold"> @if ($dest->tipo === 'usuario') <i class="fa-solid fa-user fa-xs text-muted me-1"></i>{{ $dest->nome_display }} @else <i class="fa-solid fa-building fa-xs text-muted me-1"></i>{{ $dest->nome_display }} @endif </div> <div class="d-flex align-items-center gap-2 flex-shrink-0"> @if ($dest->tipo === 'unidade' && $dest->responsavel) <span class="small text-muted"> <i class="fa-solid fa-user fa-xs me-1"></i>{{ $dest->responsavel->name }} </span> @endif @if ($isCriador && $perm['editar'] && !$demandaFechada) <form action="{{ route('admin.demandas.destinatarios.destroy', [$demanda->id, $dest->id]) }}" method="POST" data-confirm="{{ __('Remover destinatário?') }}"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-outline-danger py-0 px-1" title="{{ __('Remover') }}"> <i class="fa-solid fa-xmark fa-xs"></i> </button> </form> @endif </div> </div> <div class="text-end"> <span class="badge bg-{{ $dest->status_color }} small">{{ $dest->status_label }}</span> </div> </div> @endforeach </div> @else <p class="text-muted small mb-0">{{ __('Nenhum destinatário.') }}</p> @endif @if ($perm['editar'] && !$demandaFechada) <hr class="my-3"> <p class="text-uppercase text-muted fw-bold mb-2" style="font-size:.65rem;letter-spacing:.07em"> {{ __('Encaminhar') }} </p> <form id="form-destinatario" action="{{ route('admin.demandas.destinatarios.store', $demanda->id) }}" method="POST" data-url-buscar="{{ route('admin.demandas.responsaveis.buscar') }}"> @csrf <div class="mb-2"> <select name="tipo" id="dest-tipo" class="form-select form-select-sm"> <option value="unidade">{{ __('Setor / Unidade') }}</option> <option value="usuario">{{ __('Pessoa Responsável') }}</option> </select> </div> <div id="dest-campo-unidade" class="mb-2"> <select name="unidade_id" class="form-select form-select-sm"> <option value="">- {{ __('selecione') }} -</option> @foreach ($unidades as $u) <option value="{{ $u->id }}"> {{ $u->abbreviation ?: $u->name }}</option> @endforeach </select> </div> <div id="dest-campo-usuario" class="mb-2 d-none position-relative"> <input type="text" id="dest-pessoa-nome" class="form-control form-control-sm" placeholder="{{ __('Buscar pelo nome ou matrícula…') }}" autocomplete="off"> <input type="hidden" name="responsavel_id" id="dest-pessoa-id"> <div id="dest-pessoa-sugest" class="list-group position-absolute w-100 shadow-sm dm-pessoa-sugest d-none"> </div> </div> <button type="submit" class="btn btn-sm btn-primary w-100"> <i class="fa-solid fa-plus"></i> {{ __('Encaminhar') }} </button> </form> @endif </div> </div> </div> @if ($permAtivos || $demanda->equipamentos->isNotEmpty() || $demanda->licencas->isNotEmpty()) <div class="accordion-item border rounded-3 mb-3 shadow-sm"> <h2 class="accordion-header"> <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#assetsCollapse"> <i class="fa-solid fa-desktop text-primary me-2"></i>{{ __('Ativos TI') }} </button> </h2> <div id="assetsCollapse" class="accordion-collapse collapse" data-bs-parent="#sidebarAccordion"> <div class="accordion-body p-3"> <p class="text-uppercase text-muted fw-bold mb-2" style="font-size:.63rem;letter-spacing:.07em"> {{ __('Equipamentos') }} </p> @forelse ($demanda->equipamentos as $eq) <div class="d-flex align-items-center justify-content-between gap-1 py-1 border-bottom"> <div class="min-w-0"> <a href="{{ route('admin.ativosTi.equipamentos.show', $eq->id) }}" class="small fw-semibold text-body text-decoration-none text-truncate d-block"> {{ $eq->patrimonio }}{{ $eq->etiqueta_ti ? ' / ' . $eq->etiqueta_ti : '' }} </a> @if ($eq->modelo) <span class="text-muted" style="font-size:.7rem">{{ $eq->modelo }}</span> @endif </div> <div class="d-flex align-items-center gap-1 flex-shrink-0"> <span class="badge bg-{{ \App\Models\AtivosTi\Equipamento::STATUS_COLORS[$eq->status] ?? 'secondary' }}" style="font-size:.6rem"> {{ __(\App\Models\AtivosTi\Equipamento::STATUS[$eq->status] ?? $eq->status) }} </span> @if ($permAtivos && !$demandaFechada) <form action="{{ route('admin.ativosTi.equipamentos.desvincular', [$demanda->id, $eq->id]) }}" method="POST" class="m-0"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-outline-danger py-0 px-1" title="{{ __('Desvincular') }}" onclick="return confirm('{{ __('Desvincular este equipamento?') }}')"> <i class="fa-solid fa-xmark fa-xs"></i> </button> </form> @endif </div> </div> @empty <p class="text-muted small mb-2">{{ __('Nenhum equipamento vinculado.') }} </p> @endforelse @if ($permAtivos && !$demandaFechada) <form action="{{ route('admin.ativosTi.equipamentos.vincular', $demanda->id) }}" method="POST" class="mt-2" id="form-vincular-equipamento"> @csrf <div class="position-relative"> <input type="text" id="eq-busca" class="form-control form-control-sm" placeholder="{{ __('Patrimônio ou etiqueta…') }}" autocomplete="off" data-url="{{ route('admin.ativosTi.equipamentos.buscar') }}"> <input type="hidden" name="equipamento_id" id="eq-id"> <div id="eq-sugest" class="list-group position-absolute w-100 shadow-sm d-none" style="z-index:1000"> </div> </div> <button type="submit" class="btn btn-sm btn-outline-primary w-100 mt-1"> <i class="fa-solid fa-link fa-xs"></i> {{ __('Vincular') }} </button> </form> @endif <p class="text-uppercase text-muted fw-bold mt-3 mb-2" style="font-size:.63rem;letter-spacing:.07em"> {{ __('Licenças') }} </p> @forelse ($demanda->licencas as $lic) <div class="d-flex align-items-center justify-content-between gap-1 py-1 border-bottom"> <div class="min-w-0"> <span class="small fw-semibold text-truncate d-block">{{ $lic->programa }}</span> <span class="badge bg-{{ $lic->tipo_color }}" style="font-size:.6rem">{{ $lic->tipo_label }}</span> </div> @if ($permAtivos && !$demandaFechada) <form action="{{ route('admin.ativosTi.licencas.desvincular', [$demanda->id, $lic->id]) }}" method="POST" class="m-0 flex-shrink-0"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-outline-danger py-0 px-1" title="{{ __('Desvincular') }}" onclick="return confirm('{{ __('Desvincular esta licença?') }}')"> <i class="fa-solid fa-xmark fa-xs"></i> </button> </form> @endif </div> @empty <p class="text-muted small mb-2">{{ __('Nenhuma licença vinculada.') }}</p> @endforelse @if ($permAtivos && !$demandaFechada) <form action="{{ route('admin.ativosTi.licencas.vincular', $demanda->id) }}" method="POST" class="mt-2"> @csrf <input type="number" name="licenca_id" class="form-control form-control-sm" placeholder="{{ __('ID da licença…') }}" min="1"> <button type="submit" class="btn btn-sm btn-outline-primary w-100 mt-1"> <i class="fa-solid fa-key fa-xs"></i> {{ __('Vincular licença') }} </button> </form> @endif </div> </div> </div> @endif @if ($minhaDest && !$isCriador && (!$demandaFechada || ($minhaDestUnica && $demanda->status === 'atendido'))) <div class="card border rounded-3 mb-3 shadow-sm"> <div class="card-header py-2 fw-semibold small border-bottom"> <i class="fa-solid fa-user-check text-success me-1"></i>{{ __('Status do Destinatário') }} <span class="badge bg-{{ $minhaDest->status_color }} ms-1 fw-normal">{{ $minhaDest->status_label }}</span> </div> <div class="card-body p-3 d-flex flex-column gap-2"> @foreach ($destinatarioStatus as $sKey => $sLabel) @if ($sKey !== $minhaDest->status) <form action="{{ route('admin.demandas.destinatarios.status', [$demanda->id, $minhaDest->id]) }}" method="POST"> @csrf @method('PATCH') <input type="hidden" name="status" value="{{ $sKey }}"> <button type="submit" class="btn btn-sm btn-outline-success w-100"> {{ __($sLabel) }} </button> </form> @endif @endforeach </div> </div> @endif <div class="card border rounded-3 mb-3 shadow-sm"> <div class="card-body p-3"> <button class="btn btn-sm btn-outline-primary w-100" type="button" data-bs-toggle="modal" data-bs-target="#modalAuditoria"> <i class="fa-solid fa-shield-halved me-1"></i> {{ __('Auditoria') }} <span class="badge bg-primary ms-1">{{ $demanda->logs->count() }}</span> </button> </div> </div> @if ($demandaFechada) @if ($isCriador && $perm['editar']) <div class="card border rounded-3 mb-3 shadow-sm"> <div class="card-body p-3"> <form action="{{ route('admin.demandas.mover', $demanda->id) }}" method="POST"> @csrf <input type="hidden" name="status" value="em_andamento"> <button type="submit" class="btn btn-sm btn-warning w-100"> <i class="fa-solid fa-rotate-left me-1"></i> {{ __('Reabrir') }} </button> </form> </div> </div> @endif @else @if ($isCriador && $perm['editar']) <div class="card border rounded-3 mb-3 shadow-sm"> <div class="card-body p-3"> <button class="btn btn-sm btn-outline-primary w-100" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasEditar"> <i class="fa-solid fa-pen-to-square me-1"></i> {{ __('Editar') }} </button> </div> </div> <div class="card border rounded-3 shadow-sm"> <div class="card-header py-2 fw-semibold small border-bottom"> {{ __('Mudar status') }} </div> <div class="card-body p-3 d-flex flex-column gap-2"> @foreach ($statusLabels as $sKey => $sLabel) @if ($sKey !== $demanda->status) <form action="{{ route('admin.demandas.mover', $demanda->id) }}" method="POST"> @csrf <input type="hidden" name="status" value="{{ $sKey }}"> <button type="submit" class="btn btn-sm btn-outline-secondary w-100"> {{ __($sLabel) }} </button> </form> @endif @endforeach </div> </div> @endif @endif </div> </div> </div> </div> </div> <div class="modal fade" id="modalAuditoria" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-lg modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header bg-dark text-white py-2"> <h6 class="modal-title fw-semibold"> <i class="fa-solid fa-shield-halved"></i> {{ __('Auditoria') }} - {{ $demanda->numero }} </h6> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button> </div> <div class="modal-body p-0"> @forelse ($demanda->logs as $log) <div class="d-flex gap-3 px-4 py-3 border-bottom"> <div class="flex-shrink-0 text-{{ $log->tipo_info['color'] }} demanda-log-icon"> <i class="fa-solid {{ $log->tipo_info['icon'] }}"></i> </div> <div class="flex-grow-1"> <div class="d-flex justify-content-between align-items-start gap-3"> <div> <span class="fw-semibold small">{{ optional($log->autor)->name ?? __('Sistema') }}</span> <span class="badge bg-light text-muted border ms-1 small">{{ __($log->tipo_info['label']) }}</span> </div> <small class="text-muted text-nowrap">{{ $log->created_at->format('d/m/Y H:i') }}</small> </div> @if ($log->conteudo) <p class="mb-0 small text-muted mt-1">{!! nl2br(e($log->conteudo)) !!}</p> @endif </div> </div> @empty <div class="text-center text-muted py-5 small"> <i class="fa-solid fa-shield-halved fa-2x mb-2 d-block opacity-25"></i> {{ __('Nenhum registro de auditoria.') }} </div> @endforelse </div> <div class="modal-footer py-2"> <small class="text-muted me-auto">{{ $demanda->logs->count() }} {{ __('registro(s)') }}</small> <button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal">{{ __('Fechar') }}</button> </div> </div> </div> </div> @if ($perm['editar']) <div class="offcanvas offcanvas-end offcanvas-demandas" tabindex="-1" id="offcanvasEditar"> <div class="offcanvas-header bg-primary text-white"> <h5 class="offcanvas-title"><i class="fa-solid fa-pen-to-square"></i> {{ __('Editar Demanda') }}</h5> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> @include('admin.demandas._form', [ 'demanda' => $demanda, 'prioridades' => $prioridades, 'statusLabels' => $statusLabels, 'unidades' => $unidades, 'formAction' => route('admin.demandas.update', $demanda->id), 'method' => 'PUT', 'podeAtendimentoTi' => $podeAtendimentoTi ?? false, 'setores' => $setores ?? [], 'offcanvas' => true, ]) </div> </div> @endif @push('after-scripts') <script src="{{ asset('pmar/js/demandas.js') }}?v={{ filemtime(public_path('pmar/js/demandas.js')) }}"></script> @endpush @endsection
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings