'datetime', 'closed_at' => 'datetime', 'initial_cash' => 'decimal:2', 'final_cash' => 'decimal:2', 'expected_cash' => 'decimal:2', 'difference' => 'decimal:2', 'total_sales' => 'decimal:2', 'total_returns' => 'decimal:2', 'cash_returns' => 'decimal:2', 'card_returns' => 'decimal:2', 'total_discounts' => 'decimal:2', ]; public function user() { return $this->belongsTo(User::class); } public function sales() { return $this->hasMany(Sale::class); } public function returns() { return $this->hasMany(Returns::class, 'cash_register_id'); } /** * 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(); } }