From 151d938a9e380b306158c455e5145284bd066a63 Mon Sep 17 00:00:00 2001 From: mattf Date: Mon, 26 Aug 2019 12:47:21 +0000 Subject: [PATCH] Added bench agent assign manager script, Fixed small bug with outbound calling report git-svn-id: svn://192.168.202.10@3131 3d104415-ff17-0410-8863-d5cf3c621b8a --- UPGRADE | 3 + extras/MySQL_AST_CREATE_tables.sql | 12 +- extras/upgrade_2.14.sql | 12 + www/vicidial/AST_VDADstats.php | 3 +- www/vicidial/bench_agent_assign.php | 396 ++++++++++++++++++++++++++++ 5 files changed, 424 insertions(+), 2 deletions(-) create mode 100644 www/vicidial/bench_agent_assign.php diff --git a/UPGRADE b/UPGRADE index 1c14f9f2..b2641d1d 100644 --- a/UPGRADE +++ b/UPGRADE @@ -424,6 +424,9 @@ OTHER CHANGES: completely different way to do lead recycling for outbound campaigns. See the CALL_QUOTA_LEAD_RANKING.txt document for more info +118. Added bench_agent_assign.php script to allow managers to move + 'owner-assigned' to another agent. + diff --git a/extras/MySQL_AST_CREATE_tables.sql b/extras/MySQL_AST_CREATE_tables.sql index b6305492..d1334d9d 100644 --- a/extras/MySQL_AST_CREATE_tables.sql +++ b/extras/MySQL_AST_CREATE_tables.sql @@ -4175,6 +4175,16 @@ unique index vlcqc_lead_date (lead_id, first_call_date), index(first_call_date) ) ENGINE=MyISAM; +CREATE TABLE vicidial_bench_agent_log ( +lead_id INT(9) UNSIGNED, +bench_date DATETIME, +absent_agent VARCHAR(20), +bench_agent VARCHAR(20), +user VARCHAR(20), +index (bench_date), +index (lead_id) +) ENGINE=MyISAM; + ALTER TABLE vicidial_email_list MODIFY message text character set utf8; @@ -4497,4 +4507,4 @@ INSERT INTO vicidial_settings_containers(container_id,container_notes,container_ UPDATE system_settings set vdc_agent_api_active='1'; -UPDATE system_settings SET db_schema_version='1574',db_schema_update_date=NOW(),reload_timestamp=NOW(); +UPDATE system_settings SET db_schema_version='1575',db_schema_update_date=NOW(),reload_timestamp=NOW(); diff --git a/extras/upgrade_2.14.sql b/extras/upgrade_2.14.sql index 6b9d0b5f..c59fa5d8 100644 --- a/extras/upgrade_2.14.sql +++ b/extras/upgrade_2.14.sql @@ -1018,3 +1018,15 @@ ALTER TABLE vicidial_campaigns ADD sip_event_logging VARCHAR(40) default 'DISABL ALTER TABLE vicidial_campaigns MODIFY call_quota_lead_ranking VARCHAR(40) default 'DISABLED'; UPDATE system_settings SET db_schema_version='1574',db_schema_update_date=NOW() where db_schema_version < 1574; + +CREATE TABLE vicidial_bench_agent_log ( +lead_id INT(9) UNSIGNED, +bench_date DATETIME, +absent_agent VARCHAR(20), +bench_agent VARCHAR(20), +user VARCHAR(20), +index (bench_date), +index (lead_id) +) ENGINE=MyISAM; + +UPDATE system_settings SET db_schema_version='1575',db_schema_update_date=NOW() where db_schema_version < 1575; diff --git a/www/vicidial/AST_VDADstats.php b/www/vicidial/AST_VDADstats.php index 8e1b1f36..cb20e6c7 100644 --- a/www/vicidial/AST_VDADstats.php +++ b/www/vicidial/AST_VDADstats.php @@ -55,6 +55,7 @@ # 170829-0040 - Added screen color settings # 171012-2015 - Fixed javascript/apache errors with graphs # 180508-0115 - Added new help display +# 190823-1620 - Fixed download archive bug # $startMS = microtime(); @@ -738,7 +739,7 @@ $MAIN.="

