diff --git a/app/Livewire/ProjectMap.php b/app/Livewire/ProjectMap.php index 4bc4481..d6363a1 100644 --- a/app/Livewire/ProjectMap.php +++ b/app/Livewire/ProjectMap.php @@ -37,7 +37,9 @@ class ProjectMap extends Component { $this->project = $project; // Cargar fases con sus capas y los features de esas capas (para mostrarlos en el mapa) - $this->phases = $project->phases()->with(['layers.features'])->get(); + $this->phases = $project->phases()->with(['layers' => function ($q) { + $q->withCount('features'); + }, 'layers.features'])->get(); // Por defecto mostrar todas las capas activas (todas las fases que tengan alguna capa con features) $this->activeLayers = $this->phases->pluck('id')->toArray(); $this->loadTemplates(); @@ -216,6 +218,34 @@ class ProjectMap extends Component $this->dispatch('notify', 'Template asignado al elemento'); } + /** + * Guardar progreso y responsable del feature seleccionado. + */ + public function saveFeatureProgress() + { + if (!$this->selectedFeature) return; + + $this->selectedFeature->progress = min(100, max(0, (int)$this->editProgress)); + $this->selectedFeature->responsible = $this->editResponsible; + $this->selectedFeature->save(); + + // Recalcular progreso de la fase + $phase = Phase::find($this->selectedFeature->layer->phase_id); + $phase->progress_percent = $phase->features()->avg('progress') ?: 0; + $phase->save(); + + $this->dispatch('progressUpdated', $phase->id, $phase->progress_percent); + $this->dispatch('notify', 'Progreso guardado'); + } + + /** + * Cuando cambia el template seleccionado, reiniciar el formulario. + */ + public function onTemplateChange() + { + $this->resetInspectionForm(); + } + public function toggleFullscreen() { $this->formFullscreen = !$this->formFullscreen; diff --git a/resources/views/livewire/projects/project-map.blade.php b/resources/views/livewire/projects/project-map.blade.php index e4fe63e..d4acfce 100644 --- a/resources/views/livewire/projects/project-map.blade.php +++ b/resources/views/livewire/projects/project-map.blade.php @@ -3,49 +3,62 @@
-
-

Capas del proyecto

-
+ + +
+

Fases y capas

+
@foreach($phases as $phase) - +
+
+ id, $activeLayers)) checked @endif + class="toggle toggle-xs toggle-primary"> + + {{ $phase->name }} + {{ $phase->progress_percent }}% +
+ + {{-- Capas de esta fase --}} + @if($phase->layers->isNotEmpty()) +
+ @foreach($phase->layers as $layer) +
+ + {{ $layer->name }} + {{ $layer->features_count ?? $layer->features->count() }} elem. +
+ @endforeach +
+ @endif + + {{-- Botón para ir a gestión de capas de esta fase --}} + +
@endforeach
-
- - -
- - @if($showLayerModal) -
-
-

Gestión de capas

-

Configura las capas y elementos visibles del proyecto.

- -
-
- @endif - - +
@@ -53,74 +66,116 @@

Editor

- @if($selectedTemplateId) - @php $template = $templates->firstWhere('id', $selectedTemplateId); @endphp - @if($template) - @foreach($template->fields as $field) -
- - @switch($field['type']) - @case('percentage') -
- - % - + + @if($selectedFeature) + {{-- Feature seleccionado --}} +
+

{{ $selectedFeature->name ?? 'Elemento' }}

+

Fase: {{ $selectedFeature->layer?->phase?->name ?? '—' }}

+

Capa: {{ $selectedFeature->layer?->name ?? '—' }}

+
+ + {{-- Progreso --}} +
+ + +
+ 0%50%100% +
+
+ +
+ + +
+ + + + {{-- Templates / Inspecciones --}} + @if($templates->isNotEmpty()) +
Inspección
+
+ + +
+ + @if($selectedTemplateId && !empty($inspectionFormData)) + @php $template = $templates->firstWhere('id', $selectedTemplateId); @endphp + @if($template) + @foreach($template->fields as $field) +
+ + @switch($field['type'] ?? 'text') + @case('percentage') +
+ + % + +
+ @break + @case('boolean') + + @break + @case('select') + + @break + @case('textarea') + + @break + @default + + @endswitch +
+ @endforeach + + @endif + @endif + + {{-- Historial de inspecciones --}} + @if($inspectionHistory->isNotEmpty()) +
Historial
+
+ @foreach($inspectionHistory as $ins) +
+
+ {{ $ins->template?->name ?? 'Inspección' }} + {{ $ins->created_at->diffForHumans() }}
- @break - @case('boolean') - - @break - @case('date') - - @break - @case('integer') - - @break - @case('decimal') - - @break - @case('select') - - @break - @case('textarea') - - @break - @default - - @endswitch + @if($ins->user)por {{ $ins->user->name }}@endif +
+ @endforeach
- @endforeach - + @endif + @else + @endif @else - @@ -130,33 +185,25 @@ @push('scripts') @endpush \ No newline at end of file