Fix missing enqueued_at column in twp_queued_calls table

Database Schema Fixes:
- Added enqueued_at column migration to twp_queued_calls table
- Updated personal queue query to use COALESCE for column compatibility
- Enhanced requeue function to handle both enqueued_at and joined_at columns
- Added dynamic column detection for backwards compatibility

SQL Error Resolution:
- Fixes "Unknown column 'qc.enqueued_at' in 'ORDER BY'" errors
- Maintains compatibility with existing installations
- Ensures proper queue ordering functionality

The code now gracefully handles both old (joined_at) and new (enqueued_at)
column structures, with automatic migration adding the missing column.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-08-30 17:37:25 -07:00
parent 82e591b367
commit 0b8c5f4a4c
2 changed files with 24 additions and 4 deletions

View File

@@ -7347,13 +7347,26 @@ class TWP_Admin {
// Add call to our database queue tracking // Add call to our database queue tracking
$calls_table = $wpdb->prefix . 'twp_queued_calls'; $calls_table = $wpdb->prefix . 'twp_queued_calls';
$wpdb->insert($calls_table, [
// Use enqueued_at if available, fallback to joined_at for compatibility
$insert_data = [
'queue_id' => $queue_id, 'queue_id' => $queue_id,
'call_sid' => $call_sid, 'call_sid' => $call_sid,
'from_number' => $call->from, 'from_number' => $call->from,
'enqueued_at' => current_time('mysql'), 'to_number' => $call->to ?: '',
'position' => 1, // Will be updated by queue manager
'status' => 'waiting' 'status' => 'waiting'
]); ];
// Check if enqueued_at column exists
$columns = $wpdb->get_col("DESCRIBE $calls_table");
if (in_array('enqueued_at', $columns)) {
$insert_data['enqueued_at'] = current_time('mysql');
} else {
$insert_data['joined_at'] = current_time('mysql');
}
$wpdb->insert($calls_table, $insert_data);
wp_send_json_success(['message' => 'Call requeued successfully']); wp_send_json_success(['message' => 'Call requeued successfully']);
} catch (Exception $e) { } catch (Exception $e) {
@@ -7893,7 +7906,7 @@ class TWP_Admin {
JOIN $queues_table q ON qc.queue_id = q.id JOIN $queues_table q ON qc.queue_id = q.id
WHERE q.queue_name = %s WHERE q.queue_name = %s
AND qc.status = 'waiting' AND qc.status = 'waiting'
ORDER BY qc.enqueued_at ASC ORDER BY COALESCE(qc.enqueued_at, qc.joined_at) ASC
LIMIT 1 LIMIT 1
", $queue_name)); ", $queue_name));

View File

@@ -402,6 +402,13 @@ class TWP_Activator {
$wpdb->query("ALTER TABLE $table_queued_calls ADD COLUMN notified_timeout datetime AFTER agent_call_sid"); $wpdb->query("ALTER TABLE $table_queued_calls ADD COLUMN notified_timeout datetime AFTER agent_call_sid");
} }
// Add enqueued_at column (some code uses this instead of joined_at)
$enqueued_at_exists = $wpdb->get_results("SHOW COLUMNS FROM $table_queued_calls LIKE 'enqueued_at'");
if (empty($enqueued_at_exists)) {
$wpdb->query("ALTER TABLE $table_queued_calls ADD COLUMN enqueued_at datetime DEFAULT CURRENT_TIMESTAMP AFTER notified_timeout");
error_log('TWP: Added enqueued_at column to twp_queued_calls table');
}
// Fix phone number field lengths in call recordings table for outbound calls // Fix phone number field lengths in call recordings table for outbound calls
$table_recordings = $wpdb->prefix . 'twp_call_recordings'; $table_recordings = $wpdb->prefix . 'twp_call_recordings';