PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); } return $pdo; } /** * Generates the next reference number for a given type (inbound/outbound/internal) * Format: IN-Year-Serial or OUT-Year-Serial or INT-Year-Serial */ function generateRefNo($type) { $prefix = 'IN'; if ($type === 'outbound') $prefix = 'OUT'; if ($type === 'internal') $prefix = 'INT'; $year = date('Y'); $pattern = $prefix . '-' . $year . '-%'; $stmt = db()->prepare("SELECT ref_no FROM mailbox WHERE type = ? AND ref_no LIKE ? ORDER BY id DESC LIMIT 1"); $stmt->execute([$type, $pattern]); $last_ref = $stmt->fetchColumn(); $serial = 1; if ($last_ref) { $parts = explode('-', $last_ref); if (count($parts) === 3) { $serial = (int)$parts[2] + 1; } } return $prefix . '-' . $year . '-' . str_pad($serial, 3, '0', STR_PAD_LEFT); }