xisodev/working_hours

Schedule 是一个帮助跟踪模型日程的包。如果你公司有工人,你可以为他们设置日程,并通过时间查看他们的可用性。

v1.0.1 2022-12-08 15:50 UTC

This package is auto-updated.

Last update: 2024-09-08 19:36:04 UTC


README

Schedule 是一个帮助跟踪模型日程的包。如果你公司有工人,你可以为他们设置日程,并通过时间查看他们的可用性。

灵感

此包受到了 Spatie's Opening Hours 包的启发,该包使用日程表,但仅是静态的,而不是将其绑定到模型。这让我有了一个想法,那就是将其与 Eloquent 模型比传统类更接近。

安装

使用 Composer CLI 安装此包

$ composer require xisodev/working_hours

对于不支持包发现的 Laravel 版本,你应该将其添加到你的 config/app.php 文件中的 providers 数组中

\XisoDev\WorkingHours\ScheduleServiceProvider::class,

发布迁移文件和配置文件。

$ php artisan vendor:publish --provider="XisoDev\WorkingHours\ScheduleServiceProvider"

迁移数据库。

$ php artisan migrate

将特质添加到你的模型中。

use XisoDev\WorkingHours\Traits\HasSchedule;

class User extends Model {
    use HasSchedule;
    ...
}

入门指南

为了开始,让我们为我们的用户创建一个日程。它将从周一到周五,8-12点和13-18点。

$user->setSchedule([
    'monday' => ['08:00-12:00', '13:00-18:00'],
    'tuesday' => ['08:00-12:00', '13:00-18:00'],
    'wednesday' => ['08:00-12:00', '13:00-18:00'],
    'thursday' => ['08:00-12:00', '13:00-18:00'],
    'friday' => ['08:00-12:00', '13:00-18:00'],
]);

$user->hasSchedule(); // true

假设用户每年的3月1日过生日,所以让我们将它添加到排除列表中。此外,圣诞节的第一天和第二天对任何人都是免费的,让我们也将2018年5月1日添加到我们的排除列表中。

注意:2018年5月1日只会发生一次,它不是重复发生的。

$user->setExclusions([
    '03-01' => ['08:00-12:00'],
    '12-25' => [],
    '12-26' => [],
    '2018-05-01' => [],
]);

检查可用性

你可以检查用户在某个日期或日期是否有工作时间。传递日期也可以与 Carbon 实例一起使用。

$user->isAvailableOn('monday'); // true
$user->isAvailableOn('05-28'); // true; This is Monday, in 2018 (current year)
$user->isAvailableOn('2018-05-28'); // true
$user->isAvailableOn(Carbon::create(2018, 5, 28, 0, 0, 0)); // true

$user->isUnavailableOn('monday'); // false
$user->isUnavailableOn('05-28'); // false
$user->isUnavailableOn('2018-05-28'); // false
$user->isUnavailableOn(Carbon::create(2018, 5, 28, 0, 0, 0)); // false

如果那天有排除项,它将根据那天设置的日程返回正确的值。

$user->isUnavailableOn('12-25'); // true
$user->isUnavailableOn('03-01'); // false

检查特定时间点的可用性

你还可以检查特定日期的特定时间的可用性。

$user->isAvailableOnAt('monday', '09:00'); // true
$user->isUnavailableOnAt('monday', '09:00'); // false

获取一天的小时数或分钟数

你可以获取一天安排的小时数或分钟数。例如,这对于跟踪工作时间很有用。

$user->getHoursOn('03-01'); // 4
$user->getHoursOn('12-26'); // 0
$user->getHoursOn('05-28'); // 9
$user->getHoursOn('2018-05-28'); // 9

$user->getMinutesOn('03-01'); // 240

删除日程

如果你计划删除用户的工作时间表,你可以通过调用 deleteSchedule() 来完成。

$user->deleteSchedule();
$user->hasSchedule(); // false