engelsystem/src/Models/AngelType.php

110 lines
3.9 KiB
PHP

<?php
declare(strict_types=1);
namespace Engelsystem\Models;
use Engelsystem\Models\Shifts\NeededAngelType;
use Engelsystem\Models\Shifts\ShiftEntry;
use Illuminate\Database\Eloquent\Builder;
use Engelsystem\Models\User\User;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Query\Builder as QueryBuilder;
/**
* @property int $id
* @property string $name
* @property string $description
* @property string $contact_name
* @property string $contact_dect
* @property string $contact_email
* @property boolean $restricted # If users need an introduction
* @property boolean $requires_driver_license # If users must have a driver license
* @property boolean $no_self_signup # Users can sign up for shifts
* @property boolean $show_on_dashboard # Show on public dashboard
* @property boolean $hide_register # Hide from registration page
*
* @property-read Collection|NeededAngelType[] $neededBy
* @property-read UserAngelType $pivot
* @property-read Collection|ShiftEntry[] $shiftEntries
* @property-read Collection|User[] $userAngelTypes
*
* @method static QueryBuilder|AngelType[] whereId($value)
* @method static QueryBuilder|AngelType[] whereName($value)
* @method static QueryBuilder|AngelType[] whereDescription($value)
* @method static QueryBuilder|AngelType[] whereContactName($value)
* @method static QueryBuilder|AngelType[] whereContactDect($value)
* @method static QueryBuilder|AngelType[] whereContactEmail($value)
* @method static QueryBuilder|AngelType[] whereRestricted($value)
* @method static QueryBuilder|AngelType[] whereRequiresDriverLicense($value)
* @method static QueryBuilder|AngelType[] whereNoSelfSignup($value)
* @method static QueryBuilder|AngelType[] whereShowOnDashboard($value)
* @method static QueryBuilder|AngelType[] whereHideRegister($value)
*/
class AngelType extends BaseModel
{
use HasFactory;
/** @var array<string> */
protected $fillable = [ // phpcs:ignore
'name',
'description',
'contact_name',
'contact_dect',
'contact_email',
'restricted',
'requires_driver_license',
'no_self_signup',
'show_on_dashboard',
'hide_register',
];
/** @var array<string, string> */
protected $casts = [ // phpcs:ignore
'restricted' => 'boolean',
'requires_driver_license' => 'boolean',
'no_self_signup' => 'boolean',
'show_on_dashboard' => 'boolean',
'hide_register' => 'boolean',
];
public function neededBy(): HasMany
{
return $this->hasMany(NeededAngelType::class);
}
public function shiftEntries(): HasMany
{
return $this->hasMany(ShiftEntry::class);
}
public function userAngelTypes(): BelongsToMany
{
return $this
->belongsToMany(User::class, 'user_angel_type')
->using(UserAngelType::class)
->withPivot(UserAngelType::getPivotAttributes());
}
public function hasContactInfo(): bool
{
return !empty($this->contact_name)
|| !empty($this->contact_dect)
|| !empty($this->contact_email);
}
/**
* @codeCoverageIgnore For some reasons parent::boot get s ignored here 0o
*/
protected static function boot(): void
{
parent::boot();
static::addGlobalScope('order', fn(Builder $builder) => $builder->orderBy('name'));
}
}