This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Support\Enrollment;
|
||||
|
||||
final class DeliberationDecision
|
||||
{
|
||||
public const PASSED = 'PASSED';
|
||||
public const REPEAT_CLASS = 'REPEAT_CLASS';
|
||||
public const MAKE_UP_EXAM = 'MAKE_UP_EXAM';
|
||||
public const EXPELLED = 'EXPELLED';
|
||||
public const WITHDRAWN = 'WITHDRAWN';
|
||||
public const DEFERRED_DECISION = 'DEFERRED_DECISION';
|
||||
|
||||
public const ALL = [
|
||||
self::PASSED,
|
||||
self::REPEAT_CLASS,
|
||||
self::MAKE_UP_EXAM,
|
||||
self::EXPELLED,
|
||||
self::WITHDRAWN,
|
||||
self::DEFERRED_DECISION,
|
||||
];
|
||||
|
||||
public static function normalize(?string $decision): ?string
|
||||
{
|
||||
$value = trim((string) $decision);
|
||||
if ($value === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
$key = strtoupper((string) preg_replace('/[^A-Z0-9]+/', '_', $value));
|
||||
$key = trim((string) preg_replace('/_+/', '_', $key), '_');
|
||||
|
||||
if (in_array($key, self::ALL, true)) {
|
||||
return $key;
|
||||
}
|
||||
|
||||
$compact = strtolower((string) preg_replace('/[^a-z0-9]+/', '', strtolower($value)));
|
||||
|
||||
return match (true) {
|
||||
in_array($compact, ['pass', 'passed', 'promote', 'promoted'], true) => self::PASSED,
|
||||
str_contains($compact, 'repeat') || str_contains($compact, 'keepkg') => self::REPEAT_CLASS,
|
||||
str_contains($compact, 'makeupexam') || str_contains($compact, 'makeupexamfall') || str_contains($compact, 'makeup') => self::MAKE_UP_EXAM,
|
||||
str_contains($compact, 'deferred') || str_contains($compact, 'pendingdecision') => self::DEFERRED_DECISION,
|
||||
str_contains($compact, 'withdraw') || str_contains($compact, 'widthraw') || str_contains($compact, 'widthdraw') || str_contains($compact, 'widthrwan') => self::WITHDRAWN,
|
||||
str_contains($compact, 'expel') => self::EXPELLED,
|
||||
default => null,
|
||||
};
|
||||
}
|
||||
|
||||
public static function display(?string $decision): string
|
||||
{
|
||||
return match (self::normalize($decision) ?? $decision) {
|
||||
self::PASSED => 'Passed',
|
||||
self::REPEAT_CLASS => 'Repeat Class',
|
||||
self::MAKE_UP_EXAM => 'Make-up Exam',
|
||||
self::EXPELLED => 'Expelled',
|
||||
self::WITHDRAWN => 'Withdrawn',
|
||||
self::DEFERRED_DECISION => 'Deferred Decision',
|
||||
default => trim((string) $decision),
|
||||
};
|
||||
}
|
||||
|
||||
public static function blocksEnrollment(?string $decision): bool
|
||||
{
|
||||
return in_array(self::normalize($decision), [
|
||||
self::EXPELLED,
|
||||
self::WITHDRAWN,
|
||||
self::DEFERRED_DECISION,
|
||||
], true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user