libra/app/Models/WorkingHour.php

70 lines
1.7 KiB
PHP

<?php
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class WorkingHour extends Model
{
use HasFactory;
protected $fillable = [
'day_of_week',
'start_time',
'end_time',
'is_active',
];
protected function casts(): array
{
return [
'day_of_week' => 'integer',
'is_active' => 'boolean',
];
}
/**
* Scope to filter active working hours.
*/
public function scopeActive(Builder $query): Builder
{
return $query->where('is_active', true);
}
/**
* Get the day name for a given day of week.
*/
public static function getDayName(int $dayOfWeek, ?string $locale = null): string
{
$locale = $locale ?? app()->getLocale();
$days = [
'en' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
'ar' => ['الأحد', 'الإثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
];
return $days[$locale][$dayOfWeek] ?? $days['en'][$dayOfWeek];
}
/**
* Get available time slots for this working hour.
*
* @return array<string>
*/
public function getSlots(int $duration = 60): array
{
$slots = [];
$start = Carbon::parse($this->start_time);
$end = Carbon::parse($this->end_time);
while ($start->copy()->addMinutes($duration)->lte($end)) {
$slots[] = $start->format('H:i');
$start->addMinutes($duration);
}
return $slots;
}
}