@extends('layouts.app') @section('content') @include('layouts.title-header', [ 'title' => 'Detalle de Cita', 'breadcrumbs' => [ ['text' => 'Dashboard', 'url' => '/dashboard'], ['text' => Auth::user()->isAdmin() ? 'Todas las Citas' : 'Mis Citas', 'url' => Auth::user()->isAdmin() ? route('admin.citas.index') : route('user.citas.index')], ['text' => 'Detalle de Cita'] ] ])

Detalle de Cita

@if(Auth::user()->isAdmin()) @if(in_array($cita->estado, ['pendiente', 'cancelado', 'confirmado'])) @if(in_array($cita->estado, ['pendiente', 'cancelado'])) @endif @if(in_array($cita->estado, ['pendiente', 'confirmado'])) @endif @if($cita->estado === 'confirmado') @endif @if($cita->estado === 'completado') @endif @endif @else @if($cita->estado === 'pendiente') @endif @if($cita->estado === 'confirmado') @endif @if($cita->estado === 'completado') @endif @endif Volver
Información General
Cita #{{ $cita->id }} {{ $cita->fecha_hora->format('d/m/Y H:i') }}

Estado: {{ $cita->estado_texto }}
@if(Auth::user()->isAdmin())
Cliente: {{ $cita->user->full_name }}
Email: {{ $cita->user->email }}
Teléfono: {{ $cita->user->telefono ?? 'No especificado' }}
Fecha de registro: {{ $cita->user->created_at->format('d/m/Y') }}
Puntos actuales: {{ $cita->user->userPoints->puntos ?? 0 }} pts
Nivel actual: {{ $cita->user->userPoints->getBadge() ?? '👤 Nuevo' }}
Total de citas: {{ $cita->user->citas->count() }}
Citas completadas: {{ $cita->user->citas->where('estado', 'completado')->count() }}
@endif
Nivel del Usuario: {{ $cita->nivel_usuario ?? 'No especificado' }}
@if($cita->notas)
Notas:

{{ $cita->notas }}

@endif
@if($cita->estado === 'completado')
Imágenes
@php $pubDescCita = trim((string) ($cita->publicacion_descripcion ?? '')); $altCitaImg = $pubDescCita !== '' ? \Illuminate\Support\Str::limit($pubDescCita, 120) : 'Imagen de la cita'; @endphp @if($pubDescCita !== '')
Descripción de la publicación: {{ $cita->publicacion_descripcion }}
@endif @if($cita->citaImagenes && $cita->citaImagenes->count() > 0)
@foreach($cita->citaImagenes as $imagen)
{{ $altCitaImg }}
{{ $imagen->created_at->format('d/m/Y H:i') }} @if($imagen->es_destacada) Destacada @endif
@if(Auth::user()->isAdmin()) @endif
@endforeach
@else

No hay imágenes subidas para esta cita

@endif
@endif
@if($cita->citaOpcionesUnas && $cita->citaOpcionesUnas->count() > 0)
Manos y Pies
@php // Función helper para obtener coordenadas de uñas function getCoordenadasUña($tipoMano, $dedo) { $coordenadas = [ 'izquierda' => [ 'indice' => ['x' => 639, 'y' => 535, 'width' => 100, 'height' => 230, 'transform' => 'rotate(175, 650, 555)'], 'medio' => ['x' => 656, 'y' => 678, 'width' => 110, 'height' => 230, 'transform' => 'rotate(162, 615, 687.5)'], 'anular' => ['x' => 520, 'y' => 380, 'width' => 110, 'height' => 230, 'transform' => 'rotate(156, 467.5, 605)'], 'meñique' => ['x' => 665, 'y' => 376, 'width' => 88, 'height' => 190, 'transform' => 'rotate(156, 467.5, 605)'], 'menique' => ['x' => 665, 'y' => 376, 'width' => 88, 'height' => 190, 'transform' => 'rotate(156, 467.5, 605)'], 'pulgar' => ['x' => 613, 'y' => 465, 'width' => 140, 'height' => 230, 'transform' => 'rotate(-80, 685, 625)'], ], 'derecha' => [ 'indice' => ['x' => 40, 'y' => 510, 'width' => 100, 'height' => 230, 'transform' => 'rotate(175, 350, 555)'], 'medio' => ['x' => 205, 'y' => 608, 'width' => 110, 'height' => 230, 'transform' => 'rotate(162, 385, 687.5)'], 'anular' => ['x' => 645, 'y' => 405, 'width' => 110, 'height' => 230, 'transform' => 'rotate(156, 532.5, 605)'], 'meñique' => ['x' => 790, 'y' => 401, 'width' => 88, 'height' => 190, 'transform' => 'rotate(156, 532.5, 605)'], 'menique' => ['x' => 790, 'y' => 401, 'width' => 88, 'height' => 190, 'transform' => 'rotate(156, 532.5, 605)'], 'pulgar' => ['x' => 308, 'y' => 830, 'width' => 140, 'height' => 230, 'transform' => 'rotate(-80, 315, 625)'], ] ]; return $coordenadas[$tipoMano][$dedo] ?? ['x' => 0, 'y' => 0, 'width' => 100, 'height' => 100, 'transform' => '']; } // Organizar opciones por tipo de mano/pie $opcionesOrganizadas = $cita->citaOpcionesUnas->groupBy('tipo_mano'); @endphp
@php // Definir el orden correcto para mostrar las cards $ordenCorrecto = ['izquierda', 'derecha', 'pie_izquierdo', 'pie_derecho']; @endphp @foreach($ordenCorrecto as $tipoMano) @if(isset($opcionesOrganizadas[$tipoMano])) @php $opciones = $opcionesOrganizadas[$tipoMano]; @endphp
@switch($tipoMano) @case('izquierda') Mano Izquierda @break @case('derecha') Mano Derecha @break @case('pie_izquierdo') Pie Izquierdo @break @case('pie_derecho') Pie Derecho @break @default {{ ucfirst($tipoMano) }} @endswitch
@if($tipoMano === 'izquierda' || $tipoMano === 'derecha') @foreach($opciones as $opcion) @php $imagenUña = $opcion->servicio->imagen ?? asset('imagenes/unas/default.png'); $coordenadas = getCoordenadasUña($tipoMano, $opcion->dedo); @endphp @endforeach @else @foreach($opciones as $opcion) @php $imagenUña = asset($opcion->servicio->imagen) ?? asset('imagenes/unas/default.png'); @endphp @endforeach @endif
@foreach($opciones as $opcion)
{{ ucfirst($opcion->dedo) }}: {{ $opcion->servicio->nombre }}
@endforeach
@endif @endforeach
@endif
Resumen de la Cita
Cita #{{ $cita->id }} {{ $cita->fecha_factura ? $cita->fecha_factura->format('d/m/Y H:i') : $cita->fecha_hora->format('d/m/Y H:i') }}

