68 lines
1.9 KiB
PHP
68 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Enumerations;
|
|
|
|
use App\Scopes\CommonModel;
|
|
|
|
/**
|
|
* Gründe, aus denen ein Teil des gezahlten Teilnahmebeitrags beim Verband bleibt.
|
|
*
|
|
* Gegenstück zu {@see RefundReason}: Jener sagt, warum erstattet wird, dieser, warum nicht alles.
|
|
*
|
|
* @property string $slug
|
|
* @property string $name
|
|
* @property string|null $document_text
|
|
* @property bool $requires_note
|
|
* @property int $sort_order
|
|
*/
|
|
class RetentionReason extends CommonModel
|
|
{
|
|
public const string CANCELLATION_FEE = 'cancellation_fee';
|
|
public const string INCURRED_COSTS = 'incurred_costs';
|
|
public const string MATERIAL = 'material';
|
|
public const string CUSTOM = 'custom';
|
|
|
|
protected $table = 'retention_reasons';
|
|
protected $primaryKey = 'slug';
|
|
public $incrementing = false;
|
|
protected $keyType = 'string';
|
|
|
|
protected $fillable = [
|
|
'slug',
|
|
'name',
|
|
'document_text',
|
|
'requires_note',
|
|
'sort_order',
|
|
];
|
|
|
|
protected $casts = [
|
|
'requires_note' => 'boolean',
|
|
'sort_order' => 'integer',
|
|
];
|
|
|
|
/**
|
|
* Der Text, der auf dem Beleg unter „Einbehalten" steht. Bei einem Grund, der einen Freitext
|
|
* verlangt, ist es der Text der Aktionsleitung.
|
|
*/
|
|
public function documentText(?string $note = null): string
|
|
{
|
|
return $this->requires_note ? trim((string) $note) : (string) $this->document_text;
|
|
}
|
|
|
|
/**
|
|
* Optionen für das Frontend. `requiresNote` steuert dort das Freitextfeld.
|
|
*
|
|
* @return array<int, array{value: string, label: string, requiresNote: bool}>
|
|
*/
|
|
public static function options(): array
|
|
{
|
|
return self::orderBy('sort_order')->get()
|
|
->map(static fn (self $reason): array => [
|
|
'value' => $reason->slug,
|
|
'label' => $reason->name,
|
|
'requiresNote' => $reason->requires_note,
|
|
])
|
|
->all();
|
|
}
|
|
}
|