#20 - vacation requests (#35)

* #20 - wip

* #20 - wip

* #20 - fix

* #20 - wip

* #20 - fix

* #20 - fix
This commit is contained in:
Adrian Hopek
2022-02-03 08:39:09 +01:00
committed by GitHub
parent f6d59f8bfb
commit 067b343f24
73 changed files with 5750 additions and 3576 deletions

View File

@@ -13,7 +13,8 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Toby\Domain\EmploymentForm;
use Toby\Domain\Enums\EmploymentForm;
use Toby\Domain\Enums\Role;
/**
* @property int $id
@@ -21,9 +22,11 @@ use Toby\Domain\EmploymentForm;
* @property string $last_name
* @property string $email
* @property string $avatar
* @property Role $role
* @property EmploymentForm $employment_form
* @property Carbon $employment_date
* @property Collection $vacationLimits
* @property Collection $vacationRequests
*/
class User extends Authenticatable
{
@@ -34,6 +37,7 @@ class User extends Authenticatable
protected $guarded = [];
protected $casts = [
"role" => Role::class,
"employment_form" => EmploymentForm::class,
"employment_date" => "date",
];
@@ -47,6 +51,11 @@ class User extends Authenticatable
return $this->hasMany(VacationLimit::class);
}
public function vacationRequests(): HasMany
{
return $this->hasMany(VacationRequest::class);
}
public function scopeSearch(Builder $query, ?string $text): Builder
{
if ($text === null) {
@@ -71,6 +80,11 @@ class User extends Authenticatable
return "{$this->first_name} {$this->last_name}";
}
public function hasRole(Role $role): bool
{
return $this->role === $role;
}
protected static function newFactory(): UserFactory
{
return UserFactory::new();

View File

@@ -0,0 +1,67 @@
<?php
declare(strict_types=1);
namespace Toby\Eloquent\Models;
use Database\Factories\VacationRequestFactory;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Toby\Domain\Enums\VacationRequestState;
use Toby\Domain\Enums\VacationType;
/**
* @property int $id
* @property VacationType $type
* @property VacationRequestState $state
* @property Carbon $from
* @property Carbon $to
* @property string $comment
* @property User $user
* @property Collection $activities
*/
class VacationRequest extends Model
{
use HasFactory;
protected $guarded = [];
protected $casts = [
"type" => VacationType::class,
"state" => VacationRequestState::class,
"from" => "date",
"to" => "date",
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function activities(): HasMany
{
return $this->hasMany(VacationRequestActivity::class);
}
public function changeStateTo(VacationRequestState $state): void
{
$this->state = $state;
$this->save();
}
public function scopeStates(Builder $query, array $states): Builder
{
return $query->whereIn("state", $states);
}
protected static function newFactory(): VacationRequestFactory
{
return VacationRequestFactory::new();
}
}

View File

@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Toby\Eloquent\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Toby\Domain\Enums\VacationRequestState;
/**
* @property int $id
* @property VacationRequest $vacationRequest
* @property ?User $user
* @property ?VacationRequestState $from
* @property VacationRequestState $to
*/
class VacationRequestActivity extends Model
{
protected $guarded = [];
protected $casts = [
"from" => VacationRequestState::class,
"to" => VacationRequestState::class,
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function vacationRequest(): BelongsTo
{
return $this->belongsTo(VacationRequest::class);
}
}