Servicios seleccionados:
@if($cita->citaServicios && $cita->citaServicios->count() > 0) @php // Organizar servicios por categoría y subcategoría $serviciosOrganizados = $cita->citaServicios->groupBy('categoria'); @endphp @foreach($serviciosOrganizados as $categoria => $serviciosCategoria)
{{ ucfirst($categoria) }}: @foreach($serviciosCategoria as $servicio) @if($servicio->subcategoria !== 'adicional')
{{ $servicio->nombre_servicio }} ${{ number_format($servicio->precio_total, 2) }}
@endif @endforeach @if($cita->citaOpcionesUnas && $cita->citaOpcionesUnas->count() > 0) @php // Filtrar opciones por categoría, pero manejar pies correctamente $opcionesCategoria = $cita->citaOpcionesUnas->filter(function($opcion) use ($categoria) { if ($categoria === 'pedicura') { // Para pedicura, incluir servicios de pies independientemente de su categoría return $opcion->tipo_mano === 'pie_izquierdo' || $opcion->tipo_mano === 'pie_derecho'; } else { // Para otras categorías (como manicura), excluir servicios de pies y usar la lógica original return $opcion->servicio && $opcion->servicio->categoria === $categoria && $opcion->tipo_mano !== 'pie_izquierdo' && $opcion->tipo_mano !== 'pie_derecho'; } })->groupBy('tipo_mano'); @endphp @foreach($opcionesCategoria as $tipoMano => $opciones)
@switch($tipoMano) @case('izquierda') Mano Izquierda: @break @case('derecha') Mano Derecha: @break @case('pie_izquierdo') Pie Izquierdo: @break @case('pie_derecho') Pie Derecho: @break @default {{ ucfirst($tipoMano) }}: @endswitch
@foreach($opciones as $opcion)
{{ ucfirst($opcion->dedo) }}: {{ $opcion->servicio->nombre ?? 'Servicio no encontrado' }} ${{ number_format($opcion->precio_aplicado, 2) }}
@endforeach @endforeach @endif @php $serviciosAdicionalesCategoria = $serviciosCategoria->where('subcategoria', 'adicional'); @endphp @if($serviciosAdicionalesCategoria->count() > 0)
Servicios adicionales:
@foreach($serviciosAdicionalesCategoria as $servicio)
{{ $servicio->nombre_servicio }} ${{ number_format($servicio->precio_total, 2) }}
@endforeach @endif
@endforeach @else No hay servicios detallados @endif
Subtotal: ${{ number_format($cita->subtotal_servicios ?? 0, 2) }}
Descuentos: -${{ number_format($cita->citaDescuentos->sum('monto_aplicado'), 2) }}
Total final: ${{ number_format($cita->total_final_cita ?? 0, 2) }}
@if($cita->citaDescuentos && $cita->citaDescuentos->count() > 0)
Descuentos aplicados:
@foreach($cita->citaDescuentos as $descuento)
{{ $descuento->nombre_descuento }} -${{ number_format($descuento->monto_aplicado, 2) }}
@endforeach
@endif
@if(Auth::user()->isAdmin())
@csrf @method('DELETE')
@endif
@endsection @push('styles') @endpush @section('scripts') @endsection