@extends('layouts.app') @section('title', 'Cashier Shifts') @section('content')

Cashier Shifts

Open with a float, close with an actual cash count — variance is flagged automatically.

@if (!auth()->user()->activeShift) @can('shifts.manage') @endcan @else @can('shifts.manage') @endcan @endif
@if ($activeShift && $summary)

My shift — live progress

Shift #{{ $activeShift->id }} · opened {{ $activeShift->opened_at->format('d M, H:i') }} · {{ $summary['orders_count'] }} order(s)/tab(s) so far

{{ config('pos.company.currency_symbol') }} {{ number_format($summary['total_sales'], 2) }} total sales

Payments received, by method

Cash in drawer (float + cash sales − payouts) {{ number_format($summary['cash_in_drawer'], 2) }}
@forelse ($summary['by_method'] as $method => $amount)
{{ $method }} {{ number_format($amount, 2) }}
@empty

No payments recorded yet this shift.

@endforelse

Products & services sold this shift

@forelse ($summary['products'] as $name => $row)
{{ $name }} × {{ $row['qty'] }} {{ number_format($row['total'], 2) }}
@empty

Nothing sold yet this shift.

@endforelse
@endif
@forelse ($shifts as $shift) @empty @endforelse
CashierOpenedClosedFloatExpectedActualVarianceStatus
{{ $shift->cashier->name }} {{ $shift->opened_at->format('d M, H:i') }} {{ $shift->closed_at?->format('d M, H:i') ?? '—' }} {{ number_format($shift->opening_float, 2) }} {{ number_format($shift->expected_cash, 2) }} {{ $shift->actual_cash !== null ? number_format($shift->actual_cash, 2) : '—' }} {{ $shift->variance !== null ? number_format($shift->variance, 2) : '—' }} {{ ucfirst($shift->status) }} @if ($shift->status === 'closed' && auth()->user()->can('shifts.approve'))
@csrf
@endif
No shifts recorded yet.
{{ $shifts->links() }}
@csrf
@csrf

Expected cash is computed automatically from sales, expenses and withdrawals logged on this shift.

@endsection