This commit is contained in:
@@ -7,6 +7,7 @@ use App\Models\UserModel;
|
||||
use App\Models\StudentModel;
|
||||
use App\Models\ClassSectionModel;
|
||||
use App\Models\StudentClassModel;
|
||||
use App\Models\StudentSectionDistributionDraftModel;
|
||||
use App\Models\AuthorizedUserModel;
|
||||
use App\Models\EmergencyContactModel;
|
||||
use App\Models\ConfigurationModel;
|
||||
@@ -444,6 +445,7 @@ class ParentController extends BaseController
|
||||
$this->applyPromotionAssignment((int)$studentId, (string)$this->schoolYear);
|
||||
} else {
|
||||
log_message('info', "{$studentData[$studentId]['firstname']} {$studentData[$studentId]['lastname']} (ID $studentId) is already actively enrolled.");
|
||||
$this->applyPromotionAssignment((int)$studentId, (string)$this->schoolYear);
|
||||
}
|
||||
} else {
|
||||
$passedPreviousYear = $this->studentPassedPreviousYear((int)$studentId, (string)$this->schoolYear);
|
||||
@@ -579,20 +581,29 @@ class ParentController extends BaseController
|
||||
try {
|
||||
$promo = new \App\Models\PromotionQueueModel();
|
||||
$classSectionModel = new \App\Models\ClassSectionModel();
|
||||
$draftModel = new StudentSectionDistributionDraftModel();
|
||||
$studentClass = new \App\Models\StudentClassModel();
|
||||
|
||||
$draft = $draftModel->where('student_id', $studentId)
|
||||
->where('school_year', $year)
|
||||
->where('status', 'pending')
|
||||
->first();
|
||||
|
||||
$row = $promo->where('student_id', $studentId)
|
||||
->where('school_year_to', $year)
|
||||
->first();
|
||||
|
||||
if (!$row) return; // nothing to do
|
||||
if (!$row && !$draft) return; // nothing to do
|
||||
|
||||
$targetSectionId = (int)($row['to_class_section_id'] ?? 0);
|
||||
$targetSectionId = (int)($draft['class_section_id'] ?? 0);
|
||||
if ($targetSectionId <= 0) {
|
||||
$targetSectionId = (int)($row['to_class_section_id'] ?? 0);
|
||||
}
|
||||
if ($targetSectionId <= 0) {
|
||||
// Resolve base section for target class (e.g., '3')
|
||||
$base = $classSectionModel->getBaseSectionByClassId((int)$row['to_class_id']);
|
||||
$base = $classSectionModel->getBaseSectionByClassId((int)($row['to_class_id'] ?? 0));
|
||||
if (!$base) {
|
||||
log_message('warning', 'applyPromotionAssignment: base section not found for class_id=' . (int)$row['to_class_id']);
|
||||
log_message('warning', 'applyPromotionAssignment: no draft or base section found for student_id=' . $studentId . ', year=' . $year);
|
||||
return;
|
||||
}
|
||||
$targetSectionId = (int)($base['class_section_id'] ?? 0);
|
||||
@@ -620,12 +631,31 @@ class ParentController extends BaseController
|
||||
$studentClass->insert($payload);
|
||||
}
|
||||
|
||||
// Mark promotion as applied
|
||||
$promo->update((int)$row['id'], [
|
||||
'status' => 'applied',
|
||||
'updated_at' => utc_now(),
|
||||
'updated_by' => (int)(session()->get('user_id') ?? 0) ?: null,
|
||||
]);
|
||||
$this->db->table('enrollments')
|
||||
->where('student_id', $studentId)
|
||||
->where('school_year', $year)
|
||||
->whereIn('enrollment_status', ['payment pending', 'enrolled'])
|
||||
->update([
|
||||
'class_section_id' => $targetSectionId,
|
||||
'updated_at' => utc_now(),
|
||||
]);
|
||||
|
||||
// Mark promotion as applied when promotion_queue is the source.
|
||||
if ($row) {
|
||||
$promo->update((int)$row['id'], [
|
||||
'status' => 'applied',
|
||||
'updated_at' => utc_now(),
|
||||
'updated_by' => (int)(session()->get('user_id') ?? 0) ?: null,
|
||||
]);
|
||||
}
|
||||
|
||||
if ($draft) {
|
||||
$draftModel->update((int)$draft['id'], [
|
||||
'status' => 'applied',
|
||||
'applied_at' => utc_now(),
|
||||
'updated_at' => utc_now(),
|
||||
]);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
log_message('error', 'applyPromotionAssignment failed: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user