'datetime', 'closed_at' => 'datetime', 'initial_cash' => 'decimal:2', 'final_cash' => 'decimal:2', 'expected_cash' => 'decimal:2', 'difference' => 'decimal:2', 'total_sales' => 'decimal:2', ]; public function user() { return $this->belongsTo(User::class); } public function sales() { return $this->hasMany(Sale::class); } /** * Verificar si la caja está abierta */ public function isOpen(): bool { return $this->status === 'open'; } /** * Calcular totales por método de pago */ public function getTotalsByPaymentMethod() { return $this->sales() ->where('status', 'completed') ->selectRaw('payment_method, SUM(total) as total, COUNT(*) as count') ->groupBy('payment_method') ->get(); } }