Files
My-KOPKB/be/Modules/MembershipApplication/Entities/MembershipApplication.php
T

85 lines
1.9 KiB
PHP

<?php
namespace Modules\MembershipApplication\Entities;
use App\Models\Document;
use App\Traits\HasDocuments;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\Relations\MorphOne;
use Modules\Auth\Entities\User;
use Modules\MembershipApplication\Enums\ApplicationStatus;
class MembershipApplication extends Model
{
use HasDocuments, HasUuids;
public const RESULT_LETTER_DOCUMENT_TYPE = 'result_letter';
public const ADMIN_ATTACHMENT_DOCUMENT_TYPE = 'admin_attachment';
public const MINIMUM_SHARE_CAPITAL = 500;
public const SHARE_INSTALLMENT_MONTHS = 6;
protected $table = 'membership_applications';
/**
* @var list<string>
*/
protected $fillable = [
'application_number',
'user_id',
'status',
'board_result',
'submitted_at',
'completed_at',
];
/**
* @var list<string>
*/
protected $hidden = [
];
protected function casts(): array
{
return [
'status' => ApplicationStatus::class,
];
}
public function applicant(): HasOne
{
return $this->hasOne(MembershipApplicationApplicant::class);
}
public function heirs(): HasMany
{
return $this->hasMany(MembershipApplicationHeir::class);
}
public function references(): HasMany
{
return $this->hasMany(MembershipApplicationReference::class);
}
public function reviews(): HasMany
{
return $this->hasMany(MembershipApplicationReview::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
public function resultLetterDocument(): MorphOne
{
return $this->morphOne(Document::class, 'documentable')
->where('type', self::RESULT_LETTER_DOCUMENT_TYPE);
}
}