diff --git a/www/agc/vdc_db_query.php b/www/agc/vdc_db_query.php index 96034775..782b6579 100644 --- a/www/agc/vdc_db_query.php +++ b/www/agc/vdc_db_query.php @@ -7938,9 +7938,7 @@ if ($ACTION == 'VDADcheckINCOMINGother') } else { - - ### CHECK FOR EMAILS ### - #if ($email_group_ct>0) { + ### CHECK FOR EMAILS AND CHATS ### ### Check for transfers $stmt="SELECT vicidial_email_list.lead_id, vicidial_email_list.email_date, vicidial_email_list.email_to, vicidial_email_list.email_from, vicidial_email_list.subject, vicidial_xfer_log.campaign_id, vicidial_email_list.email_row_id, vicidial_xfer_log.xfercallid from vicidial_email_list, vicidial_xfer_log where vicidial_email_list.status='QUEUE' and vicidial_email_list.user='$user' and vicidial_xfer_log.xfercallid=vicidial_email_list.xfercallid and direction='INBOUND' and vicidial_xfer_log.campaign_id in ($email_group_str) and closer='EMAIL_XFER' order by vicidial_xfer_log.call_date asc limit 1"; @@ -7962,7 +7960,7 @@ if ($ACTION == 'VDADcheckINCOMINGother') $email_ct = mysqli_num_rows($rslt); } - ### Check for chats + ### If no emails have been sent to agent, check for chats, this is the code section where the agent interface will grab the next available chat if ($email_ct==0) { $stmt="select * from vicidial_live_chats where status='WAITING' and group_id in ($chat_group_str) order by chat_id asc limit 1"; diff --git a/www/vicidial/AST_CLOSERstats.php b/www/vicidial/AST_CLOSERstats.php index 84177274..b0f8cfb7 100644 --- a/www/vicidial/AST_CLOSERstats.php +++ b/www/vicidial/AST_CLOSERstats.php @@ -489,6 +489,7 @@ if ($DID!='Y') $MAIN.=""._QXZ("MODIFY")." | "; $MAIN.=""._QXZ("IVR REPORT")." | \n"; } +$MAIN.=""._QXZ("v2")." | "; $MAIN.=""._QXZ("REPORTS")." | "; $MAIN.="\n"; diff --git a/www/vicidial/AST_CLOSERstats_v2.php b/www/vicidial/AST_CLOSERstats_v2.php new file mode 100644 index 00000000..b9193417 --- /dev/null +++ b/www/vicidial/AST_CLOSERstats_v2.php @@ -0,0 +1,3021 @@ + LICENSE: AGPLv2 +# +# CHANGES: +# 60619-1714 - Added variable filtering to eliminate SQL injection attack threat +# - Added required user/pass to gain access to this page +# 60905-1326 - Added queue time stats +# 71008-1436 - Added shift to be defined in dbconnect_mysqli.php +# 71025-0021 - Added status breakdown +# 71218-1155 - Added end_date for multi-day reports +# 80430-1920 - Added Customer hangup cause stats +# 80709-0331 - Added time stats to call statuses +# 80722-2149 - Added Status Category stats +# 81015-0705 - Added IVR calls count +# 81024-0037 - Added multi-select inbound-groups +# 81105-2118 - Added Answered calls 15-minute breakdown +# 81109-2340 - Added custom indicators section +# 90116-1040 - Rewrite of the 15-minute sections to speed it up and allow multi-day calculations +# 90310-2037 - Admin header +# 90508-0644 - Changed to PHP long tags +# 90524-2231 - Changed to use functions.php for seconds to HH:MM:SS conversion +# 90801-0921 - Added in-group name to pulldown +# 91214-0955 - Added INITIAL QUEUE POSITION BREAKDOWN +# 100206-1454 - Fixed TMR(service level) calculation +# 100214-1421 - Sort menu alphabetically +# 100216-0042 - Added popup date selector +# 100709-1809 - Added system setting slave server option +# 100802-2347 - Added User Group Allowed Reports option validation +# 100913-1634 - Added DID option to select by DIDs instead of In-groups +# 100914-1326 - Added lookup for user_level 7 users to set to reports only which will remove other admin links +# 110703-1759 - Added download option +# 111103-0632 - Added MAXCAL as a drop status +# 111103-2003 - Added user_group restrictions for selecting in-groups +# 120224-0910 - Added HTML display option with bar graphs +# 120730-0724 - Small fix for HTML output +# 130124-1719 - Added email report support +# 130414-1429 - Added report logging +# 130610-1023 - Finalized changing of all ereg instances to preg +# 130621-0805 - Added filtering of input to prevent SQL injection attacks and new user auth +# 130704-0936 - Fixed issue #675 +# 130901-0816 - Changed to mysqli PHP functions +# 140108-0746 - Added webserver and hostname to report logging +# 140328-0005 - Converted division calculations to use MathZDC function +# 141114-0009 - Finalized adding QXZ translation to all admin files +# 141128-0858 - Code cleanup for QXZ functions +# 141230-0942 - Added code for on-the-fly language translations display +# 150516-1259 - Fixed Javascript element problem, Issue #857 +# 150522-1304 - Fixed issue with missing calls from user stats section +# 150928-1234 - Separated User Group permissions for this report by in-group and by DID +# 151124-1236 - Changed bottom chart to pull all time segments +# 151125-1633 - Added search archive option +# 151216-1023 - Forked from original as "v2" for Call Time option changes, added CHAT option +# + +$startMS = microtime(); + +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']; +if (isset($_GET["group"])) {$group=$_GET["group"];} + elseif (isset($_POST["group"])) {$group=$_POST["group"];} +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["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"];} +if (isset($_GET["DID"])) {$DID=$_GET["DID"];} + elseif (isset($_POST["DID"])) {$DID=$_POST["DID"];} +if (isset($_GET["EMAIL"])) {$EMAIL=$_GET["EMAIL"];} + elseif (isset($_POST["EMAIL"])) {$EMAIL=$_POST["EMAIL"];} +if (isset($_GET["CHAT"])) {$CHAT=$_GET["CHAT"];} + elseif (isset($_POST["CHAT"])) {$CHAT=$_POST["CHAT"];} +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["file_download"])) {$file_download=$_GET["file_download"];} + elseif (isset($_POST["file_download"])) {$file_download=$_POST["file_download"];} +if (isset($_GET["report_display_type"])) {$report_display_type=$_GET["report_display_type"];} + elseif (isset($_POST["report_display_type"])) {$report_display_type=$_POST["report_display_type"];} +if (isset($_GET["search_archived_data"])) {$search_archived_data=$_GET["search_archived_data"];} + elseif (isset($_POST["search_archived_data"])) {$search_archived_data=$_POST["search_archived_data"];} + +$MT[0]='0'; +if (strlen($shift)<2) {$shift='ALL';} + +$report_name = 'Inbound Report'; +$db_source = 'M'; +if ($DID=='Y') + {$report_name = 'Inbound Report by DID';} + +# $test_table_name="vicidial_closer_log"; + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,enable_languages,language_method FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$qm_conf_ct = mysqli_num_rows($rslt); +if ($qm_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $outbound_autodial_active = $row[1]; + $slave_db_server = $row[2]; + $reports_use_slave_db = $row[3]; + $SSenable_languages = $row[4]; + $SSlanguage_method = $row[5]; + } +##### END SETTINGS LOOKUP ##### +########################################### + +### ARCHIVED DATA CHECK CONFIGURATION +$archives_available="N"; +$log_tables_array=array("vicidial_did_log", "vicidial_closer_log", "live_inbound_log"); +for ($t=0; $t 0) + { + $row=mysqli_fetch_row($rslt); + $local_gmt = $row[0]; + $epoch_offset = (($local_gmt + $dst) * 3600); + } + +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); + } +else + { + $PHP_AUTH_PW = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_PW); + $PHP_AUTH_USER = preg_replace("/'|\"|\\\\|;/","",$PHP_AUTH_USER); + } + +$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,'REPORTS',1); +if ($auth_message == 'GOOD') + {$auth=1;} + +if ($auth > 0) + { + $stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and user_level > 7 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 > 6 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 view reports"); + 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; + } + 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 user_group from vicidial_users where user='$PHP_AUTH_USER';"; +if ($DB) {$MAIN.="|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGuser_group = $row[0]; + +$stmt="SELECT allowed_campaigns,allowed_reports,admin_viewable_groups,admin_viewable_call_times from vicidial_user_groups where user_group='$LOGuser_group';"; +if ($DB) {$MAIN.="|$stmt|\n";} +$rslt=mysql_to_mysqli($stmt, $link); +$row=mysqli_fetch_row($rslt); +$LOGallowed_campaigns = $row[0]; +$LOGallowed_reports = $row[1]; +$LOGadmin_viewable_groups = $row[2]; +$LOGadmin_viewable_call_times = $row[3]; + +if ( (!preg_match("/$report_name,/",$LOGallowed_reports)) and (!preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) + { + Header("WWW-Authenticate: Basic realm=\"CONTACT-CENTER-ADMIN\""); + Header("HTTP/1.0 401 Unauthorized"); + echo _QXZ("You are not allowed to view this report").": |$PHP_AUTH_USER|$report_name|\n"; + exit; + } + +$LOGadmin_viewable_groupsSQL=''; +$whereLOGadmin_viewable_groupsSQL=''; +if ( (!preg_match('/\-\-ALL\-\-/i',$LOGadmin_viewable_groups)) and (strlen($LOGadmin_viewable_groups) > 3) ) + { + $rawLOGadmin_viewable_groupsSQL = preg_replace("/ -/",'',$LOGadmin_viewable_groups); + $rawLOGadmin_viewable_groupsSQL = preg_replace("/ /","','",$rawLOGadmin_viewable_groupsSQL); + $LOGadmin_viewable_groupsSQL = "and user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + $whereLOGadmin_viewable_groupsSQL = "where user_group IN('---ALL---','$rawLOGadmin_viewable_groupsSQL')"; + } + +$LOGadmin_viewable_call_timesSQL=''; +$whereLOGadmin_viewable_call_timesSQL=''; +if ( (!preg_match('/\-\-ALL\-\-/i', $LOGadmin_viewable_call_times)) and (strlen($LOGadmin_viewable_call_times) > 3) ) + { + $rawLOGadmin_viewable_call_timesSQL = preg_replace("/ -/",'',$LOGadmin_viewable_call_times); + $rawLOGadmin_viewable_call_timesSQL = preg_replace("/ /","','",$rawLOGadmin_viewable_call_timesSQL); + $LOGadmin_viewable_call_timesSQL = "and call_time_id IN('---ALL---','$rawLOGadmin_viewable_call_timesSQL')"; + $whereLOGadmin_viewable_call_timesSQL = "where call_time_id IN('---ALL---','$rawLOGadmin_viewable_call_timesSQL')"; + } + +$NOW_DATE = date("Y-m-d"); +$NOW_TIME = date("Y-m-d H:i:s"); +$STARTtime = date("U"); +if (!isset($group)) {$group = '';} +if (!isset($query_date)) {$query_date = $NOW_DATE;} +if (!isset($end_date)) {$end_date = $NOW_DATE;} + +$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') + { + $stmt="select did_pattern,did_description,did_id from vicidial_inbound_dids $whereLOGadmin_viewable_groupsSQL order by did_pattern;"; + } +if ($CHAT=='Y') + { + $stmt="select group_id,group_name,8 from vicidial_inbound_groups where group_handling='CHAT' $LOGadmin_viewable_groupsSQL order by group_id;"; + } +if ($EMAIL=='Y') + { + $stmt="select email_account_id,email_account_name,email_account_id from vicidial_email_accounts $whereLOGadmin_viewable_groupsSQL order by email_account_id;"; + $stmt="select group_id,group_name,8 from vicidial_inbound_groups where group_handling='EMAIL' $LOGadmin_viewable_groupsSQL order by group_id;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$groups_to_print = mysqli_num_rows($rslt); +$i=0; +$LISTgroups[$i]='---NONE---'; +$i++; +$groups_to_print++; +$groups_string='|'; +while ($i < $groups_to_print) + { + $row=mysqli_fetch_row($rslt); + $LISTgroups[$i] = $row[0]; + $LISTgroup_names[$i] = $row[1]; + $LISTgroup_ids[$i] = $row[2]; + $groups_string .= "$LISTgroups[$i]|"; + $i++; + } + +$i=0; +$group_string='|'; +$group_ct = count($group); +while($i < $group_ct) + { + if ( (strlen($group[$i]) > 0) and (preg_match("/\|$group[$i]\|/",$groups_string)) ) + { + $group_string .= "$group[$i]|"; + $group_SQL .= "'$group[$i]',"; + $groupQS .= "&group[]=$group[$i]"; + } + $i++; + } +if ( (preg_match('/\s\-\-NONE\-\-\s/',$group_string) ) or ($group_ct < 1) ) + { + $group_SQL = "''"; +# $group_SQL = "group_id IN('')"; + } +else + { + $group_SQL = preg_replace('/,$/i', '',$group_SQL); +# $group_SQL = "group_id IN($group_SQL)"; + } +if (strlen($group_SQL)<3) {$group_SQL="''";} + +##### 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"); +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); + } + +$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';"; +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"; + } + +$stmt="select vsc_id,vsc_name from vicidial_status_categories;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$statcats_to_print = mysqli_num_rows($rslt); +$i=0; +while ($i < $statcats_to_print) + { + $row=mysqli_fetch_row($rslt); + $vsc_id[$i] = $row[0]; + $vsc_name[$i] = $row[1]; + $vsc_count[$i] = 0; + $i++; + } + +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.="\n"; + + +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.="\n"; +$HEADER.=""._QXZ("$report_name")."\n"; + +$short_header=1; + +#require("admin_header.php"); + +$MAIN.="
"; + +if ($DB > 0) + { + $MAIN.="
\n"; + $MAIN.="$group_ct|$group_string|$group_SQL\n"; + $MAIN.="
\n"; + $MAIN.="$shift|$query_date|$end_date\n"; + $MAIN.="
\n"; + } + +$MAIN.="
\n"; +$MAIN.="\n"; +$MAIN.="
\n"; +$MAIN.="\n"; +$MAIN.="\n"; +$MAIN.="\n"; +$MAIN.="\n"; +$MAIN.=_QXZ("Date Range").":
\n"; +$MAIN.=""; + +$MAIN.="\n"; + +$MAIN.=" "._QXZ("to")." "; + +$MAIN.="\n"; + + +$MAIN.="
\n"; +if ($CHAT=='Y') + {$MAIN.=_QXZ("Inbound Chat Groups").": \n";} +elseif ($EMAIL=='Y') + {$MAIN.=_QXZ("Email Accts").": \n";} +else if ($DID=='Y') + {$MAIN.=_QXZ("Inbound DIDs").": \n";} +else + {$MAIN.=_QXZ("Inbound Groups").": \n";} +$MAIN.="\n"; +$MAIN.="\n"; +$MAIN.="\n"; +$MAIN.="           "; +if ($DID!='Y') + { + $MAIN.=""._QXZ("MODIFY")." | "; + $MAIN.=""._QXZ("IVR REPORT")." | \n"; + } +$MAIN.=""._QXZ("v1")." | "; +$MAIN.=""._QXZ("REPORTS")." | "; +$MAIN.="\n"; + +$MAIN.="
\n"; + +#$MAIN.="\n"; +$MAIN.=_QXZ("Shift/Call time").": \n"; +$MAIN.="
"._QXZ("Display as").":  "; +$MAIN.="\n
"; +if ($archives_available=="Y") + { + $MAIN.=""._QXZ("Search archived data")."

\n"; + } + +$MAIN.="   \n"; +$MAIN.="
\n"; +$MAIN.="
\n\n"; +$MAIN.="
\n\n";
+
+
+if ($groups_to_print < 1)
+	{
+	$MAIN.="\n\n";
+	if ($CHAT=='Y')
+		{$MAIN.=_QXZ("PLEASE SELECT A CHAT IN-GROUP AND DATE RANGE ABOVE AND CLICK SUBMIT")."\n";}
+	if ($EMAIL=='Y')
+		{$MAIN.=_QXZ("PLEASE SELECT AN EMAIL ACCOUNT AND DATE RANGE ABOVE AND CLICK SUBMIT")."\n";}
+	if ($DID=='Y')
+		{$MAIN.=_QXZ("PLEASE SELECT A DID AND DATE RANGE ABOVE AND CLICK SUBMIT")."\n";}
+	else
+		{$MAIN.=_QXZ("PLEASE SELECT AN IN-GROUP AND DATE RANGE ABOVE AND CLICK SUBMIT")."\n";}
+	}
+
+else
+{
+$call_time_ranges=array();
+
+$ct_stmt="select * from vicidial_call_times where call_time_id='$shift'";
+if ($DB) {$MAIN.=$ct_stmt."\n";}
+$ct_rslt=mysql_to_mysqli($ct_stmt, $link);
+if (mysqli_num_rows($ct_rslt)>0) 
+	{
+	$ct_row=mysqli_fetch_array($ct_rslt);
+	$default_time_BEGIN=$ct_row["ct_default_start"];
+	$default_time_END=$ct_row["ct_default_stop"];
+	while (strlen($default_time_BEGIN)<4) {$default_time_BEGIN="0".$default_time_BEGIN;}
+	while (strlen($default_time_END)<4) {$default_time_END="0".$default_time_END;}
+	$default_time_BEGIN=substr($default_time_BEGIN,0,2).":".substr($default_time_BEGIN,2,2).":00";
+	# In case default time ends after midnight the next day
+	if ($default_time_END>2400) {
+		$multiday_default="yes";
+		$multiday_default_END=($default_time_END-2400);
+		while(strlen($multiday_default_END)<4) {
+			$multiday_default_END="0".$multiday_default_END;
+		}
+		$multiday_default_END=substr($multiday_default_END,0,2).":".substr($multiday_default_END,2,2).":00";
+		# Result:  Default start time is: current-day default_time_BEGIN to current-day 23:59:59 and next-day 00:00:00 to next-day multiday_default_END
+	}
+	$default_time_END=substr($default_time_END,0,2).":".substr($default_time_END,2,2).":00";
+	$time_BEGIN=$default_time_BEGIN;
+	$time_END=$default_time_END;
+
+	if ($ct_row["ct_sunday_start"]==0 && $ct_row["ct_sunday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("1", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("2", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("1", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$sunday_BEGIN=$ct_row["ct_sunday_start"];
+		$sunday_END=$ct_row["ct_sunday_stop"];
+		while (strlen($sunday_BEGIN)<4) {$sunday_BEGIN="0".$sunday_BEGIN;}
+		while (strlen($sunday_END)<4) {$sunday_END="0".$sunday_END;}
+		$sunday_BEGIN=substr($sunday_BEGIN,0,2).":".substr($sunday_BEGIN,2,2).":00";
+		$sunday_END=substr($sunday_END,0,2).":".substr($sunday_END,2,2).":00";
+
+		if($ct_row["ct_sunday_stop"]>2400) {
+			$sunday_multiday_END=$ct_row["ct_sunday_stop"]-2400;
+			while(strlen($sunday_multiday_END)<4) {
+				$sunday_multiday_END="0".$sunday_multiday_END;
+			}
+			$sunday_multiday_END=substr($sunday_multiday_END,0,2).":".substr($sunday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("1", "$sunday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("2", "00:00:00", "$sunday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("1", "$sunday_BEGIN", "$sunday_END"));
+		}
+	}
+
+	if ($ct_row["ct_monday_start"]==0 && $ct_row["ct_monday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("2", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("3", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("2", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$monday_BEGIN=$ct_row["ct_monday_start"];
+		$monday_END=$ct_row["ct_monday_stop"];
+		while (strlen($monday_BEGIN)<4) {$monday_BEGIN="0".$monday_BEGIN;}
+		while (strlen($monday_END)<4) {$monday_END="0".$monday_END;}
+		$monday_BEGIN=substr($monday_BEGIN,0,2).":".substr($monday_BEGIN,2,2).":00";
+		$monday_END=substr($monday_END,0,2).":".substr($monday_END,2,2).":00";
+
+		if($ct_row["ct_monday_stop"]>2400) {
+			$monday_multiday_END=$ct_row["ct_monday_stop"]-2400;
+			while(strlen($monday_multiday_END)<4) {
+				$monday_multiday_END="0".$monday_multiday_END;
+			}
+			$monday_multiday_END=substr($monday_multiday_END,0,2).":".substr($monday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("2", "$monday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("3", "00:00:00", "$monday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("2", "$monday_BEGIN", "$monday_END"));
+		}
+	}
+
+	if ($ct_row["ct_tuesday_start"]==0 && $ct_row["ct_tuesday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("3", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("4", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("3", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$tuesday_BEGIN=$ct_row["ct_tuesday_start"];
+		$tuesday_END=$ct_row["ct_tuesday_stop"];
+		while (strlen($tuesday_BEGIN)<4) {$tuesday_BEGIN="0".$tuesday_BEGIN;}
+		while (strlen($tuesday_END)<4) {$tuesday_END="0".$tuesday_END;}
+		$tuesday_BEGIN=substr($tuesday_BEGIN,0,2).":".substr($tuesday_BEGIN,2,2).":00";
+		$tuesday_END=substr($tuesday_END,0,2).":".substr($tuesday_END,2,2).":00";
+
+		if($ct_row["ct_tuesday_stop"]>2400) {
+			$tuesday_multiday_END=$ct_row["ct_tuesday_stop"]-2400;
+			while(strlen($tuesday_multiday_END)<4) {
+				$tuesday_multiday_END="0".$tuesday_multiday_END;
+			}
+			$tuesday_multiday_END=substr($tuesday_multiday_END,0,2).":".substr($tuesday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("3", "$tuesday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("4", "00:00:00", "$tuesday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("3", "$tuesday_BEGIN", "$tuesday_END"));
+		}
+	}
+
+	if ($ct_row["ct_wednesday_start"]==0 && $ct_row["ct_wednesday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("4", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("5", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("4", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$wednesday_BEGIN=$ct_row["ct_wednesday_start"];
+		$wednesday_END=$ct_row["ct_wednesday_stop"];
+		while (strlen($wednesday_BEGIN)<4) {$wednesday_BEGIN="0".$wednesday_BEGIN;}
+		while (strlen($wednesday_END)<4) {$wednesday_END="0".$wednesday_END;}
+		$wednesday_BEGIN=substr($wednesday_BEGIN,0,2).":".substr($wednesday_BEGIN,2,2).":00";
+		$wednesday_END=substr($wednesday_END,0,2).":".substr($wednesday_END,2,2).":00";
+
+		if($ct_row["ct_wednesday_stop"]>2400) {
+			$wednesday_multiday_END=$ct_row["ct_wednesday_stop"]-2400;
+			while(strlen($wednesday_multiday_END)<4) {
+				$wednesday_multiday_END="0".$wednesday_multiday_END;
+			}
+			$wednesday_multiday_END=substr($wednesday_multiday_END,0,2).":".substr($wednesday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("4", "$wednesday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("5", "00:00:00", "$wednesday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("4", "$wednesday_BEGIN", "$wednesday_END"));
+		}
+	}
+
+	if ($ct_row["ct_thursday_start"]==0 && $ct_row["ct_thursday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("5", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("6", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("5", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$thursday_BEGIN=$ct_row["ct_thursday_start"];
+		$thursday_END=$ct_row["ct_thursday_stop"];
+		while (strlen($thursday_BEGIN)<4) {$thursday_BEGIN="0".$thursday_BEGIN;}
+		while (strlen($thursday_END)<4) {$thursday_END="0".$thursday_END;}
+		$thursday_BEGIN=substr($thursday_BEGIN,0,2).":".substr($thursday_BEGIN,2,2).":00";
+		$thursday_END=substr($thursday_END,0,2).":".substr($thursday_END,2,2).":00";
+
+		if($ct_row["ct_thursday_stop"]>2400) {
+			$thursday_multiday_END=$ct_row["ct_thursday_stop"]-2400;
+			while(strlen($thursday_multiday_END)<4) {
+				$thursday_multiday_END="0".$thursday_multiday_END;
+			}
+			$thursday_multiday_END=substr($thursday_multiday_END,0,2).":".substr($thursday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("5", "$thursday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("6", "00:00:00", "$thursday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("5", "$thursday_BEGIN", "$thursday_END"));
+		}
+	}
+
+	if ($ct_row["ct_friday_start"]==0 && $ct_row["ct_friday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("6", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("7", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("6", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$friday_BEGIN=$ct_row["ct_friday_start"];
+		$friday_END=$ct_row["ct_friday_stop"];
+		while (strlen($friday_BEGIN)<4) {$friday_BEGIN="0".$friday_BEGIN;}
+		while (strlen($friday_END)<4) {$friday_END="0".$friday_END;}
+		$friday_BEGIN=substr($friday_BEGIN,0,2).":".substr($friday_BEGIN,2,2).":00";
+		$friday_END=substr($friday_END,0,2).":".substr($friday_END,2,2).":00";
+
+		if($ct_row["ct_friday_stop"]>2400) {
+			$friday_multiday_END=$ct_row["ct_friday_stop"]-2400;
+			while(strlen($friday_multiday_END)<4) {
+				$friday_multiday_END="0".$friday_multiday_END;
+			}
+			$friday_multiday_END=substr($friday_multiday_END,0,2).":".substr($friday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("6", "$friday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("7", "00:00:00", "$friday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("6", "$friday_BEGIN", "$friday_END"));
+		}
+	}
+
+	if ($ct_row["ct_saturday_start"]==0 && $ct_row["ct_saturday_stop"]==0) {
+		if ($multiday_default=="yes") {
+			array_push($call_time_ranges, array("7", "$default_time_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("1", "00:00:00", "$multiday_default_END"));
+		} else {
+			array_push($call_time_ranges, array("7", "$default_time_BEGIN", "$default_time_END"));
+		}
+	} else {
+		$saturday_BEGIN=$ct_row["ct_saturday_start"];
+		$saturday_END=$ct_row["ct_saturday_stop"];
+		while (strlen($saturday_BEGIN)<4) {$saturday_BEGIN="0".$saturday_BEGIN;}
+		while (strlen($saturday_END)<4) {$saturday_END="0".$saturday_END;}
+		$saturday_BEGIN=substr($saturday_BEGIN,0,2).":".substr($saturday_BEGIN,2,2).":00";
+		$saturday_END=substr($saturday_END,0,2).":".substr($saturday_END,2,2).":00";
+
+		if($ct_row["ct_saturday_stop"]>2400) {
+			$saturday_multiday_END=$ct_row["ct_saturday_stop"]-2400;
+			while(strlen($saturday_multiday_END)<4) {
+				$saturday_multiday_END="0".$saturday_multiday_END;
+			}
+			$saturday_multiday_END=substr($saturday_multiday_END,0,2).":".substr($saturday_multiday_END,2,2).":00";
+			array_push($call_time_ranges, array("7", "$saturday_BEGIN", "23:59:59"));
+			array_push($call_time_ranges, array("1", "00:00:00", "$saturday_multiday_END"));
+		} else {
+			array_push($call_time_ranges, array("7", "$saturday_BEGIN", "$saturday_END"));
+		}
+	}
+	
+	} 
+else
+	{
+	if ($shift == 'AM') 
+		{
+		$time_BEGIN=$AM_shift_BEGIN;
+		$time_END=$AM_shift_END;
+		if (strlen($time_BEGIN) < 6) {$time_BEGIN = "03:45:00";}   
+		if (strlen($time_END) < 6) {$time_END = "15:14:59";}
+		}
+	if ($shift == 'PM') 
+		{
+		$time_BEGIN=$PM_shift_BEGIN;
+		$time_END=$PM_shift_END;
+		if (strlen($time_BEGIN) < 6) {$time_BEGIN = "15:15:00";}
+		if (strlen($time_END) < 6) {$time_END = "23:15:00";}
+		}
+	if ($shift == 'ALL') 
+		{
+		if (strlen($time_BEGIN) < 6) {$time_BEGIN = "00:00:00";}
+		if (strlen($time_END) < 6) {$time_END = "23:59:59";}
+		}
+	#  CREATE CALL TIME ARRAYS
+	for ($i=1; $i<=7; $i++) 
+		{
+		array_push($call_time_ranges, array("$i", "$time_BEGIN", "$time_END"));
+		}
+
+	}
+$query_date_BEGIN = "$query_date $time_BEGIN";   
+$query_date_END = "$end_date $time_END";
+
+# GENERATE CALL TIME CLAUSE - GET MAX/MIN TIMES FOR GRAPH
+$orig_call_time_clause="and ( ";
+for ($x=0; $x)>='".$call_time_ranges[$x][1]."' and time()<='".$call_time_ranges[$x][2]."') OR ";
+
+	$graph_start_time = $call_time_ranges[$x][1];
+	$graph_start_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $graph_start_time);
+	sscanf($graph_start_time, "%d:%d:%d", $hours, $minutes, $seconds);
+	$graph_seconds = $hours * 3600 + $minutes * 60 + $seconds;
+	if (!$min_graph_seconds || $graph_seconds<$min_graph_seconds) {$min_graph_seconds=$graph_seconds; $min_graph_start_time=$graph_start_time;}
+
+	$graph_end_time = $call_time_ranges[$x][2];
+	$graph_end_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $graph_end_time);
+	sscanf($graph_end_time, "%d:%d:%d", $hours, $minutes, $seconds);
+	$graph_seconds = $hours * 3600 + $minutes * 60 + $seconds;
+	if (!$max_graph_seconds || $graph_seconds>$max_graph_seconds) {$max_graph_seconds=$graph_seconds; $max_graph_end_time=$graph_end_time;}
+}
+$orig_call_time_clause=preg_replace('/ OR $/', '', $orig_call_time_clause);
+$orig_call_time_clause.=" )";
+$calldate_call_time_clause=preg_replace('//', 'call_date', $orig_call_time_clause);
+$starttime_call_time_clause=preg_replace('//', 'start_time', $orig_call_time_clause);
+
+
+# Calculate first record in interval and last
+if (!$min_graph_start_time){$min_graph_start_time="00:00:00";}
+if (!$max_graph_start_time){$max_graph_start_time="23:59:59";}
+$time_BEGIN_array=explode(":", $min_graph_start_time);
+$first_shift_record=(4*$time_BEGIN_array[0])+(ceil($time_BEGIN_array[1]/15));
+$time_END_array=explode(":", $max_graph_end_time);
+$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";
+	$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";
+	$CSV_text1.="\""._QXZ("Inbound Email Stats").":\",\"$group_string\",\"$NOW_TIME\"\n";
+	}
+else
+	{
+	$MAIN.=_QXZ("Inbound Call Stats").": $group_string          $NOW_TIME        "._QXZ("DOWNLOAD")."\n";
+	$CSV_text1.="\""._QXZ("Inbound Call Stats").":\",\"$group_string\",\"$NOW_TIME\"\n";
+	}
+
+
+
+if ($DID=='Y')
+	{
+	$stmt="select did_id from vicidial_inbound_dids where did_pattern IN($group_SQL) $LOGadmin_viewable_groupsSQL;";
+	$rslt=mysql_to_mysqli($stmt, $link);
+	if ($DB) {$MAIN.="$stmt\n";}
+	$dids_to_print = mysqli_num_rows($rslt);
+	$i=0;
+	while ($i < $dids_to_print)
+		{
+		$row=mysqli_fetch_row($rslt);
+		$did_id[$i] = $row[0];
+		$did_SQL .= "'$row[0]',";
+		$i++;
+		}
+	$did_SQL = preg_replace('/,$/i', '',$did_SQL);
+	if (strlen($did_SQL)<3) {$did_SQL="''";}
+
+	$stmt="select uniqueid from ".$vicidial_did_log_table." where did_id IN($did_SQL);";
+	$rslt=mysql_to_mysqli($stmt, $link);
+	if ($DB) {$MAIN.="$stmt\n";}
+	$unids_to_print = mysqli_num_rows($rslt);
+	$i=0;
+	while ($i < $unids_to_print)
+		{
+		$row=mysqli_fetch_row($rslt);
+		$unid_SQL .= "'$row[0]',";
+		$i++;
+		}
+	$unid_SQL = preg_replace('/,$/i', '',$unid_SQL);
+	if (strlen($unid_SQL)<3) {$unid_SQL="''";}
+
+	if ($DB > 0)
+		{$MAIN.="|$did_SQL|$unid_SQL|\n";}
+
+	}
+
+if ($group_ct > 1)
+	{
+	$ASCII_text.="\n";
+	$ASCII_text.="---------- "._QXZ("MULTI-GROUP BREAKDOWN").":\n";
+
+	$CSV_text1.="\n\""._QXZ("MULTI-GROUP BREAKDOWN").":\"\n";
+
+	if ($CHAT=='Y')
+		{
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$ASCII_text.="| "._QXZ("CHAT",20)." | "._QXZ("CHATS",7)." | "._QXZ("DROPS",7)." | "._QXZ("DROP",5)." % | "._QXZ("IVR",7)." |\n";
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$CSV_text1.="\""._QXZ("CHAT")."\",\""._QXZ("CALLS")."\",\""._QXZ("DROPS")."\",\""._QXZ("DROP")." %\",\""._QXZ("IVR")."\"\n";
+		}
+	else if ($EMAIL=='Y')
+		{
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$ASCII_text.="| "._QXZ("EMAIL",20)." | "._QXZ("EMAILS",7)." | "._QXZ("DROPS",7)." | "._QXZ("DROP",5)." % | "._QXZ("IVR",7)." |\n";
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$CSV_text1.="\""._QXZ("EMAIL")."\",\""._QXZ("CALLS")."\",\""._QXZ("DROPS")."\",\""._QXZ("DROP")." %\",\""._QXZ("IVR")."\"\n";
+		}
+	else if ($DID=='Y')
+		{
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$ASCII_text.="| "._QXZ("DID",20)." | "._QXZ("CALLS",7)." | "._QXZ("DROPS",7)." | "._QXZ("DROP",5)." % | "._QXZ("IVR",7)." |\n";
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$CSV_text1.="\""._QXZ("DID")."\",\""._QXZ("CALLS")."\",\""._QXZ("DROPS")."\",\""._QXZ("DROP")." %\",\""._QXZ("IVR")."\"\n";
+		}
+	else
+		{
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$ASCII_text.="| "._QXZ("IN-GROUP",20)." | "._QXZ("CALLS",7)." | "._QXZ("DROPS",7)." | "._QXZ("DROP",5)." % | "._QXZ("IVR",7)." |\n";
+		$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+		$CSV_text1.="\""._QXZ("IN-GROUP")."\",\""._QXZ("CALLS")."\",\""._QXZ("DROPS")."\",\""._QXZ("DROP")." %\",\""._QXZ("IVR")."\"\n";
+		}
+
+	$i=0;
+	while($i < $group_ct)
+		{
+		$did_id[$i]='0';
+		$DIDunid_SQL='';
+		$stmt="select did_id from vicidial_inbound_dids where did_pattern='$group[$i]';";
+		$rslt=mysql_to_mysqli($stmt, $link);
+		if ($DB) {$ASCII_text.="$stmt\n";}
+		$Sdids_to_print = mysqli_num_rows($rslt);
+		if ($Sdids_to_print > 0)
+			{
+			$row=mysqli_fetch_row($rslt);
+			$did_id[$i] = $row[0];
+			}
+
+		$stmt="select uniqueid from ".$vicidial_did_log_table." where did_id='$did_id[$i]';";
+		$rslt=mysql_to_mysqli($stmt, $link);
+		if ($DB) {$ASCII_text.="$stmt\n";}
+		$DIDunids_to_print = mysqli_num_rows($rslt);
+		$k=0;
+		while ($k < $DIDunids_to_print)
+			{
+			$row=mysqli_fetch_row($rslt);
+			$DIDunid_SQL .= "'$row[0]',";
+			$k++;
+			}
+		$DIDunid_SQL = preg_replace('/,$/i', '',$DIDunid_SQL);
+		if (strlen($DIDunid_SQL)<3) {$DIDunid_SQL="''";}
+
+		$stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id='$group[$i]';";
+		if ($DID=='Y')
+			{
+			$stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($DIDunid_SQL);";
+			}
+		$rslt=mysql_to_mysqli($stmt, $link);
+		if ($DB) {$ASCII_text.="$stmt\n";}
+		$row=mysqli_fetch_row($rslt);
+
+		$stmt="select count(*) from ".$live_inbound_log_table." where start_time >= '$query_date_BEGIN' and start_time <= '$query_date_END' $starttime_call_time_clause and comment_a='$group[$i]' and comment_b='START';";
+		if ($DID=='Y')
+			{
+			$stmt="select count(*) from ".$live_inbound_log_table." where start_time >= '$query_date_BEGIN' and start_time <= '$query_date_END' $starttime_call_time_clause and uniqueid IN($DIDunid_SQL);";
+			}
+		$rslt=mysql_to_mysqli($stmt, $link);
+		if ($DB) {$ASCII_text.="$stmt\n";}
+		$rowx=mysqli_fetch_row($rslt);
+
+		$stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id='$group[$i]' and status IN('DROP','XDROP') and (length_in_sec <= 49999 or length_in_sec is null);";
+		if ($DID=='Y')
+			{
+			$stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and status IN('DROP','XDROP') and (length_in_sec <= 49999 or length_in_sec is null) and uniqueid IN($DIDunid_SQL);";
+			}
+		$rslt=mysql_to_mysqli($stmt, $link);
+		if ($DB) {$ASCII_text.="$stmt\n";}
+		$rowy=mysqli_fetch_row($rslt);
+		if ($row[0]>$max_value) {$max_value=$row[0];}
+
+		$groupDISPLAY =	sprintf("%20s", $group[$i]);
+		$gTOTALcalls =	sprintf("%7s", $row[0]);
+		$gIVRcalls =	sprintf("%7s", $rowx[0]);
+		$gDROPcalls =	sprintf("%7s", $rowy[0]);
+		$gDROPpercent = (MathZDC($gDROPcalls, $gTOTALcalls) * 100);
+		$gDROPpercent = round($gDROPpercent, 2);
+		$gDROPpercent =	sprintf("%6s", $gDROPpercent);
+
+		$ASCII_text.="| $groupDISPLAY | $gTOTALcalls | $gDROPcalls | $gDROPpercent% | $gIVRcalls |\n";
+		$CSV_text1.="\"$groupDISPLAY\",\"$gTOTALcalls\",\"$gDROPcalls\",\"$gDROPpercent%\",\"$gIVRcalls\"\n";
+		$graph_data_ary[$i][0]=$groupDISPLAY;
+		$graph_data_ary[$i][1]=$gTOTALcalls;
+		$graph_data_ary[$i][2]=$gDROPcalls;
+		$graph_data_ary[$i][3]=$gDROPpercent;
+		$graph_data_ary[$i][4]=$gIVRcalls;
+
+		$i++;
+		}
+
+	$ASCII_text.="+----------------------+---------+---------+---------+---------+\n";
+
+	}
+
+	if ($report_display_type=="HTML") {
+		$max_value=1;
+		$graph_height=240;
+		$scale = 1;
+		$w=0;
+		for ($i=0; $i$max_value) {$max_value=$graph_data_ary[$i][1];}
+			if ($graph_data_ary[$i][1]>0) {$w++;}
+		}
+		$scale = MathZDC($graph_height, $max_value);
+
+
+		$GRAPH_text.="";
+		for ($d=0; $d0) {
+				$graph_data_ary[$d][0]=preg_replace('/\s/', "", $graph_data_ary[$d][0]); 
+				$GRAPH_text.="  \n";
+			}
+		}
+		$GRAPH_text.="
"._QXZ("MULTI-GROUP BREAKDOWN")."
"._QXZ("GROUP").""._QXZ("IVRS")." / "._QXZ("DROPS")." / "._QXZ("CALLS")."
".$graph_data_ary[$d][0]."
".$graph_data_ary[$d][3]."% drops
 
\n"; + if ($graph_data_ary[$d][1]>0) { + $GRAPH_text.="
  • ".$graph_data_ary[$d][1]."
  • "; + if ($graph_data_ary[$d][2]>0) { + $GRAPH_text.="
  • ".$graph_data_ary[$d][2]."
  • "; + } + if ($graph_data_ary[$d][4]>0) { + $GRAPH_text.="
  • ".$graph_data_ary[$d][4]."
  • "; + } + $GRAPH_text.="
\n"; + } else { + $GRAPH_text.="0"; + } + $GRAPH_text.="


"; + + + $MAIN.=$GRAPH_text; + } + else + { + $MAIN.=$ASCII_text; + } + +$MAIN.="\n"; +$MAIN.=_QXZ("Time range").": $query_date_BEGIN "._QXZ("to")." $query_date_END\n\n"; +$MAIN.="---------- "._QXZ("TOTALS")."\n"; + +$CSV_text1.="\n\""._QXZ("Time range").":\",\"$query_date_BEGIN\",\""._QXZ("to")."\",\"$query_date_END\"\n\n"; + +$stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL);"; +if ($DID=='Y') + { + $stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL);"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$row=mysqli_fetch_row($rslt); + +$stmt="select count(*),sum(queue_seconds) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL');"; +if ($DID=='Y') + { + $stmt="select count(*),sum(queue_seconds) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') and uniqueid IN($unid_SQL);"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$rowy=mysqli_fetch_row($rslt); + +$stmt="select count(*) from ".$live_inbound_log_table." where start_time >= '$query_date_BEGIN' and start_time <= '$query_date_END' $starttime_call_time_clause and comment_a IN($group_SQL) and comment_b='START';"; +if ($DID=='Y') + { + $stmt="select count(*) from ".$live_inbound_log_table." where start_time >= '$query_date_BEGIN' and start_time <= '$query_date_END' $starttime_call_time_clause and uniqueid IN($unid_SQL);"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$rowx=mysqli_fetch_row($rslt); + +$TOTALcalls = sprintf("%10s", $row[0]); +$IVRcalls = sprintf("%10s", $rowx[0]); +$TOTALsec = $row[1]; + +$average_call_seconds = MathZDC($TOTALsec, $row[0]); +$average_call_seconds = round($average_call_seconds, 0); +$average_call_seconds = sprintf("%10s", $average_call_seconds); + +$ANSWEREDcalls = sprintf("%10s", $rowy[0]); + +$ANSWEREDpercent = (MathZDC($ANSWEREDcalls, $TOTALcalls) * 100); +$ANSWEREDpercent = round($ANSWEREDpercent, 0); + +$average_answer_seconds = MathZDC($rowy[1], $rowy[0]); +$average_answer_seconds = round($average_answer_seconds, 2); +$average_answer_seconds = sprintf("%10s", $average_answer_seconds); + +if ($CHAT=='Y') + { + $MAIN.=_QXZ("Total Chats taken in to this In-Group:",47)."$TOTALcalls\n"; + $MAIN.=_QXZ("Average Chat Length for all Chats:",47)."$average_call_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Answered Chats:",47)."$ANSWEREDcalls $ANSWEREDpercent%\n"; + $MAIN.=_QXZ("Average queue time for Answered Chats:",47)."$average_answer_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Chats taken into the IVR for this In-Group:",47)."$IVRcalls\n"; + + $CSV_text1.="\""._QXZ("Total Chats taken in to this In-Group").":\",\"$TOTALcalls\"\n"; + $CSV_text1.="\""._QXZ("Average Chat Length for all Chats").":\",\"$average_call_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Answered Chats").":\",\"$ANSWEREDcalls\",\"$ANSWEREDpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average queue time for Answered Chats").":\",\"$average_answer_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Chats taken into the IVR for this In-Group").":\",\"$IVRcalls\"\n"; + } +elseif ($EMAIL=='Y') + { + $MAIN.=_QXZ("Total Emails taken in to this In-Group:",47)."$TOTALcalls\n"; + $MAIN.=_QXZ("Average Email Length for all Emails:",47)."$average_call_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Answered Emails:",47)."$ANSWEREDcalls $ANSWEREDpercent%\n"; + $MAIN.=_QXZ("Average queue time for Answered Emails:",47)."$average_answer_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Emails taken into the IVR for this In-Group:",47)."$IVRcalls\n"; + + $CSV_text1.="\""._QXZ("Total Emails taken in to this In-Group").":\",\"$TOTALcalls\"\n"; + $CSV_text1.="\""._QXZ("Average Email Length for all Emails").":\",\"$average_call_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Answered Emails").":\",\"$ANSWEREDcalls\",\"$ANSWEREDpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average queue time for Answered Emails").":\",\"$average_answer_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Emails taken into the IVR for this In-Group").":\",\"$IVRcalls\"\n"; + } +else + { + $MAIN.=_QXZ("Total calls taken in to this In-Group:",47)."$TOTALcalls\n"; + $MAIN.=_QXZ("Average Call Length for all Calls:",47)."$average_call_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Answered Calls:",47)."$ANSWEREDcalls $ANSWEREDpercent%\n"; + $MAIN.=_QXZ("Average queue time for Answered Calls:",47)."$average_answer_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Calls taken into the IVR for this In-Group:",47)."$IVRcalls\n"; + + $CSV_text1.="\""._QXZ("Total calls taken in to this In-Group").":\",\"$TOTALcalls\"\n"; + $CSV_text1.="\""._QXZ("Average Call Length for all Calls").":\",\"$average_call_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Answered Calls").":\",\"$ANSWEREDcalls\",\"$ANSWEREDpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average queue time for Answered Calls").":\",\"$average_answer_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Calls taken into the IVR for this In-Group").":\",\"$IVRcalls\"\n"; + } + +$MAIN.="\n"; +$MAIN.="---------- "._QXZ("DROPS")."\n"; + +$CSV_text1.="\n\""._QXZ("DROPS")."\"\n"; + +$stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status IN('DROP','XDROP') and (length_in_sec <= 49999 or length_in_sec is null);"; +if ($DID=='Y') + { + $stmt="select count(*),sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and status IN('DROP','XDROP') and (length_in_sec <= 49999 or length_in_sec is null) and uniqueid IN($unid_SQL);"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$row=mysqli_fetch_row($rslt); + +$DROPcalls = sprintf("%10s", $row[0]); +$DROPpercent = (MathZDC($DROPcalls, $TOTALcalls) * 100); +$DROPpercent = round($DROPpercent, 0); + +$average_hold_seconds = MathZDC($row[1], $row[0]); +$average_hold_seconds = round($average_hold_seconds, 0); +$average_hold_seconds = sprintf("%10s", $average_hold_seconds); + +$DROP_ANSWEREDpercent = (MathZDC($DROPcalls, $ANSWEREDcalls) * 100); +$DROP_ANSWEREDpercent = round($DROP_ANSWEREDpercent, 0); + +if ($CHAT=='Y') + { + $MAIN.=_QXZ("Total DROP Chats:",47)."$DROPcalls $DROPpercent% "._QXZ("drop/answered").": $DROP_ANSWEREDpercent%\n"; + $MAIN.=_QXZ("Average hold time for DROP Chats:",47)."$average_hold_seconds "._QXZ("seconds")."\n"; + + $CSV_text1.="\"Total DROP Chats:\",\"$DROPcalls\",\"$DROPpercent%\",\""._QXZ("drop/answered").":\",\"$DROP_ANSWEREDpercent%\"\n"; + $CSV_text1.="\"Average hold time for DROP Chats:\",\"$average_hold_seconds "._QXZ("seconds")."\"\n"; + } +elseif ($EMAIL=='Y') + { + $MAIN.=_QXZ("Total DROP Emails:",47)."$DROPcalls $DROPpercent% "._QXZ("drop/answered").": $DROP_ANSWEREDpercent%\n"; + $MAIN.=_QXZ("Average hold time for DROP Emails:",47)."$average_hold_seconds "._QXZ("seconds")."\n"; + + $CSV_text1.="\"Total DROP Emails:\",\"$DROPcalls\",\"$DROPpercent%\",\""._QXZ("drop/answered").":\",\"$DROP_ANSWEREDpercent%\"\n"; + $CSV_text1.="\"Average hold time for DROP Emails:\",\"$average_hold_seconds "._QXZ("seconds")."\"\n"; + } +else + { + $MAIN.=_QXZ("Total DROP Calls:",47)."$DROPcalls $DROPpercent% "._QXZ("drop/answered").": $DROP_ANSWEREDpercent%\n"; + $MAIN.=_QXZ("Average hold time for DROP Calls:",47)."$average_hold_seconds "._QXZ("seconds")."\n"; + + $CSV_text1.="\""._QXZ("Total DROP Calls").":\",\"$DROPcalls\",\"$DROPpercent%\",\""._QXZ("drop/answered").":\",\"$DROP_ANSWEREDpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average hold time for DROP Calls").":\",\"$average_hold_seconds "._QXZ("seconds")."\"\n"; + } + +if (strlen($group_SQL)>3) + { + if ($DID!='Y') + { + $stmt = "SELECT answer_sec_pct_rt_stat_one,answer_sec_pct_rt_stat_two from vicidial_inbound_groups where group_id IN($group_SQL) order by answer_sec_pct_rt_stat_one desc limit 1;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {$MAIN.="$stmt\n";} + $row=mysqli_fetch_row($rslt); + $Sanswer_sec_pct_rt_stat_one = $row[0]; + $Sanswer_sec_pct_rt_stat_two = $row[1]; + + $stmt = "SELECT count(*) from ".$vicidial_closer_log_table." where campaign_id IN($group_SQL) and call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and queue_seconds <= $Sanswer_sec_pct_rt_stat_one and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL');"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {$MAIN.="$stmt\n";} + $row=mysqli_fetch_row($rslt); + $answer_sec_pct_rt_stat_one = $row[0]; + + $stmt = "SELECT count(*) from ".$vicidial_closer_log_table." where campaign_id IN($group_SQL) and call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and queue_seconds <= $Sanswer_sec_pct_rt_stat_two and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL');"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {$MAIN.="$stmt\n";} + $row=mysqli_fetch_row($rslt); + $answer_sec_pct_rt_stat_two = $row[0]; + + $PCTanswer_sec_pct_rt_stat_one = (MathZDC($answer_sec_pct_rt_stat_one, $ANSWEREDcalls) * 100); + $PCTanswer_sec_pct_rt_stat_one = round($PCTanswer_sec_pct_rt_stat_one, 0); + #$PCTanswer_sec_pct_rt_stat_one = sprintf("%10s", $PCTanswer_sec_pct_rt_stat_one); + $PCTanswer_sec_pct_rt_stat_two = (MathZDC($answer_sec_pct_rt_stat_two, $ANSWEREDcalls) * 100); + $PCTanswer_sec_pct_rt_stat_two = round($PCTanswer_sec_pct_rt_stat_two, 0); + #$PCTanswer_sec_pct_rt_stat_two = sprintf("%10s", $PCTanswer_sec_pct_rt_stat_two); + } + } + +if ($CHAT=='Y') + { + $MAIN.="\n"; + $MAIN.="---------- "._QXZ("CUSTOM INDICATORS")."\n"; + $MAIN.="GDE "._QXZ("(Answered/Total chats taken in to this In-Group):",50)." $ANSWEREDpercent%\n"; + $MAIN.="ACR "._QXZ("(Dropped/Answered):",50)." $DROP_ANSWEREDpercent%\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"; + } +elseif ($EMAIL=='Y') + { + $MAIN.="\n"; + $MAIN.="---------- "._QXZ("CUSTOM INDICATORS")."\n"; + $MAIN.="GDE "._QXZ("(Answered/Total emails taken in to this In-Group):",50)." $ANSWEREDpercent%\n"; + $MAIN.="ACR "._QXZ("(Dropped/Answered):",50)." $DROP_ANSWEREDpercent%\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"; + } +else + { + $MAIN.="\n"; + $MAIN.="---------- "._QXZ("CUSTOM INDICATORS")."\n"; + $MAIN.="GDE "._QXZ("(Answered/Total calls taken in to this In-Group):",50)." $ANSWEREDpercent%\n"; + $MAIN.="ACR "._QXZ("(Dropped/Answered):",50)." $DROP_ANSWEREDpercent%\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"; + } + +if ($DID!='Y') + { + $MAIN.="TMR1 "._QXZ("(Answered within %1s seconds/Answered):",50,'',$Sanswer_sec_pct_rt_stat_one)." $PCTanswer_sec_pct_rt_stat_one%\n"; + $MAIN.="TMR2 "._QXZ("(Answered within %1s seconds/Answered):",50,'',$Sanswer_sec_pct_rt_stat_two)." $PCTanswer_sec_pct_rt_stat_two%\n"; + $CSV_text1.="\"TMR1 "._QXZ("(Answered within %1s seconds/Answered)",0,'',$Sanswer_sec_pct_rt_stat_one).":\",\"$PCTanswer_sec_pct_rt_stat_one%\"\n"; + $CSV_text1.="\"TMR2 "._QXZ("(Answered within %1s seconds/Answered)",0,'',$Sanswer_sec_pct_rt_stat_two).":\",\"$PCTanswer_sec_pct_rt_stat_two%\"\n"; + } + + +# GET LIST OF ALL STATUSES and create SQL from human_answered statuses +$q=0; +$stmt = "SELECT status,status_name,human_answered,category from vicidial_statuses;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$statuses_to_print = mysqli_num_rows($rslt); +$p=0; +while ($p < $statuses_to_print) + { + $row=mysqli_fetch_row($rslt); + $status[$q] = $row[0]; + $status_name[$q] = $row[1]; + $human_answered[$q] = $row[2]; + $category[$q] = $row[3]; + $statname_list["$status[$q]"] = "$status_name[$q]"; + $statcat_list["$status[$q]"] = "$category[$q]"; + $q++; + $p++; + } +$stmt = "SELECT status,status_name,human_answered,category from vicidial_campaign_statuses;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$statuses_to_print = mysqli_num_rows($rslt); +$p=0; +while ($p < $statuses_to_print) + { + $row=mysqli_fetch_row($rslt); + $status[$q] = $row[0]; + $status_name[$q] = $row[1]; + $human_answered[$q] = $row[2]; + $category[$q] = $row[3]; + $statname_list["$status[$q]"] = "$status_name[$q]"; + $statcat_list["$status[$q]"] = "$category[$q]"; + $q++; + $p++; + } + +############################## +######### CALL QUEUE STATS +$MAIN.="\n"; +$MAIN.="---------- "._QXZ("QUEUE STATS")."\n"; + +$CSV_text1.="\n\""._QXZ("QUEUE STATS")."\"\n"; + +$stmt="select count(*),sum(queue_seconds) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and (queue_seconds > 0);"; +if ($DID=='Y') + { + $stmt="select count(*),sum(queue_seconds) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and (queue_seconds > 0) and uniqueid IN($unid_SQL);"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$row=mysqli_fetch_row($rslt); + +$QUEUEcalls = sprintf("%10s", $row[0]); +$QUEUEpercent = (MathZDC($QUEUEcalls, $TOTALcalls) * 100); +$QUEUEpercent = round($QUEUEpercent, 0); + +$average_queue_seconds = MathZDC($row[1], $row[0]); +$average_queue_seconds = round($average_queue_seconds, 2); +$average_queue_seconds = sprintf("%10.2f", $average_queue_seconds); + +$average_total_queue_seconds = MathZDC($row[1], $TOTALcalls); +$average_total_queue_seconds = round($average_total_queue_seconds, 2); +$average_total_queue_seconds = sprintf("%10.2f", $average_total_queue_seconds); + +if ($CHAT=='Y') + { + $MAIN.=_QXZ("Total Chats That entered Queue:",46)." $QUEUEcalls $QUEUEpercent%\n"; + $MAIN.=_QXZ("Average QUEUE Length for queue chats:",46)." $average_queue_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Average QUEUE Length across all chats:",46)." $average_total_queue_seconds "._QXZ("seconds")."\n"; + + $CSV_text1.="\""._QXZ("Total Chats That entered Queue").":\",\"$QUEUEcalls\",\"$QUEUEpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average QUEUE Length for queue chats").":\",\"$average_queue_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Average QUEUE Length across all chats").":\",\"$average_total_queue_seconds "._QXZ("seconds")."\"\n"; + } +elseif ($EMAIL=='Y') + { + $MAIN.=_QXZ("Total Emails That entered Queue:",46)." $QUEUEcalls $QUEUEpercent%\n"; + $MAIN.=_QXZ("Average QUEUE Length for queue emails:",46)." $average_queue_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Average QUEUE Length across all emails:",46)." $average_total_queue_seconds "._QXZ("seconds")."\n"; + + $CSV_text1.="\""._QXZ("Total Emails That entered Queue").":\",\"$QUEUEcalls\",\"$QUEUEpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average QUEUE Length for queue emails").":\",\"$average_queue_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Average QUEUE Length across all emails").":\",\"$average_total_queue_seconds "._QXZ("seconds")."\"\n"; + } +else + { + $MAIN.=_QXZ("Total Calls That entered Queue:",46)." $QUEUEcalls $QUEUEpercent%\n"; + $MAIN.=_QXZ("Average QUEUE Length for queue calls:",46)." $average_queue_seconds "._QXZ("seconds")."\n"; + $MAIN.=_QXZ("Average QUEUE Length across all calls:",46)." $average_total_queue_seconds "._QXZ("seconds")."\n"; + + $CSV_text1.="\""._QXZ("Total Calls That entered Queue").":\",\"$QUEUEcalls\",\"$QUEUEpercent%\"\n"; + $CSV_text1.="\""._QXZ("Average QUEUE Length for queue calls").":\",\"$average_queue_seconds "._QXZ("seconds")."\"\n"; + $CSV_text1.="\""._QXZ("Average QUEUE Length across all calls").":\",\"$average_total_queue_seconds "._QXZ("seconds")."\"\n"; + } + +if ($CHAT=='Y') + { + $rpt_type_verbiage=_QXZ("CHAT",6); + $rpt_type_verbiages=_QXZ("CHATS",6); + } +elseif ($EMAIL=='Y') + { + $rpt_type_verbiage=_QXZ("EMAIL",6); + $rpt_type_verbiages=_QXZ("EMAILS",6); + } +else + { + $rpt_type_verbiage=_QXZ("CALL",6); + $rpt_type_verbiages=_QXZ("CALLS",6); + } + +############################## +######### CALL HOLD TIME BREAKDOWN IN SECONDS + +$TOTALcalls = 0; + +$ASCII_text="\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 | TOTAL |\n"; +$ASCII_text.="+-------------------------------------------------------------------------------------------+------------+\n"; + +$CSV_text2.="\n\"$rpt_type_verbiage "._QXZ("HOLD TIME BREAKDOWN IN SECONDS")."\"\n"; +$CSV_text2.="\"\",\"0\",\"5\",\"10\",\"15\",\"20\",\"25\",\"30\",\"35\",\"40\",\"45\",\"50\",\"55\",\"60\",\"90\",\"+90\",\"TOTAL\"\n"; + + +$stmt="select count(*),queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by queue_seconds;"; +if ($DID=='Y') + { + $stmt="select count(*),queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by queue_seconds;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$ASCII_text.="$stmt\n";} +$reasons_to_print = mysqli_num_rows($rslt); +$i=0; +$hd_5=0; $hd10=0; $hd15=0; $hd20=0; $hd25=0; $hd30=0; $hd35=0; $hd40=0; $hd45=0; $hd50=0; $hd55=0; $hd60=0; $hd90=0; $hd99=0; + +while ($i < $reasons_to_print) + { + $row=mysqli_fetch_row($rslt); + + $TOTALcalls = ($TOTALcalls + $row[0]); + + if ($row[1] == 0) {$hd_0 = ($hd_0 + $row[0]);} + if ( ($row[1] > 0) and ($row[1] <= 5) ) {$hd_5 = ($hd_5 + $row[0]);} + if ( ($row[1] > 5) and ($row[1] <= 10) ) {$hd10 = ($hd10 + $row[0]);} + if ( ($row[1] > 10) and ($row[1] <= 15) ) {$hd15 = ($hd15 + $row[0]);} + if ( ($row[1] > 15) and ($row[1] <= 20) ) {$hd20 = ($hd20 + $row[0]);} + if ( ($row[1] > 20) and ($row[1] <= 25) ) {$hd25 = ($hd25 + $row[0]);} + if ( ($row[1] > 25) and ($row[1] <= 30) ) {$hd30 = ($hd30 + $row[0]);} + if ( ($row[1] > 30) and ($row[1] <= 35) ) {$hd35 = ($hd35 + $row[0]);} + if ( ($row[1] > 35) and ($row[1] <= 40) ) {$hd40 = ($hd40 + $row[0]);} + if ( ($row[1] > 40) and ($row[1] <= 45) ) {$hd45 = ($hd45 + $row[0]);} + if ( ($row[1] > 45) and ($row[1] <= 50) ) {$hd50 = ($hd50 + $row[0]);} + if ( ($row[1] > 50) and ($row[1] <= 55) ) {$hd55 = ($hd55 + $row[0]);} + if ( ($row[1] > 55) and ($row[1] <= 60) ) {$hd60 = ($hd60 + $row[0]);} + if ( ($row[1] > 60) and ($row[1] <= 90) ) {$hd90 = ($hd90 + $row[0]);} + if ($row[1] > 90) {$hd99 = ($hd99 + $row[0]);} + $i++; + } + +$hd_0 = sprintf("%5s", $hd_0); +$hd_5 = sprintf("%5s", $hd_5); +$hd10 = sprintf("%5s", $hd10); +$hd15 = sprintf("%5s", $hd15); +$hd20 = sprintf("%5s", $hd20); +$hd25 = sprintf("%5s", $hd25); +$hd30 = sprintf("%5s", $hd30); +$hd35 = sprintf("%5s", $hd35); +$hd40 = sprintf("%5s", $hd40); +$hd45 = sprintf("%5s", $hd45); +$hd50 = sprintf("%5s", $hd50); +$hd55 = sprintf("%5s", $hd55); +$hd60 = sprintf("%5s", $hd60); +$hd90 = sprintf("%5s", $hd90); +$hd99 = sprintf("%5s", $hd99); + +$TOTALcalls = sprintf("%10s", $TOTALcalls); + +$ASCII_text.="| $hd_0 $hd_5 $hd10 $hd15 $hd20 $hd25 $hd30 $hd35 $hd40 $hd45 $hd50 $hd55 $hd60 $hd90 $hd99 | $TOTALcalls |\n"; +$ASCII_text.="+-------------------------------------------------------------------------------------------+------------+\n"; + +$CSV_text2.="\"\",\"$hd_0\",\"$hd_5\",\"$hd10\",\"$hd15\",\"$hd20\",\"$hd25\",\"$hd30\",\"$hd35\",\"$hd40\",\"$hd45\",\"$hd50\",\"$hd55\",\"$hd60\",\"$hd90\",\"$hd99\",\"$TOTALcalls\"\n"; + + +if ($report_display_type=="HTML") { + $stmt="select count(*),round(queue_seconds) as rd_sec from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by rd_sec order by rd_sec asc;"; + $ms_stmt="select queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) order by queue_seconds desc limit 1;"; + $mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by queue_seconds order by ct desc limit 1;"; + if ($DID=='Y') + { + $stmt="select count(*),round(queue_seconds) as rd_sec from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by rd_sec;"; + $ms_stmt="select queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) order by queue_seconds desc limit 1;"; + $mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by queue_seconds order by ct desc limit 1;"; + } + if ($DB) {$GRAPH_text.=$stmt."\n";} + $ms_rslt=mysql_to_mysqli($ms_stmt, $link); + $ms_row=mysqli_fetch_row($ms_rslt); + $max_seconds=$ms_row[0]; + if ($max_seconds>90) {$max_seconds=91;} + for ($i=0; $i<=$max_seconds; $i++) { + $sec_ary[$i]=0; + } + + $mc_rslt=mysql_to_mysqli($mc_stmt, $link); + $mc_row=mysqli_fetch_row($mc_rslt); + $max_calls=$ms_row[0]; + if ($max_calls<=10) { + while ($maxcalls%5!=0) { + $maxcalls++; + } + } else if ($max_calls<=100) { + while ($maxcalls%10!=0) { + $maxcalls++; + } + } else if ($max_calls<=1000) { + while ($maxcalls%50!=0) { + $maxcalls++; + } + } else { + while ($maxcalls%500!=0) { + $maxcalls++; + } + } + $rslt=mysql_to_mysqli($stmt, $link); + + $GRAPH_text="
\n"; + $GRAPH_text.=""; + $MAIN.=$GRAPH_text; + } +else + { + $MAIN.=$ASCII_text; + } + + +############################## +######### CALL DROP TIME BREAKDOWN IN SECONDS + +$BDdropCALLS = 0; + +$ASCII_text="\n"; +$ASCII_text.="---------- $rpt_type_verbiage "._QXZ("DROP TIME BREAKDOWN IN SECONDS")."\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"; + +$CSV_text2.="\n\"$rpt_type_verbiage "._QXZ("DROP TIME BREAKDOWN IN SECONDS")."\"\n"; +$CSV_text2.="\"\",\"0\",\"5\",\"10\",\"15\",\"20\",\"25\",\"30\",\"35\",\"40\",\"45\",\"50\",\"55\",\"60\",\"90\",\"+90\",\""._QXZ("TOTAL")."\"\n"; + +$stmt="select count(*),queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status IN('DROP','XDROP') group by queue_seconds;"; +if ($DID=='Y') + { + $stmt="select count(*),queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status IN('DROP','XDROP') group by queue_seconds;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$ASCII_text.="$stmt\n";} +$reasons_to_print = mysqli_num_rows($rslt); +$i=0; +$dd_0=0; $dd_5=0; $dd10=0; $dd15=0; $dd20=0; $dd25=0; $dd30=0; $dd35=0; $dd40=0; $dd45=0; $dd50=0; $dd55=0; $dd60=0; $dd90=0; $dd99=0; + +while ($i < $reasons_to_print) + { + $row=mysqli_fetch_row($rslt); + + $BDdropCALLS = ($BDdropCALLS + $row[0]); + + if ($row[1] == 0) {$dd_0 = ($dd_0 + $row[0]);} + if ( ($row[1] > 0) and ($row[1] <= 5) ) {$dd_5 = ($dd_5 + $row[0]);} + if ( ($row[1] > 5) and ($row[1] <= 10) ) {$dd10 = ($dd10 + $row[0]);} + if ( ($row[1] > 10) and ($row[1] <= 15) ) {$dd15 = ($dd15 + $row[0]);} + if ( ($row[1] > 15) and ($row[1] <= 20) ) {$dd20 = ($dd20 + $row[0]);} + if ( ($row[1] > 20) and ($row[1] <= 25) ) {$dd25 = ($dd25 + $row[0]);} + if ( ($row[1] > 25) and ($row[1] <= 30) ) {$dd30 = ($dd30 + $row[0]);} + if ( ($row[1] > 30) and ($row[1] <= 35) ) {$dd35 = ($dd35 + $row[0]);} + if ( ($row[1] > 35) and ($row[1] <= 40) ) {$dd40 = ($dd40 + $row[0]);} + if ( ($row[1] > 40) and ($row[1] <= 45) ) {$dd45 = ($dd45 + $row[0]);} + if ( ($row[1] > 45) and ($row[1] <= 50) ) {$dd50 = ($dd50 + $row[0]);} + if ( ($row[1] > 50) and ($row[1] <= 55) ) {$dd55 = ($dd55 + $row[0]);} + if ( ($row[1] > 55) and ($row[1] <= 60) ) {$dd60 = ($dd60 + $row[0]);} + if ( ($row[1] > 60) and ($row[1] <= 90) ) {$dd90 = ($dd90 + $row[0]);} + if ($row[1] > 90) {$dd99 = ($dd99 + $row[0]);} + $i++; + } + +$dd_0 = sprintf("%5s", $dd_0); +$dd_5 = sprintf("%5s", $dd_5); +$dd10 = sprintf("%5s", $dd10); +$dd15 = sprintf("%5s", $dd15); +$dd20 = sprintf("%5s", $dd20); +$dd25 = sprintf("%5s", $dd25); +$dd30 = sprintf("%5s", $dd30); +$dd35 = sprintf("%5s", $dd35); +$dd40 = sprintf("%5s", $dd40); +$dd45 = sprintf("%5s", $dd45); +$dd50 = sprintf("%5s", $dd50); +$dd55 = sprintf("%5s", $dd55); +$dd60 = sprintf("%5s", $dd60); +$dd90 = sprintf("%5s", $dd90); +$dd99 = sprintf("%5s", $dd99); + +$BDdropCALLS = sprintf("%10s", $BDdropCALLS); + +$ASCII_text.="| $dd_0 $dd_5 $dd10 $dd15 $dd20 $dd25 $dd30 $dd35 $dd40 $dd45 $dd50 $dd55 $dd60 $dd90 $dd99 | $BDdropCALLS |\n"; +$ASCII_text.="+-------------------------------------------------------------------------------------------+------------+\n"; + + +$CSV_text2.="\"\",\"$dd_0\",\"$dd_5\",\"$dd10\",\"$dd15\",\"$dd20\",\"$dd25\",\"$dd30\",\"$dd35\",\"$dd40\",\"$dd45\",\"$dd50\",\"$dd55\",\"$dd60\",\"$dd90\",\"$dd99\",\"$BDdropCALLS\"\n"; + +if ($report_display_type=="HTML") { + $stmt="select count(*),round(queue_seconds) as rd_sec from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status IN('DROP','XDROP') group by rd_sec order by rd_sec asc;"; + $ms_stmt="select queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status IN('DROP','XDROP') order by queue_seconds desc limit 1;"; + $mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status IN('DROP','XDROP') group by queue_seconds order by ct desc limit 1;"; + if ($DID=='Y') + { + $stmt="select count(*),round(queue_seconds) as rd_sec from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status IN('DROP','XDROP') group by rd_sec;"; + $ms_stmt="select queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status IN('DROP','XDROP') order by queue_seconds desc limit 1;"; + $mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status IN('DROP','XDROP') group by queue_seconds order by ct desc limit 1;"; + } + if ($DB) {$GRAPH_text.=$stmt."\n";} + $ms_rslt=mysql_to_mysqli($ms_stmt, $link); + $ms_row=mysqli_fetch_row($ms_rslt); + $max_seconds=$ms_row[0]; + if ($max_seconds>90) {$max_seconds=91;} + for ($i=0; $i<=$max_seconds; $i++) { + $sec_ary[$i]=0; + } + + $mc_rslt=mysql_to_mysqli($mc_stmt, $link); + $mc_row=mysqli_fetch_row($mc_rslt); + $max_calls=$ms_row[0]; + if ($max_calls<=10) { + while ($maxcalls%5!=0) { + $maxcalls++; + } + } else if ($max_calls<=100) { + while ($maxcalls%10!=0) { + $maxcalls++; + } + } else if ($max_calls<=1000) { + while ($maxcalls%50!=0) { + $maxcalls++; + } + } else { + while ($maxcalls%500!=0) { + $maxcalls++; + } + } + $rslt=mysql_to_mysqli($stmt, $link); + + $GRAPH_text="
\n"; + $GRAPH_text.=""; + $MAIN.=$GRAPH_text; + } +else + { + $MAIN.=$ASCII_text; + } + + + +############################## +######### CALL ANSWERED TIME AND PERCENT BREAKDOWN IN SECONDS + +$BDansweredCALLS = 0; + +$ASCII_text="\n"; +$ASCII_text.=" $rpt_type_verbiage "._QXZ("ANSWERED TIME AND PERCENT BREAKDOWN IN SECONDS")."\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"; + +$CSV_text2.="\n\"$rpt_type_verbiage "._QXZ("ANSWERED TIME AND PERCENT BREAKDOWN IN SECONDS")."\"\n"; +$CSV_text2.="\"\",\"0\",\"5\",\"10\",\"15\",\"20\",\"25\",\"30\",\"35\",\"40\",\"45\",\"50\",\"55\",\"60\",\"90\",\"+90\",\""._QXZ("TOTAL")."\"\n"; + +$stmt="select count(*),queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') group by queue_seconds;"; +if ($DID=='Y') + { + $stmt="select count(*),queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') group by queue_seconds;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$ASCII_text.="$stmt\n";} +$reasons_to_print = mysqli_num_rows($rslt); +$i=0; +while ($i < $reasons_to_print) + { + $row=mysqli_fetch_row($rslt); + + $BDansweredCALLS = ($BDansweredCALLS + $row[0]); + + ### Get interval totals + if ($row[1] == 0) {$ad_0 = ($ad_0 + $row[0]);} + if ( ($row[1] > 0) and ($row[1] <= 5) ) {$ad_5 = ($ad_5 + $row[0]);} + if ( ($row[1] > 5) and ($row[1] <= 10) ) {$ad10 = ($ad10 + $row[0]);} + if ( ($row[1] > 10) and ($row[1] <= 15) ) {$ad15 = ($ad15 + $row[0]);} + if ( ($row[1] > 15) and ($row[1] <= 20) ) {$ad20 = ($ad20 + $row[0]);} + if ( ($row[1] > 20) and ($row[1] <= 25) ) {$ad25 = ($ad25 + $row[0]);} + if ( ($row[1] > 25) and ($row[1] <= 30) ) {$ad30 = ($ad30 + $row[0]);} + if ( ($row[1] > 30) and ($row[1] <= 35) ) {$ad35 = ($ad35 + $row[0]);} + if ( ($row[1] > 35) and ($row[1] <= 40) ) {$ad40 = ($ad40 + $row[0]);} + if ( ($row[1] > 40) and ($row[1] <= 45) ) {$ad45 = ($ad45 + $row[0]);} + if ( ($row[1] > 45) and ($row[1] <= 50) ) {$ad50 = ($ad50 + $row[0]);} + if ( ($row[1] > 50) and ($row[1] <= 55) ) {$ad55 = ($ad55 + $row[0]);} + if ( ($row[1] > 55) and ($row[1] <= 60) ) {$ad60 = ($ad60 + $row[0]);} + if ( ($row[1] > 60) and ($row[1] <= 90) ) {$ad90 = ($ad90 + $row[0]);} + if ($row[1] > 90) {$ad99 = ($ad99 + $row[0]);} + $i++; + } + +### Calculate cumulative totals +$Cad_0 =$ad_0; +$Cad_5 =($Cad_0 + $ad_5); +$Cad10 =($Cad_5 + $ad10); +$Cad15 =($Cad10 + $ad15); +$Cad20 =($Cad15 + $ad20); +$Cad25 =($Cad20 + $ad25); +$Cad30 =($Cad25 + $ad30); +$Cad35 =($Cad30 + $ad35); +$Cad40 =($Cad35 + $ad40); +$Cad45 =($Cad40 + $ad45); +$Cad50 =($Cad45 + $ad50); +$Cad55 =($Cad50 + $ad55); +$Cad60 =($Cad55 + $ad60); +$Cad90 =($Cad60 + $ad90); +$Cad99 =($Cad90 + $ad99); + +### Calculate interval percentages +$pad_0=0; $pad_5=0; $pad10=0; $pad15=0; $pad20=0; $pad25=0; $pad30=0; $pad35=0; $pad40=0; $pad45=0; $pad50=0; $pad55=0; $pad60=0; $pad90=0; $pad99=0; +$pCad_0=0; $pCad_5=0; $pCad10=0; $pCad15=0; $pCad20=0; $pCad25=0; $pCad30=0; $pCad35=0; $pCad40=0; $pCad45=0; $pCad50=0; $pCad55=0; $pCad60=0; $pCad90=0; $pCad99=0; +if ( ($BDansweredCALLS > 0) and ($TOTALcalls > 0) ) + { + $pad_0 = (MathZDC($ad_0, $TOTALcalls) * 100); $pad_0 = round($pad_0, 0); + $pad_5 = (MathZDC($ad_5, $TOTALcalls) * 100); $pad_5 = round($pad_5, 0); + $pad10 = (MathZDC($ad10, $TOTALcalls) * 100); $pad10 = round($pad10, 0); + $pad15 = (MathZDC($ad15, $TOTALcalls) * 100); $pad15 = round($pad15, 0); + $pad20 = (MathZDC($ad20, $TOTALcalls) * 100); $pad20 = round($pad20, 0); + $pad25 = (MathZDC($ad25, $TOTALcalls) * 100); $pad25 = round($pad25, 0); + $pad30 = (MathZDC($ad30, $TOTALcalls) * 100); $pad30 = round($pad30, 0); + $pad35 = (MathZDC($ad35, $TOTALcalls) * 100); $pad35 = round($pad35, 0); + $pad40 = (MathZDC($ad40, $TOTALcalls) * 100); $pad40 = round($pad40, 0); + $pad45 = (MathZDC($ad45, $TOTALcalls) * 100); $pad45 = round($pad45, 0); + $pad50 = (MathZDC($ad50, $TOTALcalls) * 100); $pad50 = round($pad50, 0); + $pad55 = (MathZDC($ad55, $TOTALcalls) * 100); $pad55 = round($pad55, 0); + $pad60 = (MathZDC($ad60, $TOTALcalls) * 100); $pad60 = round($pad60, 0); + $pad90 = (MathZDC($ad90, $TOTALcalls) * 100); $pad90 = round($pad90, 0); + $pad99 = (MathZDC($ad99, $TOTALcalls) * 100); $pad99 = round($pad99, 0); + + $pCad_0 = (MathZDC($Cad_0, $TOTALcalls) * 100); $pCad_0 = round($pCad_0, 0); + $pCad_5 = (MathZDC($Cad_5, $TOTALcalls) * 100); $pCad_5 = round($pCad_5, 0); + $pCad10 = (MathZDC($Cad10, $TOTALcalls) * 100); $pCad10 = round($pCad10, 0); + $pCad15 = (MathZDC($Cad15, $TOTALcalls) * 100); $pCad15 = round($pCad15, 0); + $pCad20 = (MathZDC($Cad20, $TOTALcalls) * 100); $pCad20 = round($pCad20, 0); + $pCad25 = (MathZDC($Cad25, $TOTALcalls) * 100); $pCad25 = round($pCad25, 0); + $pCad30 = (MathZDC($Cad30, $TOTALcalls) * 100); $pCad30 = round($pCad30, 0); + $pCad35 = (MathZDC($Cad35, $TOTALcalls) * 100); $pCad35 = round($pCad35, 0); + $pCad40 = (MathZDC($Cad40, $TOTALcalls) * 100); $pCad40 = round($pCad40, 0); + $pCad45 = (MathZDC($Cad45, $TOTALcalls) * 100); $pCad45 = round($pCad45, 0); + $pCad50 = (MathZDC($Cad50, $TOTALcalls) * 100); $pCad50 = round($pCad50, 0); + $pCad55 = (MathZDC($Cad55, $TOTALcalls) * 100); $pCad55 = round($pCad55, 0); + $pCad60 = (MathZDC($Cad60, $TOTALcalls) * 100); $pCad60 = round($pCad60, 0); + $pCad90 = (MathZDC($Cad90, $TOTALcalls) * 100); $pCad90 = round($pCad90, 0); + $pCad99 = (MathZDC($Cad99, $TOTALcalls) * 100); $pCad99 = round($pCad99, 0); + + $ApCad_0 = (MathZDC($Cad_0, $BDansweredCALLS) * 100); $ApCad_0 = round($ApCad_0, 0); + $ApCad_5 = (MathZDC($Cad_5, $BDansweredCALLS) * 100); $ApCad_5 = round($ApCad_5, 0); + $ApCad10 = (MathZDC($Cad10, $BDansweredCALLS) * 100); $ApCad10 = round($ApCad10, 0); + $ApCad15 = (MathZDC($Cad15, $BDansweredCALLS) * 100); $ApCad15 = round($ApCad15, 0); + $ApCad20 = (MathZDC($Cad20, $BDansweredCALLS) * 100); $ApCad20 = round($ApCad20, 0); + $ApCad25 = (MathZDC($Cad25, $BDansweredCALLS) * 100); $ApCad25 = round($ApCad25, 0); + $ApCad30 = (MathZDC($Cad30, $BDansweredCALLS) * 100); $ApCad30 = round($ApCad30, 0); + $ApCad35 = (MathZDC($Cad35, $BDansweredCALLS) * 100); $ApCad35 = round($ApCad35, 0); + $ApCad40 = (MathZDC($Cad40, $BDansweredCALLS) * 100); $ApCad40 = round($ApCad40, 0); + $ApCad45 = (MathZDC($Cad45, $BDansweredCALLS) * 100); $ApCad45 = round($ApCad45, 0); + $ApCad50 = (MathZDC($Cad50, $BDansweredCALLS) * 100); $ApCad50 = round($ApCad50, 0); + $ApCad55 = (MathZDC($Cad55, $BDansweredCALLS) * 100); $ApCad55 = round($ApCad55, 0); + $ApCad60 = (MathZDC($Cad60, $BDansweredCALLS) * 100); $ApCad60 = round($ApCad60, 0); + $ApCad90 = (MathZDC($Cad90, $BDansweredCALLS) * 100); $ApCad90 = round($ApCad90, 0); + $ApCad99 = (MathZDC($Cad99, $BDansweredCALLS) * 100); $ApCad99 = round($ApCad99, 0); + } + +### Format variables +$ad_0 = sprintf("%5s", $ad_0); +$ad_5 = sprintf("%5s", $ad_5); +$ad10 = sprintf("%5s", $ad10); +$ad15 = sprintf("%5s", $ad15); +$ad20 = sprintf("%5s", $ad20); +$ad25 = sprintf("%5s", $ad25); +$ad30 = sprintf("%5s", $ad30); +$ad35 = sprintf("%5s", $ad35); +$ad40 = sprintf("%5s", $ad40); +$ad45 = sprintf("%5s", $ad45); +$ad50 = sprintf("%5s", $ad50); +$ad55 = sprintf("%5s", $ad55); +$ad60 = sprintf("%5s", $ad60); +$ad90 = sprintf("%5s", $ad90); +$ad99 = sprintf("%5s", $ad99); +$Cad_0 = sprintf("%5s", $Cad_0); +$Cad_5 = sprintf("%5s", $Cad_5); +$Cad10 = sprintf("%5s", $Cad10); +$Cad15 = sprintf("%5s", $Cad15); +$Cad20 = sprintf("%5s", $Cad20); +$Cad25 = sprintf("%5s", $Cad25); +$Cad30 = sprintf("%5s", $Cad30); +$Cad35 = sprintf("%5s", $Cad35); +$Cad40 = sprintf("%5s", $Cad40); +$Cad45 = sprintf("%5s", $Cad45); +$Cad50 = sprintf("%5s", $Cad50); +$Cad55 = sprintf("%5s", $Cad55); +$Cad60 = sprintf("%5s", $Cad60); +$Cad90 = sprintf("%5s", $Cad90); +$Cad99 = sprintf("%5s", $Cad99); +$pad_0 = sprintf("%4s", $pad_0) . '%'; +$pad_5 = sprintf("%4s", $pad_5) . '%'; +$pad10 = sprintf("%4s", $pad10) . '%'; +$pad15 = sprintf("%4s", $pad15) . '%'; +$pad20 = sprintf("%4s", $pad20) . '%'; +$pad25 = sprintf("%4s", $pad25) . '%'; +$pad30 = sprintf("%4s", $pad30) . '%'; +$pad35 = sprintf("%4s", $pad35) . '%'; +$pad40 = sprintf("%4s", $pad40) . '%'; +$pad45 = sprintf("%4s", $pad45) . '%'; +$pad50 = sprintf("%4s", $pad50) . '%'; +$pad55 = sprintf("%4s", $pad55) . '%'; +$pad60 = sprintf("%4s", $pad60) . '%'; +$pad90 = sprintf("%4s", $pad90) . '%'; +$pad99 = sprintf("%4s", $pad99) . '%'; +$pCad_0 = sprintf("%4s", $pCad_0) . '%'; +$pCad_5 = sprintf("%4s", $pCad_5) . '%'; +$pCad10 = sprintf("%4s", $pCad10) . '%'; +$pCad15 = sprintf("%4s", $pCad15) . '%'; +$pCad20 = sprintf("%4s", $pCad20) . '%'; +$pCad25 = sprintf("%4s", $pCad25) . '%'; +$pCad30 = sprintf("%4s", $pCad30) . '%'; +$pCad35 = sprintf("%4s", $pCad35) . '%'; +$pCad40 = sprintf("%4s", $pCad40) . '%'; +$pCad45 = sprintf("%4s", $pCad45) . '%'; +$pCad50 = sprintf("%4s", $pCad50) . '%'; +$pCad55 = sprintf("%4s", $pCad55) . '%'; +$pCad60 = sprintf("%4s", $pCad60) . '%'; +$pCad90 = sprintf("%4s", $pCad90) . '%'; +$pCad99 = sprintf("%4s", $pCad99) . '%'; +$ApCad_0 = sprintf("%4s", $ApCad_0) . '%'; +$ApCad_5 = sprintf("%4s", $ApCad_5) . '%'; +$ApCad10 = sprintf("%4s", $ApCad10) . '%'; +$ApCad15 = sprintf("%4s", $ApCad15) . '%'; +$ApCad20 = sprintf("%4s", $ApCad20) . '%'; +$ApCad25 = sprintf("%4s", $ApCad25) . '%'; +$ApCad30 = sprintf("%4s", $ApCad30) . '%'; +$ApCad35 = sprintf("%4s", $ApCad35) . '%'; +$ApCad40 = sprintf("%4s", $ApCad40) . '%'; +$ApCad45 = sprintf("%4s", $ApCad45) . '%'; +$ApCad50 = sprintf("%4s", $ApCad50) . '%'; +$ApCad55 = sprintf("%4s", $ApCad55) . '%'; +$ApCad60 = sprintf("%4s", $ApCad60) . '%'; +$ApCad90 = sprintf("%4s", $ApCad90) . '%'; +$ApCad99 = sprintf("%4s", $ApCad99) . '%'; + +$BDansweredCALLS = sprintf("%10s", $BDansweredCALLS); + +### Format and output +$answeredTOTALs = "$ad_0 $ad_5 $ad10 $ad15 $ad20 $ad25 $ad30 $ad35 $ad40 $ad45 $ad50 $ad55 $ad60 $ad90 $ad99 | $BDansweredCALLS |"; +$answeredCUMULATIVE = "$Cad_0 $Cad_5 $Cad10 $Cad15 $Cad20 $Cad25 $Cad30 $Cad35 $Cad40 $Cad45 $Cad50 $Cad55 $Cad60 $Cad90 $Cad99 | $BDansweredCALLS |"; +$answeredINT_PERCENT = "$pad_0 $pad_5 $pad10 $pad15 $pad20 $pad25 $pad30 $pad35 $pad40 $pad45 $pad50 $pad55 $pad60 $pad90 $pad99 | |"; +$answeredCUM_PERCENT = "$pCad_0 $pCad_5 $pCad10 $pCad15 $pCad20 $pCad25 $pCad30 $pCad35 $pCad40 $pCad45 $pCad50 $pCad55 $pCad60 $pCad90 $pCad99 | |"; +$answeredCUM_ANS_PERCENT = "$ApCad_0 $ApCad_5 $ApCad10 $ApCad15 $ApCad20 $ApCad25 $ApCad30 $ApCad35 $ApCad40 $ApCad45 $ApCad50 $ApCad55 $ApCad60 $ApCad90 $ApCad99 | |"; +$ASCII_text.=_QXZ("INTERVAL",10)."| $answeredTOTALs\n"; +$ASCII_text.=_QXZ("INT",8)." %| $answeredINT_PERCENT\n"; +$ASCII_text.=_QXZ("CUMULATIVE",10)."| $answeredCUMULATIVE\n"; +$ASCII_text.=_QXZ("CUM",8)." %| $answeredCUM_PERCENT\n"; +$ASCII_text.=_QXZ("CUM ANS",8)." %| $answeredCUM_ANS_PERCENT\n"; +$ASCII_text.="----------+-------------------------------------------------------------------------------------------+------------+\n"; + + +$CSV_text2.="\""._QXZ("INTERVAL")."\",\"$ad_0\",\"$ad_5\",\"$ad10\",\"$ad15\",\"$ad20\",\"$ad25\",\"$ad30\",\"$ad35\",\"$ad40\",\"$ad45\",\"$ad50\",\"$ad55\",\"$ad60\",\"$ad90\",\"$ad99\",\"$BDansweredCALLS\"\n"; +$CSV_text2.="\""._QXZ("INT")." %\",\"$pad_0\",\"$pad_5\",\"$pad10\",\"$pad15\",\"$pad20\",\"$pad25\",\"$pad30\",\"$pad35\",\"$pad40\",\"$pad45\",\"$pad50\",\"$pad55\",\"$pad60\",\"$pad90\",\"$pad99\"\n"; +$CSV_text2.="\""._QXZ("CUMULATIVE")."\",\"$Cad_0\",\"$Cad_5\",\"$Cad10\",\"$Cad15\",\"$Cad20\",\"$Cad25\",\"$Cad30\",\"$Cad35\",\"$Cad40\",\"$Cad45\",\"$Cad50\",\"$Cad55\",\"$Cad60\",\"$Cad90\",\"$Cad99\",\"$BDansweredCALLS\"\n"; +$CSV_text2.="\""._QXZ("CUM")." %\",\"$pCad_0\",\"$pCad_5\",\"$pCad10\",\"$pCad15\",\"$pCad20\",\"$pCad25\",\"$pCad30\",\"$pCad35\",\"$pCad40\",\"$pCad45\",\"$pCad50\",\"$pCad55\",\"$pCad60\",\"$pCad90\",\"$pCad99\"\n"; +$CSV_text2.="\""._QXZ("CUM ANS")." %\",\"$ApCad_0\",\"$ApCad_5\",\"$ApCad10\",\"$ApCad15\",\"$ApCad20\",\"$ApCad25\",\"$ApCad30\",\"$ApCad35\",\"$ApCad40\",\"$ApCad45\",\"$ApCad50\",\"$ApCad55\",\"$ApCad60\",\"$ApCad90\",\"$ApCad99\"\n"; + +if ($report_display_type=="HTML") { + $stmt="select count(*),round(queue_seconds) as rd_sec from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') group by rd_sec order by rd_sec asc;"; + $ms_stmt="select queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') order by queue_seconds desc limit 1;"; + $mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') group by queue_seconds order by ct desc limit 1;"; + if ($DID=='Y') + { + $stmt="select count(*),round(queue_seconds) as rd_sec from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') group by rd_sec;"; + $ms_stmt="select queue_seconds from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') order by queue_seconds desc limit 1;"; + $mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and status NOT IN('DROP','XDROP','HXFER','QVMAIL','HOLDTO','LIVE','QUEUE','TIMEOT','AFTHRS','NANQUE','INBND','MAXCAL') group by queue_seconds order by ct desc limit 1;"; + } + if ($DB) {$GRAPH_text.=$stmt."\n";} + $ms_rslt=mysql_to_mysqli($ms_stmt, $link); + $ms_row=mysqli_fetch_row($ms_rslt); + $max_seconds=$ms_row[0]; + if ($max_seconds>90) {$max_seconds=91;} + for ($i=0; $i<=$max_seconds; $i++) { + $sec_ary[$i]=0; + } + + $mc_rslt=mysql_to_mysqli($mc_stmt, $link); + $mc_row=mysqli_fetch_row($mc_rslt); + $max_calls=$ms_row[0]; + if ($max_calls<=10) { + while ($maxcalls%5!=0) { + $maxcalls++; + } + } else if ($max_calls<=100) { + while ($maxcalls%10!=0) { + $maxcalls++; + } + } else if ($max_calls<=1000) { + while ($maxcalls%50!=0) { + $maxcalls++; + } + } else { + while ($maxcalls%500!=0) { + $maxcalls++; + } + } + $rslt=mysql_to_mysqli($stmt, $link); + + $GRAPH_text="
\n"; + $GRAPH_text.=""; + $MAIN.=$GRAPH_text; + } +else + { + $MAIN.=$ASCII_text; + } + +############################## +######### CALL HANGUP REASON STATS + +$TOTALcalls = 0; + +$ASCII_text="\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"; + +$CSV_text3.="\n\"$rpt_type_verbiage "._QXZ("HANGUP REASON STATS")."\"\n"; +$CSV_text3.="\""._QXZ("HANGUP REASON")."\",\"$rpt_type_verbiages\"\n"; + +$stmt="select count(*),term_reason from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by term_reason order by term_reason;"; +if ($DID=='Y') + { + $stmt="select count(*),term_reason from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by term_reason order by term_reason;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$ASCII_text.="$stmt\n";} +$reasons_to_print = mysqli_num_rows($rslt); +$i=0; +while ($i < $reasons_to_print) + { + $row=mysqli_fetch_row($rslt); + + $TOTALcalls = ($TOTALcalls + $row[0]); + + $REASONcount = sprintf("%10s", $row[0]); + while(strlen($REASONcount)>10) {$REASONcount = substr("$REASONcount", 0, -1);} + $reason = sprintf("%-20s", $row[1]);while(strlen($reason)>20) {$reason = substr("$reason", 0, -1);} +# if (preg_match('/NONE/',$reason)) {$reason = 'NO ANSWER ';} + + $ASCII_text.="| $reason | $REASONcount |\n"; + $CSV_text3.="\"$reason\",\"$REASONcount\"\n"; + + $i++; + } + +$TOTALcalls = sprintf("%10s", $TOTALcalls); + +$ASCII_text.="+----------------------+------------+\n"; +$ASCII_text.="| "._QXZ("TOTAL:",20). " | $TOTALcalls |\n"; +$ASCII_text.="+----------------------+------------+\n"; + +$CSV_text3.="\""._QXZ("TOTAL").":\",\"$TOTALcalls\"\n"; + +if ($report_display_type=="HTML") + { + $ct_ary=array(); + $rslt=mysql_to_mysqli($stmt, $link); + $high_ct=0; $i=0; + while ($row=mysqli_fetch_row($rslt)) { + if ($row[0]>$high_ct) {$high_ct=$row[0];} + $ct_ary[$i][0]=$row[0]; + $ct_ary[$i][1]=$row[1]; + $i++; + } + $GRAPH_text="
\n"; + $GRAPH_text.="\n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + for ($i=0; $i".$ct_ary[$i][1]."\n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + } + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.="
$rpt_type_verbiage "._QXZ("HANGUP REASON STATS")."
"._QXZ("REASON")." $rpt_type_verbiages
\"\"".$ct_ary[$i][0]."
TOTAL ".$rpt_type_verbiage.":".trim($TOTALcalls)."
\n"; + $GRAPH_text.="
\n";
+	$MAIN.=$GRAPH_text;
+	}
+else
+	{
+	$MAIN.=$ASCII_text;
+	}
+
+##############################
+#########  CALL STATUS STATS
+
+$TOTALcalls = 0;
+
+$ASCII_text="\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";
+
+$GRAPH="

"; +$GRAPH.=""; +$GRAPH.="
"._QXZ("CALLS").""._QXZ("TOTAL TIME").""._QXZ("AVG TIME").""._QXZ("CALLS/HR")."

 


"; + +$CSV_text4.="\n\"$rpt_type_verbiage "._QXZ("STATUS STATS")."\"\n"; +$CSV_text4.="\""._QXZ("STATUS")."\",\""._QXZ("DESCRIPTION")."\",\""._QXZ("CATEGORY")."\",\"$rpt_type_verbiages\",\""._QXZ("TOTAL TIME")."\",\""._QXZ("AVG TIME")."\",\"$rpt_type_verbiages/HOUR\"\n"; + + + +## get counts and time totals for all statuses in this campaign +$stmt="select count(*),status,sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by status;"; +if ($DID=='Y') + { + $stmt="select count(*),status,sum(length_in_sec) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by status;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$ASCII_text.="$stmt\n";} +$statuses_to_print = mysqli_num_rows($rslt); +$i=0; + +######## GRAPHING ######### +$max_calls=1; +$max_total_time=1; +$max_avg_time=1; +$max_callshr=1; +$graph_header=""; +$CALLS_graph=$graph_header.""; +$TOTALTIME_graph=$graph_header.""; +$AVGTIME_graph=$graph_header.""; +$CALLSHOUR_graph=$graph_header.""; +########################### + +while ($i < $statuses_to_print) + { + $row=mysqli_fetch_row($rslt); + + $STATUScount = $row[0]; + $RAWstatus = $row[1]; + $r=0; $foundstat=0; + while ($r < $statcats_to_print) + { + if ( ($statcat_list[$RAWstatus] == "$vsc_id[$r]") and ($foundstat < 1) ) + { + $vsc_count[$r] = ($vsc_count[$r] + $STATUScount); + } + $r++; + } + + $TOTALcalls = ($TOTALcalls + $row[0]); + $STATUSrate = (MathZDC($STATUScount, MathZDC($TOTALsec, 3600)) ); + $STATUSrate = sprintf("%.2f", $STATUSrate); + + $STATUShours = sec_convert($row[2],'H'); + $STATUSavg_sec = MathZDC($row[2], $STATUScount); + $STATUSavg = sec_convert($STATUSavg_sec,'H'); + + if ($row[0]>$max_calls) {$max_calls=$row[0];} + if ($row[2]>$max_total_time) {$max_total_time=$row[2];} + if ($STATUSavg_sec>$max_avg_time) {$max_avg_time=$STATUSavg_sec;} + if ($STATUSrate>$max_callshr) {$max_callshr=$STATUSrate;} + $graph_stats[$i][1]=$row[0]; + $graph_stats[$i][2]=$row[2]; + $graph_stats[$i][3]=$STATUSavg_sec; + $graph_stats[$i][4]=$STATUSrate; + + + $STATUScount = sprintf("%10s", $row[0]);while(strlen($STATUScount)>10) {$STATUScount = substr("$STATUScount", 0, -1);} + $status = sprintf("%-6s", $row[1]);while(strlen($status)>6) {$status = substr("$status", 0, -1);} + $STATUShours = sprintf("%10s", $STATUShours);while(strlen($STATUShours)>10) {$STATUShours = substr("$STATUShours", 0, -1);} + $STATUSavg = sprintf("%8s", $STATUSavg);while(strlen($STATUSavg)>8) {$STATUSavg = substr("$STATUSavg", 0, -1);} + $STATUSrate = sprintf("%8s", $STATUSrate);while(strlen($STATUSrate)>8) {$STATUSrate = substr("$STATUSrate", 0, -1);} + + if ($non_latin < 1) + { + $status_name = sprintf("%-20s", $statname_list[$RAWstatus]); + while(strlen($status_name)>20) {$status_name = substr("$status_name", 0, -1);} + $statcat = sprintf("%-20s", $statcat_list[$RAWstatus]); + while(strlen($statcat)>20) {$statcat = substr("$statcat", 0, -1);} + } + else + { + $status_name = sprintf("%-60s", $statname_list[$RAWstatus]); + while(mb_strlen($status_name,'utf-8')>20) {$status_name = mb_substr("$status_name", 0, -1,'utf-8');} + $statcat = sprintf("%-60s", $statcat_list[$RAWstatus]); + while(mb_strlen($statcat,'utf-8')>20) {$statcat = mb_substr("$statcat", 0, -1,'utf-8');} + } + $graph_stats[$i][0]="$status - $status_name - $statcat"; + + + $ASCII_text.="| $status | $status_name | $statcat | $STATUScount | $STATUShours | $STATUSavg | $STATUSrate |\n"; + $CSV_text4.="\"$status\",\"$status_name\",\"$statcat\",\"$STATUScount\",\"$STATUShours\",\"$STATUSavg\",\"$STATUSrate\"\n"; + + $i++; + } + +if ($TOTALcalls < 1) + { + $TOTALhours = '0:00:00'; + $TOTALavg = '0:00:00'; + $TOTALrate = '0.00'; + } +else + { + $TOTALrate = MathZDC($TOTALcalls, MathZDC($TOTALsec, 3600) ); + $TOTALrate = sprintf("%.2f", $TOTALrate); + + $TOTALhours = sec_convert($TOTALsec,'H'); + $TOTALavg_sec = MathZDC($TOTALsec, $TOTALcalls); + $TOTALavg = sec_convert($TOTALavg_sec,'H'); + } +$TOTALcalls = sprintf("%10s", $TOTALcalls); +$TOTALhours = sprintf("%10s", $TOTALhours);while(strlen($TOTALhours)>10) {$TOTALhours = substr("$TOTALhours", 0, -1);} +$TOTALavg = sprintf("%8s", $TOTALavg);while(strlen($TOTALavg)>8) {$TOTALavg = substr("$TOTALavg", 0, -1);} +$TOTALrate = sprintf("%9s", $TOTALrate);while(strlen($TOTALrate)>9) {$TOTALrate = substr("$TOTALrate", 0, -1);} + +$ASCII_text.="+--------+----------------------+----------------------+------------+------------+----------+-----------+\n"; +$ASCII_text.="| "._QXZ("TOTAL:",52)." | $TOTALcalls | $TOTALhours | $TOTALavg | $TOTALrate |\n"; +$ASCII_text.="+------------------------------------------------------+------------+------------+----------+-----------+\n"; + +####### + $JS_onload="onload = function() {\n"; + $JS_onload.="\tDrawCSSGraph('CALLS', '1');\n"; + $JS_onload.="\tDrawGraph('CALLS', '1');\n"; + + for ($d=0; $d"; + $TOTALTIME_graph.=" "; + $AVGTIME_graph.=" "; + $CALLSHOUR_graph.=" "; + } + $CALLS_graph.="
"._QXZ("CALL STATUS STATS")."
"._QXZ("STATUS").""._QXZ("CALLS")."
"._QXZ("TOTAL TIME")."
"._QXZ("AVG TIME")."
"._QXZ("CALLS/HR")."
".$graph_stats[$d][1]."
".$graph_stats[$d][0]."".sec_convert($graph_stats[$d][2], 'H')."
".$graph_stats[$d][0]."".sec_convert($graph_stats[$d][3], 'H')."
".$graph_stats[$d][0]."".$graph_stats[$d][4]."
"._QXZ("TOTAL").":".trim($TOTALcalls)."
"; + $TOTALTIME_graph.="
"._QXZ("TOTAL").":".trim($TOTALhours)."
"; + $AVGTIME_graph.=""._QXZ("TOTAL").":".trim($TOTALavg).""; + $CALLSHOUR_graph.=""._QXZ("TOTAL").":".trim($TOTALrate).""; + $JS_text.="\n"; +######## + + +$CSV_text4.="\""._QXZ("TOTAL").":\",\"\",\"\",\"$TOTALcalls\",\"$TOTALhours\",\"$TOTALavg\",\"$TOTALrate\"\n"; +if ($report_display_type=="HTML") + { + $MAIN.=$GRAPH; + } +else + { + $MAIN.=$ASCII_text; + } + + +############################## +######### STATUS CATEGORY STATS + +$ASCII_text="\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"; + +$CSV_text5.="\n\""._QXZ("CUSTOM STATUS CATEGORY STATS")."\"\n"; +$CSV_text5.="\""._QXZ("CATEGORY")."\",\"$rpt_type_verbiages\",\""._QXZ("DESCRIPTION")."\"\n"; + +$TOTCATcalls=0; +$r=0; +while ($r < $statcats_to_print) + { + if ($vsc_id[$r] != 'UNDEFINED') + { + $TOTCATcalls = ($TOTCATcalls + $vsc_count[$r]); + $category = sprintf("%-20s", $vsc_id[$r]); while(strlen($category)>20) {$category = substr("$category", 0, -1);} + $CATcount = sprintf("%10s", $vsc_count[$r]); while(strlen($CATcount)>10) {$CATcount = substr("$CATcount", 0, -1);} + $CATname = sprintf("%-30s", $vsc_name[$r]); while(strlen($CATname)>30) {$CATname = substr("$CATname", 0, -1);} + + $ASCII_text.="| $category | $CATcount | $CATname |\n"; + $CSV_text5.="\"$category\",\"$CATcount\",\"$CATname\"\n"; + } + + $r++; + } + +$TOTCATcalls = sprintf("%10s", $TOTCATcalls); while(strlen($TOTCATcalls)>10) {$TOTCATcalls = substr("$TOTCATcalls", 0, -1);} + +$ASCII_text.="+----------------------+------------+--------------------------------+\n"; +$ASCII_text.="| "._QXZ("TOTAL",20)." | $TOTCATcalls |\n"; +$ASCII_text.="+----------------------+------------+\n"; + +$CSV_text5.="\""._QXZ("TOTAL")."\",\"$TOTCATcalls\"\n"; + +if ($report_display_type=="HTML") + { + $ct_ary=array(); + $r=0; $i=0; + $high_ct=0; + while ($r < $statcats_to_print) + { + if ($vsc_id[$r] != 'UNDEFINED') + { + if ($vsc_count[$r]>$high_ct) {$high_ct=$vsc_count[$r];} + $ct_ary[$i][0]=$vsc_count[$r]; + $ct_ary[$i][1]=$vsc_id[$r]."
".$vsc_name[$r]; + $i++; + } + $r++; + } + + $GRAPH_text="\n"; + $GRAPH_text.="\n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + for ($i=0; $i".$ct_ary[$i][1]."\n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + } + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.=" \n"; + $GRAPH_text.="
"._QXZ("CUSTOM STATUS CATEGORY STATS")."
"._QXZ("CATEGORY")." "._QXZ("CALLS")."
\"\"".$ct_ary[$i][0]."
"._QXZ("TOTAL").":".trim($TOTCATcalls)."
\n"; + $GRAPH_text.="
\n";
+	$MAIN.=$GRAPH_text;
+	}
+else 
+	{
+	$MAIN.=$ASCII_text;
+	}
+
+
+##############################
+#########  CALL INITIAL QUEUE POSITION BREAKDOWN
+
+$TOTALcalls = 0;
+
+$ASCII_text="\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";
+
+$CSV_text6.="\n\"$rpt_type_verbiage "._QXZ("INITIAL QUEUE POSITION BREAKDOWN")."\"\n";
+$CSV_text6.="\"\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"15\",\"20\",\"25\",\"+25\",\""._QXZ("TOTAL")."\"\n";
+
+
+$stmt="select count(*),queue_position from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and  campaign_id IN($group_SQL) group by queue_position;";
+if ($DID=='Y')
+	{
+	$stmt="select count(*),queue_position from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by queue_position;";
+	}
+$rslt=mysql_to_mysqli($stmt, $link);
+if ($DB) {$ASCII_text.="$stmt\n";}
+$positions_to_print = mysqli_num_rows($rslt);
+$i=0;
+while ($i < $positions_to_print)
+	{
+	$row=mysqli_fetch_row($rslt);
+
+	$TOTALcalls = ($TOTALcalls + $row[0]);
+
+	if ( ($row[1] > 0) and ($row[1] <= 1) ) {$qp_1 = ($qp_1 + $row[0]);}
+	if ( ($row[1] > 1) and ($row[1] <= 2) ) {$qp_2 = ($qp_2 + $row[0]);}
+	if ( ($row[1] > 2) and ($row[1] <= 3) ) {$qp_3 = ($qp_3 + $row[0]);}
+	if ( ($row[1] > 3) and ($row[1] <= 4) ) {$qp_4 = ($qp_4 + $row[0]);}
+	if ( ($row[1] > 4) and ($row[1] <= 5) ) {$qp_5 = ($qp_5 + $row[0]);}
+	if ( ($row[1] > 5) and ($row[1] <= 6) ) {$qp_6 = ($qp_6 + $row[0]);}
+	if ( ($row[1] > 6) and ($row[1] <= 7) ) {$qp_7 = ($qp_7 + $row[0]);}
+	if ( ($row[1] > 7) and ($row[1] <= 8) ) {$qp_8 = ($qp_8 + $row[0]);}
+	if ( ($row[1] > 8) and ($row[1] <= 9) ) {$qp_9 = ($qp_9 + $row[0]);}
+	if ( ($row[1] > 9) and ($row[1] <= 10) ) {$qp10 = ($qp10 + $row[0]);}
+	if ( ($row[1] > 10) and ($row[1] <= 15) ) {$qp15 = ($qp15 + $row[0]);}
+	if ( ($row[1] > 15) and ($row[1] <= 20) ) {$qp20 = ($qp20 + $row[0]);}
+	if ( ($row[1] > 20) and ($row[1] <= 25) ) {$qp25 = ($qp25 + $row[0]);}
+	if ($row[1] > 25) {$qp99 = ($qp99 + $row[0]);}
+	$i++;
+	}
+
+$qp_1 =	sprintf("%5s", $qp_1);
+$qp_2 =	sprintf("%5s", $qp_2);
+$qp_3=	sprintf("%5s", $qp_3);
+$qp_4 =	sprintf("%5s", $qp_4);
+$qp_5 =	sprintf("%5s", $qp_5);
+$qp_6 =	sprintf("%5s", $qp_6);
+$qp_7 =	sprintf("%5s", $qp_7);
+$qp_8 =	sprintf("%5s", $qp_8);
+$qp_9 =	sprintf("%5s", $qp_9);
+$qp10 =	sprintf("%5s", $qp10);
+$qp15 =	sprintf("%5s", $qp15);
+$qp20 =	sprintf("%5s", $qp20);
+$qp25 =	sprintf("%5s", $qp25);
+$qp99 =	sprintf("%5s", $qp99);
+
+$TOTALcalls =		sprintf("%10s", $TOTALcalls);
+
+$ASCII_text.="| $qp_1 $qp_2 $qp_3 $qp_4 $qp_5 $qp_6 $qp_7 $qp_8 $qp_9 $qp10 $qp15 $qp20 $qp25 $qp99 | $TOTALcalls |\n";
+$ASCII_text.="+-------------------------------------------------------------------------------------+------------+\n";
+
+$CSV_text6.="\"\",\"$qp_1\",\"$qp_2\",\"$qp_3\",\"$qp_4\",\"$qp_5\",\"$qp_6\",\"$qp_7\",\"$qp_8\",\"$qp_9\",\"$qp10\",\"$qp15\",\"$qp20\",\"$qp25\",\"$qp99\",\"$TOTALcalls\"\n";
+
+if ($report_display_type=="HTML") 
+	{
+	$stmt="select count(*),queue_position as qp from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by qp order by qp asc;";
+	$ms_stmt="select queue_position from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) order by queue_position desc limit 1;"; 
+	$mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) group by queue_position order by ct desc limit 1;";
+	if ($DID=='Y')
+		{
+		$stmt="select count(*),queue_position as qp from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by qp order by qp asc;";
+		$ms_stmt="select queue_position from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) order by queue_position desc limit 1;"; 
+		$mc_stmt="select count(*) as ct from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) group by queue_position order by ct desc limit 1;";
+		}
+	if ($DB) {$GRAPH_text.=$stmt."\n";}
+	$ms_rslt=mysql_to_mysqli($ms_stmt, $link);
+	$ms_row=mysqli_fetch_row($ms_rslt);
+	$max_position=$ms_row[0];
+	if ($max_position>25) {$max_position=26;}
+	for ($i=1; $i<=$max_position; $i++) {
+		$sec_ary[$i]=0;
+	}
+
+	$mc_rslt=mysql_to_mysqli($mc_stmt, $link);
+	$mc_row=mysqli_fetch_row($mc_rslt);
+	$max_calls=$ms_row[0];
+	if ($max_calls<=10) {
+		while ($maxcalls%5!=0) {
+			$maxcalls++;
+		}
+	} else if ($max_calls<=100) {
+		while ($maxcalls%10!=0) {
+			$maxcalls++;
+		}
+	} else if ($max_calls<=1000) {
+		while ($maxcalls%50!=0) {
+			$maxcalls++;
+		}
+	} else {
+		while ($maxcalls%500!=0) {
+			$maxcalls++;
+		}
+	}
+	$rslt=mysql_to_mysqli($stmt, $link);
+	
+	$GRAPH_text="
\n"; + $GRAPH_text.=""; + $MAIN.=$GRAPH_text; + } +else + { + $MAIN.=$ASCII_text; + } + +############################## +######### USER STATS + +$TOTagents=0; +$TOTcalls=0; +$TOTtime=0; +$TOTavg=0; + +$ASCII_text="\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"; + +$CSV_text7.="\n\""._QXZ("AGENT STATS")."\"\n"; +$CSV_text7.="\""._QXZ("AGENT")."\",\"$rpt_type_verbiages\",\""._QXZ("TIME H:M:S")."\",\""._QXZ("AVERAGE")."\"\n"; + + +$max_calls=1; +$max_timehms=1; +$max_average=1; +$graph_stats=array(); +$GRAPH="

"; +$GRAPH.=""; +$GRAPH.="
"._QXZ("CALLS").""._QXZ("TIME H:M:S").""._QXZ("AVERAGE")."

 


"; +$graph_header=""; +$CALLS_graph=$graph_header.""; +$TIMEHMS_graph=$graph_header.""; +$AVERAGE_graph=$graph_header.""; + +$stmt="select ".$vicidial_closer_log_table.".user,full_name,count(*),sum(length_in_sec),avg(length_in_sec) from ".$vicidial_closer_log_table.",vicidial_users where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL) and ".$vicidial_closer_log_table.".user is not null and length_in_sec is not null and ".$vicidial_closer_log_table.".user=vicidial_users.user group by ".$vicidial_closer_log_table.".user;"; +if ($DID=='Y') + { + $stmt="select ".$vicidial_closer_log_table.".user,full_name,count(*),sum(length_in_sec),avg(length_in_sec) from ".$vicidial_closer_log_table.",vicidial_users where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL) and ".$vicidial_closer_log_table.".user is not null and length_in_sec is not null and ".$vicidial_closer_log_table.".user=vicidial_users.user group by ".$vicidial_closer_log_table.".user;"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$ASCII_text.="$stmt\n";} +$users_to_print = mysqli_num_rows($rslt); +$i=0; +while ($i < $users_to_print) + { + $row=mysqli_fetch_row($rslt); + + $TOTcalls = ($TOTcalls + $row[2]); + $TOTtime = ($TOTtime + $row[3]); + + $user = sprintf("%-6s", $row[0]); + if ($non_latin < 1) + { + $full_name = sprintf("%-15s", $row[1]); while(strlen($full_name)>15) {$full_name = substr("$full_name", 0, -1);} + } + else + { + $full_name = sprintf("%-45s", $row[1]); while(mb_strlen($full_name,'utf-8')>15) {$full_name = mb_substr("$full_name", 0, -1,'utf-8');} + } + $USERcalls = sprintf("%10s", $row[2]); + $USERtotTALK = $row[3]; + $USERavgTALK = $row[4]; + + if ($row[2]>$max_calls) {$max_calls=$row[2];} + if ($row[3]>$max_timehms) {$max_timehms=$row[3];} + if ($row[4]>$max_average) {$max_average=$row[4];} + $graph_stats[$i][0]="$row[0] - $row[1]"; + $graph_stats[$i][1]=$row[2]; + $graph_stats[$i][2]=$row[3]; + $graph_stats[$i][3]=$row[4]; + + $USERtotTALK_MS = sec_convert($USERtotTALK,'H'); + $USERavgTALK_MS = sec_convert($USERavgTALK,'H'); + + $USERtotTALK_MS = sprintf("%9s", $USERtotTALK_MS); + $USERavgTALK_MS = sprintf("%6s", $USERavgTALK_MS); + + $ASCII_text.="| $user - $full_name | $USERcalls | $USERtotTALK_MS | $USERavgTALK_MS |\n"; + $CSV_text7.="\"$user - $full_name\",\"$USERcalls\",\"$USERtotTALK_MS\",\"$USERavgTALK_MS\"\n"; + + $i++; + } + +$TOTavg = MathZDC($TOTtime, $TOTcalls); +$TOTavg_MS = sec_convert($TOTavg,'H'); +$TOTavg = sprintf("%6s", $TOTavg_MS); + +$TOTtime_MS = sec_convert($TOTtime,'H'); +$TOTtime = sprintf("%10s", $TOTtime_MS); + +$TOTagents = sprintf("%10s", $i); +$TOTcalls = sprintf("%10s", $TOTcalls); +$TOTtime = sprintf("%8s", $TOTtime); +$TOTavg = sprintf("%6s", $TOTavg); + +$ASCII_text.="+--------------------------+------------+------------+--------+\n"; +$ASCII_text.="| "._QXZ("TOTAL Agents:",13)." $TOTagents | $TOTcalls | $TOTtime | $TOTavg |\n"; +$ASCII_text.="+--------------------------+------------+------------+--------+\n"; + +for ($d=0; $d"; + $TIMEHMS_graph.=" "; + $AVERAGE_graph.=" "; +} +$CALLS_graph.="
"._QXZ("AGENT STATS")."
"._QXZ("AGENT")."$rpt_type_verbiages
"._QXZ("TIME H:M:S")."
"._QXZ("AVERAGE")."
".$graph_stats[$d][1]."
".$graph_stats[$d][0]."".sec_convert($graph_stats[$d][2], 'H')."
".$graph_stats[$d][0]."".sec_convert($graph_stats[$d][3], 'H')."
"._QXZ("TOTAL").":".trim($TOTALcalls)."
"; +$TIMEHMS_graph.=""._QXZ("TOTAL").":".trim($TOTtime).""; +$AVERAGE_graph.=""._QXZ("TOTAL").":".trim($TOTavg).""; +$JS_text.="\n"; +$GRAPH_text=$GRAPH; + +if ($report_display_type=="HTML") + { + $MAIN.=$GRAPH_text; + } +else + { + $MAIN.=$ASCII_text; + } + +$CSV_text7.="\""._QXZ("TOTAL Agents").": $TOTagents\",\"$TOTcalls\",\"$TOTtime\",\"$TOTavg\"\n"; + +############################## +######### TIME STATS + +$MAIN.="\n"; +$MAIN.="---------- "._QXZ("TIME STATS",16)."
"._QXZ("DOWNLOAD")."\n"; + +$CSV_text9.="\""._QXZ("TIME STATS")."\"\n\n"; + +$MAIN.="\n"; + + +############################## +######### 15-minute increment breakdowns of total calls and drops, then answered table +$BDansweredCALLS = 0; +$stmt="SELECT status,queue_seconds,UNIX_TIMESTAMP(call_date),call_date from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and campaign_id IN($group_SQL);"; +if ($DID=='Y') + { + $stmt="SELECT status,queue_seconds,UNIX_TIMESTAMP(call_date),call_date from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' $calldate_call_time_clause and uniqueid IN($unid_SQL);"; + } +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {$MAIN.="$stmt\n";} +$calls_to_print = mysqli_num_rows($rslt); +$j=0; +while ($j < $calls_to_print) + { + $row=mysqli_fetch_row($rslt); + $Cstatus[$j] = $row[0]; + $Cqueue[$j] = $row[1]; + $Cepoch[$j] = $row[2]; + $Cdate[$j] = $row[3]; + $Crem[$j] = ( ($Cepoch[$j] + $epoch_offset) % 86400); # find the remainder(Modulus) of seconds since start of the day +# $MAIN.="|$Cepoch[$j]|$Crem[$j]|$Cdate[$j]|\n"; + $j++; + } + +### Loop through all call records and gather stats for total call/drop report and answered report +$j=0; +while ($j < $calls_to_print) + { + $i=0; $sec=0; $sec_end=900; + while ($i <= 96) + { + if ( ($Crem[$j] >= $sec) and ($Crem[$j] < $sec_end) ) + { + $Ftotal[$i]++; + if (preg_match('/DROP/',$Cstatus[$j])) {$Fdrop[$i]++;} + if (!preg_match('/DROP|XDROP|HXFER|QVMAIL|HOLDTO|LIVE|QUEUE|TIMEOT|AFTHRS|NANQUE|INBND|MAXCAL/',$Cstatus[$j])) + { + $BDansweredCALLS++; + $Fanswer[$i]++; + + if ($Cqueue[$j] == 0) {$adB_0[$i]++;} + if ( ($Cqueue[$j] > 0) and ($Cqueue[$j] <= 5) ) {$adB_5[$i]++;} + if ( ($Cqueue[$j] > 5) and ($Cqueue[$j] <= 10) ) {$adB10[$i]++;} + if ( ($Cqueue[$j] > 10) and ($Cqueue[$j] <= 15) ) {$adB15[$i]++;} + if ( ($Cqueue[$j] > 15) and ($Cqueue[$j] <= 20) ) {$adB20[$i]++;} + if ( ($Cqueue[$j] > 20) and ($Cqueue[$j] <= 25) ) {$adB25[$i]++;} + if ( ($Cqueue[$j] > 25) and ($Cqueue[$j] <= 30) ) {$adB30[$i]++;} + if ( ($Cqueue[$j] > 30) and ($Cqueue[$j] <= 35) ) {$adB35[$i]++;} + if ( ($Cqueue[$j] > 35) and ($Cqueue[$j] <= 40) ) {$adB40[$i]++;} + if ( ($Cqueue[$j] > 40) and ($Cqueue[$j] <= 45) ) {$adB45[$i]++;} + if ( ($Cqueue[$j] > 45) and ($Cqueue[$j] <= 50) ) {$adB50[$i]++;} + if ( ($Cqueue[$j] > 50) and ($Cqueue[$j] <= 55) ) {$adB55[$i]++;} + if ( ($Cqueue[$j] > 55) and ($Cqueue[$j] <= 60) ) {$adB60[$i]++;} + if ( ($Cqueue[$j] > 60) and ($Cqueue[$j] <= 90) ) {$adB90[$i]++;} + if ($Cqueue[$j] > 90) {$adB99[$i]++;} + } + + } + $sec = ($sec + 900); + $sec_end = ($sec_end + 900); + $i++; + } + $j++; + } ##### END going through all records + + + + + + + +##### 15-minute total and drops graph +$hi_hour_count=0; +$last_full_record=0; +$i=0; +$h=0; +while ($i <= 96) + { + $hour_count[$i] = $Ftotal[$i]; + if ($hour_count[$i] > $hi_hour_count) {$hi_hour_count = $hour_count[$i];} + if ($hour_count[$i] > 0) {$last_full_record = $i;} + $drop_count[$i] = $Fdrop[$i]; + $i++; + } + +$hour_multiplier = MathZDC(100, $hi_hour_count); + +$ASCII_text.="\n"; +$ASCII_text.=_QXZ("GRAPH IN 15 MINUTE INCREMENTS OF TOTAL")." $rpt_type_verbiages "._QXZ("TAKEN INTO THIS IN-GROUP")."\n"; + + +$k=1; +$Mk=0; +$call_scale = '0'; +while ($k <= 102) + { + if ($Mk >= 5) + { + $Mk=0; + $scale_num=MathZDC($k, $hour_multiplier); + $scale_num = round($scale_num, 0); + $LENscale_num = (strlen($scale_num)); + $k = ($k + $LENscale_num); + $call_scale .= "$scale_num"; + } + else + { + $call_scale .= " "; + $k++; $Mk++; + } + } + + +$ASCII_text.="+------+-------------------------------------------------------------------------------------------------------+-------+-------+\n"; +#$ASCII_text.="| HOUR | GRAPH IN 15 MINUTE INCREMENTS OF TOTAL INCOMING CALLS FOR THIS GROUP | DROPS | TOTAL |\n"; +$ASCII_text.="| "._QXZ("HOUR",4)." |$call_scale| "._QXZ("DROPS",5)." | "._QXZ("TOTAL",5)." |\n"; +$ASCII_text.="+------+-------------------------------------------------------------------------------------------------------+-------+-------+\n"; + +$CSV_text9.="\""._QXZ("HOUR")."\",\""._QXZ("DROPS")."\",\""._QXZ("TOTAL")."\"\n"; + +$max_calls=1; +$graph_stats=array(); +$GRAPH_text=""; + + +$ZZ = '00'; +$i=0; +$h=4; +$hour= -1; +$no_lines_yet=1; + +while ($i <= 96) + { + $char_counter=0; + $time = ' '; + if ($h >= 4) + { + $hour++; + $h=0; + if ($hour < 10) {$hour = "0$hour";} + $time = "+$hour$ZZ+"; + #$CSV_text9.="$hour$ZZ,"; + } + if ($h == 1) {$time = " 15 ";} + if ($h == 2) {$time = " 30 ";} + if ($h == 3) {$time = " 45 ";} + $Ghour_count = $hour_count[$i]; + if ($i >= $first_shift_record && $i<=$last_shift_record) # May need to use lower. Ask Matt. +# if ($i >= $first_shift_record && $i<$last_shift_record) + { + if ($Ghour_count < 1) + { + # if ( ($no_lines_yet) or ($i > $last_full_record) ) + # { + # $do_nothing=1; + # } + # else + # { + $hour_count[$i] = sprintf("%-5s", $hour_count[$i]); + $ASCII_text.="|$time|"; + $CSV_text9.="\"$time\","; + $k=0; while ($k <= 102) {$ASCII_text.=" "; $k++;} + $ASCII_text.="| $hour_count[$i] |\n"; + $CSV_text9.="\"0\",\"0\"\n"; + + # } + } + else + { + $no_lines_yet=0; + $Xhour_count = ($Ghour_count * $hour_multiplier); + $Yhour_count = (99 - $Xhour_count); + + $Gdrop_count = $drop_count[$i]; + if ($Gdrop_count < 1) + { + $hour_count[$i] = sprintf("%-5s", $hour_count[$i]); + + $ASCII_text.="|$time|"; + $CSV_text9.="\"$time\","; + $k=0; while ($k <= $Xhour_count) {$ASCII_text.="*"; $k++; $char_counter++;} + $ASCII_text.="*X"; $char_counter++; + $k=0; while ($k <= $Yhour_count) {$ASCII_text.=" "; $k++; $char_counter++;} + while ($char_counter <= 101) {$ASCII_text.=" "; $char_counter++;} + $ASCII_text.="| 0 | $hour_count[$i] |\n"; + $CSV_text9.="\"0\",\"$hour_count[$i]\"\n"; + + } + else + { + $Xdrop_count = ($Gdrop_count * $hour_multiplier); + + # if ($Xdrop_count >= $Xhour_count) {$Xdrop_count = ($Xdrop_count - 1);} + + $XXhour_count = ( ($Xhour_count - $Xdrop_count) - 1 ); + + $hour_count[$i]+=0; + $drop_count[$i]+=0; + + $hour_count[$i] = sprintf("%-5s", $hour_count[$i]); + $drop_count[$i] = sprintf("%-5s", $drop_count[$i]); + + $ASCII_text.="|$time|"; + $CSV_text9.="\"$time\","; + $k=0; while ($k <= $Xdrop_count) {$ASCII_text.=">"; $k++; $char_counter++;} + $ASCII_text.="D"; $char_counter++; + $k=0; while ($k <= $XXhour_count) {$ASCII_text.="*"; $k++; $char_counter++;} + $ASCII_text.="X"; $char_counter++; + $k=0; while ($k <= $Yhour_count) {$ASCII_text.=" "; $k++; $char_counter++;} + while ($char_counter <= 102) {$ASCII_text.=" "; $char_counter++;} + $ASCII_text.="| $drop_count[$i] | $hour_count[$i] |\n"; + $CSV_text9.="\"$drop_count[$i]\",\"$hour_count[$i]\"\n"; + + } + } + } + $graph_stats[$i][0]="$time"; + $graph_stats[$i][1]=trim($hour_count[$i]); + $graph_stats[$i][2]=trim($drop_count[$i]); + if (trim($hour_count[$i])>$max_calls) {$max_calls=trim($hour_count[$i]);} + + $i++; + $h++; + } + +$ASCII_text.="+------+-------------------------------------------------------------------------------------------------------+-------+-------+\n\n"; + +for ($d=0; $d\n"; + } +} +$GRAPH_text.="
"._QXZ("GRAPH IN 15 MINUTE INCREMENTS OF TOTAL INCOMING CALLS FOR THIS GROUP")."
"._QXZ("HOUR").""._QXZ("DROPS")." / "._QXZ("CALLS")."
\n"; + if ($graph_stats[$d][1]>0) { + $GRAPH_text.="
  • ".$graph_stats[$d][1]."
  • "; + if ($graph_stats[$d][2]>0) { + $GRAPH_text.="
  • ".$graph_stats[$d][2]."
  • "; + } + $GRAPH_text.="
\n"; + } else { + $GRAPH_text.="0"; + } + $GRAPH_text.="


"; + + +if ($report_display_type=="HTML") + { + $MAIN.=$GRAPH_text; + } +else + { + $MAIN.=$ASCII_text; + } + + + + +##### Answered wait time breakdown +$MAIN.="\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"; + +$CSV_text8.="\n\"$rpt_type_verbiage "._QXZ("ANSWERED TIME BREAKDOWN IN SECONDS")."\"\n"; +$CSV_text8.="\""._QXZ("HOUR")."\",\"0\",\"5\",\"10\",\"15\",\"20\",\"25\",\"30\",\"35\",\"40\",\"45\",\"50\",\"55\",\"60\",\"90\",\"+90\",\""._QXZ("TOTAL")."\"\n"; + +$ZZ = '00'; +$i=0; +$h=4; +$hour= -1; +$no_lines_yet=1; +while ($i <= 96) + { + $char_counter=0; + $time = ' '; + + if ($h >= 4) + { + $hour++; + $h=0; + if ($hour < 10) {$hour = "0$hour";} + $time = "+$hour$ZZ+"; + $SQLtime = "$hour:$ZZ:00"; + $SQLtimeEND = "$hour:15:00"; + } + if ($h == 1) {$time = " 15 "; $SQLtime = "$hour:15:00"; $SQLtimeEND = "$hour:30:00";} + if ($h == 2) {$time = " 30 "; $SQLtime = "$hour:30:00"; $SQLtimeEND = "$hour:45:00";} + if ($h == 3) + { + $time = " 45 "; + $SQLtime = "$hour:45:00"; + $hourEND = ($hour + 1); + if ($hourEND < 10) {$hourEND = "0$hourEND";} + if ($hourEND > 23) {$SQLtimeEND = "23:59:59";} + else {$SQLtimeEND = "$hourEND:00:00";} + } + + + if (strlen($adB_0[$i]) < 1) {$adB_0[$i]='-';} + if (strlen($adB_5[$i]) < 1) {$adB_5[$i]='-';} + if (strlen($adB10[$i]) < 1) {$adB10[$i]='-';} + if (strlen($adB15[$i]) < 1) {$adB15[$i]='-';} + if (strlen($adB20[$i]) < 1) {$adB20[$i]='-';} + if (strlen($adB25[$i]) < 1) {$adB25[$i]='-';} + if (strlen($adB30[$i]) < 1) {$adB30[$i]='-';} + if (strlen($adB35[$i]) < 1) {$adB35[$i]='-';} + if (strlen($adB40[$i]) < 1) {$adB40[$i]='-';} + if (strlen($adB45[$i]) < 1) {$adB45[$i]='-';} + if (strlen($adB50[$i]) < 1) {$adB50[$i]='-';} + if (strlen($adB55[$i]) < 1) {$adB55[$i]='-';} + if (strlen($adB60[$i]) < 1) {$adB60[$i]='-';} + if (strlen($adB90[$i]) < 1) {$adB90[$i]='-';} + if (strlen($adB99[$i]) < 1) {$adB99[$i]='-';} + if (strlen($Fanswer[$i]) < 1) {$Fanswer[$i]='0';} + + $adB_0[$i] = sprintf("%5s", $adB_0[$i]); + $adB_5[$i] = sprintf("%5s", $adB_5[$i]); + $adB10[$i] = sprintf("%5s", $adB10[$i]); + $adB15[$i] = sprintf("%5s", $adB15[$i]); + $adB20[$i] = sprintf("%5s", $adB20[$i]); + $adB25[$i] = sprintf("%5s", $adB25[$i]); + $adB30[$i] = sprintf("%5s", $adB30[$i]); + $adB35[$i] = sprintf("%5s", $adB35[$i]); + $adB40[$i] = sprintf("%5s", $adB40[$i]); + $adB45[$i] = sprintf("%5s", $adB45[$i]); + $adB50[$i] = sprintf("%5s", $adB50[$i]); + $adB55[$i] = sprintf("%5s", $adB55[$i]); + $adB60[$i] = sprintf("%5s", $adB60[$i]); + $adB90[$i] = sprintf("%5s", $adB90[$i]); + $adB99[$i] = sprintf("%5s", $adB99[$i]); + $Fanswer[$i] = sprintf("%10s", $Fanswer[$i]); + + if ($i >= $first_shift_record && $i<=$last_shift_record) # May need to use lower. Ask Matt. + { + $MAIN.="|$time| $adB_0[$i] $adB_5[$i] $adB10[$i] $adB15[$i] $adB20[$i] $adB25[$i] $adB30[$i] $adB35[$i] $adB40[$i] $adB45[$i] $adB50[$i] $adB55[$i] $adB60[$i] $adB90[$i] $adB99[$i] | $Fanswer[$i] |\n"; + $CSV_text8.="\"$time\",\"$adB_0[$i]\",\"$adB_5[$i]\",\"$adB10[$i]\",\"$adB15[$i]\",\"$adB20[$i]\",\"$adB25[$i]\",\"$adB30[$i]\",\"$adB35[$i]\",\"$adB40[$i]\",\"$adB45[$i]\",\"$adB50[$i]\",\"$adB55[$i]\",\"$adB60[$i]\",\"$adB90[$i]\",\"$adB99[$i]\",\"$Fanswer[$i]\"\n"; + } + + $i++; + $h++; + } + +$BDansweredCALLS = sprintf("%10s", $BDansweredCALLS); + +$MAIN.="+------+-------------------------------------------------------------------------------------------+------------+\n"; +$MAIN.="|"._QXZ("TOTALS",6)."| | $BDansweredCALLS |\n"; +$MAIN.="+------+-------------------------------------------------------------------------------------------+------------+\n"; + +$CSV_text8.="\""._QXZ("TOTALS")."\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"$BDansweredCALLS\"\n"; + + +$ENDtime = date("U"); +$RUNtime = ($ENDtime - $STARTtime); +$MAIN.="\n"._QXZ("Run Time").": $RUNtime "._QXZ("seconds")."|$db_source\n"; +$MAIN.="
"; +$MAIN.=""; + +$MAIN.=""; + +if ($file_download>0) { + $FILE_TIME = date("Ymd-His"); + $CSVfilename = "AST_CLOSERstats_$US$FILE_TIME.csv"; + $CSV_var="CSV_text".$file_download; + $CSV_text=preg_replace('/^\s+/', '', $$CSV_var); + $CSV_text=preg_replace('/ +\"/', '"', $CSV_text); + $CSV_text=preg_replace('/\" +/', '"', $CSV_text); + // We'll be outputting a TXT file + header('Content-type: application/octet-stream'); + + // It will be called LIST_101_20090209-121212.txt + header("Content-Disposition: attachment; filename=\"$CSVfilename\""); + header('Expires: 0'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + ob_clean(); + flush(); + + echo "$CSV_text"; + +} else { + echo $HEADER; + echo $JS_text; + require("admin_header.php"); + echo $MAIN; +} + +} + +if ($db_source == 'S') + { + mysqli_close($link); + $use_slave_server=0; + $db_source = 'M'; + require("dbconnect_mysqli.php"); + } + +$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); + +exit; + + + + +?> diff --git a/www/vicidial/admin.php b/www/vicidial/admin.php index 5e857270..03156b93 100644 --- a/www/vicidial/admin.php +++ b/www/vicidial/admin.php @@ -113,7 +113,7 @@ $QUERY_STRING = getenv("QUERY_STRING"); $Vreports = 'NONE, Real-Time Main Report, Real-Time Campaign Summary, Inbound Report, Inbound Service Level Report, Inbound Summary Hourly Report, Inbound Daily Report, Inbound DID Report, Inbound IVR Report, Outbound Calling Report, Outbound Summary Interval Report, Outbound IVR Report, Fronter - Closer Report, Lists Campaign Statuses Report, Lists Statuses Report, Campaign Status List Report, Export Calls Report, Export Leads Report, Agent Time Detail, Agent Status Detail, Agent Performance Detail, Team Performance Detail, Performance Comparison Report, Single Agent Daily, Single Agent Daily Time, User Group Login Report, User Timeclock Report, User Group Timeclock Status Report, User Timeclock Detail Report, Server Performance Report, Administration Change Log, List Update Stats, User Stats, User Time Sheet, Download List, Dialer Inventory Report, Maximum System Stats, Maximum Stats Detail, Search Leads Logs, Email Log Report, Carrier Log Report, Campaign Debug, Hangup Cause Report, Lists Pass Report, Called Counts List IDs Report, Agent Debug Log Report, Agent-Manager Chat Log'; -$UGreports = 'ALL REPORTS, NONE, Real-Time Main Report, Real-Time Campaign Summary, Inbound Report, Inbound Report by DID, Inbound Service Level Report, Inbound Summary Hourly Report, Inbound Daily Report, Inbound DID Report, Inbound Email Report, Inbound IVR Report, Outbound Calling Report, Outbound Summary Interval Report, Outbound IVR Report, Fronter - Closer Report, Lists Campaign Statuses Report, Lists Statuses Report, Campaign Status List Report, Export Calls Report, Export Leads Report, Agent Time Detail, Agent Status Detail, Agent Performance Detail, Team Performance Detail, Performance Comparison Report, Single Agent Daily, Single Agent Daily Time, User Group Login Report, User Timeclock Report, User Group Timeclock Status Report, User Timeclock Detail Report, Server Performance Report, Administration Change Log, List Update Stats, User Stats, User Time Sheet, Download List, Dialer Inventory Report, Custom Reports Links, CallCard Search, Maximum System Stats, Maximum Stats Detail, Search Leads Logs, Email Log Report, Lists Pass Report, Called Counts List IDs Report, Front Page System Summary, Report Page Servers Summary, Admin Utilities Page, Agent Debug Log Report, Agent-Manager Chat Log'; +$UGreports = 'ALL REPORTS, NONE, Real-Time Main Report, Real-Time Campaign Summary, Inbound Report, Inbound Report by DID, Inbound Service Level Report, Inbound Summary Hourly Report, Inbound Daily Report, Inbound DID Report, Inbound Email Report, Inbound Chat Report, Inbound IVR Report, Outbound Calling Report, Outbound Summary Interval Report, Outbound IVR Report, Fronter - Closer Report, Lists Campaign Statuses Report, Lists Statuses Report, Campaign Status List Report, Export Calls Report, Export Leads Report, Agent Time Detail, Agent Status Detail, Agent Performance Detail, Team Performance Detail, Performance Comparison Report, Single Agent Daily, Single Agent Daily Time, User Group Login Report, User Timeclock Report, User Group Timeclock Status Report, User Timeclock Detail Report, Server Performance Report, Administration Change Log, List Update Stats, User Stats, User Time Sheet, Download List, Dialer Inventory Report, Custom Reports Links, CallCard Search, Maximum System Stats, Maximum Stats Detail, Search Leads Logs, Email Log Report, Lists Pass Report, Called Counts List IDs Report, Front Page System Summary, Report Page Servers Summary, Admin Utilities Page, Agent Debug Log Report, Agent-Manager Chat Log'; $Vtables = 'NONE,log_noanswer,did_agent_log,contact_information'; @@ -3652,12 +3652,13 @@ else # 151203-2142 - Added links to search page from called counts within this list table of list modify page # 151204-0615 - Added phone options to have call go to dialplan extension instead of voicemail if phone not answered # 151211-0940 - Added phone options for NVA recording agi script +# 151216-1053 - Added links to Inbound Chat Report # # make sure you have added a user to the vicidial_users MySQL table with at least user_level 9 to access this page the first time -$admin_version = '2.12-523a'; -$build = '151211-0940'; +$admin_version = '2.12-524a'; +$build = '151216-1053'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -35511,7 +35512,7 @@ if ($ADD==999999) echo ""._QXZ("Inbound and Outbound Calling Reports")."
\n"; echo "