75 lines
1.6 KiB
PHP
75 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class CashRegister extends Model
|
|
{
|
|
protected $fillable = [
|
|
'user_id',
|
|
'opened_at',
|
|
'closed_at',
|
|
'initial_cash',
|
|
'final_cash',
|
|
'expected_cash',
|
|
'difference',
|
|
'total_sales',
|
|
'sales_count',
|
|
'total_returns',
|
|
'cash_returns',
|
|
'card_returns',
|
|
'returns_count',
|
|
'notes',
|
|
'status',
|
|
];
|
|
|
|
protected $casts = [
|
|
'opened_at' => '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',
|
|
];
|
|
|
|
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();
|
|
}
|
|
}
|