All Projects → rennokki → Schedule

rennokki / Schedule

Licence: mit
Schedule is a package that helps tracking schedules for your models. If you have workers in a company, you can set schedules for them and see their availability though the time.

Projects that are alternatives of or similar to Schedule

Befriended
Eloquent Befriended brings social media-like features like following, blocking and filtering content based on following or blocked models.
Stars: ✭ 596 (+284.52%)
Mutual labels:  eloquent, laravel, trait, model
Elasticsearch
The missing elasticsearch ORM for Laravel, Lumen and Native php applications
Stars: ✭ 375 (+141.94%)
Mutual labels:  eloquent, laravel, model
Laravel Likeable
Rate Eloquent models with Likes and Dislikes in Laravel. Development moved to Laravel Love package!
Stars: ✭ 95 (-38.71%)
Mutual labels:  eloquent, laravel, trait
Laravel Ban
Laravel Ban simplify blocking and banning Eloquent models.
Stars: ✭ 572 (+269.03%)
Mutual labels:  eloquent, laravel, trait
Laravel Model Status
Easily add statuses to your models
Stars: ✭ 510 (+229.03%)
Mutual labels:  eloquent, laravel, model
Plans
Laravel Plans is a package for SaaS apps that need management over plans, features, subscriptions, events for plans or limited, countable features.
Stars: ✭ 326 (+110.32%)
Mutual labels:  eloquent, laravel, model
Guardian
Eloquent Guardian is a simple permissions system for your users. While there are many other packages for permissions, this one solves everything in the most eloquent way.
Stars: ✭ 121 (-21.94%)
Mutual labels:  eloquent, laravel, model
Rating
Laravel Eloquent Rating allows you to assign ratings to any model.
Stars: ✭ 175 (+12.9%)
Mutual labels:  eloquent, laravel, model
Laravel Imageup
Auto Image & file upload, resize and crop for Laravel eloquent model using Intervention image
Stars: ✭ 646 (+316.77%)
Mutual labels:  eloquent, laravel, trait
Laravel Sluggable
An opinionated package to create slugs for Eloquent models
Stars: ✭ 831 (+436.13%)
Mutual labels:  eloquent, laravel, model
Eager Load Pivot Relations
Eager load pivot relations for Laravel Eloquent's BelongsToMany relation.
Stars: ✭ 134 (-13.55%)
Mutual labels:  eloquent, laravel, model
Eloquent Sortable
Sortable behaviour for Eloquent models
Stars: ✭ 914 (+489.68%)
Mutual labels:  eloquent, laravel, trait
Laravel Stager
Laravel Stager State Machine, Its purpose is to add state machine functionality to models
Stars: ✭ 16 (-89.68%)
Mutual labels:  schedule, laravel, trait
Laravel Ownership
Laravel Ownership simplify management of Eloquent model's owner.
Stars: ✭ 71 (-54.19%)
Mutual labels:  eloquent, laravel, trait
Sarala
Javascript library to communicate with RESTful API built following JSON API specification. inspired by Laravel’s Eloquent
Stars: ✭ 101 (-34.84%)
Mutual labels:  eloquent, laravel
Laravel Table
Generate tables from Eloquent models.
Stars: ✭ 101 (-34.84%)
Mutual labels:  laravel, table
Laravel Translatable
Making Eloquent models translatable
Stars: ✭ 1,390 (+796.77%)
Mutual labels:  eloquent, laravel
Laravel Cacheable
Rinvex Cacheable is a granular, intuitive, and fluent caching system for eloquent models. Simple, but yet powerful, plug-n-play with no hassle.
Stars: ✭ 107 (-30.97%)
Mutual labels:  eloquent, laravel
Laravel Settings
Store key value pair in database as settings
Stars: ✭ 107 (-30.97%)
Mutual labels:  eloquent, laravel
Pinatra
A PHP copy of Sinatra: a DSL for quickly creating web applications in PHP with minimal effort.
Stars: ✭ 151 (-2.58%)
Mutual labels:  eloquent, laravel

Build Status codecov StyleCI Latest Stable Version Total Downloads Monthly Downloads License

PayPal

Schedule

Schedule is a package that helps tracking schedules for your models. If you have workers in a company, you can set schedules for them and see their availability though the time.

Inspiration

This package is inspired from Spatie's Opening Hours package, which uses a schedule but only statically, rather than binding it to a model. This gave me the idea of brining it closer to Eloquent Models than to the classic Class.

Installation

Install the package via Composer CLI:

$ composer require rennokki/schedule

For versions of Laravel that doesn't support package discovery, you should add this to your config/app.php file, in the providers array:

\Rennokki\Schedule\ScheduleServiceProvider::class,

Publish the migration file and the config file.

$ php artisan vendor:publish

Migrate the database.

$ php artisan migrate

Add the trait to your model.

use Rennokki\Schedule\Traits\HasSchedule;

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

Getting Started

To get stared, let's create a schedule for our user. It will be from Monday to Friday, between 8-12 and 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

Let's say the user has its birthday on 1st March each year, so let's add this to an exclusions list. Adding to this, the first and the second day of Christmas is free for anyone, and let's add 1st May 2018 in our exclusions list too.

Note: 1st May 2018 will occur only once, it's not recurrent.

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

Checking for availability

You can check if the user has working hours on a certain day, date. Passing date also works with Carbon instance.

$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

If there is an exclusion that day, it will return the correct value based on the schedule set that day:

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

Checking for availability at a certain time

You can also check availability for a certain time on a specific day.

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

Getting the amount of hours or minutes for a day

You can get the amount of hours or minutes scheduled for a day. Good for tracking workable hours, for example.

$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

Deleting the schedule

If you plan to delete the user's schedule, you can do so by calling deleteSchedule().

$user->deleteSchedule();
$user->hasSchedule(); // false
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].