@extends('layouts.app') @section('title',$project->code.' | LPM') @section('heading',$project->name) @section('content')
{{ $project->code }}{{ $project->status->label() }}Prioridad {{ strtolower($project->priority->label()) }}

{{ $project->description?:'Sin descripción registrada.' }}

@can('update',$project)Editar@endcan @can('manage',$project)@if($project->status->value==='draft')
@csrf
@elseif($project->status->value==='cancelled')
@csrf
@endif @endcan
Área{{ $project->area->name }}
Diseñador{{ $project->designer->name }}
Cliente interno{{ $project->client->name }}
Fecha límite{{ $project->due_date->format('d/m/Y') }}

AVANCE GENERAL

{{ $project->progress() }}% completado

{{ $project->stages->where('status',App\Enums\StageStatus::Completed)->count() }} de {{ $project->stages->count() }} etapas
@foreach($project->stages as $stage)
{{ $stage->position }}

{{ $stage->name }}

{{ $stage->status->label() }}
{{ $stage->tasks->where('status',App\Enums\TaskStatus::Completed)->count() }}/{{ $stage->tasks->count() }} tareas
@forelse($stage->tasks as $task)
{{ $task->title }}
Responsable
{{ $task->responsible->name }}
Fecha límite
{{ $task->due_date?->format('d/m/Y') ?? 'Sin fecha definida' }}
@if($task->description)

{{ $task->description }}

@endif
{{ $task->status->label() }}@can('update',$task)@if(!in_array($project->status->value,['completed','cancelled'])&&$stage->status->value!=='completed')@if(in_array($task->status,[App\Enums\TaskStatus::Completed,App\Enums\TaskStatus::Cancelled],true))
@csrf
@else
@csrf
@csrf
@endif
Editar
@csrf @method('PATCH')
@can('delete',$task)
@csrf @method('DELETE')
@endcan
@elseHistorial cerrado@endif @endcan
@empty
Sin tareas registradas.
@endforelse
@can('manage',$project)@if(!in_array($project->status->value,['cancelled','completed'])&&$stage->status->value!=='completed')
+ Agregar tarea
@csrf
@endif @if($project->status->value==='active'&&$stage->status->value==='active')@php($openTasks=$stage->tasks->whereNotIn('status',[App\Enums\TaskStatus::Completed,App\Enums\TaskStatus::Cancelled])->count())@php($openDeliverables=$stage->deliverables->where('status','!=',App\Enums\DeliverableStatus::Approved)->count())@if($openTasks>0||$openDeliverables>0)
Esta etapa aún no puede completarse.@if($openTasks>0){{ $openTasks }} {{ $openTasks===1?'tarea está pendiente o en curso':'tareas están pendientes o en curso' }}. Complétala o cancélala.@endif @if($openDeliverables>0){{ $openDeliverables }} {{ $openDeliverables===1?'entregable requiere aprobación':'entregables requieren aprobación' }} del cliente interno.@endif
@else
@csrf
@endif @endif @endcan
@endforeach

EXPEDIENTE DIGITAL

Entregables y aprobaciones

Cada envío conserva su versión y su ronda de revisión.

Ver bandeja de revisiones
@can('create',[App\Models\Deliverable::class,$project])
+ Crear entregable
@csrf
@endcan
@forelse($project->stages->flatMap->deliverables as $deliverable)@php($latest=$deliverable->versions->first())@php($currentApproval=$deliverable->approvals->first())
{{ $deliverable->stage->name }}

{{ $deliverable->name }}

@if($deliverable->description)

{{ $deliverable->description }}

@endif
{{ $deliverable->status->label() }}
@if($latest)
Versión {{ $latest->version_number }}{{ $latest->source_type==='file'?$latest->original_name:'Liga externa' }} · {{ $latest->created_at->format('d/m/Y H:i') }}
@if($latest->source_type==='file')Descargar@elseAbrir liga@endif @else
Aún no tiene versiones.
@endif
@if($currentApproval)
Ronda {{ $currentApproval->round_number }} · {{ $currentApproval->status->label() }}Versión {{ $currentApproval->version->version_number }} · {{ $currentApproval->created_at->format('d/m/Y H:i') }}@if($currentApproval->observation)

{{ $currentApproval->observation }}

@endif
@endif @can('manage',$deliverable)
+ Agregar nueva versión
@csrf
@if($latest)
@csrf
@endif @endcan @if($currentApproval)@can('decide',$currentApproval)
@csrf
@csrf
@endcan @endif
Historial de versiones y rondas
@foreach($deliverable->versions as $version)
Versión {{ $version->version_number }}{{ $version->creator->name }} · {{ $version->created_at->format('d/m/Y H:i') }}@if($version->notes)

{{ $version->notes }}

@endif
@endforeach @foreach($deliverable->approvals as $round)
Ronda {{ $round->round_number }} · {{ $round->status->label() }}Versión {{ $round->version->version_number }} · {{ $round->reviewer->name }} · {{ ($round->decided_at??$round->created_at)->format('d/m/Y H:i') }}@if($round->observation)

{{ $round->observation }}

@endif
@endforeach
@empty
No hay entregables registrados. Crea el primero y agrega una versión por archivo o liga.
@endforelse

HISTORIAL

Actividad del proyecto

@forelse($project->activityLogs->take(25) as $activity)
{{ $activity->description }}{{ $activity->user?->name ?? 'Sistema' }} · {{ $activity->created_at->format('d/m/Y H:i') }}
@empty
La actividad de entregables y aprobaciones aparecerá aquí.
@endforelse
@can('manage',$project)@if(in_array($project->status->value,['draft','active']))

Cancelar proyecto

El proyecto permanecerá disponible y podrá reactivarse después.

@csrf
@endif @endcan @endsection