Files
alrahma_sunday_school_api/app/Services/Invoices/InvoiceGradeService.php
T
2026-06-11 11:46:12 -04:00

86 lines
2.4 KiB
PHP

<?php
namespace App\Services\Invoices;
class InvoiceGradeService
{
public function __construct(private int $gradeFee) {}
public function isKindergarten(string $grade): bool
{
$g = strtolower(trim($grade));
return in_array($g, ['KG', 'kg', 'k', 'kindergarten', 'k-g', 'k.g', 'k g'], true);
}
public function compareGrades(string $gradeA, string $gradeB): int
{
$valA = $this->getGradeLevel($gradeA);
$valB = $this->getGradeLevel($gradeB);
if ($valA['level'] !== $valB['level']) {
return $valA['level'] <=> $valB['level'];
}
return strcmp($valA['suffix'] ?? '', $valB['suffix'] ?? '');
}
public function gradeLevelInt(string $grade): int
{
$gl = $this->getGradeLevel($grade);
return (int) ($gl['level'] ?? 0);
}
public function getGradeLevel($grade): array
{
if (is_numeric($grade)) {
$num = (int) $grade;
if ($num === 13) {
return ['level' => 1, 'suffix' => '', 'classId' => 13];
}
return ['level' => $num, 'suffix' => '', 'classId' => null];
}
if (! is_string($grade)) {
return ['level' => 999, 'suffix' => '', 'classId' => null];
}
$g = strtoupper(trim($grade));
$g = preg_replace('/\s+/', ' ', $g);
$g = str_replace(['.', '_'], '', $g);
$g = str_replace('-', ' ', $g);
$kg = ['K', 'KG', 'K G', 'KINDER', 'KINDERGARTEN'];
if (in_array($g, $kg, true)) {
return ['level' => 1, 'suffix' => '', 'classId' => 13];
}
$pk = ['PK', 'P K', 'PREK', 'PRE K', 'PRE-K', 'PRE KINDER', 'PREKINDER'];
if (in_array($g, $pk, true)) {
return ['level' => -1, 'suffix' => '', 'classId' => null];
}
if (preg_match('/^Y(?:OUTH)?(?:\s*(\d+))?$/', $g, $m)) {
$n = isset($m[1]) && $m[1] !== '' ? max(1, (int) $m[1]) : 1;
return [
'level' => $this->gradeFee + $n,
'suffix' => '',
'classId' => null,
];
}
if (preg_match('/^(?:GR?ADE\s*)?(\d{1,2})\s*([A-Z]*)$/', $g, $m)) {
return [
'level' => (int) $m[1],
'suffix' => $m[2] ?? '',
'classId' => null,
];
}
return ['level' => 999, 'suffix' => '', 'classId' => null];
}
}