From f309fb997124cbd30d36f82e9315eb11c96fa009 Mon Sep 17 00:00:00 2001 From: mattf Date: Fri, 21 Oct 2016 17:35:33 +0000 Subject: [PATCH] Added Fronter - Closer Detail Report Fixed admin logging bug Added lead_age option to dispo_move_list.php git-svn-id: svn://192.168.202.10@2599 3d104415-ff17-0410-8863-d5cf3c621b8a --- agc_2-X/trunk/UPGRADE | 2 + agc_2-X/trunk/www/agc/dispo_move_list.php | 92 +- agc_2-X/trunk/www/vicidial/admin.php | 27 +- agc_2-X/trunk/www/vicidial/fcstats_detail.php | 1431 +++++++++++++++++ 4 files changed, 1520 insertions(+), 32 deletions(-) create mode 100644 agc_2-X/trunk/www/vicidial/fcstats_detail.php diff --git a/agc_2-X/trunk/UPGRADE b/agc_2-X/trunk/UPGRADE index 73dfede6..be7f0c21 100644 --- a/agc_2-X/trunk/UPGRADE +++ b/agc_2-X/trunk/UPGRADE @@ -297,6 +297,8 @@ OTHER CHANGES: 82. Added List Merge admin utility +83. Added Fronter - Closer Detail Report + diff --git a/agc_2-X/trunk/www/agc/dispo_move_list.php b/agc_2-X/trunk/www/agc/dispo_move_list.php index a31dd57f..c0d9833d 100644 --- a/agc_2-X/trunk/www/agc/dispo_move_list.php +++ b/agc_2-X/trunk/www/agc/dispo_move_list.php @@ -31,6 +31,7 @@ # - exclude_status - (Y,N) if set to Y, will trigger for all statuses EXCEPT for those listed in sale_status, default is N # - talk_time_trigger - (0,1,2,3,...) if set to number greater than 0, will only trigger for talk_time at or above set number, default is 0 # - called_count_trigger - (1,2,3,...) if set to number greater than 0, will only trigger for called_count at or above set number, default is 0 +# - lead_age - (1,2,3,...) if set to number greater than 0, will only trigger for a lead entry_date this number of days old or older, default is 0 # - new_list_id - (999,etc...) the list_id that you want the matching status leads to be moved to # - reset_dialed - (Y,N) if set to Y, will reset the called_since_last_reset flag on the lead # - populate_sp_old_list - (Y,N) if set to Y, will populate the security_phrase field of the lead with the old list_id @@ -53,6 +54,7 @@ # 160309-1239 - Added talk_time_trigger and exclude_status options # 160801-1032 - Added called_count_trigger options # 160910-1354 - Added populate_... options +# 161021-1016 - Added lead_age option # $api_script = 'movelist'; @@ -102,6 +104,10 @@ if (isset($_GET["populate_sp_old_list"])) {$populate_sp_old_list=$_GET["popula elseif (isset($_POST["populate_sp_old_list"])) {$populate_sp_old_list=$_POST["populate_sp_old_list"];} if (isset($_GET["populate_comm_old_date"])) {$populate_comm_old_date=$_GET["populate_comm_old_date"];} elseif (isset($_POST["populate_comm_old_date"])) {$populate_comm_old_date=$_POST["populate_comm_old_date"];} +if (isset($_GET["lead_age"])) {$lead_age=$_GET["lead_age"];} + elseif (isset($_POST["lead_age"])) {$lead_age=$_POST["lead_age"];} +if (isset($_GET["entry_date"])) {$entry_date=$_GET["entry_date"];} + elseif (isset($_POST["entry_date"])) {$entry_date=$_POST["entry_date"];} #$DB = '1'; # DEBUG override @@ -113,10 +119,12 @@ $sale_status = "$TD$sale_status$TD"; $search_value=''; $match_found=0; $primary_match_found=0; +$age_trigger=0; $k=0; $user=preg_replace("/\'|\"|\\\\|;| /","",$user); $pass=preg_replace("/\'|\"|\\\\|;| /","",$pass); +$lead_age = preg_replace('/[^_0-9]/', '', $lead_age); ############################################# ##### START SYSTEM_SETTINGS AND USER LANGUAGE LOOKUP ##### @@ -152,14 +160,34 @@ if ($non_latin < 1) $user=preg_replace("/[^-_0-9a-zA-Z]/","",$user); } -if ($DB>0) {echo "$lead_id|$search_field|$campaign_check|$sale_status|$dispo|$new_status|$user|$pass|$DB|$log_to_file|$talk_time|$talk_time_trigger|$exclude_status|$called_count|$called_count_trigger|\n";} - -if ( ( (strlen($called_count_trigger)>0) and ($called_count >= $called_count_trigger) ) or (strlen($called_count_trigger)<1) or ($called_count_trigger < 1) ) +if ($lead_age > 0) { - if ( ( (strlen($talk_time_trigger)>0) and ($talk_time >= $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) + if (strlen($entry_date) < 10) + {if ($DB>0) {echo "Entry date not set: |$entry_date|\n";}} + else { - if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) - {$primary_match_found=1;} + $entry_date_time = explode(' ',$entry_date); + $entry_YYYYMMDD = explode('-',$entry_date_time[0]); + $entry_HHMMSS = explode(':',$entry_date_time[1]); + $entry_epoch = mktime($entry_YYYYMMDD[0], $entry_YYYYMMDD[1], $entry_YYYYMMDD[2], $entry_YYYYMMDD[1], $entry_YYYYMMDD[2]-1, $entry_YYYYMMDD[0]); + $entry_age = (($STARTtime - $entry_epoch) / 86400); + if ($lead_age < $entry_age) + {$age_trigger=1;} + if ($DB>0) {echo "Lead age debug: |$entry_date|$lead_age|$entry_age|$entry_YYYYMMDD[0]|$entry_YYYYMMDD[1]|$entry_YYYYMMDD[2]|$entry_HHMMSS[0]|$entry_HHMMSS[1]|$entry_HHMMSS[2]|($entry_epoch <> $STARTtime)|\n";} + } + } + +if ($DB>0) {echo "$lead_id|$search_field|$campaign_check|$sale_status|$dispo|$new_status|$user|$pass|$DB|$log_to_file|$talk_time|$talk_time_trigger|$exclude_status|$called_count|$called_count_trigger|$lead_age|$age_trigger|\n";} + +if ( ( ($lead_age > 0) and ($age_trigger > 0) ) or ($lead_age < 1) or (strlen($lead_age) < 1) ) + { + if ( ( (strlen($called_count_trigger)>0) and ($called_count >= $called_count_trigger) ) or (strlen($called_count_trigger)<1) or ($called_count_trigger < 1) ) + { + if ( ( (strlen($talk_time_trigger)>0) and ($talk_time >= $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) + { + if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) + {$primary_match_found=1;} + } } } $first_pass_vars = "$new_list_id|$reset_dialed|$sale_status|$talk_time_trigger|$exclude_status$called_count_trigger|"; @@ -180,38 +208,62 @@ else $exclude_status=''; $talk_time_trigger=''; $called_count_trigger=''; + $lead_age=0; $statusfield = "sale_status_$k"; $excludefield = "exclude_status_$k"; $talktriggerfield = "talk_time_trigger_$k"; $counttriggerfield = "called_count_trigger_$k"; + $agetriggerfield = "lead_age_$k"; if (isset($_GET["$excludefield"])) {$exclude_status=$_GET["$excludefield"];} elseif (isset($_POST["$excludefield"])) {$exclude_status=$_POST["$excludefield"];} if (isset($_GET["$talktriggerfield"])) {$talk_time_trigger=$_GET["$talktriggerfield"];} elseif (isset($_POST["$talktriggerfield"])) {$talk_time_trigger=$_POST["$talktriggerfield"];} if (isset($_GET["$counttriggerfield"])) {$called_count_trigger=$_GET["$counttriggerfield"];} elseif (isset($_POST["$counttriggerfield"])) {$called_count_trigger=$_POST["$counttriggerfield"];} + if (isset($_GET["$agetriggerfield"])) {$lead_age=$_GET["$agetriggerfield"];} + elseif (isset($_POST["$agetriggerfield"])) {$lead_age=$_POST["$agetriggerfield"];} if (isset($_GET["$statusfield"])) {$sale_status=$_GET["$statusfield"];} elseif (isset($_POST["$statusfield"])) {$sale_status=$_POST["$statusfield"];} $sale_status = "$TD$sale_status$TD"; - if ($DB) {echo _QXZ("MULTI_MATCH CHECK:")." $k|$sale_status|$statusfield|$exclude_status|$excludefield|$talk_time_trigger|$talktriggerfield|$called_count_trigger|$counttriggerfield|\n";} - - if ( ( (strlen($called_count_trigger)>0) and ($called_count >= $called_count_trigger) ) or (strlen($called_count_trigger)<1) or ($called_count_trigger < 1) ) + if ($lead_age > 0) { - if ( ( (strlen($talk_time_trigger)>0) and ($talk_time >= $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) + if (strlen($entry_date) < 10) + {if ($DB>0) {echo "Entry date not set: |$entry_date|\n";}} + else { - if (strlen($sale_status)>0) + $entry_date_time = explode(' ',$entry_date); + $entry_YYYYMMDD = explode('-',$entry_date_time[0]); + $entry_HHMMSS = explode(':',$entry_date_time[1]); + $entry_epoch = mktime($entry_YYYYMMDD[0], $entry_YYYYMMDD[1], $entry_YYYYMMDD[2], $entry_YYYYMMDD[1], $entry_YYYYMMDD[2]-1, $entry_YYYYMMDD[0]); + $entry_age = (($STARTtime - $entry_epoch) / 86400); + if ($lead_age < $entry_age) + {$age_trigger=1;} + if ($DB>0) {echo "Lead age debug: |$entry_date|$lead_age|$entry_age|$entry_YYYYMMDD[0]|$entry_YYYYMMDD[1]|$entry_YYYYMMDD[2]|$entry_HHMMSS[0]|$entry_HHMMSS[1]|$entry_HHMMSS[2]|($entry_epoch <> $STARTtime)|\n";} + } + } + + if ($DB) {echo _QXZ("MULTI_MATCH CHECK:")." $k|$sale_status|$statusfield|$exclude_status|$excludefield|$talk_time_trigger|$talktriggerfield|$called_count_trigger|$counttriggerfield|$lead_age|$agetriggerfield|\n";} + + if ( ( ($lead_age > 0) and ($age_trigger > 0) ) or ($lead_age < 1) or (strlen($lead_age) < 1) ) + { + if ( ( (strlen($called_count_trigger)>0) and ($called_count >= $called_count_trigger) ) or (strlen($called_count_trigger)<1) or ($called_count_trigger < 1) ) + { + if ( ( (strlen($talk_time_trigger)>0) and ($talk_time >= $talk_time_trigger) ) or (strlen($talk_time_trigger)<1) or ($talk_time_trigger < 1) ) { - if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) + if (strlen($sale_status)>0) { - $match_found=1; - $newlistfield = "new_list_id_$k"; - $resetfield = "reset_dialed_$k"; - if (isset($_GET["$newlistfield"])) {$new_list_id=$_GET["$newlistfield"];} - elseif (isset($_POST["$newlistfield"])) {$new_list_id=$_POST["$newlistfield"];} - if (isset($_GET["$resetfield"])) {$reset_dialed=$_GET["$resetfield"];} - elseif (isset($_POST["$resetfield"])) {$reset_dialed=$_POST["$resetfield"];} - if ($DB) {echo _QXZ("MULTI_MATCH:")." $k|$sale_status|$new_list_id|$reset_dialed|$exclude_status|$talk_time_trigger|$called_count_trigger|\n";} + if ( ( (preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status!='Y') ) or ( (!preg_match("/$TD$dispo$TD/",$sale_status)) and ($exclude_status=='Y') ) ) + { + $match_found=1; + $newlistfield = "new_list_id_$k"; + $resetfield = "reset_dialed_$k"; + if (isset($_GET["$newlistfield"])) {$new_list_id=$_GET["$newlistfield"];} + elseif (isset($_POST["$newlistfield"])) {$new_list_id=$_POST["$newlistfield"];} + if (isset($_GET["$resetfield"])) {$reset_dialed=$_GET["$resetfield"];} + elseif (isset($_POST["$resetfield"])) {$reset_dialed=$_POST["$resetfield"];} + if ($DB) {echo _QXZ("MULTI_MATCH:")." $k|$sale_status|$new_list_id|$reset_dialed|$exclude_status|$talk_time_trigger|$called_count_trigger|\n";} + } } } } diff --git a/agc_2-X/trunk/www/vicidial/admin.php b/agc_2-X/trunk/www/vicidial/admin.php index a963c721..ca0700e7 100644 --- a/agc_2-X/trunk/www/vicidial/admin.php +++ b/agc_2-X/trunk/www/vicidial/admin.php @@ -118,9 +118,9 @@ $PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW']; $PHP_SELF=$_SERVER['PHP_SELF']; $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 Group Hourly 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, Asterisk Debug, Hangup Cause Report, Lists Pass Report, Called Counts List IDs Report, Agent Debug Log Report, Agent-Manager Chat Log, Recording Access Log Report, API Log Report'; +$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, Fronter - Closer Detail 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 Group Hourly 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, Asterisk Debug, Hangup Cause Report, Lists Pass Report, Called Counts List IDs Report, Agent Debug Log Report, Agent-Manager Chat Log, Recording Access Log Report, API Log Report'; -$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 Group Hourly 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, Recording Access Log Report, API Log Report'; +$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, Fronter - Closer Detail 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 Group Hourly 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, Recording Access Log Report, API Log Report'; $Vtables = 'NONE,log_noanswer,did_agent_log,contact_information'; @@ -3871,12 +3871,13 @@ else # 160827-0917 - Added the User Group Hourly Report # 161014-0902 - Added List Merge utility and User List NEW Lead Limit options # 161018-2249 - Added allow_required_fields campaign option +# 161021-1320 - Added Fronter - Closer Detail Report, Fixed admin logging bug # # 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-567a'; -$build = '161018-2249'; +$admin_version = '2.12-568a'; +$build = '161021-1320'; $STARTtime = date("U"); $SQLdate = date("Y-m-d H:i:s"); @@ -15476,24 +15477,24 @@ if ($ADD==471111111111) { if ( ($voicemail_greeting == '') and (strlen($old_voicemail_greeting) > 0) ) {$voicemail_greeting = '---DELETE---';} - $stmt="UPDATE vicidial_voicemail set fullname='$fullname',active='$active',pass='$pass',email='$email',delete_vm_after_email='$delete_vm_after_email',voicemail_timezone='$voicemail_timezone',voicemail_options='$voicemail_options',user_group='$user_group',voicemail_greeting='$voicemail_greeting',on_login_report='$show_vm_on_summary' where voicemail_id='$voicemail_id';"; - $rslt=mysql_to_mysqli($stmt, $link); - if ($DB) {echo "|$stmt|";} + $stmtA="UPDATE vicidial_voicemail set fullname='$fullname',active='$active',pass='$pass',email='$email',delete_vm_after_email='$delete_vm_after_email',voicemail_timezone='$voicemail_timezone',voicemail_options='$voicemail_options',user_group='$user_group',voicemail_greeting='$voicemail_greeting',on_login_report='$show_vm_on_summary' where voicemail_id='$voicemail_id';"; + $rslt=mysql_to_mysqli($stmtA, $link); + if ($DB) {echo "|$stmtA|";} - $stmt="SELECT active_voicemail_server from system_settings;"; - $rslt=mysql_to_mysqli($stmt, $link); + $stmtB="SELECT active_voicemail_server from system_settings;"; + $rslt=mysql_to_mysqli($stmtB, $link); $row=mysqli_fetch_row($rslt); $active_voicemail_server = $row[0]; $sounds_updateSQL=''; if ($SSallow_voicemail_greeting > 0) {$sounds_updateSQL = ",sounds_update='Y'";} - $stmtA="UPDATE servers SET rebuild_conf_files='Y'$sounds_updateSQL where generate_vicidial_conf='Y' and active_asterisk_server='Y' and server_ip='$active_voicemail_server';"; - $rslt=mysql_to_mysqli($stmtA, $link); + $stmtC="UPDATE servers SET rebuild_conf_files='Y'$sounds_updateSQL where generate_vicidial_conf='Y' and active_asterisk_server='Y' and server_ip='$active_voicemail_server';"; + $rslt=mysql_to_mysqli($stmtC, $link); echo "
"._QXZ("VOICEMAIL BOX MODIFIED").": $voicemail_id\n"; ### LOG INSERTION Admin Log Table ### - $SQL_log = "$stmt|$stmtA|"; + $SQL_log = "$stmtA|$stmtB|$stmtC|"; $SQL_log = preg_replace('/;/', '', $SQL_log); $SQL_log = addslashes($SQL_log); $stmt="INSERT INTO vicidial_admin_log set event_date='$SQLdate', user='$PHP_AUTH_USER', ip_address='$ip', event_section='VOICEMAIL', event_type='MODIFY', record_id='$voicemail_id', event_code='ADMIN MODIFY VOICEMAIL', event_sql=\"$SQL_log\", event_notes='';"; @@ -36591,6 +36592,8 @@ if ($ADD==999999) } if ( (preg_match("/Fronter - Closer Report/",$LOGallowed_reports)) or (preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) {echo "
  • "._QXZ("Fronter - Closer Report")."\n";} + if ( (preg_match("/Fronter - Closer Detail Report/",$LOGallowed_reports)) or (preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) + {echo " - "._QXZ("Detail")."\n";} if ( (preg_match("/Lists Pass Report/",$LOGallowed_reports)) or (preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) {echo "
  • "._QXZ("Lists Pass Report")."\n";} if ( (preg_match("/Lists Campaign Statuses Report/",$LOGallowed_reports)) or (preg_match("/ALL REPORTS/",$LOGallowed_reports)) ) diff --git a/agc_2-X/trunk/www/vicidial/fcstats_detail.php b/agc_2-X/trunk/www/vicidial/fcstats_detail.php new file mode 100644 index 00000000..c8515dcd --- /dev/null +++ b/agc_2-X/trunk/www/vicidial/fcstats_detail.php @@ -0,0 +1,1431 @@ + LICENSE: AGPLv2 +# +# CHANGES +# +# 70813-1526 - First Build +# 71008-1436 - Added shift to be defined in dbconnect_mysqli.php +# 71217-1128 - Changed method for calculating stats +# 71228-1140 - added percentages, cross-day start/stop +# 80328-1139 - adapted for basic fronter/closer stats +# 90310-2132 - Added admin header +# 90508-0644 - Changed to PHP long tags +# 100214-1421 - Sort menu alphabetically +# 100216-0042 - Added popup date selector +# 100712-1324 - Added system setting slave server option +# 100802-2347 - Added User Group Allowed Reports option validation +# 100914-1326 - Added lookup for user_level 7 users to set to reports only which will remove other admin links +# 110703-1828 - Added download option +# 111104-1213 - Added user_group restrictions for selecting in-groups +# 120224-0910 - Added HTML display option with bar graphs +# 120705-2007 - Changed SALES to use sales status flag +# 130414-0126 - Added report logging +# 130610-0948 - Finalized changing of all ereg instances to preg +# 130619-2339 - Added filtering of input to prevent SQL injection attacks and new user auth +# 130901-1930 - Changed to mysqli PHP functions +# 140108-0725 - Added webserver and hostname to report logging +# 140328-0005 - Converted division calculations to use MathZDC function +# 141114-0017 - Finalized adding QXZ translation to all admin files +# 141230-1345 - Added code for on-the-fly language translations display +# 150516-1317 - Fixed Javascript element problem, Issue #857 +# 151125-1642 - Added search archive option +# 160211-2249 - Overhauled report calculations and labeling to make the report more accurate and "universal" +# 160227-1131 - Uniform form format +# 160714-2348 - Added and tested ChartJS features for more aesthetically appealing graphs +# 161021-1326 - Rewrote most of this report to show detail records +# + +$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["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["group"])) {$group=$_GET["group"];} + elseif (isset($_POST["group"])) {$group=$_POST["group"];} +if (isset($_GET["campaign"])) {$campaign=$_GET["campaign"];} + elseif (isset($_POST["campaign"])) {$campaign=$_POST["campaign"];} +if (isset($_GET["users"])) {$users=$_GET["users"];} + elseif (isset($_POST["users"])) {$users=$_POST["users"];} +if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} + elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_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["show_summary"])) {$show_summary=$_GET["show_summary"];} + elseif (isset($_POST["show_summary"])) {$show_summary=$_POST["show_summary"];} +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["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"];} + +if (strlen($shift)<2) {$shift='ALL';} + + +$report_name = 'Fronter - Closer Detail Report'; +$db_source = 'M'; + +$JS_text="\n"; +$HTML_head.="\n"; +$HTML_head.="\n"; +require("chart_button.php"); +$HTML_head.="\n"; +$HTML_head.="\n"; + +$HTML_head.="\n"; +$HTML_head.=""._QXZ("$report_name")."\n"; + + $short_header=1; + +# require("admin_header.php"); + +$HTML_text.=""._QXZ("$report_name")." $NWB#fcstats$NWE\n"; +$HTML_text.="
    \n"; +$HTML_text.=""; + +$HTML_text.=""; + +$HTML_text.=""; + + +$HTML_text.="
    Date:
    "; + +$HTML_text.=""; +$HTML_text.="
    to:
    \n"; + +$HTML_text.=""; +$HTML_text.="\n"; + +$HTML_text.="
    "; +$HTML_text.="Ingroup: \n"; + +$HTML_text.="

    "; +$HTML_text.="Display:

    \n"; +$HTML_text.="Shift: \n"; +$HTML_text.="
    "._QXZ("Campaigns").":
    "; +$HTML_text.="\n"; +$HTML_text.="
    "._QXZ("User Groups").":
    "; +$HTML_text.="\n"; +$HTML_text.="
    "._QXZ("Users").":
    "; +$HTML_text.="\n"; +$HTML_text.="
    \n"; +if ($archives_available=="Y") + { + $HTML_text.=""._QXZ("Search archived data")."

    \n"; + } +$HTML_text.=""._QXZ("Show fronter/closer summary")."

    \n"; +$HTML_text.="

    \n"; +$HTML_text.=""._QXZ("DOWNLOAD")." | "._QXZ("MODIFY")." | "._QXZ("REPORTS")."
    \n"; +$HTML_text.="
    \n"; +$HTML_text.="
    \n\n"; + +$HTML_text.="
    \n\n";
    +
    +
    +if (!$group)
    +{
    +$HTML_text.="\n\n";
    +$HTML_text.=_QXZ("PLEASE SELECT AN IN-GROUP AND DATE ABOVE THEN CLICK SUBMIT")."\n";
    +}
    +
    +else
    +{
    +#	$time_BEGIN=$AM_shift_BEGIN;
    +#	$time_END=$AM_shift_END;
    +#$query_date_BEGIN = "$query_date $time_BEGIN";   
    +#$query_date_END = "$query_date $time_END";
    +
    +$Cqdate = explode('-',$query_date);
    +$Cedate = explode('-',$end_date);
    +
    +if ($shift == 'AM') 
    +	{
    +	$query_date_BEGIN = date("Y-m-d H:i:s", mktime(1, 0, 0, $Cqdate[1], $Cqdate[2], $Cqdate[0]));
    +	$query_date_END = date("Y-m-d H:i:s", mktime(17, 45, 0, $Cedate[1], $Cedate[2], $Cedate[0]));
    +	}
    +if ($shift == 'PM') 
    +	{
    +	$query_date_BEGIN = date("Y-m-d H:i:s", mktime(17, 45, 1, $Cqdate[1], $Cqdate[2], $Cqdate[0]));
    +	$query_date_END = date("Y-m-d H:i:s", mktime(24, 59, 59, $Cedate[1], $Cedate[2], $Cedate[0]));
    +	}
    +if ($shift == 'ALL') 
    +	{
    +	$query_date_BEGIN = date("Y-m-d H:i:s", mktime(1, 0, 0, $Cqdate[1], $Cqdate[2], $Cqdate[0]));
    +	$query_date_END = date("Y-m-d H:i:s", mktime(24, 59, 59, $Cedate[1], $Cedate[2], $Cedate[0]));
    +	}
    +
    +### Combine campaign, date, user_group, and user to get list of available users based on new parameters
    +if ($campaign_ct>0 || $user_group_ct>0 || $user_ct>0) {
    +	$total_agent_stmt="select distinct user from ".$vicidial_agent_log_table." where event_time >= '$query_date_BEGIN' and event_time <= '$query_date_END' $campaign_agent_log_SQL $user_group_agent_log_SQL $user_group_agent_log_SQL order by user";
    +	$total_agent_rslt=mysql_to_mysqli($total_agent_stmt, $link);
    +	$total_user_SQL="";
    +	if ($DB) {$HTML_text.="$total_agent_stmt\n";}
    +	while ($agent_row=mysqli_fetch_row($total_agent_rslt)) {
    +		$total_user_SQL .= "'$agent_row[0]',";
    +	}
    +	$total_user_SQL = preg_replace('/,$/i', '',$total_user_SQL);
    +	$summary_user_xfer_log_SQL = "and ".$vicidial_xfer_log_table.".user IN($total_user_SQL)";
    +	$summary_user_closer_log_SQL = "and ".$vicidial_closer_log_table.".user IN($total_user_SQL)";
    +}
    +
    +
    +#### LOG SECTION
    +if ($campaign_ct>0 || $user_group_ct>0 || $user_ct>0) {
    +	/*
    +	# xfers originating from outbound calls
    +	$xfer_stmt="select ".$vicidial_log_table.".call_date, ".$vicidial_log_table.".lead_id, ".$vicidial_log_table.".user, ".$vicidial_log_table.".user_group, ".$vicidial_log_table.".campaign_id, ".$vicidial_xfer_log_table.".campaign_id, ".$vicidial_agent_log_table.".campaign_id, ".$vicidial_closer_log_table.".campaign_id, ".$vicidial_closer_log_table.".user, ".$vicidial_closer_log_table.".user_group, ".$vicidial_closer_log_table.".call_date, ".$vicidial_closer_log_table.".uniqueid from ".$vicidial_log_table.", ".$vicidial_xfer_log_table.", ".$vicidial_agent_log_table.", ".$vicidial_closer_log_table." where ".$vicidial_log_table.".call_date>='$query_date_BEGIN' and ".$vicidial_log_table.".call_date<='$query_date_END' and ".$vicidial_log_table.".lead_id=".$vicidial_xfer_log_table.".lead_id and ".$vicidial_xfer_log_table.".campaign_id='" . mysqli_real_escape_string($link, $group) . "' and ".$vicidial_xfer_log_table.".call_date>='$query_date_BEGIN' and ".$vicidial_xfer_log_table.".call_date<='$query_date_END' and ".$vicidial_xfer_log_table.".xfercallid=".$vicidial_closer_log_table.".xfercallid and ".$vicidial_xfer_log_table.".lead_id=".$vicidial_closer_log_table.".lead_id and ".$vicidial_xfer_log_table.".closer=".$vicidial_closer_log_table.".user and ".$vicidial_closer_log_table.".call_date>='$query_date_BEGIN' and ".$vicidial_closer_log_table.".call_date<='$query_date_END' and ".$vicidial_closer_log_table.".uniqueid=".$vicidial_agent_log_table.".uniqueid and ".$vicidial_agent_log_table.".event_time>='$query_date_BEGIN' and ".$vicidial_agent_log_table.".event_time<='$query_date_END' and timediff(".$vicidial_xfer_log_table.".call_date, ".$vicidial_log_table.".call_date)<'00:30:00' and timediff(".$vicidial_xfer_log_table.".call_date, ".$vicidial_log_table.".call_date)>='0' $user_agent_log_SQL $user_vicidial_log_SQL $user_xfer_log_SQL $user_closer_log_SQL $user_group_agent_log_SQL $user_group_vicidial_log_SQL $user_group_closer_log_SQL $campaign_agent_log_SQL $campaign_vicidial_log_SQL";
    +	if ($DB) {$HTML_text.="$xfer_stmt\n";}
    +	$xfer_rslt=mysql_to_mysqli($xfer_stmt, $link);
    +	while ($xfer_row=mysqli_fetch_row($xfer_rslt)) {
    +		array_push($complete_xfer_log, $xfer_row);
    +	}
    +
    +	# xfers originating from inbound calls
    +	$xfer_stmt1="select ".$vicidial_closer_log_table.".call_date, ".$vicidial_closer_log_table.".lead_id, ".$vicidial_closer_log_table.".user, ".$vicidial_closer_log_table.".user_group, ".$vicidial_agent_log_table.".campaign_id, ".$vicidial_closer_log_table.".campaign_id as ingroup, ".$vicidial_xfer_log_table.".xfercallid from ".$vicidial_closer_log_table.", ".$vicidial_agent_log_table.", ".$vicidial_xfer_log_table." where ".$vicidial_xfer_log_table.".campaign_id='" . mysqli_real_escape_string($link, $group) . "' and ".$vicidial_closer_log_table.".call_date>='$query_date_BEGIN' and ".$vicidial_closer_log_table.".call_date<='$query_date_END' and ".$vicidial_closer_log_table.".lead_id=".$vicidial_xfer_log_table.".lead_id and ".$vicidial_closer_log_table.".xfercallid=0 and ".$vicidial_closer_log_table.".user=".$vicidial_xfer_log_table.".user and ".$vicidial_xfer_log_table.".call_date>='$query_date_BEGIN' and ".$vicidial_xfer_log_table.".call_date<='$query_date_END' and ".$vicidial_closer_log_table.".uniqueid=".$vicidial_agent_log_table.".uniqueid and ".$vicidial_agent_log_table.".event_time>='$query_date_BEGIN' and ".$vicidial_agent_log_table.".event_time<='$query_date_END' and timediff(".$vicidial_xfer_log_table.".call_date, ".$vicidial_closer_log_table.".call_date)<'00:30:00' and timediff(".$vicidial_xfer_log_table.".call_date, ".$vicidial_closer_log_table.".call_date)>='0' $user_agent_log_SQL $user_xfer_log_SQL $user_closer_log_SQL $user_group_agent_log_SQL $user_group_closer_log_SQL $campaign_agent_log_SQL";
    +	if ($DB) {$HTML_text.="$xfer_stmt1\n";}
    +	$xfer_rslt1=mysql_to_mysqli($xfer_stmt1, $link);
    +	while ($xfer_row1=mysqli_fetch_row($xfer_rslt1)) {
    +		$temp_array=array();
    +		$xfercallid=$xfer_row1[6];
    +		array_push($temp_array, "$xfer_row1[0]", "$xfer_row1[1]", "$xfer_row1[2]", "$xfer_row1[3]", "$xfer_row1[4]", "$xfer_row1[5]");
    +
    +		$xfer_stmt2="select ".$vicidial_agent_log_table.".campaign_id, ".$vicidial_closer_log_table.".campaign_id, ".$vicidial_closer_log_table.".user, ".$vicidial_closer_log_table.".user_group, ".$vicidial_closer_log_table.".call_date from ".$vicidial_agent_log_table.", ".$vicidial_xfer_log_table.", ".$vicidial_closer_log_table." where ".$vicidial_xfer_log_table.".xfercallid='$xfercallid' and ".$vicidial_xfer_log_table.".lead_id=".$vicidial_closer_log_table.".lead_id and ".$vicidial_xfer_log_table.".closer=".$vicidial_closer_log_table.".user and ".$vicidial_closer_log_table.".uniqueid=".$vicidial_agent_log_table.".uniqueid and ".$vicidial_closer_log_table.".xfercallid='$xfercallid' and ".$vicidial_agent_log_table.".event_time>='$query_date_BEGIN' and ".$vicidial_agent_log_table.".event_time<='$query_date_END'";
    +		if ($DB) {$HTML_text.="$xfer_stmt2\n";}
    +		$xfer_rslt2=mysql_to_mysqli($xfer_stmt2, $link);
    +		while ($xfer_row2=mysqli_fetch_row($xfer_rslt2)) {
    +			array_push($temp_array, "$xfer_row2[0]", "$xfer_row2[1]", "$xfer_row2[2]", "$xfer_row2[3]", "$xfer_row2[4]");
    +		}
    +
    +		array_push($complete_xfer_log, $temp_array);
    +	}
    +	*/
    +
    +	$complete_xfer_log=array();
    +	$xfer_log_stmt="select * from vicidial_xfer_log where campaign_id='" . mysqli_real_escape_string($link, $group) . "' and call_date>='$query_date_BEGIN' and call_date<='$query_date_END' $user_SQL";
    +	if ($DB) {$HTML_text.="$xfer_log_stmt\n";}
    +	$xfer_log_rslt=mysql_to_mysqli($xfer_log_stmt, $link);
    +	while ($xfer_row=mysqli_fetch_array($xfer_log_rslt)) {
    +		$temp_array=array();
    +		$xfercallid=$xfer_row["xfercallid"];
    +		$closer=$xfer_row["closer"];
    +		$campaign_id="";
    +
    +		$fronter_log_stmt="select call_date, user_group, campaign_id from vicidial_log where lead_id='$xfer_row[lead_id]' and user='$xfer_row[user]' and call_date>='$xfer_row[call_date]'-INTERVAL 30 MINUTE and call_date<='$xfer_row[call_date]' $campaign_SQL $user_group_SQL order by call_date desc limit 1";
    +		$fronter_log_rslt=mysql_to_mysqli($fronter_log_stmt, $link);
    +		if ($DB) {$HTML_text.="$fronter_log_stmt\n";}
    +		if (mysqli_num_rows($fronter_log_rslt)>0) {
    +			while ($fronter_row=mysqli_fetch_array($fronter_log_rslt)) {
    +				$call_date=$fronter_row["call_date"];
    +				$lead_id=$xfer_row["lead_id"];
    +				$user=$xfer_row["user"];
    +				$user_group=$fronter_row["user_group"];
    +				$campaign_id=$fronter_row["campaign_id"];
    +				$ingroup=$xfer_row["campaign_id"];
    +
    +				#$uniqueid=$fronter_row["uniqueid"];
    +				#$agent_log_stmt="select * From vicidial_agent_log where uniqueid='$uniqueid' $campaignSQL";
    +				#$agent_log_rslt=mysql_to_mysqli($agent_log_stmt, $link);
    +				#if (mysqli_num_rows($agent_log_rslt)>0) {
    +				#	$fronter_row=mysqli_fetch_array($agent_log_rslt);
    +				#	break;
    +				#}
    +			}
    +		} else {
    +			$closer_log_stmt="select uniqueid, user_group, call_date from vicidial_closer_log where call_date>='$xfer_row[call_date]'-INTERVAL 30 MINUTE and call_date<='$xfer_row[call_date]' and lead_id='$xfer_row[lead_id]' and user='$xfer_row[user]' order by call_date desc limit 1";
    +			$closer_log_rslt=mysql_to_mysqli($closer_log_stmt, $link);
    +			if ($DB) {$HTML_text.="$closer_log_stmt\n";}
    +			while ($closer_row=mysqli_fetch_array($closer_log_rslt)) {
    +				$call_date=$closer_row["call_date"];
    +				$lead_id=$xfer_row["lead_id"];
    +				$user=$xfer_row["user"];
    +				$user_group=$closer_row["user_group"];
    +				$ingroup=$xfer_row["campaign_id"];
    +
    +				$uniqueid=$closer_row["uniqueid"];
    +				$agent_log_stmt="select campaign_id From vicidial_agent_log where uniqueid='$uniqueid' and event_time>='$query_date_BEGIN' and event_time<='$query_date_END' $campaign_SQL $user_group_SQL";
    +				$agent_log_rslt=mysql_to_mysqli($agent_log_stmt, $link);
    +				if (mysqli_num_rows($agent_log_rslt)>0) {
    +					$fronter_row=mysqli_fetch_array($agent_log_rslt);
    +					$campaign_id=$fronter_row["campaign_id"];
    +					break;
    +				}
    +			}
    +		}
    +
    +		if ($campaign_id) {
    +			array_push($temp_array, "$call_date", "$lead_id", "$user", "$user_group", "$campaign_id", "$ingroup");
    +
    +			$closer_xfer_log_stmt="select uniqueid, campaign_id, call_date, status from vicidial_closer_log where campaign_id='" . mysqli_real_escape_string($link, $group) . "' and call_date>='$xfer_row[call_date]' and call_date<='$xfer_row[call_date]'+INTERVAL 1 HOUR and xfercallid='$xfercallid' and user='$closer' $user_SQL $user_group_SQL order by call_date asc limit 1";
    +			$closer_xfer_log_rslt=mysql_to_mysqli($closer_xfer_log_stmt, $link);
    +			if ($DB) {$HTML_text.="$closer_xfer_log_stmt\n";}
    +			if (mysqli_num_rows($closer_xfer_log_rslt)>0) {
    +				$closer_xfer_row=mysqli_fetch_array($closer_xfer_log_rslt);
    +				$closer_uid=$closer_xfer_row["uniqueid"];
    +				$closer_ingroup=$closer_xfer_row["campaign_id"];
    +				$closer_call_date=$closer_xfer_row["call_date"];
    +				$status=$closer_xfer_row["status"];
    +
    +				$closer_agent_log_stmt="select campaign_id, user_group from vicidial_agent_log where user='$closer' and uniqueid='$closer_uid' and event_time>='$query_date_BEGIN' and event_time<='$query_date_END' $user_SQL $user_group_SQL $campaign_SQL"; #$campaignSQL necessary?
    +				$closer_agent_log_rslt=mysql_to_mysqli($closer_agent_log_stmt, $link);
    +				if (mysqli_num_rows($closer_agent_log_rslt)>0) {
    +					$closer_agent_log_row=mysqli_fetch_array($closer_agent_log_rslt);
    +					$closer_campaign=$closer_agent_log_row["campaign_id"];
    +					$closer_user_group=$closer_agent_log_row["user_group"];
    +
    +					array_push($temp_array, "$closer_campaign", "$closer_ingroup", "$closer", "$closer_user_group", "$closer_call_date", "$status");
    +					array_push($complete_xfer_log, $temp_array);
    +				}
    +			}
    +		}
    +	}
    +
    +}
    +
    +function cmp($a, $b)
    +{
    +    return strcmp($a[0], $b[0]);
    +}
    +usort($complete_xfer_log, "cmp");
    +
    +if (count($complete_xfer_log)>0) {
    +	$output_header="+---------------------+-----------+----------------------+----------------------+------------+----------------------+------------+----------------------+----------------------+----------------------+---------------------+--------+\n";
    +	$HTML_text.="\n";
    +	$HTML_text.=$output_header;
    +	$HTML_text.="| CALL DATE (INITIAL) | LEAD ID   | USER                 | USER GROUP - FRONTER | FRONT CAMP | INBOUND/XFER GROUP   | RECVD CAMP | RCVD GROUP           |  USER                | USER GROUP - CLOSER  | RECEIPT DATE        | STATUS |\n";
    +	$CSV_text1="\"CALL DATE (INITIAL)\",\"LEAD ID\",\"USER\",\"USER GROUP - FRONTER\",\"FRONT CAMP\",\"INBOUND/XFER GROUP\",\"RECVD CAMP\",\"RCVD GROUP\",\"USER\",\"USER GROUP - CLOSER\",\"RECEIPT DATE\",\"STATUS\"\n";
    +	$HTML_text.=$output_header;
    +	for($i=0; $i".sprintf("%-9s", $complete_xfer_log[$i][1])." | ";
    +		$HTML_text.=sprintf("%-20s", $complete_xfer_log[$i][2])." | ";
    +		$HTML_text.=sprintf("%-20s", $complete_xfer_log[$i][3])." | ";
    +		$HTML_text.=sprintf("%-10s", $complete_xfer_log[$i][4])." | ";
    +		$HTML_text.=sprintf("%-20s", $complete_xfer_log[$i][5])." | ";
    +		$HTML_text.=sprintf("%-10s", $complete_xfer_log[$i][6])." | ";
    +		$HTML_text.=sprintf("%-20s", $complete_xfer_log[$i][7])." | ";
    +		$HTML_text.=sprintf("%-20s", $complete_xfer_log[$i][8])." | ";
    +		$HTML_text.=sprintf("%-20s", $complete_xfer_log[$i][9])." | ";
    +		$HTML_text.=sprintf("%-19s", $complete_xfer_log[$i][10])." | ";
    +		$HTML_text.=sprintf("%-6s", $complete_xfer_log[$i][11])." |\n";
    +		for ($j=0; $j<=11; $j++) {
    +			$CSV_text1.="\"".$complete_xfer_log[$i][$j]."\",";
    +		}
    +		$CSV_text1=preg_replace("/,$/", "", $CSV_text1);
    +		$CSV_text1.="\n";
    +	}
    +	$HTML_text.=$output_header;
    +} else {
    +	$CSV_text1=count($complete_xfer_log);
    +}
    +
    +
    +if ($show_summary) {
    +
    +$HTML_text.=_QXZ("In-Group Fronter-Closer Stats Report",57)." $NOW_TIME\n";
    +
    +$HTML_text.="\n";
    +$HTML_text.="---------- "._QXZ("TOTALS FOR")." $query_date_BEGIN "._QXZ("to")." $query_date_END\n";
    +
    +$sale_dispo_stmt="select distinct status from vicidial_campaign_statuses where sale='Y' and campaign_id in (SELECT campaign_id from vicidial_campaigns where closer_campaigns LIKE \"% " . mysqli_real_escape_string($link, $group) . " %\" $LOGallowed_campaignsSQL) UNION select distinct status from vicidial_statuses where sale='Y'";
    +if ($DB) {$HTML_text.="$sale_dispo_stmt\n";}
    +$sale_dispo_rslt=mysql_to_mysqli($sale_dispo_stmt, $link);
    +$sale_dispos="'SALE'"; $sale_dispo_str="|SALE";
    +while ($ssrow=mysqli_fetch_row($sale_dispo_rslt)) {
    +	$sale_dispos.=",'$ssrow[0]'";
    +	$sale_dispo_str.="|$ssrow[0]";
    +}
    +$sale_dispo_str.="|";
    +if ($DB) {$HTML_text.=_QXZ("Sale dispo string").": $sale_dispo_str\n";}
    +
    +$stmt="select count(*) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "' and status in ($sale_dispos);";
    +$rslt=mysql_to_mysqli($stmt, $link);
    +if ($DB) {$HTML_text.="$stmt\n";}
    +$row=mysqli_fetch_row($rslt);
    +
    +$HTML_text.=_QXZ("STATUS",8)." "._QXZ("CUSTOMERS")."\n";
    +$HTML_text.=_QXZ("SALES").":   $A1_tally\n";
    +
    +$HTML_text.="\n";
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +##############################
    +#########  FRONTER STATS
    +
    +$TOTagents=0;
    +$TOTcalls=0;
    +$TOTsales=0;
    +$totDROP=0;
    +$totOTHER=0;
    +
    +$CSV_fronter_header="\""._QXZ("TOTALS FOR")." $query_date_BEGIN "._QXZ("to")." $query_date_END\"\n";
    +$CSV_fronter_header.="\""._QXZ("STATUS   CUSTOMERS")."\"\n";
    +$CSV_fronter_header.="\""._QXZ("SALES").":   $A1_tally\"\n\n";
    +$CSV_fronter_header.="\""._QXZ("FRONTER STATS")."\"\n";
    +$CSV_fronter_header.="\""._QXZ("AGENT")."\",\""._QXZ("XFERS")."\",\""._QXZ("SALE")."%\",\""._QXZ("SALE")."\",\""._QXZ("DROP")."\",\""._QXZ("OTHER")."\"\n";
    +$CSV_fronter_lines="";
    +$CSV_fronter_footer="";
    +
    +$ASCII_text="\n";
    +$ASCII_text.="---------- "._QXZ("FRONTER STATS")."\n";
    +$ASCII_text.="+--------------------------+--------+--------+------+------+------+\n";
    +$ASCII_text.="| "._QXZ("AGENT",24)." | "._QXZ("XFERS",6)." |"._QXZ("SALE",7)."%| "._QXZ("SALE",4)." | "._QXZ("DROP",4)." |"._QXZ("OTHER",5)." |\n";
    +$ASCII_text.="+--------------------------+--------+--------+------+------+------+\n";
    +
    +######## GRAPHING #########
    +$graph_stats=array();
    +$max_success=1;
    +$max_xfers=1;
    +$max_success_pct=1;
    +$max_sales=1;
    +$max_drops=1;
    +$max_other=1;
    +###########################
    +
    +$stmt="select user,count(*) from ".$vicidial_xfer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and  campaign_id='" . mysqli_real_escape_string($link, $group) . "' and user is not null $summary_user_xfer_log_SQL group by user;";
    +
    +
    +if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);}
    +$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[1]);
    +
    +	$userRAW[$i]=$row[0];
    +	$user[$i] =	sprintf("%-6s", $row[0]);while(strlen($user[$i])>6) {$user[$i] = substr("$user[$i]", 0, -1);}
    +	$USERcallsRAW[$i] =	$row[1];
    +	$USERcalls[$i] =	sprintf("%6s", $row[1]);
    +
    +	$i++;
    +	}
    +
    +$i=0;
    +while ($i < $users_to_print)
    +	{
    +	$stmt="select full_name from vicidial_users where user='$userRAW[$i]' $LOGadmin_viewable_groupsSQL;";
    +	if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);}
    +	$rslt=mysql_to_mysqli($stmt, $link);
    +	if ($DB) {$ASCII_text.="$stmt\n";}
    +	$names_to_print = mysqli_num_rows($rslt);
    +	if ($names_to_print > 0)
    +		{
    +		$row=mysqli_fetch_row($rslt);
    +		if ($non_latin < 1)
    +			{
    +			 $full_name[$i] =	sprintf("%-15s", $row[0]); while(strlen($full_name[$i])>15) {$full_name[$i] = substr("$full_name[$i]", 0, -1);}	
    +			}
    +		else
    +			{
    +			 $full_name[$i] =	sprintf("%-45s", $row[0]); while(mb_strlen($full_name[$i],'utf-8')>15) {$full_name[$i] = mb_substr("$full_name[$i]", 0, -1,'utf-8');}	
    +			}
    +		}
    +	else
    +		{$full_name[$i] = '               ';}
    +
    +	$DROP=0; $OTHER=0; $sales=0; 
    +	$stmt="select vc.status,count(*) from ".$vicidial_xfer_log_table." vx, ".$vicidial_closer_log_table." vc where vx.call_date >= '$query_date_BEGIN' and vx.call_date <= '$query_date_END' and vc.call_date >= '$query_date_BEGIN' and vc.call_date <= '$query_date_END' and  vc.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vx.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vx.user='$userRAW[$i]' and vc.lead_id=vx.lead_id and vc.xfercallid=vx.xfercallid group by vc.status;";
    +	if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);}
    +	$rslt=mysql_to_mysqli($stmt, $link);
    +	if ($DB) {$ASCII_text.="$stmt\n";}
    +	$lead_ids_to_print = mysqli_num_rows($rslt);
    +	$j=0;
    +	while ($j < $lead_ids_to_print)
    +		{
    +		$row=mysqli_fetch_row($rslt);
    +		$recL=0;
    +		if ( (preg_match("/\|$row[0]\|/", $sale_dispo_str)) and ($recL < 1) ) {$A1=$row[1]; $recL++; $sales=($sales + $row[1]);}
    +		if ( ($row[0]=='DROP' || $row[0]=='TIMEOT') and ($recL < 1) ) {$DROP=($DROP+$row[1]); $recL++;}
    +		if ($recL < 1) {$OTHER=($row[1] + $OTHER); $recL++;}
    +		$j++;
    +		}
    +
    +	$totDROP = ($totDROP + $DROP);
    +	$totOTHER = ($totOTHER + $OTHER);
    +	$TOTsales = ($TOTsales + $sales);
    +
    +	$Spct = MathZDC($sales, $USERcallsRAW[$i])*100;
    +	$Spct = round($Spct, 2);
    +	$Spct =	sprintf("%01.2f", $Spct);
    +	
    +	if ($sales>$max_success) {$max_success=$sales;}
    +	if ($USERcalls[$i]>$max_xfers) {$max_xfers=$USERcalls[$i];}
    +	if ($Spct>$max_success_pct) {$max_success_pct=$Spct;}
    +	if ($DROP>$max_drops) {$max_drops=$DROP;}
    +	if ($OTHER>$max_other) {$max_other=$OTHER;}
    +	$graph_stats[$i][0]="$user[$i] - $full_name[$i]";
    +	$graph_stats[$i][1]=$USERcalls[$i];
    +	$graph_stats[$i][2]=$Spct;
    +	$graph_stats[$i][3]=$sales;
    +	$graph_stats[$i][4]=$DROP;
    +	$graph_stats[$i][5]=$OTHER;
    +
    +	$DROP =	sprintf("%4s", $DROP);
    +	$OTHER =	sprintf("%4s", $OTHER);
    +	$sales =	sprintf("%4s", $sales);
    +	$Spct =	sprintf("%6s", $Spct);
    +
    +	$ASCII_text.="| $user[$i] - $full_name[$i] | $USERcalls[$i] | $Spct%| $sales | $DROP | $OTHER |\n";
    +	$CSV_fronter_lines.="\"$user[$i] - $full_name[$i]\",\"$USERcalls[$i]\",\"$Spct%\",\"$sales\",\"$DROP\",\"$OTHER\"\n";
    +
    +	$i++;
    +	}
    +
    +
    +$totSpct = MathZDC($TOTsales, $TOTcalls)*100;
    +$totSpct = round($totSpct, 2);
    +$totSpct =	sprintf("%01.2f", $totSpct);
    +$totSpct =	sprintf("%6s", $totSpct);
    +	
    +$TOTagents =	sprintf("%6s", $i);
    +$TOTcalls =		sprintf("%6s", $TOTcalls);
    +$TOTsales =		sprintf("%5s", $TOTsales);
    +$totDROP =		sprintf("%5s", $totDROP);
    +$totOTHER =		sprintf("%5s", $totOTHER);
    +
    +
    +$stmt="select avg(queue_seconds) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "';";
    +$rslt=mysql_to_mysqli($stmt, $link);
    +if ($DB) {$ASCII_text.="$stmt\n";}
    +$row=mysqli_fetch_row($rslt);
    +
    +$AVGwait = $row[0];
    +$AVGwait_M = MathZDC($AVGwait, 60);
    +$AVGwait_M = round($AVGwait_M, 2);
    +$AVGwait_M_int = intval("$AVGwait_M");
    +$AVGwait_S = ($AVGwait_M - $AVGwait_M_int);
    +$AVGwait_S = ($AVGwait_S * 60);
    +$AVGwait_S = round($AVGwait_S, 0);
    +if ($AVGwait_S < 10) {$AVGwait_S = "0$AVGwait_S";}
    +$AVGwait_MS = "$AVGwait_M_int:$AVGwait_S";
    +$AVGwait =		sprintf("%6s", $AVGwait_MS);
    +
    +
    +$ASCII_text.="+--------------------------+--------+--------+------+------+------+\n";
    +$ASCII_text.="| "._QXZ("TOTAL FRONTERS",14).": $TOTagents   | $TOTcalls | $totSpct%|$TOTsales |$totDROP |$totOTHER |\n";
    +$ASCII_text.="+--------------------------+--------+--------+------+------+------+\n";
    +$ASCII_text.="| "._QXZ("Average time in Queue for customers",52,"r").":    $AVGwait |\n";
    +$ASCII_text.="+--------------------------+--------+--------+------+------+------+\n";
    +
    +$CSV_fronter_footer.="\""._QXZ("TOTAL FRONTERS").": $TOTagents\",\"$TOTcalls\",\"$totSpct%\",\"$TOTsales\",\"$totDROP\",\"$totOTHER\"\n";
    +$CSV_fronter_footer.="\""._QXZ("Average time in Queue for customers").":    $AVGwait\"\n\n\n";
    +
    +	# USE THIS FOR multiple graphs, use pipe-delimited array elements, dataset_name|index|link_name
    +	$multigraph_text="";
    +	$graph_id++;
    +	$graph_array=array("FCSF_XFERSdata|1|XFERS|integer|", "FCSF_SALEPCTdata|2|SALE %|percent|", "FCSF_SALESdata|3|SALES|integer|", "FCSF_DROPSdata|4|DROPS|integer|", "FCSF_OTHERdata|5|OTHER|integer|");
    +	$default_graph="bar"; # Graph that is initally displayed when page loads
    +	include("graph_color_schemas.inc"); 
    +
    +	$graph_totals_array=array();
    +	$graph_totals_rawdata=array();
    +	for ($q=0; $q"._QXZ("TOTAL")." - ".sec_convert($current_graph_total, 'H')." \n";
    +				$chart_options="options: {tooltips: {callbacks: {label: function(tooltipItem, data) {var value = Math.round(data.datasets[0].data[tooltipItem.index]); return value.toHHMMSS();}}}, legend: { display: false }},";
    +				break;
    +			case "percent":
    +				$graph_totals_array[$q]="";
    +				$chart_options="options: {tooltips: {callbacks: {label: function(tooltipItem, data) {var value = data.datasets[0].data[tooltipItem.index]; return value + '%';}}}, legend: { display: false }},";
    +				break;
    +			default:
    +				$graph_totals_array[$q]="  "._QXZ("TOTAL").": $current_graph_total\n";
    +				$chart_options="options: { legend: { display: false }},";
    +				break;
    +		}
    +
    +		$datasets.=$data;
    +		$datasets.=$graphConstantsA.$graphConstantsB.$graphConstantsC.$graphConstants; # SEE TOP OF SCRIPT
    +		$datasets.="\t\t\t}\n";
    +		$datasets.="\t\t]\n";
    +		$datasets.="\t}\n";
    +
    +		$JS_text.=$labels.$datasets;
    +		# $JS_text.="}\n";
    +		# $JS_text.="prepChart('$default_graph', $graph_id, $q, $dataset_name);\n";
    +		$JS_text.="var main_ctx = document.getElementById(\"CanvasID".$graph_id."_".$q."\");\n";
    +		$JS_text.="var GraphID".$graph_id."_".$q." = new Chart(main_ctx, {type: '$default_graph', $chart_options data: $dataset_name});\n";
    +	}
    +
    +	$graph_count=count($graph_array);
    +	$graph_title=_QXZ("FRONTER STATS");
    +	include("graphcanvas.inc");
    +	$GRAPH_text.=$graphCanvas;
    +
    +
    +
    +##############################
    +#########  CLOSER STATS
    +$graph_stats=array();
    +$TOTagents=0;
    +$TOTcalls=0;
    +$totDROP=0;
    +$totOTHER=0;
    +$TOTsales=0;
    +
    +$CSV_closer_header="";
    +$CSV_closer_lines="";
    +$CSV_closer_footer="";
    +
    +$ASCII_text.="\n";
    +$ASCII_text.="---------- "._QXZ("CLOSER STATS")."\n";
    +$ASCII_text.="+--------------------------+--------+------+------+------+-------+\n";
    +$ASCII_text.="| "._QXZ("AGENT",24)." | "._QXZ("CALLS",6)." | "._QXZ("SALE",4)." | "._QXZ("DROP",4)." |"._QXZ("OTHER",5)." | "._QXZ("CONV",4)." %|\n";
    +$ASCII_text.="+--------------------------+--------+------+------+------+-------+\n";
    +
    +$CSV_closer_header="\""._QXZ("CLOSER STATS")."\"\n";
    +$CSV_closer_header.="\""._QXZ("AGENT")."\",\""._QXZ("CALLS")."\",\""._QXZ("SALE")."\",\""._QXZ("DROP")."\",\""._QXZ("OTHER")."\",\""._QXZ("CONV")." %\"\n";
    +
    +######## GRAPHING #########
    +$max_calls=1;
    +$max_sales=1;
    +$max_drops=1;
    +$max_other=1;
    +$max_sales2=1;
    +$max_conv_pct=1;
    +###########################
    +
    +$stmt="select user,count(*) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and  campaign_id='" . mysqli_real_escape_string($link, $group) . "' and user is not null $summary_user_closer_log_SQL group by user;";
    +if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);}
    +$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[1]);
    +	$userRAW[$i]=$row[0];
    +	$user[$i] =	sprintf("%-6s", $row[0]);while(strlen($user[$i])>6) {$user[$i] = substr("$user[$i]", 0, -1);}
    +	$USERcalls[$i] =	sprintf("%6s", $row[1]);
    +	$USERcallsRAW[$i] =	$row[1];
    +
    +	$i++;
    +	}
    +
    +$i=0;
    +while ($i < $users_to_print)
    +	{
    +	$stmt="select full_name from vicidial_users where user='$userRAW[$i]' $LOGadmin_viewable_groupsSQL;";
    +	if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);}
    +	$rslt=mysql_to_mysqli($stmt, $link);
    +	if ($DB) {$ASCII_text.="$stmt\n";}
    +	$names_to_print = mysqli_num_rows($rslt);
    +	if ($names_to_print > 0)
    +		{
    +		$row=mysqli_fetch_row($rslt);
    +		if ($non_latin < 1)
    +			{
    +			 $full_name[$i] =	sprintf("%-15s", $row[0]); while(strlen($full_name[$i])>15) {$full_name[$i] = substr("$full_name[$i]", 0, -1);}	
    +			}
    +		else
    +			{
    +			 $full_name[$i] =	sprintf("%-45s", $row[0]); while(mb_strlen($full_name[$i],'utf-8')>15) {$full_name[$i] = mb_substr("$full_name[$i]", 0, -1,'utf-8');}	
    +			}
    +		}
    +	else
    +		{$full_name[$i] = '               ';}
    +
    +	$DROP=0; $OTHER=0; $sales=0; $uTOP=0; $uBOT=0; $points=0;
    +	$stmt="select status,count(*) from ".$vicidial_closer_log_table." where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and  campaign_id='" . mysqli_real_escape_string($link, $group) . "' and user='$userRAW[$i]' group by status;";
    +	if ($non_latin > 0) {$rslt=mysql_to_mysqli("SET NAMES 'UTF8'", $link);}
    +	$rslt=mysql_to_mysqli($stmt, $link);
    +	if ($DB) {$ASCII_text.="$stmt\n";}
    +	$lead_ids_to_print = mysqli_num_rows($rslt);
    +	$j=0;
    +	while ($j < $lead_ids_to_print)
    +		{
    +		$row=mysqli_fetch_row($rslt);
    +		$recL=0;
    +		if ( preg_match("/\|$row[0]\|/", $sale_dispo_str) and ($recL < 1) ) 
    +			{
    +			$A1=$row[1]; $recL++; 
    +			$sales=($sales + $row[1]);
    +			$points = ($points + ($row[1] * 1) );
    +			}
    +		if ( ($row[0]=='DROP') and ($recL < 1) ) {$DROP=$row[1]; $recL++;}
    +		if ($recL < 1) {$OTHER=($row[1] + $OTHER); $recL++;}
    +		
    +		$j++;
    +		}
    +
    +	$TOTsales = ($TOTsales + $sales);
    +	$totDROP = ($totDROP + $DROP);
    +	$totOTHER = ($totOTHER + $OTHER);
    +	$totPOINTS = ($totPOINTS + $points);
    +
    +	$Cpct = MathZDC($sales, ( ($USERcallsRAW[$i] - 0) - $DROP) )*100;
    +	$Cpct = round($Cpct, 2);
    +	$Cpct =	sprintf("%01.2f", $Cpct);
    +	$Cpct =	sprintf("%6s", $Cpct);
    +
    +	$TOP = MathZDC($uTOP, $sales)*100;
    +	$TOP = round($TOP, 0);
    +	$TOP =	sprintf("%01.0f", $TOP);
    +	$TOP =	sprintf("%3s", $TOP);
    +
    +	$BOT = MathZDC($uBOT, $sales)*100;
    +	$BOT = round($BOT, 0);
    +	$BOT =	sprintf("%01.0f", $BOT);
    +	$BOT =	sprintf("%3s", $BOT);
    +
    +	$ppc = MathZDC($points, ( ($USERcallsRAW[$i] - 0) - $DROP) );
    +	$ppc = round($ppc, 2);
    +	$ppc =	sprintf("%01.2f", $ppc);
    +	$ppc =	sprintf("%4s", $ppc);
    +
    +	if ($USERcalls[$i]>$max_calls) {$max_calls=$USERcalls[$i];}
    +	if ($A1>$max_sales) {$max_sales=$A1;}
    +	if ($DROP>$max_drops) {$max_drops=$DROP;}
    +	if ($OTHER>$max_other) {$max_other=$OTHER;}
    +	if ($sales>$max_sales2) {$max_sales2=$sales;}
    +	if ($Cpct>$max_conv_pct) {$max_conv_pct=$Cpct;}
    +	$graph_stats[$i][0]="$user[$i] - $full_name[$i]";
    +	$graph_stats[$i][1]=$USERcalls[$i];
    +	$graph_stats[$i][2]=$sales;
    +	$graph_stats[$i][3]=$DROP;
    +	$graph_stats[$i][4]=$OTHER;
    +	$graph_stats[$i][5]=$Cpct;
    +
    +	$DROP =	sprintf("%4s", $DROP);
    +	$OTHER =	sprintf("%4s", $OTHER);
    +	$sales =	sprintf("%4s", $sales);
    +
    +	$ASCII_text.="| $user[$i] - $full_name[$i] | $USERcalls[$i] | $sales | $DROP | $OTHER |$Cpct%|\n";
    +	$CSV_closer_lines.="\"$user[$i] - $full_name[$i]\",\"$USERcalls[$i]\",\"$sales\",\"$DROP\",\"$OTHER\",\"$Cpct%\"\n";
    +
    +	$i++;
    +	}
    +
    +
    +$totCpct = MathZDC($TOTsales, ( ($TOTcalls - 0) - $totDROP) )*100;
    +$totCpct = round($totCpct, 2);
    +$totCpct =	sprintf("%01.2f", $totCpct);
    +$totCpct =	sprintf("%6s", $totCpct);
    +		
    +$ppc = MathZDC($totPOINTS, ( ($TOTcalls - $totOTHER) - $totDROP) );
    +$ppc = round($ppc, 2);
    +$ppc =	sprintf("%01.2f", $ppc);
    +$ppc =	sprintf("%4s", $ppc);
    +		
    +$TOP = MathZDC($totTOP, $TOTsales)*100;
    +$TOP = round($TOP, 0);
    +$TOP =	sprintf("%01.0f", $TOP);
    +$TOP =	sprintf("%3s", $TOP);
    +
    +$BOT = MathZDC($totBOT, $TOTsales)*100;
    +$BOT = round($BOT, 0);
    +$BOT =	sprintf("%01.0f", $BOT);
    +$BOT =	sprintf("%3s", $BOT);
    +
    +$TOTagents =	sprintf("%6s", $i);
    +$TOTcalls =		sprintf("%6s", $TOTcalls);
    +$totDROP =		sprintf("%5s", $totDROP);
    +$totOTHER =		sprintf("%5s", $totOTHER);
    +$TOTsales =		sprintf("%5s", $TOTsales);
    +
    +$ASCII_text.="+--------------------------+--------+------+------+------+-------+\n";
    +$ASCII_text.="| "._QXZ("TOTAL CLOSERS",13).":  $TOTagents   | $TOTcalls |$TOTsales |$totDROP |$totOTHER |$totCpct%|\n";
    +$ASCII_text.="+--------------------------+--------+------+------+------+-------+\n";
    +
    +$CSV_closer_footer.="\""._QXZ("TOTAL CLOSERS").":  $TOTagents\",\"$TOTcalls\",\"$totA1\",\"$totDROP\",\"$totOTHER\",\"$TOTsales\",\"$totCpct%\"\n";
    +
    +	# USE THIS FOR multiple graphs, use pipe-delimited array elements, dataset_name|index|link_name
    +	$multigraph_text="";
    +	$graph_id++;
    +	$graph_array=array("FCSC_CALLSdata|1|CALLS|integer|", "FCSC_SALESdata|2|SALES|integer|", "FCSC_DROPSdata|3|DROPS|integer|", "FCSC_OTHERdata|4|OTHER|integer|", "FCSC_CONVPCTdata|5|CONV %|percent|");
    +	$default_graph="bar"; # Graph that is initally displayed when page loads
    +	include("graph_color_schemas.inc"); 
    +
    +	$graph_totals_array=array();
    +	$graph_totals_rawdata=array();
    +	for ($q=0; $q"._QXZ("TOTAL")." - ".sec_convert($current_graph_total, 'H')." \n";
    +				$chart_options="options: {tooltips: {callbacks: {label: function(tooltipItem, data) {var value = Math.round(data.datasets[0].data[tooltipItem.index]); return value.toHHMMSS();}}}, legend: { display: false }},";
    +				break;
    +			case "percent":
    +				$graph_totals_array[$q]="";
    +				$chart_options="options: {tooltips: {callbacks: {label: function(tooltipItem, data) {var value = data.datasets[0].data[tooltipItem.index]; return value + '%';}}}, legend: { display: false }},";
    +				break;
    +			default:
    +				$graph_totals_array[$q]="  "._QXZ("TOTAL").": $current_graph_total\n";
    +				$chart_options="options: { legend: { display: false }},";
    +				break;
    +		}
    +
    +		$datasets.=$data;
    +		$datasets.=$graphConstantsA.$graphConstantsB.$graphConstantsC.$graphConstants; # SEE TOP OF SCRIPT
    +		$datasets.="\t\t\t}\n";
    +		$datasets.="\t\t]\n";
    +		$datasets.="\t}\n";
    +
    +		$JS_text.=$labels.$datasets;
    +		# $JS_text.="}\n";
    +		# $JS_text.="prepChart('$default_graph', $graph_id, $q, $dataset_name);\n";
    +		$JS_text.="var main_ctx = document.getElementById(\"CanvasID".$graph_id."_".$q."\");\n";
    +		$JS_text.="var GraphID".$graph_id."_".$q." = new Chart(main_ctx, {type: '$default_graph', $chart_options data: $dataset_name});\n";
    +	}
    +
    +	$graph_count=count($graph_array);
    +	$graph_title=_QXZ("CLOSER STATS");
    +	include("graphcanvas.inc");
    +	$GRAPH_text.=$graphCanvas;
    +}
    +
    +$ENDtime = date("U");
    +$RUNtime = ($ENDtime - $STARTtime);
    +
    +if ($report_display_type=="HTML") {
    +	$HTML_text.=$GRAPH_text;
    +	} 
    +else 
    +	{
    +	$HTML_text.=$ASCII_text;
    +	}
    +
    +if ($DB) {$HTML_text.="\n"._QXZ("Run Time").": $RUNtime "._QXZ("seconds")."|$db_source\n";}
    +
    +$HTML_text.="
    \n"; + +$HTML_text.="\n"; + +if ($file_download > 0) + { + $FILE_TIME = date("Ymd-His"); + $CSVfilename = "FCSTATS_$US$FILE_TIME.csv"; + $CSV_text=$CSV_text1."\n\n".$CSV_fronter_header.$CSV_fronter_lines.$CSV_fronter_footer.$CSV_closer_header.$CSV_closer_lines.$CSV_closer_footer; + $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 + { + $JS_onload.="}\n"; + if ($report_display_type=='HTML') {$JS_text.=$JS_onload;} + $JS_text.="\n"; + + echo $HTML_head; + require("admin_header.php"); + echo $HTML_text; + echo $JS_text; + } + +#$CSV_report=fopen("fcstats.csv", "w"); +#$CSV_head=preg_replace('/\s+,/', ',', $CSV_fronter_header.$CSV_fronter_lines.$CSV_fronter_footer.$CSV_closer_header.$CSV_closer_lines.$CSV_closer_footer); +#fwrite($CSV_report, $CSV_head); +#fclose($CSV_report); + + + + +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; + +} + + +?> +