@extends('layouts.admin') @section('title', 'Caja') @section('content')

Caja diaria

Apertura, egresos, movimientos y cierres

@if(! $open) @if(auth()->user()->hasPermission('cash.open')) @endif @else @if(auth()->user()->hasPermission('cash.movements.create')) @endif @if(auth()->user()->hasPermission('cash.close')) @endif @endif
@if(! $open)
¿Encontró dinero después de cerrar la caja?

Si alguien olvidó registrar un cobro o apareció efectivo después del cierre: abra caja y use Movimiento → Ingreso extra (o la opción de dinero olvidado), indicando que corresponde al cierre anterior. Queda documentado en el nuevo turno.

@if(auth()->user()->hasPermission('cash.open')) @endif
@endif @if($open) @php $income = $open->movements->where('direction', 'IN')->sum(fn ($m) => (float) $m->amount); $out = $open->movements->where('direction', 'OUT')->sum(fn ($m) => (float) $m->amount); $expenses = $open->movements->where('type', \App\Enums\CashMovementType::EXPENSE)->sum(fn ($m) => (float) $m->amount); $expected = (float) $open->opening_balance + $income - $out; @endphp
Revise los movimientos del turno. Cuando todo cuadre, use Cerrar caja e indique el efectivo contado (puede usar el saldo esperado o escribir el monto real si falta o sobra).
Saldo inicial
${{ number_format((float) $open->opening_balance, 2) }}
Ingresos
${{ number_format($income, 2) }}
Egresos
${{ number_format($expenses, 2) }}
Esperado actual
${{ number_format($expected, 2) }}

Movimientos del turno

Ver todos los egresos Salidas totales: ${{ number_format($out, 2) }}
@forelse($open->movements->sortByDesc('created_at') as $m) @empty @endforelse
Hora Tipo Cliente Categoría Descripción Dirección Monto
{{ $m->created_at->format('H:i') }} {{ $m->type->label() }} {{ $m->clientLabel() }} {{ $m->category?->label() ?? '—' }} {{ $m->description }} {{ $m->direction === 'IN' ? 'Entrada' : 'Salida' }} {{ $m->direction === 'OUT' ? '−' : '+' }}${{ number_format((float) $m->amount, 2) }} @if($m->viewableAttachmentPath()) Ver @endif
Sin movimientos registrados.
@include('cash.partials.pending-orders') @else

No hay caja abierta. Use el botón Abrir caja para iniciar el turno. Los egresos del menú Nuevo también requieren caja abierta.

@endif

Historial de cierres

@forelse($sessions as $s) @empty @endforelse
Usuario Apertura Cierre Esperado Contado Diferencia Estado
{{ $s->user->name }} {{ $s->opened_at->format('d/m/Y H:i') }} {{ $s->closed_at?->format('d/m/Y H:i') ?? '—' }} {{ $s->expected_balance }} {{ $s->counted_balance ?? '—' }} {{ $s->difference }} {{ $s->status->value }}
Sin historial de cierres.
@if($sessions->hasPages()) @endif
{{-- Egreso --}} @if($open) @endif @endsection @push('scripts') @endpush