Update agent status only when it has changed

This commit is contained in:
FusionPBX 2023-11-19 21:46:34 -07:00 committed by GitHub
parent edb0180bcf
commit b19a67b1b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 99 additions and 49 deletions

View File

@ -55,42 +55,54 @@
//get the http post values and set them as php variables
if (!empty($_POST['agents'])) {
$x = 0;
//get the agent id
if (is_uuid($_POST['agents'][0]['id'])) {
$agent_uuid = $_POST['agents'][0]['id'];
}
//get the agent details from event socket
if (is_uuid($agent_uuid)) {
$switch_cmd = 'callcenter_config agent list '.$agent['call_center_agent_uuid'];
$event_socket_str = trim(event_socket_request($fp, 'api '.$switch_cmd));
$call_center_agent = csv_to_named_array($event_socket_str, '|');
$agent['agent_status'] = $call_center_agent[1]['status'];
}
//find the agent_status - used for mod_call_center as there is only one agent status not one per queue
$agent_status = 'Logged Out';
foreach ($_POST['agents'] as $row) {
if ($row['agent_status'] == 'Available') {
$agent_status = 'Available';
break;
}
if ($row['agent_status'] == 'On Break') {
$agent_status = 'On Break';
break;
}
}
//agent status has been changed
if ($agent['agent_status'] != $agent_status) {
//save the agent_stat change to the database
$array['call_center_agents'][0]['call_center_agent_uuid'] = $agent_uuid;
$array['call_center_agents'][0]['domain_uuid'] = $_SESSION['user']['domain_uuid'];
$array['call_center_agents'][0]['agent_status'] = $agent_status;
$database->app_name = 'call_centers_dashboard';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$result = $database->save($array);
//send the agent status status to mod_call_center
$cmd = "api callcenter_config agent set status ".$agent_uuid." '".$agent_status."'";
$response = event_socket_request($fp, $cmd);
}
//add or delete agents from the queue assigned by the tier
foreach ($_POST['agents'] as $row) {
//agent set status
if ($fp && is_numeric($row['queue_extension']) && is_uuid($row['id'])) {
//santize the agent status
switch ($row['agent_status']) {
case 'Available':
$row['agent_status'] = 'Available';
break;
case 'On Break':
$row['agent_status'] = 'On Break';
break;
case 'Logged Out':
$row['agent_status'] = 'Logged Out';
break;
default:
$row['agent_status'] = 'Logged Out';
}
//update the database
if ($x == 0) {
$array['call_center_agents'][0]['call_center_agent_uuid'] = $row['id'];
$array['call_center_agents'][0]['domain_uuid'] = $_SESSION['user']['domain_uuid'];
$array['call_center_agents'][0]['agent_status'] = $row['agent_status'];
$database->app_name = 'call_centers_dashboard';
$database->app_uuid = '95788e50-9500-079e-2807-fd530b0ea370';
$result = $database->save($array);
}
//set the call center status
if ($x == 0) {
$cmd = "api callcenter_config agent set status ".$row['id']." '".$row['agent_status']."'";
$response = event_socket_request($fp, $cmd);
}
//set the agent status to available and assign the agent to the queue with the tier
if ($row['agent_status'] == 'Available') {
//assign the agent to the queue
@ -110,11 +122,10 @@
$cmd = "api callcenter_config tier del ".$row['queue_extension']."@".$_SESSION['domain_name']." ".$row['id'];
$response = event_socket_request($fp, $cmd);
}
//small sleep
usleep(200);
unset($parameters);
}
$x++;
}
//redirect
@ -182,12 +193,15 @@
//radio button cycle script
echo "<script>\n";
echo "\n";
echo " function get_selected(radio_group) {\n";
echo " for (var i = 0; i < radio_group.length; i++) {\n";
echo " if (radio_group[i].checked) { return i; }\n";
echo " }\n";
echo " return 0;\n";
echo " }\n";
echo "\n";
echo " function cycle(radio_group_name) {\n";
echo " var radios = document.getElementsByName(radio_group_name);\n";
@ -199,13 +213,58 @@
echo " radios[i+1].checked = true;\n";
echo " }\n";
echo " }\n";
echo "\n";
echo " function handle_status_change(agent_index) {\n";
echo " var agent_status = document.querySelector('input[name=\"agents[' + agent_index + '][agent_status]\"]:checked').value;\n";
echo " var radio_buttons = document.querySelectorAll('#form_list_call_center_agent_dashboard input[type=\"radio\"]');\n";
//echo "console.log('status: '+agent_status);\n";
//echo " radio_checked_value = '';\n";
echo " radio_buttons.forEach(function(radio_button) {\n";
//echo " if (radio_button.checked == true && radio_button.value === 'Available') {\n";
//echo " radio_checked_value = 'Available';\n";
//echo " }\n";
//echo " if (radio_button.checked == true && radio_button.value === 'On Break') {\n";
//echo " radio_checked_value = 'On Break';\n";
//echo " }\n";
//echo " if (radio_button.value === 'Logged Out') {\n";
//echo " radio_checked_value = 'Logged Out';\n";
//echo " }\n";
echo " if (radio_button.checked) { console.log('checked: '+radio_button.value) }\n";
echo " if (radio_button.value === 'Available' && agent_status === 'Available') {\n"; // radio_checked_value == 'On Break' &&
//echo " radio_button.checked = true;\n";
//echo " radio_button.value = 'Available';\n";
//echo " radio_button[agent_status]\"]:checked').value == 'On Break';\n";
//echo " console.log('--'+radio_button.value+'--');\n";
//echo " console.log('need to change status On Break to Available');\n";
//echo " console.log('---');\n";
echo " }\n";
echo " if (radio_button.value === 'On Break' && agent_status === 'On Break') {\n"; // radio_checked_value == 'Available' &&
//echo " radio_button.checked = true;\n";
//echo " radio_button.value = 'On Break';\n";
//echo " radio_button[agent_status]\"]:checked').value == 'On Break';\n";
//echo " console.log('--'+radio_button.value+'--');\n";
//echo " console.log('need to change status Available to On Break');\n";
//echo " console.log('---');\n";
echo " }\n";
//echo " console.log('checked: '+radio_button.checked+' value:'+radio_button.value);\n";
//echo " console.log('radio checked value: '+ radio_checked_value +' checked: '+radio_button.checked+' value:'+radio_button.value);\n";
//else if (agent_status === 'Available') {\n";
//echo " radio_button.checked = true;\n";
//echo " }\n";
echo " });\n";
echo " }\n";
echo "\n";
echo "</script>\n";
//show the content
echo "<div class='action_bar sub'>\n";
echo " <div class='heading'><b>".$text['header-call_center_queues'].($agent['agent_name'] != '' ? "&nbsp;&nbsp;&nbsp;</b> Agent: <strong>".$agent['agent_name']."</strong>" : "</b>")."</div>\n";
echo " <div class='actions'>\n";
echo button::create(['type'=>'button','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'collapse'=>false,'onclick'=>"list_form_submit('form_list_call_center_agent_dashboard');"]);
echo button::create(['type'=>'button','label'=>$text['button-save'],'icon'=>$_SESSION['theme']['button_icon_save'],'collapse'=>false,'onclick'=>"document.getElementById('form_list_call_center_agent_dashboard').submit();"]);
echo " </div>\n";
echo " <div style='clear: both;'></div>\n";
echo "</div>\n";
@ -216,34 +275,25 @@
echo "<tr class='list-header'>\n";
echo " <th>".$text['label-queue_name']."</th>\n";
echo " <th class='shrink'>".$text['label-status']."</th>\n";
//echo " <th>".$text['label-options']."</th>\n";
echo "</tr>\n";
if (is_array($call_center_queues) && @sizeof($call_center_queues) != 0) {
$x = 0;
foreach ($call_center_queues as $row) {
$onclick = "onclick=\"cycle('agents[".$x."][agent_status]');\"";
$onclick = '';
echo "<tr class='list-row'>\n";
echo " <td ".$onclick.">".escape($row['queue_name'])."</td>\n";
//echo " <td>";
//if ($row['queue_status'] == "Available") {
// echo $text['option-available'];
//}
//if ($row['queue_status'] == "Logged Out") {
// echo $text['option-logged_out'];
//}
//echo " </td>\n";
echo " <td class='no-wrap right'>\n";
echo " <input type='hidden' name='agents[".$x."][queue_extension]' value='".escape($row['queue_extension'])."'>\n";
echo " <input type='hidden' name='agents[".$x."][agent_name]' value='".escape($agent['agent_name'])."'>\n";
echo " <input type='hidden' name='agents[".$x."][id]' value='".escape($agent['call_center_agent_uuid'])."'>\n";
echo " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Available' ".($row['queue_status'] == 'Available' ? "checked='checked'" : null).">&nbsp;".$text['option-available']."</label>\n";
echo " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Logged Out' ".($row['queue_status'] == 'Logged Out' ? "checked='checked'" : null).">&nbsp;".$text['option-logged_out']."</label>\n";
echo " <label style='margin: 0; cursor: pointer;'><input type='radio' name='agents[".$x."][agent_status]' value='On Break' ".($row['queue_status'] == 'On Break' ? "checked='checked'" : null).">&nbsp;".$text['option-on_break']."</label>\n";
echo " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Available' ".($row['queue_status'] == 'Available' ? "checked='checked'" : null)." onchange='handle_status_change(".$x.")'>&nbsp;".$text['option-available']."</label>\n";
echo " <label style='margin: 0; cursor: pointer; margin-right: 10px;'><input type='radio' name='agents[".$x."][agent_status]' value='Logged Out' ".($row['queue_status'] == 'Logged Out' ? "checked='checked'" : null)." onchange='handle_status_change(".$x.")'>&nbsp;".$text['option-logged_out']."</label>\n";
echo " <label style='margin: 0; cursor: pointer;'><input type='radio' name='agents[".$x."][agent_status]' value='On Break' ".($row['queue_status'] == 'On Break' ? "checked='checked'" : null)." onchange='handle_status_change(".$x.")'>&nbsp;".$text['option-on_break']."</label>\n";
echo " </td>\n";
echo "</tr>\n";
$x++;
}
unset($call_center_queues);
}