Productos pagados. Elige abajo el método de entrega (retiro o envío) para que pase a POR PROCESAR. Si es envío, su costo se suma al saldo.
@endif
{{-- Facturación: la reserva no es factura. Se puede reservar solo con el código y completar el cliente después. --}}
@if($reservation->status != 3)
@if($reservation->customer_id)
Datos de facturación:{{ $customer->name }} ({{ $customer->tax_no ?: $customer->ruc ?: 'sin cédula/RUC' }}).
@else
Datos de facturación pendientes: esta reserva se hizo solo con el código. No impide reservar, abonar ni entregar.
@endif
La reserva no genera factura. Cuándo y cómo se factura una reserva lo define el contador; aquí solo se guarda el cliente.
@if($can_assign)
Incluye las reservas unidas: {{ $merged->pluck('reference_no')->implode(', ') }}.
@endif
@if($mergeable->isNotEmpty())
{{ $customer->name }} tiene otra reserva activa en esta tienda. Únelas para ver todo en una sola (productos y abonos):
@foreach($mergeable as $other)
{!! Form::open(['route' => ['reservations.merge', $reservation->id], 'method' => 'post', 'class' => 'd-inline', 'onsubmit' => "return confirm('¿Unir " . $other->reference_no . " a " . $reservation->reference_no . "? Sus productos y abonos pasan a esta reserva. " . $other->reference_no . " queda como Unida (no se borra).')"]) !!}
{!! Form::close() !!}
@endforeach
@endif
{{-- Paquete: método de envío y, si está pagada, marcar enviado/entregado (bodega) --}}
@if(in_array($reservation->status, [1, 4, 5]))
@if(in_array($reservation->status, [4, 5]))
{{-- Acción principal de una pagada: un solo paso hasta ENTREGADA --}}
PAGADA · {{ mb_strtoupper($reservation->status == 5 ? 'Enviada, por cerrar' : $reservation->pending_action_label) }}
@if($reservation->paid_at)(desde el {{ \Carbon\Carbon::parse($reservation->paid_at)->format('d/m/Y') }})@endif
El cliente tiene un excedente de ${{ number_format($reservation->surplus, 2) }}.
Abonó más que el total actual (se quitaron productos). No se devolvió dinero: queda pendiente decidir devolución o crédito.
{!! Form::close() !!}
Los abonos quedan registrados en la reserva. Se facturan desde «Facturación» (el total o cada abono).
@endif
@if($reservation->paid == 0)
{!! Form::open(['route' => ['reservations.cancel', $reservation->id], 'method' => 'post', 'onsubmit' => "return confirm('¿Cancelar la reserva? Los productos vuelven al stock disponible. La reserva no se borra: queda en Canceladas.')"]) !!}
{!! Form::close() !!}
@else
Esta reserva tiene abonos: no se puede cancelar todavía (la devolución o crédito se definirá más adelante).
Reserva cancelada: sus productos volvieron al stock disponible.
@endif
{{-- Historial (reservation_events): consolidaciones, abonos, pagos, envíos y entregas, con quién y cuándo --}}
Historial
@if($events === null)
El historial detallado se activa al ejecutar database/cambios/2026-10-18b_reservas_historial.sql. Mientras tanto, los abonos de arriba muestran fecha y usuario.
@elseif($events->isEmpty())
Sin movimientos registrados todavía (el historial empezó a guardarse el 18/10/2026).