@extends('layouts.admin.theme') @section('title', env('APP_NAME') . ' :: ' . $project->name) @push('scripts') @endpush @section('content') @php $filterQuery = $filterParams ?? []; // Query para links de aba: filtros do dashboard sem tab/paginação de outras visões. $tabLinkQuery = collect($filterQuery)->except(['tab', 'ap', 'arp', 'tp', 'cp', 'hp'])->all(); // Apenas os filtros da lista de atividades, para que o Export reflita o que está filtrado. $exportFilterParams = collect($filterQuery) ->filter(fn ($value, $key) => str_starts_with((string) $key, 'f_')) ->all(); $canAdd = $perm['adicionar'] && ! $readOnly; $canEdit = $perm['editar'] && ! $readOnly; $canDelete = $perm['excluir'] && ! $readOnly; // Linhas da página atual (subatividade com recuo quando possui parent_id). $orderedRows = collect($tableRows)->map(fn ($row) => [ 'row' => $row, 'depth' => empty($row['parent_id']) ? 0 : 1, ]); $showDragReorder = $canEdit && ($allowTableReorder ?? true); $perPageOptions = $perPageOptions ?? config('cronogramas.per_page_options', [20, 50, 100, 250, 500]); $currentPerPage = $currentPerPage ?? ($perPageOptions[0] ?? 20); $sortOptions = $sortOptions ?? ['manual' => __('Ordem manual')]; $activitySort = $activitySort ?? 'code'; $activityDir = $activityDir ?? 'desc'; @endphp
@php $headLine = " " . e($project->name); @endphp @include('components.buttons._headLineButtonsBackAdd', [ 'headLine' => $headLine, 'routeBack' => 'admin.cronogramas.dashboard', 'routeBackParams' => $filterQuery, 'nameBack' => __('Voltar'), 'permission' => 'GERENCIADOR_DE_CRONOGRAMAS', ])
@include('errors.messageFlash') {{-- Cabeçalho do projeto + indicadores --}}
{{ \App\Enums\Accounts\Cronogramas\CronogramaProjectStatus::tryFrom($project->status)?->label() }} {{ __('Início') }}: {{ $project->start_date?->format('d/m/Y') ?? '-' }} {{ __('Término previsto') }}: {{ $project->planned_end_date?->format('d/m/Y') ?? '-' }}
@if($project->description)

{{ $project->description }}

