Files
alrahma_sunday_school_api/app/Services/Fees/FeeStudentFeeService.php
T
2026-03-09 16:02:30 -04:00

63 lines
1.8 KiB
PHP

<?php
namespace App\Services\Fees;
use App\Models\ClassSection;
class FeeStudentFeeService
{
public function __construct(
private FeeGradeService $grades,
private FeeConfigService $config
) {
}
public function assignFees(array $students): array
{
$fees = $this->config->getFees();
$firstFee = $fees['first_student_fee'];
$secondFee = $fees['second_student_fee'];
$youthFee = $fees['youth_fee'];
foreach ($students as &$student) {
$grade = $student['grade'] ?? null;
if ($grade === null || trim((string) $grade) === '') {
$sectionId = $student['class_section_id'] ?? null;
$grade = $sectionId ? ClassSection::getClassSectionNameBySectionId($sectionId) : null;
}
$student['grade'] = $this->grades->normalizeGrade($grade);
}
unset($student);
usort($students, function ($a, $b) {
return $this->grades->compareGrades($a['grade'] ?? '', $b['grade'] ?? '');
});
$regularCount = 0;
foreach ($students as &$student) {
$gradeLevel = $this->grades->getGradeLevel($student['grade'] ?? '');
if ($gradeLevel > 9) {
$student['tuition_fee'] = $youthFee;
} else {
$student['tuition_fee'] = ($regularCount === 0) ? $firstFee : $secondFee;
$regularCount++;
}
}
unset($student);
return $students;
}
public function totalTuitionFee(array $students): float
{
$students = $this->assignFees($students);
$total = 0.0;
foreach ($students as $student) {
$total += (float) ($student['tuition_fee'] ?? 0);
}
return $total;
}
}