diff --git a/www/vicidial/AST_CLOSERstats_v2.php b/www/vicidial/AST_CLOSERstats_v2.php index 3762ba97..61b58220 100644 --- a/www/vicidial/AST_CLOSERstats_v2.php +++ b/www/vicidial/AST_CLOSERstats_v2.php @@ -72,6 +72,7 @@ # 210914-1020 - Fixed bug for default start/end times on call times when all days have custom s/e time # 210923-2247 - Added OCR, SL-1 & SL-2 stats to CUSTOM INDICATOR section # 211022-0734 - Added IR_SLA_all_statuses options.php setting +# 211027-1050 - Added optional campaign selection(camp_select), for calculation of OCR only # $startMS = microtime(); @@ -94,12 +95,16 @@ $PHP_SELF=$_SERVER['PHP_SELF']; $PHP_SELF = preg_replace('/\.php.*/i','.php',$PHP_SELF); if (isset($_GET["group"])) {$group=$_GET["group"];} elseif (isset($_POST["group"])) {$group=$_POST["group"];} +if (isset($_GET["campaigns"])) {$campaigns=$_GET["campaigns"];} + elseif (isset($_POST["campaigns"])) {$campaigns=$_POST["campaigns"];} if (isset($_GET["query_date"])) {$query_date=$_GET["query_date"];} elseif (isset($_POST["query_date"])) {$query_date=$_POST["query_date"];} if (isset($_GET["end_date"])) {$end_date=$_GET["end_date"];} elseif (isset($_POST["end_date"])) {$end_date=$_POST["end_date"];} if (isset($_GET["shift"])) {$shift=$_GET["shift"];} elseif (isset($_POST["shift"])) {$shift=$_POST["shift"];} +if (isset($_GET["camp_select"])) {$camp_select=$_GET["camp_select"];} + elseif (isset($_POST["camp_select"])) {$camp_select=$_POST["camp_select"];} if (isset($_GET["submit"])) {$submit=$_GET["submit"];} elseif (isset($_POST["submit"])) {$submit=$_POST["submit"];} if (isset($_GET["SUBMIT"])) {$SUBMIT=$_GET["SUBMIT"];} @@ -197,6 +202,7 @@ else $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW); $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); } +$camp_select = preg_replace('/[^-_0-9a-zA-Z]/', '', $camp_select); $stmt="SELECT selected_language from vicidial_users where user='$PHP_AUTH_USER';"; if ($DB) {echo "|$stmt|\n";} @@ -314,6 +320,70 @@ $STARTtime = date("U"); if (!isset($group)) {$group = array();} if (!isset($query_date)) {$query_date = $NOW_DATE;} if (!isset($end_date)) {$end_date = $NOW_DATE;} +if (!isset($campaigns)) {$campaigns = array();} + +$i=0; +$campaigns_string='|'; +$campaigns_ct = count($campaigns); +while($i < $campaigns_ct) + { + $campaigns_string .= "$campaigns[$i]|"; + $i++; + } + +$LOGallowed_campaignsSQL=''; +$whereLOGallowed_campaignsSQL=''; +if ( (!preg_match('/\-ALL/i', $LOGallowed_campaigns)) ) + { + $rawLOGallowed_campaignsSQL = preg_replace("/ -/",'',$LOGallowed_campaigns); + $rawLOGallowed_campaignsSQL = preg_replace("/ /","','",$rawLOGallowed_campaignsSQL); + $LOGallowed_campaignsSQL = "and campaign_id IN('$rawLOGallowed_campaignsSQL')"; + $whereLOGallowed_campaignsSQL = "where campaign_id IN('$rawLOGallowed_campaignsSQL')"; + } +$regexLOGallowed_campaigns = " $LOGallowed_campaigns "; + +if ($DB) {echo "campaigns_string: $campaigns_ct|$campaigns_string|\n";} +$stmt="select campaign_id,campaign_name from vicidial_campaigns $whereLOGallowed_campaignsSQL order by campaign_id;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$campaigns_to_print = mysqli_num_rows($rslt); +$i=0; +$campaigns_allowed=array(); +$campaigns_names=array(); +while ($i < $campaigns_to_print) + { + $row=mysqli_fetch_row($rslt); + $campaigns_allowed[$i] = $row[0]; + $campaigns_names[$i] = $row[1]; + if (preg_match('/\-ALL/',$campaigns_string) ) + {$campaigns[$i] = $campaigns_allowed[$i];} + $i++; + } + +$i=0; +$campaigns_string='|'; +$campaigns_ct = count($campaigns); +while($i < $campaigns_ct) + { + if ( (preg_match("/ $campaigns[$i] /",$regexLOGallowed_campaigns)) or (preg_match("/-ALL/",$LOGallowed_campaigns)) ) + { + $campaigns_string .= "$campaigns[$i]|"; + $campaigns_SQL .= "'$campaigns[$i]',"; + $campaignsQS .= "&campaigns[]=$campaigns[$i]"; + } + $i++; + } +if ( (preg_match('/\-\-ALL\-\-/',$campaigns_string) ) or ($campaigns_ct < 1) or (strlen($campaigns_string) < 2) ) + { + $campaigns_SQL = "$LOGallowed_campaignsSQL"; + $campaigns_SQLand=''; + } +else + { + $campaigns_SQL = preg_replace('/,$/i', '',$campaigns_SQL); + $campaigns_SQLand = "campaign_id IN($campaigns_SQL) and"; + $campaigns_SQL = "where campaign_id IN($campaigns_SQL)"; + } $stmt="select group_id,group_name,8 from vicidial_inbound_groups where group_handling='PHONE' $LOGadmin_viewable_groupsSQL order by group_id;"; if ($DID=='Y') @@ -417,7 +487,7 @@ else $AMP='&'; $QM='?'; -$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 |$group[0], $query_date, $end_date, $shift, $DID, $EMAIL, $CHAT, $file_download, $report_display_type|', url='".$LOGfull_url."?DB=".$DB."&DID=".$DID."&EMAIL=".$EMAIL."&CHAT=".$CHAT."&query_date=".$query_date."&end_date=".$end_date."&shift=".$shift."&report_display_type=".$report_display_type."$groupQS', webserver='$webserver_id';"; +$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 |$group[0], $query_date, $end_date, $shift, $DID, $EMAIL, $CHAT, $file_download, $report_display_type|', url='".$LOGfull_url."?DB=".$DB."&DID=".$DID."&EMAIL=".$EMAIL."&CHAT=".$CHAT."&query_date=".$query_date."&end_date=".$end_date."&shift=".$shift."&report_display_type=".$report_display_type."&camp_select=".$camp_select."$groupQS$campaignsQS', webserver='$webserver_id';"; if ($DB) {echo "|$stmt|\n";} $rslt=mysql_to_mysqli($stmt, $link); $report_log_id = mysqli_insert_id($link); @@ -505,6 +575,7 @@ $MAIN.="\n"; $MAIN.="\n"; $MAIN.="\n"; $MAIN.="\n"; +$MAIN.="\n"; $MAIN.=_QXZ("Date Range").":
\n"; $MAIN.=""; @@ -559,6 +630,26 @@ while ($groups_to_print > $o) } $MAIN.="\n"; $MAIN.="\n"; + +if ($camp_select > 0) + { + $MAIN.=" "._QXZ("Campaigns").":
"; + $MAIN.="\n"; + $MAIN.=""; + } + $MAIN.="           "; if ($DID!='Y') { @@ -938,17 +1029,17 @@ $last_shift_record=(4*$time_END_array[0])+(ceil($time_END_array[1]/15)); if ($CHAT=='Y') { - $MAIN.=_QXZ("Inbound Chat Stats").": $group_string $NOW_TIME "._QXZ("DOWNLOAD")."\n"; + $MAIN.=_QXZ("Inbound Chat Stats").": $group_string $NOW_TIME "._QXZ("DOWNLOAD")."\n"; $CSV_text1.="\""._QXZ("Inbound Chat Stats").":\",\"$group_string\",\"$NOW_TIME\"\n"; } elseif ($EMAIL=='Y') { - $MAIN.=_QXZ("Inbound Email Stats").": $group_string $NOW_TIME "._QXZ("DOWNLOAD")."\n"; + $MAIN.=_QXZ("Inbound Email Stats").": $group_string $NOW_TIME "._QXZ("DOWNLOAD")."\n"; $CSV_text1.="\""._QXZ("Inbound Email Stats").":\",\"$group_string\",\"$NOW_TIME\"\n"; } else { - $MAIN.=_QXZ("Inbound Call Stats").": $group_string $NOW_TIME "._QXZ("DOWNLOAD")."\n"; + $MAIN.=_QXZ("Inbound Call Stats").": $group_string $NOW_TIME "._QXZ("DOWNLOAD")."\n"; $CSV_text1.="\""._QXZ("Inbound Call Stats").":\",\"$group_string\",\"$NOW_TIME\"\n"; } @@ -1407,7 +1498,10 @@ if (strlen($group_SQL)>3) } if (strlen($uniqueidSQL) < 2) {$uniqueidSQL="'X'";} - $stmt = "SELECT count(*),sum(talk_sec + dispo_sec),sum(talk_sec + dispo_sec + wait_sec) from ".$vicidial_agent_log_table." where uniqueid IN($uniqueidSQL) and event_time >= '$query_date_BEGIN' and event_time <= '$query_date_END' and talk_sec < 65000 and dispo_sec < 65000 and wait_sec < 65000;"; + $OCR_SQL = "uniqueid IN($uniqueidSQL) and"; + if ($camp_select > 0) + {$OCR_SQL = "$campaigns_SQLand";} + $stmt = "SELECT count(*),sum(talk_sec + dispo_sec),sum(talk_sec + dispo_sec + wait_sec) from ".$vicidial_agent_log_table." where $OCR_SQL event_time >= '$query_date_BEGIN' and event_time <= '$query_date_END' and talk_sec < 65000 and dispo_sec < 65000 and wait_sec < 65000;"; $rslt=mysql_to_mysqli($stmt, $link); if ($DB) {$MAIN.="$stmt\n";} $row=mysqli_fetch_row($rslt); @@ -1419,7 +1513,7 @@ if (strlen($group_SQL)>3) $TALK_DISPO_HOLDseconds = round($AHTaverage, 0); $OCRaverage = (MathZDC($AHTtime, $AHTwait)); - $OCRate = round($OCRaverage, 2); + $OCRate = (round($OCRaverage, 2) * 100); } } @@ -1430,14 +1524,14 @@ if ($CHAT=='Y') $MAIN.="GDE "._QXZ("(Answered/Total chats taken in to this In-Group)",50).": $ANSWEREDpercent%\n"; $MAIN.="ACR "._QXZ("(Dropped/Answered)",50).": $DROP_ANSWEREDpercent%\n"; $MAIN.="AHT "._QXZ("(Agent-Answered chats / Handle Time sec)",50).": $TALK_DISPO_HOLDseconds sec\n"; - $MAIN.="OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)",50).": $OCRate\n"; + $MAIN.="OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)",50).": $OCRate%\n"; $MAIN.=" *"._QXZ("Handle Time = (Talk+Hold+Dead+Dispo sec)",50)."\n"; $CSV_text1.="\n\""._QXZ("CUSTOM INDICATORS")."\"\n"; $CSV_text1.="\"GDE "._QXZ("(Answered/Total chats taken in to this In-Group)").":\",\"$ANSWEREDpercent%\"\n"; $CSV_text1.="\"ACR "._QXZ("(Dropped/Answered)").":\",\"$DROP_ANSWEREDpercent%\"\n"; $CSV_text1.="\"AHT "._QXZ("(Agent-Answered chats / Talk+Hold+Dead+Dispo sec)").":\",\"$TALK_DISPO_HOLDseconds sec\"\n"; - $CSV_text1.="\"OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)").":\",\"$OCRate\"\n"; + $CSV_text1.="\"OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)").":\",\"$OCRate%\"\n"; } elseif ($EMAIL=='Y') { @@ -1446,14 +1540,14 @@ elseif ($EMAIL=='Y') $MAIN.="GDE "._QXZ("(Answered/Total emails taken in to this In-Group)",50).": $ANSWEREDpercent%\n"; $MAIN.="ACR "._QXZ("(Dropped/Answered)",50).": $DROP_ANSWEREDpercent%\n"; $MAIN.="AHT "._QXZ("(Agent-Answered emails / Handle Time sec)",50).": $TALK_DISPO_HOLDseconds sec\n"; - $MAIN.="OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)",50).": $OCRate\n"; + $MAIN.="OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)",50).": $OCRate%\n"; $MAIN.=" *"._QXZ("Handle Time = (Talk+Hold+Dead+Dispo sec)",50)."\n"; $CSV_text1.="\n\""._QXZ("CUSTOM INDICATORS")."\"\n"; $CSV_text1.="\"GDE "._QXZ("(Answered/Total emails taken in to this In-Group)").":\",\"$ANSWEREDpercent%\"\n"; $CSV_text1.="\"ACR "._QXZ("(Dropped/Answered)").":\",\"$DROP_ANSWEREDpercent%\"\n"; $CSV_text1.="\"AHT "._QXZ("(Agent-Answered emails / Talk+Hold+Dead+Dispo sec)").":\",\"$TALK_DISPO_HOLDseconds sec\"\n"; - $CSV_text1.="\"OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)").":\",\"$OCRate\"\n"; + $CSV_text1.="\"OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)").":\",\"$OCRate%\"\n"; } else { @@ -1462,14 +1556,14 @@ else $MAIN.="GDE "._QXZ("(Answered/Total calls taken in to this In-Group)",50).": $ANSWEREDpercent%\n"; $MAIN.="ACR "._QXZ("(Dropped/Answered)",50).": $DROP_ANSWEREDpercent%\n"; $MAIN.="AHT "._QXZ("(Agent-Answered calls / Handle Time sec)",50).": $TALK_DISPO_HOLDseconds sec\n"; - $MAIN.="OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)",50).": $OCRate\n"; + $MAIN.="OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)",50).": $OCRate%\n"; $MAIN.=" *"._QXZ("Handle Time = (Talk+Hold+Dead+Dispo sec)",50)."\n"; $CSV_text1.="\n\""._QXZ("CUSTOM INDICATORS")."\"\n"; $CSV_text1.="\"GDE "._QXZ("(Answered/Total calls taken in to this In-Group)").":\",\"$ANSWEREDpercent%\"\n"; $CSV_text1.="\"ACR "._QXZ("(Dropped/Answered)").":\",\"$DROP_ANSWEREDpercent%\"\n"; $CSV_text1.="\"AHT "._QXZ("(Agent-Answered calls / Talk+Hold+Dead+Dispo sec)").":\",\"$TALK_DISPO_HOLDseconds sec\"\n"; - $CSV_text1.="\"OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)").":\",\"$OCRate\"\n"; + $CSV_text1.="\"OCR "._QXZ("Occupancy Rate = (Handle Time / Handle + Wait sec)").":\",\"$OCRate%\"\n"; } if ($DID!='Y') @@ -1610,7 +1704,7 @@ else $TOTALcalls = 0; $ASCII_text="\n"; -$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("HOLD TIME BREAKDOWN IN SECONDS",36)." "._QXZ("DOWNLOAD")."\n"; +$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("HOLD TIME BREAKDOWN IN SECONDS",36)." "._QXZ("DOWNLOAD")."\n"; $ASCII_text.="+-------------------------------------------------------------------------------------------+------------+\n"; $ASCII_text.="| 0 5 10 15 20 25 30 35 40 45 50 55 60 90 +90 | "._QXZ("TOTAL", 10)." |\n"; $ASCII_text.="+-------------------------------------------------------------------------------------------+------------+\n"; @@ -2433,7 +2527,7 @@ else $TOTALcalls = 0; $ASCII_text="\n"; -$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("HANGUP REASON STATS",25)." "._QXZ("DOWNLOAD")."\n"; +$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("HANGUP REASON STATS",25)." "._QXZ("DOWNLOAD")."\n"; $ASCII_text.="+----------------------+------------+\n"; $ASCII_text.="| "._QXZ("HANGUP REASON",20)." | $rpt_type_verbiages |\n"; $ASCII_text.="+----------------------+------------+\n"; @@ -2582,7 +2676,7 @@ else $TOTALcalls = 0; $ASCII_text="\n"; -$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("STATUS STATS",18)." "._QXZ("DOWNLOAD")."\n"; +$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("STATUS STATS",18)." "._QXZ("DOWNLOAD")."\n"; $ASCII_text.="+--------+----------------------+----------------------+------------+------------+----------+-----------+\n"; $ASCII_text.="| "._QXZ("STATUS",6)." | "._QXZ("DESCRIPTION",20)." | "._QXZ("CATEGORY",20)." | $rpt_type_verbiages | "._QXZ("TOTAL TIME",10)." | "._QXZ("AVG TIME",8)." |$rpt_type_verbiages/"._QXZ("HOUR",4)."|\n"; $ASCII_text.="+--------+----------------------+----------------------+------------+------------+----------+-----------+\n"; @@ -2799,7 +2893,7 @@ else ######### STATUS CATEGORY STATS $ASCII_text="\n"; -$ASCII_text.="---------- "._QXZ("CUSTOM STATUS CATEGORY STATS",34)." "._QXZ("DOWNLOAD")."\n"; +$ASCII_text.="---------- "._QXZ("CUSTOM STATUS CATEGORY STATS",34)." "._QXZ("DOWNLOAD")."\n"; $ASCII_text.="+----------------------+------------+--------------------------------+\n"; $ASCII_text.="| "._QXZ("CATEGORY",20)." | $rpt_type_verbiages | "._QXZ("DESCRIPTION",30)." |\n"; $ASCII_text.="+----------------------+------------+--------------------------------+\n"; @@ -2946,7 +3040,7 @@ else $TOTALcalls = 0; $ASCII_text="\n"; -$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("INITIAL QUEUE POSITION BREAKDOWN",38)." "._QXZ("DOWNLOAD")."\n"; +$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("INITIAL QUEUE POSITION BREAKDOWN",38)." "._QXZ("DOWNLOAD")."\n"; $ASCII_text.="+-------------------------------------------------------------------------------------+------------+\n"; $ASCII_text.="| 1 2 3 4 5 6 7 8 9 10 15 20 25 +25 | "._QXZ("TOTAL",10)." |\n"; $ASCII_text.="+-------------------------------------------------------------------------------------+------------+\n"; @@ -3177,7 +3271,7 @@ $TOTtime=0; $TOTavg=0; $ASCII_text="\n"; -$ASCII_text.="---------- "._QXZ("AGENT STATS",17)." "._QXZ("DOWNLOAD")."\n"; +$ASCII_text.="---------- "._QXZ("AGENT STATS",17)." "._QXZ("DOWNLOAD")."\n"; $ASCII_text.="+--------------------------+------------+------------+---------+\n"; $ASCII_text.="| "._QXZ("AGENT",24)." | $rpt_type_verbiages | "._QXZ("TIME H:M:S",10)." | "._QXZ("AVERAGE",8)."|\n"; $ASCII_text.="+--------------------------+------------+------------+---------+\n"; @@ -3355,7 +3449,7 @@ $CSV_text7.="\""._QXZ("TOTAL Agents").": $TOTagents\",\"$TOTcalls\",\"$TOTtime\" ######### TIME STATS $MAIN.="\n"; -$MAIN.="---------- "._QXZ("TIME STATS",16)." "._QXZ("DOWNLOAD")."\n"; +$MAIN.="---------- "._QXZ("TIME STATS",16)." "._QXZ("DOWNLOAD")."\n"; $CSV_text9.="\""._QXZ("TIME STATS")."\"\n\n"; @@ -3648,7 +3742,7 @@ else ##### Answered wait time breakdown $MAIN.="\n"; -$MAIN.="---------- $rpt_type_verbiage "._QXZ("ANSWERED TIME BREAKDOWN IN SECONDS", 40)." "._QXZ("DOWNLOAD")."\n"; +$MAIN.="---------- $rpt_type_verbiage "._QXZ("ANSWERED TIME BREAKDOWN IN SECONDS", 40)." "._QXZ("DOWNLOAD")."\n"; $MAIN.="+------+-------------------------------------------------------------------------------------------+------------+\n"; $MAIN.="| "._QXZ("HOUR",4)." | 0 5 10 15 20 25 30 35 40 45 50 55 60 90 +90 | "._QXZ("TOTAL",10)." |\n"; $MAIN.="+------+-------------------------------------------------------------------------------------------+------------+\n"; @@ -3803,7 +3897,4 @@ $rslt=mysql_to_mysqli($stmt, $link); exit; - - - ?>