@endif
{{ $project->completion_percent }}% {{ __('concluído') }}
{{ $projectStats['total_count'] ?? 0 }}
{{ __('Atividades') }}
{{ $projectStats['completed_count'] ?? 0 }}
{{ __('Concluídas') }}
{{ $projectStats['overdue_count'] ?? 0 }}
{{ __('Atrasadas') }}
{{-- Barra de ações do projeto --}} @php $pdfViews = [ 'table' => ['icon' => 'fa-table-list', 'label' => __('Tabela')], 'gantt' => ['icon' => 'fa-chart-gantt', 'label' => __('Gantt')], 'timeline' => ['icon' => 'fa-timeline', 'label' => __('Linha do tempo')], ]; $canEditProject = $perm['editar'] && ! $project->isReadOnly(); $canUnarchiveProject = $perm['editar'] && $project->status === 'archived'; $canDeleteProject = $perm['excluir'] && $project->status === 'archived'; $hasProjectActions = $canEditProject || $canUnarchiveProject || $canDeleteProject; @endphp @if($readOnly) @endif @if($project->status !== 'archived' && ($perm['editar'] ?? false))
{{ __('Link público executivo') }} @if($project->public_share_enabled && ! empty($publicShareUrl)) {{ __('Ativo') }}
@csrf @include('components.cronogramas.persist-query', ['params' => $filterQuery])
@csrf @include('components.cronogramas.persist-query', ['params' => $filterQuery])
@else {{ __('Inativo') }}
@csrf @include('components.cronogramas.persist-query', ['params' => $filterQuery])
@endif
@endif {{-- Abas de visualização --}}
{{-- ABA: TABELA --}} @if($viewTab === 'table')
@include('components.cronogramas.activity-filters', [ 'project' => $project, 'filterParams' => $filterParams ?? [], 'viewTab' => 'table', 'pageParam' => 'ap', 'activityFilters' => $activityFilters ?? [], 'statusOptions' => $statusOptions, 'responsibleOptions' => $filterResponsibleOptions ?? $responsibleOptions, 'filtersActive' => $filtersActive ?? false, 'filtersCount' => $filtersCount ?? 0, 'selectId' => 'table', ])
@if($canAdd) @if($showDragReorder) {{ __('Arraste pela alça para reordenar.') }} @elseif(($activitySort ?? 'manual') !== 'manual') {{ __('Reordenação disponível apenas na ordem manual.') }} @elseif(isset($activitiesPaginator) && $activitiesPaginator->hasPages()) {{ __('Reordenação disponível apenas com todas as atividades em uma página.') }} @endif @endif
@include('components.cronogramas.sort-selector', [ 'project' => $project, 'filterParams' => $filterParams ?? [], 'viewTab' => 'table', 'pageParam' => 'ap', 'sortOptions' => $sortOptions, 'currentSort' => $activitySort ?? 'code', 'currentDir' => $activityDir ?? 'desc', 'selectId' => 'cr_sort_table', ]) @include('components.cronogramas.per-page-selector', [ 'project' => $project, 'filterParams' => $filterParams ?? [], 'viewTab' => 'table', 'pageParam' => 'ap', 'perPageOptions' => $perPageOptions, 'currentPerPage' => $currentPerPage, 'selectId' => 'cr_per_page_table', ])
@if($orderedRows->isEmpty())
@if($filtersActive ?? false) {{ __('Nenhuma atividade encontrada com os filtros aplicados.') }} @else {{ __('Nenhuma atividade cadastrada.') }} @endif
@elseif(($activitySort ?? 'manual') === 'chronological') @include('components.cronogramas.timeline', ['rows' => $tableRows, 'dir' => $activityDir ?? 'asc']) @if(isset($activitiesPaginator) && $activitiesPaginator->total() > 0)
{{ __('Mostrando :from-:to de :total atividade(s)', [ 'from' => $activitiesPaginator->firstItem(), 'to' => $activitiesPaginator->lastItem(), 'total' => $activitiesPaginator->total(), ]) }} @if($activitiesPaginator->hasPages())
{{ $activitiesPaginator->links() }}
@endif
@endif @else
@if($showDragReorder)@endif @foreach($orderedRows as $item) @php $row = $item['row']; $depth = $item['depth']; @endphp @if($showDragReorder) @endif @endforeach
{{ __('Item') }} {{ __('Atividades') }} {{ __('Predecessora') }} {{ __('%') }} {{ __('Status') }} {{ __('Responsável') }} {{ __('Início') }} {{ __('Término') }} {{ __('Descrição') }} {{ __('Observação') }} {{ __('Ações') }}
{{ $row['code'] }} @if($depth > 0)@endif {{ $row['title'] }} {{ $row['predecessors'] ?: '-' }}
{{ (int) $row['completion_percent'] }}%
@if($canEdit) @else {{ $row['status_label'] }} @endif {{ __('Atrasado') }} {{ $row['planned_start_date'] ? \Carbon\Carbon::parse($row['planned_start_date'])->format('d/m/Y') : '-' }} {{ $row['planned_end_date'] ? \Carbon\Carbon::parse($row['planned_end_date'])->format('d/m/Y') : '-' }} {{ $row['description'] ?: '-' }} {{ $row['notes'] ?: '-' }}
@if($canEdit) @endif @if($canAdd)
@csrf
@endif @if($canEdit) @endif
@if(isset($activitiesPaginator) && $activitiesPaginator->total() > 0)
{{ __('Mostrando :from-:to de :total atividade(s)', [ 'from' => $activitiesPaginator->firstItem(), 'to' => $activitiesPaginator->lastItem(), 'total' => $activitiesPaginator->total(), ]) }} @if($activitiesPaginator->hasPages())
{{ $activitiesPaginator->links() }}
@endif
@endif @endif
{{-- ABA: GANTT --}} @elseif($viewTab === 'gantt')
{{ __('Zoom') }}:
{{ __('Atividade macro') }} {{ __('Atividade') }} {{ __('Concluída') }} {{ __('Atrasada') }} {{ __('Hoje') }}
{{-- ABA: KANBAN --}} @elseif($viewTab === 'kanban')
@if($canEdit)

