/** * Sort the results by the order form input * * @param Illuminate\Database\Query $query * @param array $sortBy Order by columns * @param array $sortByOrder Order by sort colums * @return Illuminate\Database\Query\Builder */ public function scopeSortByInput($query, $sortBy = array(), $sortByOrder = array()) { if (is_array($sortBy) && count($sortBy)) { foreach ($sortBy as $column) { $query->orderBy($column, $sortByOrder && in_array($column, $sortByOrder) ? 'desc' : 'asc'); } } return $query; }
/** * Scope Slug. * * @param Illuminate\Database\Query $query * @param string $slug Slug of the desired Service * * @return Illuminate\Database\Query Scoped query */ public function scopeSlug($query, $slug) { return $query->where('slug', '=', $slug)->get(); }
/** * Scope For Service * * @param Illuminate\Database\Query $query * @param Service $service Inquired Service to filter * @return Illuminate\Database\Query Scoped query */ public function scopeForService($query, Service $service) { return $query->where('service_id', '=', $service->id); }
/** * Sort oldest first. * * @param Illuminate\Database\Query $query * * @return Illuminate\Database\Query */ public function scopeOldest($query) { return $query->orderBy('start_at', 'ASC'); }
/** * Scope Affecting Humanresource. * * @param Illuminate\Database\Query $query * * @return Illuminate\Database\Query */ public function scopeAffectingHumanresource($query, $humanresourceId) { if (is_null($humanresourceId)) { return $query; } return $query->where('humanresource_id', $humanresourceId); }
/** * Scope only till date. * * @param Illuminate\Database\Query $query * @param Carbon $date Inquired range end date * * @return Illuminate\Database\Query Scoped appointments up to the inquired date */ public function scopeTillDate($query, Carbon $date) { return $query->where('start_at', '<=', $date->timezone('UTC')); }
/** * Between Dates. * * @param Illuminate\Database\Query $query * @param Carbon $startAt * @param Carbon $finishAt * * @return Illuminate\Database\Query */ public function scopeAffectingInterval($query, Carbon $startAt, Carbon $finishAt) { return $query->where(function ($query) use($startAt, $finishAt) { $query->where(function ($query) use($startAt, $finishAt) { $query->where('finish_at', '>=', $finishAt->timezone('UTC'))->where('start_at', '<=', $startAt->timezone('UTC')); })->orWhere(function ($query) use($startAt, $finishAt) { $query->where('finish_at', '<', $finishAt->timezone('UTC'))->where('finish_at', '>', $startAt->timezone('UTC')); })->orWhere(function ($query) use($startAt, $finishAt) { $query->where('start_at', '>', $startAt->timezone('UTC'))->where('start_at', '<', $finishAt->timezone('UTC')); })->orWhere(function ($query) use($startAt, $finishAt) { $query->where('start_at', '>', $startAt->timezone('UTC'))->where('finish_at', '<', $finishAt->timezone('UTC')); }); }); }