\n"; $MAIN.="\n"; $MAIN.="         "; $MAIN.=""; -$MAIN.=""._QXZ("DOWNLOAD")." |"; +$MAIN.=""._QXZ("DOWNLOAD")." |"; if (strlen($group[0]) > 1) { $MAIN.=" "._QXZ("MODIFY")." | \n"; diff --git a/www/vicidial/bench_agent_assign.php b/www/vicidial/bench_agent_assign.php new file mode 100644 index 00000000..9f582ddd --- /dev/null +++ b/www/vicidial/bench_agent_assign.php @@ -0,0 +1,396 @@ + LICENSE: AGPLv2 +# +# CHANGES +# 190815-2242 - First build +# + +$startMS = microtime(); + +$report_name='Bench Agent Assign'; + +require("dbconnect_mysqli.php"); +require("functions.php"); + +$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER']; +$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; +$PHP_SELF=$_SERVER['PHP_SELF']; +$ip = getenv("REMOTE_ADDR"); +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["group"])) {$group=$_GET["group"];} + elseif (isset($_POST["group"])) {$group=$_POST["group"];} +if (isset($_GET["absent_agent"])) {$absent_agent=$_GET["absent_agent"];} + elseif (isset($_POST["absent_agent"])) {$absent_agent=$_POST["absent_agent"];} +if (isset($_GET["bench_agent"])) {$bench_agent=$_GET["bench_agent"];} + elseif (isset($_POST["bench_agent"])) {$bench_agent=$_POST["bench_agent"];} +if (isset($_GET["list_id"])) {$list_id=$_GET["list_id"];} + elseif (isset($_POST["list_id"])) {$list_id=$_POST["list_id"];} +if (isset($_GET["server_ip"])) {$server_ip=$_GET["server_ip"];} + elseif (isset($_POST["server_ip"])) {$server_ip=$_POST["server_ip"];} +if (isset($_GET["submit"])) {$submit=$_GET["submit"];} + elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];} +if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} + elseif (isset($_POST["SUBMIT"])) {$SUBMIT=$_POST["SUBMIT"];} + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,webroot_writable,outbound_autodial_active,user_territories_active,enable_languages,language_method FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$qm_conf_ct = mysqli_num_rows($rslt); +if ($qm_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $webroot_writable = $row[1]; + $SSoutbound_autodial_active = $row[2]; + $user_territories_active = $row[3]; + $SSenable_languages = $row[4]; + $SSlanguage_method = $row[5]; + } +##### END SETTINGS LOOKUP ##### +########################################### + +if ($non_latin < 1) + { + $PHP_AUTH_USER = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_USER); + $PHP_AUTH_PW = preg_replace('/[^-_0-9a-zA-Z]/', '', $PHP_AUTH_PW); + $absent_agent = preg_replace('/[^-_0-9a-zA-Z]/', '', $absent_agent); + $bench_agent = preg_replace('/[^-_0-9a-zA-Z]/', '', $bench_agent); + } +else + { + $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW); + $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); + $absent_agent = preg_replace("/'|\"|\\\\|;/","",$absent_agent); + $bench_agent = preg_replace("/'|\"|\\\\|;/","",$bench_agent); + } + +$list_id = preg_replace('/[^0-9]/', '', $list_id); +$group = preg_replace('/[^-_0-9a-zA-Z]/', '', $group); +$server_ip = preg_replace('/[^-._0-9a-zA-Z]/', '', $server_ip); + +$stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$sl_ct = mysqli_num_rows($rslt); +if ($sl_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $VUselected_language = $row[0]; + } + +$auth=0; +$reports_auth=0; +$admin_auth=0; +$auth_message = user_authorization($PHP_AUTH_USER,$PHP_AUTH_PW,'',1,0); +if ($auth_message == 'GOOD') + {$auth=1;} + +if ($auth > 0) + { + $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 8 and view_reports='1';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $admin_auth=$row[0]; + + $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 8 and view_reports='1';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $row=mysqli_fetch_row($rslt); + $reports_auth=$row[0]; + + if ($reports_auth < 1) + { + $VDdisplayMESSAGE = _QXZ("You are not allowed to assign bench agents"); + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + if ( ($reports_auth > 0) and ($admin_auth < 1) ) + { + $ADD=999999; + $reports_only_user=1; + } + } +else + { + $VDdisplayMESSAGE = _QXZ("Login incorrect, please try again"); + if ($auth_message == 'LOCK') + { + $VDdisplayMESSAGE = _QXZ("Too many login attempts, try again in 15 minutes"); + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + if ($auth_message == 'IPBLOCK') + { + $VDdisplayMESSAGE = _QXZ("Your IP Address is not allowed") . ": $ip"; + Header ("Content-type: text/html; charset=utf-8"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$auth_message|\n"; + exit; + } + Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); + Header("HTTP/1.0 401 Unauthorized"); + echo "$VDdisplayMESSAGE: |$PHP_AUTH_USER|$PHP_AUTH_PW|$auth_message|\n"; + exit; + } + +$stmt="SELECT modify_leads,user_group from vicidial_users where user='$PHP_AUTH_USER';"; +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGmodify_leads = $row[0]; +$LOGuser_group = $row[1]; + +if ($LOGmodify_leads < 1) + { + Header ("Content-type: text/html; charset=utf-8"); + echo _QXZ("You do not have permissions to modify leads").": |$PHP_AUTH_USER|\n"; + exit; + } + + +##### BEGIN log visit to the vicidial_report_log table ##### +$LOGip = getenv("REMOTE_ADDR"); +$LOGbrowser = getenv("HTTP_USER_AGENT"); +$LOGscript_name = getenv("SCRIPT_NAME"); +$LOGserver_name = getenv("SERVER_NAME"); +$LOGserver_port = getenv("SERVER_PORT"); +$LOGrequest_uri = getenv("REQUEST_URI"); +$LOGhttp_referer = getenv("HTTP_REFERER"); +$LOGbrowser=preg_replace("/\'|\"|\\\\/","",$LOGbrowser); +$LOGrequest_uri=preg_replace("/\'|\"|\\\\/","",$LOGrequest_uri); +$LOGhttp_referer=preg_replace("/\'|\"|\\\\/","",$LOGhttp_referer); +if (preg_match("/443/i",$LOGserver_port)) {$HTTPprotocol = 'https://';} + else {$HTTPprotocol = 'http://';} +if (($LOGserver_port == '80') or ($LOGserver_port == '443') ) {$LOGserver_port='';} +else {$LOGserver_port = ":$LOGserver_port";} +$LOGfull_url = "$HTTPprotocol$LOGserver_name$LOGserver_port$LOGrequest_uri"; + +$LOGhostname = php_uname('n'); +if (strlen($LOGhostname)<1) {$LOGhostname='X';} +if (strlen($LOGserver_name)<1) {$LOGserver_name='X';} + +$stmt="SELECT webserver_id FROM vicidial_webservers where webserver='$LOGserver_name' and hostname='$LOGhostname' LIMIT 1;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$webserver_id_ct = mysqli_num_rows($rslt); +if ($webserver_id_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $webserver_id = $row[0]; + } +else + { + ##### insert webserver entry + $stmt="INSERT INTO vicidial_webservers (webserver,hostname) values('$LOGserver_name','$LOGhostname');"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + $webserver_id = mysqli_insert_id($link); + } + +$stmt="INSERT INTO vicidial_report_log set event_date=NOW(), user='$PHP_AUTH_USER', ip_address='$LOGip', report_name='$report_name', browser='$LOGbrowser', referer='$LOGhttp_referer', notes='$LOGserver_name:$LOGserver_port $LOGscript_name', url='$LOGfull_url', webserver='$webserver_id';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$report_log_id = mysqli_insert_id($link); +##### END log visit to the vicidial_report_log table ##### + +if ( (strlen($slave_db_server)>5) and (preg_match("/$report_name/",$reports_use_slave_db)) ) + { + mysqli_close($link); + $use_slave_server=1; + $db_source = 'S'; + require("dbconnect_mysqli.php"); + $MAIN.="\n"; + } + +if ($db_source == 'S') + { + mysqli_close($link); + $use_slave_server=0; + $db_source = 'M'; + require("dbconnect_mysqli.php"); + } + + +$NOW_DATE = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$FILEDATE = date("YmdHis"); + +$STARTtime = date("U"); + +?> + + + + + +\n"; +echo ""._QXZ("Bench Agent Assign")."\n"; + + $short_header=1; + + require("admin_header.php"); + + +if ( (strlen($absent_agent) < 1) or (strlen($bench_agent) < 1) ) + { + $owner_menu="\n"; + $list_idSQL=''; + $owners_to_print=0; + if (strlen($list_id) > 1) {$list_idSQL = "and list_id='$list_id'";} + $stmt="SELECT owner,count(*) from vicidial_list where owner!='' $list_idSQL group by owner order by owner;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + if ($rslt) {$owners_to_print = mysqli_num_rows($rslt);} + $i=0; + while ($i < $owners_to_print) + { + $row=mysqli_fetch_row($rslt); + $owners[$i] = $row[0]; + $owners_count[$i] = $row[1]; + $i++; + } + + $i=0; + while ($i < $owners_to_print) + { + $users_to_print=0; + $stmt="SELECT user,full_name from vicidial_users where user='$owners[$i]';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + if ($rslt) {$users_to_print = mysqli_num_rows($rslt);} + if ($users_to_print > 0) + { + $row=mysqli_fetch_row($rslt); + $owners_name[$i] = $row[1]; + } + $owner_menu .= "\n"; + $i++; + } + + $bench_menu="\n"; + $benches_to_print=0; + $stmt="SELECT user,full_name from vicidial_users where active='Y' order by user;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + if ($rslt) {$benches_to_print = mysqli_num_rows($rslt);} + $j=0; + while ($j < $benches_to_print) + { + $row=mysqli_fetch_row($rslt); + $users[$j] = $row[0]; + $users_name[$j] = $row[1]; + $bench_menu .= "\n"; + $j++; + } + + echo "
"; + echo "
\n"; + echo _QXZ("Absent Agent").": \n"; + + echo "     \n"; + + echo _QXZ("Bench Agent").": \n"; + + echo "\n"; + echo "
\n\n"; + + echo "
\n\n";
+
+	echo "\n\n";
+	echo _QXZ("PLEASE SELECT AN ABSENT AGENT AND A BENCH AGENT AND CLICK SUBMIT")."\n";
+	}
+
+else
+	{
+	echo "
"; + + echo _QXZ("ABSENT AGENT").": $absent_agent \n"; + echo _QXZ("BENCH AGENT").": $bench_agent \n"; + + $leads_to_print=0; + if (strlen($list_id) > 1) {$list_idSQL = "and list_id='$list_id'";} + $stmt="SELECT lead_id from vicidial_list where owner='$absent_agent' $list_idSQL order by lead_id;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + if ($rslt) {$leads_to_print = mysqli_num_rows($rslt);} + $j=0; + while ($j < $leads_to_print) + { + $row=mysqli_fetch_row($rslt); + $owner_lead_ids[$j] = $row[0]; + $j++; + } + + $LOGaffected_rows=0; + $UPDATEaffected_rows=0; + $j=0; + while ($j < $leads_to_print) + { + $stmt="UPDATE vicidial_list set owner='$bench_agent' where lead_id='$owner_lead_ids[$j]';"; + $rslt=mysql_to_mysqli($stmt, $link); + $tempUPDATEaffected_rows = mysqli_affected_rows($link); + if ($DB) {echo "$tempUPDATEaffected_rows|$stmt|\n";} + if ($tempUPDATEaffected_rows > 0) + { + $UPDATEaffected_rows = ($UPDATEaffected_rows + $tempUPDATEaffected_rows); + + $stmt="INSERT INTO vicidial_bench_agent_log set lead_id='$owner_lead_ids[$j]', bench_date='$NOW_TIME', absent_agent='$absent_agent', bench_agent='$bench_agent', user='$PHP_AUTH_USER';"; + $rslt=mysql_to_mysqli($stmt, $link); + $LOGaffected_rows = ($LOGaffected_rows + mysqli_affected_rows($link)); + if ($DB) {echo "$LOGaffected_rows|$stmt|\n";} + } + + $j++; + } + + if ($UPDATEaffected_rows > 0) + { + ### LOG INSERTION Admin Log Table ### + $stmt="INSERT INTO vicidial_admin_log set event_date='$NOW_TIME', user='$PHP_AUTH_USER', ip_address='$ip', event_section='USERS', event_type='MODIFY', record_id='$absent_agent', event_code='ADMIN BENCH AGENT MODIFY', event_sql=\"\", event_notes='absent agent: $absent_agent bench_agent: $bench_agent leads updated: $UPDATEaffected_rows';"; + if ($DB) {echo "|$stmt|\n";} + $rslt=mysql_to_mysqli($stmt, $link); + } + + echo _QXZ("Process complete, records updated").": $UPDATEaffected_rows
\n"; + echo ""._QXZ("Click here to go back to the bench agent assign screen")."
\n"; + } + +$endMS = microtime(); +$startMSary = explode(" ",$startMS); +$endMSary = explode(" ",$endMS); +$runS = ($endMSary[0] - $startMSary[0]); +$runM = ($endMSary[1] - $startMSary[1]); +$TOTALrun = ($runS + $runM); + +$stmt="UPDATE vicidial_report_log set run_time='$TOTALrun' where report_log_id='$report_log_id';"; +if ($DB) {echo "|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); + +?> + + + +
+ +