{{ __('Arraste os cartões entre as colunas para alterar o status.') }}

@endif
@foreach(\App\Enums\Accounts\Cronogramas\CronogramaActivityStatus::kanbanColumns() as $col)
{{ $col->label() }} {{ collect($kanbanRows)->where('status', $col->value)->count() }}
@foreach($kanbanRows as $row) @if($row['status'] === $col->value)
{{ $row['code'] }} {{ $row['title'] }}
@endif @endforeach
@endforeach
{{-- ABA: LINHA DO TEMPO visual das atividades --}} @elseif($viewTab === 'timeline')
@include('components.cronogramas.activity-filters', [ 'project' => $project, 'filterParams' => $filterParams ?? [], 'viewTab' => 'timeline', 'pageParam' => 'tp', 'activityFilters' => $activityFilters ?? [], 'statusOptions' => $statusOptions, 'responsibleOptions' => $filterResponsibleOptions ?? $responsibleOptions, 'filtersActive' => $filtersActive ?? false, 'filtersCount' => $filtersCount ?? 0, 'selectId' => 'timeline', ])
@include('components.cronogramas.sort-selector', [ 'project' => $project, 'filterParams' => $filterParams ?? [], 'viewTab' => 'timeline', 'pageParam' => 'tp', 'sortOptions' => $sortOptions, 'currentSort' => $activitySort ?? 'manual', 'currentDir' => $activityDir ?? 'asc', 'selectId' => 'cr_sort_timeline', ]) @include('components.cronogramas.per-page-selector', [ 'project' => $project, 'filterParams' => $filterParams ?? [], 'viewTab' => 'timeline', 'pageParam' => 'tp', 'perPageOptions' => $perPageOptions, 'currentPerPage' => $currentPerPage, 'selectId' => 'cr_per_page_timeline', ])
@if(empty($tableRows))

@if($filtersActive ?? false) {{ __('Nenhuma atividade encontrada com os filtros aplicados.') }} @else {{ __('Nenhuma atividade cadastrada.') }} @endif

@else @include('components.cronogramas.timeline', ['rows' => $tableRows]) @if(isset($timelinePaginator) && $timelinePaginator->total() > 0)
{{ __('Mostrando :from-:to de :total atividade(s)', [ 'from' => $timelinePaginator->firstItem(), 'to' => $timelinePaginator->lastItem(), 'total' => $timelinePaginator->total(), ]) }} @if($timelinePaginator->hasPages())
{{ $timelinePaginator->links() }}
@endif
@endif @endif
{{-- ABA: ARQUIVADAS --}} @elseif($viewTab === 'archived')

{{ __('Atividades arquivadas podem ser restauradas ou excluídas permanentemente.') }}

@if(empty($archivedRows))
{{ __('Nenhuma atividade arquivada.') }}
@else @if($canDelete)
@endif
@if($canDelete) @endif @foreach($archivedRows as $row) @if($canDelete) @endif @endforeach
{{ __('Código') }} {{ __('Atividade') }} {{ __('Responsável') }} {{ __('Status') }} {{ __('Arquivada em') }} {{ __('Ações') }}
{{ $row['code'] }} {{ $row['title'] }} {{ $row['status_label'] }} {{ $row['archived_at'] ?? '-' }}
@if($canEdit) @endif @if($canDelete) @endif
@if(isset($archivedPaginator) && $archivedPaginator->total() > 0)
{{ __('Mostrando :from-:to de :total atividade(s) arquivada(s)', [ 'from' => $archivedPaginator->firstItem(), 'to' => $archivedPaginator->lastItem(), 'total' => $archivedPaginator->total(), ]) }} @if($archivedPaginator->hasPages())
{{ $archivedPaginator->links() }}
@endif
@endif @endif
@endif
{{-- MODAL: criar / editar atividade --}} @if($canAdd || $canEdit) @endif {{-- OFFCANVAS: detalhes da atividade (comentários, anexos, histórico) --}}

{{ __('Detalhes da atividade') }}

{{-- Comentários --}}
    @if($canAdd)
    @endif
    {{-- Anexos --}} {{-- Histórico --}}
    @endsection @push('after-scripts') @endpush