Files
2026-02-10 22:11:06 -05:00

75 lines
1.9 KiB
PHP

<?php
namespace App\Services;
use App\Models\UserModel;
use CodeIgniter\Database\BaseConnection;
class SchoolIdService
{
protected $db;
protected $userModel;
public function __construct()
{
$this->db = \Config\Database::connect();
$this->userModel = new UserModel();
}
public function assignSchoolIdToUser($userId)
{
$user = $this->userModel->find($userId);
if (!$user || $user['school_id']) {
return $user['school_id'] ?? null;
}
$schoolId = $this->generateUserSchoolId();
$this->userModel->update($userId, ['school_id' => $schoolId]);
return $schoolId;
}
public function generateStudentSchoolId()
{
$year = date('y');
$maxId = 0;
// Match the real prefix: STU + year
$studentMax = $this->db->table('students')
->select('MAX(school_id) AS max_id')
->like('school_id', "STU{$year}", 'after')
->get()
->getRowArray();
if (!empty($studentMax['max_id'])) {
// Skip "STUyy" (5 chars)
$numericPart = substr($studentMax['max_id'], 5);
$maxId = (int) $numericPart;
}
$nextId = str_pad($maxId + 1, 5, '0', STR_PAD_LEFT);
return "STU{$year}{$nextId}";
}
public function generateUserSchoolId()
{
$year = date('y');
$maxId = 0;
// Get maximum user ID for current year
$userMax = $this->db->table('users')->select('MAX(school_id) AS max_id')
->notLike('school_id', 'S%') // Exclude student IDs
->like('school_id', $year, 'after')->get()->getRowArray();
if (!empty($userMax['max_id'])) {
$numericPart = substr($userMax['max_id'], 2); // Skip 2-digit year
$maxId = max($maxId, (int)$numericPart);
}
$nextId = str_pad($maxId + 1, 5, '0', STR_PAD_LEFT);
return "{$year}{$nextId}";
}
}