diff --git a/agc_2-X/trunk/agi/cm_speak_var.agi b/agc_2-X/trunk/agi/cm_speak_var.agi new file mode 100644 index 00000000..8c219b87 --- /dev/null +++ b/agc_2-X/trunk/agi/cm_speak_var.agi @@ -0,0 +1,390 @@ +#!/usr/bin/perl +# +# cm_speak_var.agi version 2.10 +# +# runs after a call has lead_id assigned to it, speaks letters/numbers +# +# You need to put lines similar to those below in your Custom Dialplan: +# +# exten => 8412,1,Answer +# exten => 8412,n,AGI(cm_speak_var.agi,say_digits---security_phrase) +# exten => 8412,n,Hangup +# +# CLI FLAG OPTIONS: +# 1. function: (say_digits, say_number, say_alpha, say_datetime, say_phonetic, stream_file) +# 2. field: (any vicidial_list field) +# +# Copyright (C) 2014 Matt Florell LICENSE: AGPLv2 +# +# changes: +# 140619-2005 - first build +# + +$script = 'cm_speak_var.agi'; + +$CM_LOG = 1; # set to 1 for logfile + +($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); +$year = ($year + 1900); +$mon++; +if ($mon < 10) {$mon = "0$mon";} +if ($mday < 10) {$mday = "0$mday";} +if ($hour < 10) {$hour = "0$hour";} +if ($min < 10) {$min = "0$min";} +if ($sec < 10) {$sec = "0$sec";} + +$now_date_epoch = time(); +$now_date = "$year-$mon-$mday $hour:$min:$sec"; + +# default path to astguiclient configuration file: +$PATHconf = '/etc/astguiclient.conf'; + +open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n"; +@conf = ; +close(conf); +$i=0; +foreach(@conf) + { + $line = $conf[$i]; + $line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi; + if ( ($line =~ /^PATHhome/) && ($CLIhome < 1) ) + {$PATHhome = $line; $PATHhome =~ s/.*=//gi;} + if ( ($line =~ /^PATHlogs/) && ($CLIlogs < 1) ) + {$PATHlogs = $line; $PATHlogs =~ s/.*=//gi;} + if ( ($line =~ /^PATHagi/) && ($CLIagi < 1) ) + {$PATHagi = $line; $PATHagi =~ s/.*=//gi;} + if ( ($line =~ /^PATHweb/) && ($CLIweb < 1) ) + {$PATHweb = $line; $PATHweb =~ s/.*=//gi;} + if ( ($line =~ /^PATHsounds/) && ($CLIsounds < 1) ) + {$PATHsounds = $line; $PATHsounds =~ s/.*=//gi;} + if ( ($line =~ /^PATHmonitor/) && ($CLImonitor < 1) ) + {$PATHmonitor = $line; $PATHmonitor =~ s/.*=//gi;} + if ( ($line =~ /^VARserver_ip/) && ($CLIserver_ip < 1) ) + {$VARserver_ip = $line; $VARserver_ip =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_server/) && ($CLIDB_server < 1) ) + {$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_database/) && ($CLIDB_database < 1) ) + {$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_user/) && ($CLIDB_user < 1) ) + {$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_pass/) && ($CLIDB_pass < 1) ) + {$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;} + if ( ($line =~ /^VARDB_port/) && ($CLIDB_port < 1) ) + {$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;} + $i++; + } + +if (!$VARDB_port) {$VARDB_port='3306';} +if (!$CMLOGfile) {$CMLOGfile = "$PATHlogs/cmout.$year-$mon-$mday";} +if (!$AGILOGfile) {$AGILOGfile = "$PATHlogs/agiout.$year-$mon-$mday";} + +use DBI; +use Asterisk::AGI; +$AGI = new Asterisk::AGI; + + +$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass") + or die "Couldn't connect to database: " . DBI->errstr; + +### Grab Server values from the database +$stmtA = "SELECT agi_output,asterisk_version,ext_context FROM servers where server_ip = '$VARserver_ip';"; +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +if ($sthArows > 0) + { + $AGILOG = '0'; + @aryA = $sthA->fetchrow_array; + $DBagi_output = $aryA[0]; + $asterisk_version = $aryA[1]; + $DBext_context = $aryA[2]; + if ($DBext_context) {$ext_context = $DBext_context;} + if ($DBagi_output =~ /STDERR/) {$AGILOG = '1';} + if ($DBagi_output =~ /FILE/) {$AGILOG = '2';} + if ($DBagi_output =~ /BOTH/) {$AGILOG = '3';} + } +$sthA->finish(); + +### begin parsing run-time options ### +if (length($ARGV[0])>1) + { + if ($AGILOG) + {$agi_string = "Perl Environment Dump:"; &agi_output;} + $i=0; + while ($#ARGV >= $i) + { + $args = "$args $ARGV[$i]"; + if ($AGILOG) {$agi_string = "$i|$ARGV[$i]"; &agi_output;} + $i++; + } + + ### list of command-line array arguments: + @ARGV_vars = split(/---/, $ARGV[0]); + $CLI_function = $ARGV_vars[0]; + $CLI_field = $ARGV_vars[1]; + } + +$|=1; +while() + { + chomp; + last unless length($_); + if ($AGILOG) + { + if (/^agi_(\w+)\:\s+(.*)$/) + { + $AGI{$1} = $2; + } + } + + if (/^agi_uniqueid\:\s+(.*)$/) {$unique_id = $1; $uniqueid = $unique_id;} + if (/^agi_priority\:\s+(.*)$/) {$priority = $1;} + if (/^agi_channel\:\s+(.*)$/) {$channel = $1;} + if (/^agi_extension\:\s+(.*)$/) {$extension = $1;} + if (/^agi_type\:\s+(.*)$/) {$type = $1;} + if (/^agi_callerid\:\s+(.*)$/) {$callerid = $1; $calleridnum = $callerid;} + if (/^agi_calleridname\:\s+(.*)$/) {$calleridname = $1;} + } + +if ( (length($callerid)>20) && ($callerid =~ /\"\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S/) ) + { + $callerid =~ s/^\"//gi; + $callerid =~ s/\".*$//gi; + } +if ( ( +(length($calleridname)>5) && ( (!$callerid) or ($callerid =~ /unknown|private|00000000/i) or ($callerid =~ /5551212/) ) +) or ( (length($calleridname)>17) && ($calleridname =~ /\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d/) ) ) + { + $callerid = $calleridname; + } + + +if ($AGILOG) {$agi_string = "AGI Environment Dump:"; &agi_output;} + +foreach $i (sort keys %AGI) + { + if ($AGILOG) {$agi_string = " -- $i = $AGI{$i}"; &agi_output;} + } + +if ($AGILOG) {$agi_string = "AGI Variables: |$unique_id|$channel|$extension|$type|$callerid|"; &agi_output;} + + +$callerid =~ s/\"//gi; +$callerid =~ s/ .*//gi; +$CIDlead_id = $callerid; +if ( ($calleridname =~ /^DC/) && ($calleridname =~ /\d\d\d\d\d\d\d\d\d\dW$/) ) #DC234728W0001010141W + {$CIDlead_id = substr($calleridname, 9, 10);} +else + {$CIDlead_id = substr($CIDlead_id, 10, 10);} +$CIDlead_id = ($CIDlead_id + 0); +if ( ($CLIlead_id > 0) && ($CIDlead_id < 1) ) {$CIDlead_id = $CLIlead_id;} +$VD_lead_id = $CIDlead_id; + +if ($AGILOG) {$agi_string = "+++++ cm_speak_var START : |$CLI_function|$CLI_field|$CIDlead_id|$now_date|$AST_ver|$priority|$calleridname|"; &agi_output;} + +if ($CM_LOG) + { + open(Lout, ">>$CMLOGfile") + || die "Can't open $CMLOGfile: $!\n"; + print Lout "$now_date|$VD_lead_id| |$CLI_function|$CLI_field|$calleridnum|$callerid|\n"; + close(Lout); + } + +$AGI->stream_file('sip-silence'); +$AGI->stream_file('sip-silence'); + + +$stmtA = "SELECT lead_id,entry_date,modify_date,status,user,vendor_lead_code,source_id,list_id,phone_number,title,first_name,middle_initial,last_name,address1,address2,address3,city,state,province,postal_code,country_code,gender,date_of_birth,alt_phone,email,security_phrase,comments,called_count,last_local_call_time,rank,owner FROM vicidial_list where lead_id='$VD_lead_id';"; +$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr; +$sthA->execute or die "executing: $stmtA ", $dbhA->errstr; +$sthArows=$sthA->rows; +if ($sthArows > 0) + { + @aryA = $sthA->fetchrow_array; + $CM_lead_id = $aryA[0]; + $CM_entry_date = $aryA[1]; + $CM_modify_date = $aryA[2]; + $CM_status = $aryA[3]; + $CM_user = $aryA[4]; + $CM_vendor_lead_code = $aryA[5]; + $CM_source_id = $aryA[6]; + $CM_list_id = $aryA[7]; + $CM_phone_number = $aryA[8]; + $CM_title = $aryA[9]; + $CM_first_name = $aryA[10]; + $CM_middle_initial = $aryA[11]; + $CM_last_name = $aryA[12]; + $CM_address1 = $aryA[13]; + $CM_address2 = $aryA[14]; + $CM_address3 = $aryA[15]; + $CM_city = $aryA[16]; + $CM_state = $aryA[17]; + $CM_province = $aryA[18]; + $CM_postal_code = $aryA[19]; + $CM_country_code = $aryA[20]; + $CM_gender = $aryA[21]; + $CM_date_of_birth = $aryA[22]; + $CM_alt_phone = $aryA[23]; + $CM_email = $aryA[24]; + $CM_security_phrase = $aryA[25]; + $CM_comments = $aryA[26]; + $CM_called_count = $aryA[27]; + $CM_last_local_call_time = $aryA[28]; + $CM_rank = $aryA[29]; + $CM_owner = $aryA[30]; + } +$sthA->finish(); + +if ($CLI_field =~ /lead_id/) {$field_value = $CM_lead_id;} +if ($CLI_field =~ /entry_date/) {$field_value = $CM_entry_date;} +if ($CLI_field =~ /modify_date/) {$field_value = $CM_modify_date;} +if ($CLI_field =~ /status/) {$field_value = $CM_status;} +if ($CLI_field =~ /user/) {$field_value = $CM_user;} +if ($CLI_field =~ /vendor_lead_code/) {$field_value = $CM_vendor_lead_code;} +if ($CLI_field =~ /source_id/) {$field_value = $CM_source_id;} +if ($CLI_field =~ /list_id/) {$field_value = $CM_list_id;} +if ($CLI_field =~ /phone_number/) {$field_value = $CM_phone_number;} +if ($CLI_field =~ /title/) {$field_value = $CM_title;} +if ($CLI_field =~ /first_name/) {$field_value = $CM_first_name;} +if ($CLI_field =~ /middle_initial/) {$field_value = $CM_middle_initial;} +if ($CLI_field =~ /last_name/) {$field_value = $CM_last_name;} +if ($CLI_field =~ /address1/) {$field_value = $CM_address1;} +if ($CLI_field =~ /address2/) {$field_value = $CM_address2;} +if ($CLI_field =~ /address3/) {$field_value = $CM_address3;} +if ($CLI_field =~ /city/) {$field_value = $CM_city;} +if ($CLI_field =~ /state/) {$field_value = $CM_state;} +if ($CLI_field =~ /province/) {$field_value = $CM_province;} +if ($CLI_field =~ /postal_code/) {$field_value = $CM_postal_code;} +if ($CLI_field =~ /country_code/) {$field_value = $CM_country_code;} +if ($CLI_field =~ /gender/) {$field_value = $CM_gender;} +if ($CLI_field =~ /date_of_birth/) {$field_value = $CM_date_of_birth;} +if ($CLI_field =~ /alt_phone/) {$field_value = $CM_alt_phone;} +if ($CLI_field =~ /email/) {$field_value = $CM_email;} +if ($CLI_field =~ /security_phrase/) {$field_value = $CM_security_phrase;} +if ($CLI_field =~ /comments/) {$field_value = $CM_comments;} +if ($CLI_field =~ /called_count/) {$field_value = $CM_called_count;} +if ($CLI_field =~ /last_local_call_time/) {$field_value = $CM_last_local_call_time;} +if ($CLI_field =~ /rank/) {$field_value = $CM_rank;} +if ($CLI_field =~ /owner/) {$field_value = $CM_owner;} + + +if ($CLI_function =~ /say_digits/) + { + $AGI->say_digits("$field_value"); + } +if ($CLI_function =~ /say_number/) + { + $AGI->say_number("$field_value"); + } +if ($CLI_function =~ /say_alpha/) + { + $AGI->say_alpha("$field_value"); + } +if ($CLI_function =~ /say_datetime/) + { + $AGI->say_datetime("$field_value"); + } +if ($CLI_function =~ /say_phonetic/) + { + $AGI->say_phonetic("$field_value"); + } +if ($CLI_function =~ /stream_file/) + { + $AGI->stream_file("$field_value"); + } + +$dbhA->disconnect(); + +#$AGI->hangup($channel); + + + + +exit; + +sub checkresult + { + my ($res) = @_; + my $retval; + $tests++; + chomp $res; + if ($res =~ /^200/) + { + $res =~ /result=(-?\d+)/; + if (!length($1)) + { + # print STDERR "FAIL ($res)\n"; + $fail++; + } + else + { + # print STDERR "PASS ($1)\n"; + $pass++; + } + } + else + { + # print STDERR "FAIL (unexpected result '$res')\n"; + $fail++; + } + } + + +sub agi_output + { + if ($AGILOG >=2) + { + ### open the log file for writing ### + open(Lout, ">>$AGILOGfile") + || die "Can't open $AGILOGfile: $!\n"; + print Lout "$now_date|$script|$agi_string\n"; + close(Lout); + } + ### send to STDERR writing ### + if ( ($AGILOG == '1') || ($AGILOG == '3') ) + {print STDERR "$now_date|$script|$agi_string\n";} + $agi_string=''; + } + +# subroutine to parse the asterisk version +# and return a hash with the various part +sub parse_asterisk_version + { + # grab the arguments + my $ast_ver_str = $_[0]; + + # get everything after the - and put it in $ast_ver_postfix + my @hyphen_parts = split( /-/ , $ast_ver_str ); + + my $ast_ver_postfix = $hyphen_parts[1]; + + # now split everything before the - up by the . + my @dot_parts = split( /\./ , $hyphen_parts[0] ); + + my %ast_ver_hash; + + if ( $dot_parts[0] <= 1 ) + { + %ast_ver_hash = ( + "major" => $dot_parts[0], + "minor" => $dot_parts[1], + "build" => $dot_parts[2], + "revision" => $dot_parts[3], + "postfix" => $ast_ver_postfix + ); + } + + # digium dropped the 1 from asterisk 10 but we still need it + if ( $dot_parts[0] > 1 ) + { + %ast_ver_hash = ( + "major" => 1, + "minor" => $dot_parts[0], + "build" => $dot_parts[1], + "revision" => $dot_parts[2], + "postfix" => $ast_ver_postfix + ); + } + + return ( %ast_ver_hash ); + } diff --git a/agc_2-X/trunk/extras/fcstats_detail.php b/agc_2-X/trunk/extras/fcstats_detail.php new file mode 100644 index 00000000..ed61500a --- /dev/null +++ b/agc_2-X/trunk/extras/fcstats_detail.php @@ -0,0 +1,1365 @@ + 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 +# + +$startMS = microtime(); + +require("dbconnect_mysqli.php"); +require("functions.php"); + +if(!function_exists('MathZDC')) { + function MathZDC($dividend, $divisor, $quotient=0) { + if ($divisor==0) { + return $quotient; + } else if ($dividend==0) { + return 0; + } else { + return ($dividend/$divisor); + } + } +} + +$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["query_date"])) {$query_date=$_GET["query_date"];} + elseif (isset($_POST["query_date"])) {$query_date=$_POST["query_date"];} +if (isset($_GET["query_hour"])) {$query_hour=$_GET["query_hour"];} + elseif (isset($_POST["query_hour"])) {$query_hour=$_POST["query_hour"];} +if (isset($_GET["end_date"])) {$end_date=$_GET["end_date"];} + elseif (isset($_POST["end_date"])) {$end_date=$_POST["end_date"];} +if (isset($_GET["end_hour"])) {$end_hour=$_GET["end_hour"];} + elseif (isset($_POST["end_hour"])) {$end_hour=$_POST["end_hour"];} +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["file_download"])) {$file_download=$_GET["file_download"];} + elseif (isset($_POST["file_download"])) {$file_download=$_POST["file_download"];} +if (isset($_GET["user_group"])) {$user_group=$_GET["user_group"];} + elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];} +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 (strlen($shift)<2) {$shift='ALL';} + + +$report_name = 'Fronter - Closer Report'; +$db_source = 'M'; +$JS_text="\n"; +$HTML_head.="\n"; +$HTML_head.="\n"; + +#if (strlen($group) > 0) +# { +# if (preg_match("/\|$group\|/i",$groups_string)) +# { +# # $HTML_head.="\n"; +# } +# else +# { +# # $HTML_head.="\n"; +# $group=''; +# } +# } + +$HTML_head.="\n"; +$HTML_head.="$report_name\n"; + + $short_header=1; + +# require("admin_header.php"); + +$HTML_text.="
\n"; +$HTML_text.="\n"; + +$HTML_text.="
"; + +$HTML_text.=""; + +$HTML_text.="\n"; +$HTML_text.=":00:00\n"; + +$HTML_text.=" to "; + +$HTML_text.="\n"; +$HTML_text.=":59:59\n"; + + +$HTML_text.="     "; +$HTML_text.="\n"; +$HTML_text.="\n"; +$HTML_text.="\n"; +$HTML_text.="\n"; +$HTML_text.="           DOWNLOAD | MODIFY | REPORTS
In-group:    \n"; + +$HTML_text.="User Groups: \n"; + + +$HTML_text.="
\n\n"; + +$HTML_text.="
\n\n";
+
+
+if (!$group)
+{
+$HTML_text.="\n\n";
+$HTML_text.="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);
+$Eqdate = 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, $Eqdate[1], $Eqdate[2], $Eqdate[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, $Eqdate[1], $Eqdate[2], $Eqdate[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, $Eqdate[1], $Eqdate[2], $Eqdate[0]));
+	}
+if ($query_hour) 
+	{
+	$query_date_BEGIN = date("Y-m-d H:i:s", mktime($query_hour, 0, 0, $Cqdate[1], $Cqdate[2], $Cqdate[0]));
+	}
+if ($end_hour) 
+	{
+	$query_date_END = date("Y-m-d H:i:s", mktime($end_hour, 59, 59, $Eqdate[1], $Eqdate[2], $Eqdate[0]));
+	}
+
+$HTML_text.="In-Group Fronter-Closer Stats Report                      $NOW_TIME\n";
+
+$HTML_text.="\n";
+$HTML_text.="---------- TOTALS FOR $query_date_BEGIN to $query_date_END\n";
+
+$fronter_campaign_stmt="select campaign_id from vicidial_campaigns where closer_campaigns like '%".mysqli_real_escape_string($link, $group)."%' $LOGallowed_campaignsSQL";
+$fronter_campaign_rslt=mysql_to_mysqli($fronter_campaign_stmt, $link);
+$fronter_campaigns_ct=mysqli_num_rows($fronter_campaign_rslt);
+for ($q=0; $q<$fronter_campaigns_ct; $q++) {
+	$campaign_row=mysqli_fetch_row($fronter_campaign_rslt);
+	$fronter_campaigns.="'$campaign_row[0]',";
+}
+$fronter_campaigns=preg_replace('/,$/', '', $fronter_campaigns);
+
+$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.="Sale dispo string: $sale_dispo_str\n";}
+
+$stmt="select count(*) from vicidial_closer_log 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) $VCLuser_group_SQL;";
+$rslt=mysql_to_mysqli($stmt, $link);
+if ($DB) {$HTML_text.="$stmt\n";}
+$row=mysqli_fetch_row($rslt);
+$A1_points = ($row[0] * 1);
+$A1_points =	sprintf("%10s", $A1_points);
+$A1_tally =	sprintf("%10s", $row[0]);
+
+$TOT_tally = ($A1_tally + $A2_tally + $A3_tally + $A4_tally);
+$TOT_points = ($A1_points + $A2_points + $A3_points + $A4_points);
+$TOT_tally =	sprintf("%10s", $TOT_tally);
+$TOT_points =	sprintf("%10s", $TOT_points);
+
+$HTML_text.="IN-GROUP:        $group\n";
+$HTML_text.="USER GROUPS:     $user_group_string\n";
+$HTML_text.="STATUS           CUSTOMERS\n";
+$HTML_text.="SALES:          $A1_tally\n";
+
+$HTML_text.="\n";
+
+
+
+
+
+
+
+
+
+##############################
+#########  FRONTER STATS
+
+$TOTagents=0;
+$TOTcalls=0;
+$TOTsales=0;
+$totA1=0;
+$totDROP=0;
+$totOTHER=0;
+$TOTunder540=0;
+$TOTover540=0;
+$TOTagent_xfers=0;
+$TOTagent_calls=0;
+
+$CSV_fronter_header="\"TOTALS FOR $query_date_BEGIN to $query_date_END\"\n";
+$CSV_fronter_header.="\"IN-GROUP:\",\"$group\"\n";
+$CSV_fronter_header.="\"USER GROUPS:\",\"$user_group_string\"\n";
+$CSV_fronter_header.="\"STATUS   CUSTOMERS\"\n";
+$CSV_fronter_header.="\"SALES:   $A1_tally\"\n\n";
+$CSV_fronter_header.="\"FRONTER STATS\"\n";
+$CSV_fronter_header.="\"AGENT\",\"XFERS\",\"CALLS\",\"XFER %\",\"DROP\",\"OVER 540\",\"UNDER 539\",\"SALE\"\n";
+$CSV_fronter_lines="";
+$CSV_fronter_footer="";
+
+$CSV_fronter_header2="\"TOTALS FOR $query_date_BEGIN to $query_date_END\"\n";
+$CSV_fronter_header.="\"IN-GROUP:\",\"$group\"\n";
+$CSV_fronter_header.="\"USER GROUPS:\",\"$user_group_string\"\n";
+$CSV_fronter_header2.="\"SALES:   $A1_tally\"\n\n";
+$CSV_fronter_header2.="\"FRONTER XFER DETAILS\"\n";
+
+$CSV_fronter_header3="\"TOTALS FOR $query_date_BEGIN to $query_date_END\"\n";
+$CSV_fronter_header.="\"IN-GROUP:\",\"$group\"\n";
+$CSV_fronter_header.="\"USER GROUPS:\",\"$user_group_string\"\n";
+$CSV_fronter_header3.="\"SALES:   $A1_tally\"\n\n";
+$CSV_fronter_header3.="\"CLOSER XFER DETAILS\"\n";
+
+
+$ASCII_text="\n";
+$ASCII_text.="---------- FRONTER STATS      [download details]\n";
+$ASCII_text.="+--------------------------+--------+--------+--------+------+------+------+------+\n";
+$ASCII_text.="|                          |        |        |        |      | OVER |UNDER |      |\n";
+$ASCII_text.="| AGENT (click for details)| XFERS  | CALLS  | XFER % | DROP |  540 | 540  | SALE |\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;
+$GRAPH="";
+$GRAPH.="";
+$GRAPH.="
SUCCESSXFERSSUCCESS %SALEDROPOTHER

 


"; +$graph_header=""; +$SUCCESS_graph=$graph_header.""; +$XFERS_graph=$graph_header.""; +$SUCCESSPCT_graph=$graph_header.""; +$SALE_graph=$graph_header.""; +$DROP_graph=$graph_header.""; +$OTHER_graph=$graph_header.""; +########################### + +# GET ARRAY OF VICIDIAL USERS FOR LATER USE +$user_stmt="select user, full_name, user_group from vicidial_users where user_group is not null $TCuser_group_SQL"; +if ($DB) {$ASCII_text.="$user_stmt\n";} +$user_rslt=mysql_to_mysqli($user_stmt, $link); +$user_array=array(); +$user_id_array=array(); +while ($user_row=mysqli_fetch_row($user_rslt)) { + $user_array["$user_row[0]"]=$user_row[1]; + $user_id_array[]=$user_row[0]; +} +$user_full_str="'".implode("','", $user_id_array)."'"; + +# $stmt="select vicidial_xfer_log.user,count(distinct vicidial_xfer_log.lead_id) from vicidial_xfer_log where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "' and user in ($user_full_str) group by user;"; +$stmt="select vicidial_xfer_log.user,count(*) from vicidial_xfer_log where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "' and user in ($user_full_str) 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] = ' ';} + + $A1=0; $DROP=0; $OTHER=0; $sales=0; $under540=0; $over540=0; $agent_xfers=0; $agent_calls=0; + + # GET TOTAL CALLS + $call_stmt="select count(*) from vicidial_agent_log where user='$userRAW[$i]' and campaign_id in ($fronter_campaigns) $user_group_SQL and event_time >= '$query_date_BEGIN' and event_time <= '$query_date_END' and lead_id is not null"; + if ($DB) {$ASCII_text.="$call_stmt\n";} + $call_rslt=mysql_to_mysqli($call_stmt, $link); + $crow=mysqli_fetch_row($call_rslt); + $agent_calls+=$crow[0]; + + # GET TOTAL TRANSFERS ON OUTBOUND CALLS + # $stmt="select vicidial_list.phone_number, trim(concat(vicidial_list.first_name, ' ', vicidial_list.last_name)) as full_name, vicidial_list.lead_id, vicidial_log.length_in_sec, vicidial_xfer_log.user, vicidial_xfer_log.closer, (vicidial_closer_log.length_in_sec-vicidial_closer_log.queue_seconds) as talk_time, vicidial_xfer_log.call_date, vicidial_xfer_log.xfercallid from vicidial_list, vicidial_log, vicidial_xfer_log, vicidial_closer_log where vicidial_xfer_log.call_date >= '$query_date_BEGIN' and vicidial_xfer_log.call_date <= '$query_date_END' and vicidial_log.call_date >= '$query_date_BEGIN' and vicidial_log.call_date <= '$query_date_END' and vicidial_log.campaign_id in ($fronter_campaigns) $VLuser_group_SQL and vicidial_xfer_log.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vicidial_xfer_log.user='$userRAW[$i]' and vicidial_xfer_log.lead_id=vicidial_log.lead_id and vicidial_xfer_log.user=vicidial_log.user and vicidial_xfer_log.lead_id=vicidial_list.lead_id and vicidial_xfer_log.xfercallid=vicidial_closer_log.xfercallid $VCLuser_group_SQL order by vicidial_xfer_log.call_date asc"; + + $stmt="select vicidial_list.phone_number, trim(concat(vicidial_list.first_name, ' ', vicidial_list.last_name)) as full_name, vicidial_list.lead_id, 0 as length_in_sec, vicidial_xfer_log.user, vicidial_xfer_log.closer, (vicidial_closer_log.length_in_sec-vicidial_closer_log.queue_seconds) as talk_time, vicidial_xfer_log.call_date, vicidial_xfer_log.xfercallid from vicidial_list, vicidial_xfer_log, vicidial_closer_log where vicidial_xfer_log.call_date >= '$query_date_BEGIN' and vicidial_xfer_log.call_date <= '$query_date_END' and vicidial_xfer_log.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vicidial_xfer_log.user='$userRAW[$i]' and vicidial_xfer_log.lead_id=vicidial_list.lead_id and vicidial_xfer_log.xfercallid=vicidial_closer_log.xfercallid $VCLuser_group_SQL order by vicidial_xfer_log.call_date asc"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {$ASCII_text.="$stmt\n";} + $calls_to_print = mysqli_num_rows($rslt); + + $xfer_info_array=array(); + $xfercallid_str=""; + $xfercallid_SQL=""; + $agent_xfers=0; + for($q=0; $q<$calls_to_print; $q++) { + $frow=mysqli_fetch_row($rslt); + $lead_id=$frow[2]; + $call_date=$frow[7]; + + # Check if there was a call by this agent from the fronter logs with 30 minutes of the transfer. If so, this was a transfer from an outbound call and should not be included in the later inbound call + $sec_stmt="select length_in_sec from vicidial_log where user='$userRAW[$i]' and lead_id='$lead_id' and call_date<'$call_date' and call_date>='$call_date'-INTERVAL 30 MINUTE order by call_date desc limit 1"; + $sec_rslt=mysql_to_mysqli($sec_stmt, $link); + if ($DB) {$ASCII_text.="$sec_stmt\n";} + if (mysqli_num_rows($sec_rslt)>0) { + $xfercallid=$frow[8]; + $array_key="$userRAW[$i]-$xfercallid"; + + $sec_row=mysqli_fetch_row($sec_rslt); + $agent_xfers++; + if ($sec_row[0]>=540) {$over540++;} else {$under540++;} + $xfercallid_str.="$xfercallid,"; + + $xfer_info_array[$array_key][0]=$frow[0]; + $xfer_info_array[$array_key][1]=$frow[1]; + $xfer_info_array[$array_key][2]=$frow[2]; + $xfer_info_array[$array_key][3]=$sec_row[0]; + $xfer_info_array[$array_key][4]=$frow[4]; + $xfer_info_array[$array_key][5]=$frow[5]; + $xfer_info_array[$array_key][6]=$frow[6]; + $xfer_info_array[$array_key][7]=$frow[7]; # SORT BY THIS + $xfer_info_array[$array_key][8]=$frow[8]; + + #$hphone=sprintf("%-12s", $frow[0]); + #if (strlen($frow[1]==0)) {$frow[1]=" ** No name on lead ** ";} + #$hname=sprintf("%-30s", substr($frow[1],0,30)); + #$hlead_id=sprintf("%-10s", $frow[2]); + #$closer=sprintf("%-6s", $frow[5]); + #$closer_full_name=sprintf("%-15s", substr($user_array["$frow[5]"],0, 15)); + #$closer_talk_time=$frow[6]; + #$closer_talk_time = sec_convert($closer_talk_time,'H'); + #$closer_talk_time = sprintf("%5s", $closer_talk_time); + } + + } + if (strlen($xfercallid_str)>0) { + $xfercallid_str=substr($xfercallid_str,0,-1); + $xfercallid_SQL=" and vicidial_xfer_log.xfercallid not in ($xfercallid_str) "; + } + + # GET TOTAL TRANSFERS ON INBOUND CALLS + $stmt="select vicidial_closer_log.phone_number, trim(concat(vicidial_list.first_name, ' ', vicidial_list.last_name)) as full_name, vicidial_closer_log.lead_id, vicidial_closer_log.length_in_sec, vicidial_xfer_log.user, vicidial_xfer_log.closer, (vicidial_closer_log.length_in_sec-vicidial_closer_log.queue_seconds) as talk_time, vicidial_closer_log.call_date, vicidial_xfer_log.xfercallid from vicidial_list, vicidial_xfer_log, vicidial_closer_log where vicidial_xfer_log.call_date >= '$query_date_BEGIN' and vicidial_xfer_log.call_date <= '$query_date_END' and vicidial_closer_log.call_date >= '$query_date_BEGIN' and vicidial_closer_log.call_date <= '$query_date_END' and vicidial_closer_log.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vicidial_xfer_log.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vicidial_xfer_log.user='$userRAW[$i]' and vicidial_closer_log.lead_id=vicidial_xfer_log.lead_id and vicidial_closer_log.xfercallid=vicidial_xfer_log.xfercallid $xfercallid_SQL and vicidial_closer_log.lead_id=vicidial_list.lead_id order by vicidial_closer_log.call_date;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {$ASCII_text.="$stmt\n";} + $calls_to_print = mysqli_num_rows($rslt); + + $CSV_fronter_header2.="\n\"$user[$i] - $full_name[$i] XFER STATS\"\n"; + $CSV_fronter_header2.="\"PHONE\",\"LEAD NAME\",\"LEAD ID\",\"CLOSER\",\"CLOSER CALL DATE\"\n"; + + $hidden_span_txt=""; + + $stmt="select vicidial_closer_log.status,count(distinct vicidial_closer_log.lead_id) from vicidial_xfer_log, vicidial_closer_log where vicidial_xfer_log.call_date >= '$query_date_BEGIN' and vicidial_xfer_log.call_date <= '$query_date_END' and vicidial_closer_log.call_date >= '$query_date_BEGIN' and vicidial_closer_log.call_date <= '$query_date_END' and vicidial_closer_log.campaign_id='" . mysqli_real_escape_string($link, $group) . "' $vicidial_closer_logLuser_group_SQL and vicidial_xfer_log.campaign_id='" . mysqli_real_escape_string($link, $group) . "' and vicidial_xfer_log.user='$userRAW[$i]' and vicidial_closer_log.lead_id=vicidial_xfer_log.lead_id and vicidial_closer_log.xfercallid=vicidial_xfer_log.xfercallid group by vicidial_closer_log.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') and ($recL < 1) ) {$DROP=$row[1]; $recL++;} + if ($recL < 1) {$OTHER=($row[1] + $OTHER); $recL++;} + $j++; + } + + $totA1 = ($totA1 + $A1); + $totDROP = ($totDROP + $DROP); + $totOTHER = ($totOTHER + $OTHER); + $TOTsales = ($TOTsales + $sales); + $TOTunder540 = ($TOTunder540 + $under540); + $TOTover540 = ($TOTover540 + $over540); + $TOTagent_xfers = ($TOTagent_xfers + $agent_xfers); + $TOTagent_calls = ($TOTagent_calls + $agent_calls); + + $Spct = MathZDC($sales, $USERcallsRAW[$i])*100; + $Spct = round($Spct, 2); + $Spct = sprintf("%01.2f", $Spct); + + $Xpct = MathZDC($agent_xfers, $agent_calls)*100; + $Xpct = round($Xpct, 2); + $Xpct = sprintf("%01.2f", $Xpct); + + 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 ($A1>$max_sales) {$max_sales=$A1;} + 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]=$sales; + $graph_stats[$i][2]=$USERcalls[$i]; + $graph_stats[$i][3]=$Spct; + $graph_stats[$i][4]=$A1; + $graph_stats[$i][5]=$DROP; + $graph_stats[$i][6]=$OTHER; + + $agent_xfers = sprintf("%6s", $agent_xfers); + $agent_calls = sprintf("%6s", $agent_calls); + $A1 = sprintf("%4s", $A1); + $DROP = sprintf("%4s", $DROP); + $OTHER = sprintf("%4s", $OTHER); + $sales = sprintf("%4s", $sales); + $Spct = sprintf("%6s", $Spct); + $Xpct = sprintf("%6s", $Xpct); + $under540 = sprintf("%4s", $under540); + $over540 = sprintf("%4s", $over540); + + + $ASCII_text.="| $user[$i] - $full_name[$i] | $agent_xfers | $agent_calls | $Xpct%| $DROP | $over540 | $under540 | $sales |\n"; + $ASCII_text.=$hidden_span_txt; + $CSV_fronter_lines.="\"$user[$i] - $full_name[$i]\",\"$agent_xfers\",\"$agent_calls\",\"$Xpct%\",\"$DROP\",\"$over540\",\"$under540\",\"$sales\"\n"; + + $i++; + } + + +$totSpct = MathZDC($TOTsales, $TOTcalls)*100; +$totSpct = round($totSpct, 2); +$totSpct = sprintf("%01.2f", $totSpct); +$totSpct = sprintf("%6s", $totSpct); + +$totXpct = MathZDC($TOTagent_xfers, $TOTagent_calls)*100; +$totXpct = round($totXpct, 2); +$totXpct = sprintf("%01.2f", $totXpct); +$totXpct = sprintf("%6s", $totXpct); + + +$TOTagents = sprintf("%6s", $i); +$TOTcalls = sprintf("%6s", $TOTcalls); +$TOTsales = sprintf("%5s", $TOTsales); +$totA1 = sprintf("%5s", $totA1); +$totDROP = sprintf("%5s", $totDROP); +$totOTHER = sprintf("%5s", $totOTHER); +$TOTunder540 = sprintf("%4s", $TOTunder540); +$TOTover540 = sprintf("%4s", $TOTover540); +$TOTagent_xfers = sprintf("%6s", $TOTagent_xfers); +$TOTagent_calls = sprintf("%6s", $TOTagent_calls); + + +$stmt="select avg(queue_seconds) from vicidial_closer_log where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "' $VCLuser_group_SQL;"; +$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.="| TOTAL FRONTERS: $TOTagents | $TOTagent_xfers | $TOTagent_calls | $totXpct%|$totDROP | $TOTover540 | $TOTunder540 |$TOTsales |\n"; +$ASCII_text.="+--------------------------+--------+--------+--------+------+------+------+------+\n"; +$ASCII_text.="| Average time in Queue for customers: $AVGwait |\n"; +$ASCII_text.="+--------------------------+--------+--------+--------+------+------+------+------+\n"; + +$CSV_fronter_footer.="\"TOTAL FRONTERS: $TOTagents\",\"$TOTagent_xfers\",\"$TOTagent_calls\",\"$totXpct%\",\"$totDROP\",\"$TOTunder540\",\"$TOTunder540\",\"$TOTsales\"\n"; +$CSV_fronter_footer.="\"Average time in Queue for customers: $AVGwait\"\n\n\n"; + + for ($d=0; $d"; + $XFERS_graph.=" "; + $SUCCESSPCT_graph.=" "; + $SALE_graph.=" "; + $DROP_graph.=" "; + $OTHER_graph.=" "; + } + $SUCCESS_graph.="
FRONTER STATS
AGENTSUCCESS
XFERS
SUCCESS %
SALE
DROP
OTHER
".$graph_stats[$d][1]."
".$graph_stats[$d][0]."".$graph_stats[$d][2]."
".$graph_stats[$d][0]."".$graph_stats[$d][3]."
".$graph_stats[$d][0]."".$graph_stats[$d][4]."
".$graph_stats[$d][0]."".$graph_stats[$d][5]."
".$graph_stats[$d][0]."".$graph_stats[$d][5]."
TOTAL:".trim($TOTsales)."
"; + $XFERS_graph.="TOTAL:".trim($TOTcalls).""; + $SUCCESSPCT_graph.="TOTAL:".trim($totSpct)."%"; + $SALE_graph.="TOTAL:".trim($totA1).""; + $DROP_graph.="TOTAL:".trim($totDROP).""; + $OTHER_graph.="TOTAL:".trim($totOTHER).""; + $JS_onload.="\tDrawFronterGraph('SUCCESS', '1');\n"; + $JS_text.="function DrawFronterGraph(graph, th_id) {\n"; + $JS_text.=" var SUCCESS_graph=\"$SUCCESS_graph\";\n"; + $JS_text.=" var XFERS_graph=\"$XFERS_graph\";\n"; + $JS_text.=" var SUCCESSPCT_graph=\"$SUCCESSPCT_graph\";\n"; + $JS_text.=" var SALE_graph=\"$SALE_graph\";\n"; + $JS_text.=" var DROP_graph=\"$DROP_graph\";\n"; + $JS_text.=" var OTHER_graph=\"$OTHER_graph\";\n"; + $JS_text.="\n"; + $JS_text.=" for (var i=1; i<=6; i++) {\n"; + $JS_text.=" var cellID=\"frontergraph\"+i;\n"; + $JS_text.=" document.getElementById(cellID).style.backgroundColor='#DDDDDD';\n"; + $JS_text.=" }\n"; + $JS_text.=" var cellID=\"frontergraph\"+th_id;\n"; + $JS_text.=" document.getElementById(cellID).style.backgroundColor='#999999';\n"; + $JS_text.=" var graph_to_display=eval(graph+\"_graph\");\n"; + $JS_text.=" document.getElementById('fronter_graph').innerHTML=graph_to_display;\n"; + $JS_text.="}\n"; + $GRAPH_text.=$GRAPH; + +############################## +######### CLOSER STATS + +$TOTagents=0; +$TOTcalls=0; +$totA1=0; +$totA2=0; +$totA3=0; +$totA4=0; +$totA5=0; +$totA6=0; +$totA7=0; +$totA8=0; +$totA9=0; +$totDROP=0; +$totOTHER=0; +$TOTsales=0; +$TOTunder90=0; + +$CSV_closer_header=""; +$CSV_closer_lines=""; +$CSV_closer_footer=""; + +$ASCII_text.="\n"; +$ASCII_text.="---------- CLOSER STATS [download details]\n"; +$ASCII_text.="+--------------------------+--------+------+------+------+-------+-------+\n"; +$ASCII_text.="| | | | UNDER| | AVG | |\n"; +$ASCII_text.="| AGENT (click for details)| CALLS | SALE | 90 | DROP | TIME | CONV %|\n"; +$ASCII_text.="+--------------------------+--------+------+------+------+-------+-------+\n"; + +$CSV_closer_header="\"CLOSER STATS\"\n"; +$CSV_closer_header.="\"AGENT\",\"CALLS\",\"SALE\",\"UNDER 90 SEC\",\"DROP\",\"SALE\",\"CONV %\"\n"; + +######## GRAPHING ######### +$max_calls=1; +$max_sales=1; +$max_drops=1; +$max_other=1; +$max_sales2=1; +$max_conv_pct=1; +$GRAPH="

"; +$GRAPH.=""; +$GRAPH.="
CALLSSALESDROPOTHERSALESCONV %

 


"; +$graph_header=""; +$CALLS_graph=$graph_header.""; +$SALES_graph=$graph_header.""; +$DROP_graph=$graph_header.""; +$OTHER_graph=$graph_header.""; +$SALES2_graph=$graph_header.""; +$CONVPCT_graph=$graph_header.""; +########################### + +$stmt="select user,count(*) from vicidial_closer_log where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "' $VCLuser_group_SQL and user is not null 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; +$TOT_TALK_TIME=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] = ' ';} + + $A1=0; $A2=0; $A3=0; $A4=0; $A5=0; $A6=0; $A7=0; $A8=0; $A9=0; $DROP=0; $OTHER=0; $sales=0; $uTOP=0; $uBOT=0; $points=0; + $under90=0; $AVG_TALK_TIME=0; $TALK_TIME=0; + $stmt="select status,count(*),sum(length_in_sec-queue_seconds) as talk_time,sum(if((length_in_sec-queue_seconds)<90, 1, 0)) as under90 from vicidial_closer_log where call_date >= '$query_date_BEGIN' and call_date <= '$query_date_END' and campaign_id='" . mysqli_real_escape_string($link, $group) . "' $VCLuser_group_SQL 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++;} + + $TALK_TIME+=$row[2]; + $under90+=$row[3]; + + $j++; + } + + $totA1 = ($totA1 + $A1); $TOTsales = ($TOTsales + $A1); + $totA2 = ($totA2 + $A2); $TOTsales = ($TOTsales + $A2); $totTOP = ($totTOP + $A2); + $totA3 = ($totA3 + $A3); $TOTsales = ($TOTsales + $A3); $totBOT = ($totBOT + $A3); + $totA4 = ($totA4 + $A4); $TOTsales = ($TOTsales + $A4); $totTOP = ($totTOP + $A4); $totBOT = ($totBOT + $A4); + $totA5 = ($totA5 + $A5); + $totA6 = ($totA6 + $A6); + $totA7 = ($totA7 + $A7); + $totA8 = ($totA8 + $A8); + $totA9 = ($totA9 + $A9); + $totDROP = ($totDROP + $DROP); + $totOTHER = ($totOTHER + $OTHER); + $totPOINTS = ($totPOINTS + $points); + $TOT_TALK_TIME+=$TALK_TIME; + $TOTunder90+=$under90; + + $Cpct = MathZDC($sales, ( ($USERcallsRAW[$i] - 0) - $DROP) )*100; + $Cpct = round($Cpct, 2); + $Cpct = sprintf("%01.2f", $Cpct); + $Cpct = sprintf("%6s", $Cpct); + + $AVG_TIME = MathZDC($TALK_TIME, ($USERcallsRAW[$i] - 0)); + $AVG_TIME = round($AVG_TIME); + $AVG_TIME = sec_convert($AVG_TIME,'H'); + $AVG_TIME = sprintf("%5s", $AVG_TIME); + + $Spct = MathZDC($sales, ($USERcallsRAW[$i] - 0) )*100; + $Spct = round($Spct, 2); + $Spct = sprintf("%01.2f", $Spct); + $Spct = sprintf("%6s", $Spct); + + $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]=$A1; + $graph_stats[$i][3]=$DROP; + $graph_stats[$i][4]=$OTHER; + $graph_stats[$i][5]=$sales; + $graph_stats[$i][6]=$Cpct; + + $A1 = sprintf("%4s", $A1); + $A2 = sprintf("%4s", $A2); + $A3 = sprintf("%4s", $A3); + $A4 = sprintf("%4s", $A4); + $A5 = sprintf("%4s", $A5); + $A6 = sprintf("%4s", $A6); + $A7 = sprintf("%4s", $A7); + $A8 = sprintf("%4s", $A8); + $A9 = sprintf("%4s", $A9); + $DROP = sprintf("%4s", $DROP); + $OTHER = sprintf("%4s", $OTHER); + $sales = sprintf("%4s", $sales); + $under90 = sprintf("%4s", $under90); + + $ASCII_text.="| $user[$i] - $full_name[$i] | $USERcalls[$i] | $sales | $under90 | $DROP | $AVG_TIME |$Cpct%|\n"; + $ASCII_text.=""; + + $CSV_fronter_header3.="\n\"$user[$i] - $full_name[$i] XFER STATS\"\n"; + $CSV_fronter_header3.="\"FRONTER NAME\",\"PHONE\",\"TALK TIME\"\n"; + $CSV_fronter_header3.=$closer_CSV_span["$frow[5]"]; + + $CSV_closer_lines.="\"$user[$i] - $full_name[$i]\",\"$USERcalls[$i]\",\"$A1\",\"$under90\",\"$DROP\",\"$AVG_TIME\",\"$Cpct%\"\n"; + + $i++; + } + + +$totCpct = MathZDC($TOTsales, ( ($TOTcalls - 0) - $totDROP) )*100; +$totCpct = round($totCpct, 2); +$totCpct = sprintf("%01.2f", $totCpct); +$totCpct = sprintf("%6s", $totCpct); + +$totSpct = MathZDC($TOTsales, ($TOTcalls - 0) )*100; +$totSpct = round($totSpct, 2); +$totSpct = sprintf("%01.2f", $totSpct); +$totSpct = sprintf("%6s", $totSpct); + +$TOT_AVG_TIME = MathZDC($TOT_TALK_TIME, ($TOTcalls - 0)); +$TOT_AVG_TIME = round($TOT_AVG_TIME); +$TOT_AVG_TIME = sec_convert($TOT_AVG_TIME,'H'); +$TOT_AVG_TIME = sprintf("%5s", $TOT_AVG_TIME); + +$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); +$totA1 = sprintf("%5s", $totA1); +$totA2 = sprintf("%5s", $totA2); +$totA3 = sprintf("%5s", $totA3); +$totA4 = sprintf("%5s", $totA4); +$totA5 = sprintf("%5s", $totA5); +$totA6 = sprintf("%5s", $totA6); +$totA7 = sprintf("%5s", $totA7); +$totA8 = sprintf("%5s", $totA8); +$totA9 = sprintf("%5s", $totA9); +$totDROP = sprintf("%5s", $totDROP); +$totOTHER = sprintf("%5s", $totOTHER); +$TOTsales = sprintf("%5s", $TOTsales); +$TOTunder90 = sprintf("%4s", $TOTunder90); + +$ASCII_text.="+--------------------------+--------+------+------+------+-------+-------+\n"; +$ASCII_text.="| TOTAL CLOSERS: $TOTagents | $TOTcalls |$totA1 | $TOTunder90 |$totDROP | $TOT_AVG_TIME |$totCpct%|\n"; +$ASCII_text.="+--------------------------+--------+------+------+------+-------+-------+\n"; + +$CSV_closer_footer.="\"TOTAL CLOSERS: $TOTagents\",\"$TOTcalls\",\"$totA1\",\"$TOTunder90\",\"$totDROP\",\"$TOT_AVG_TIME\",\"$totCpct%\"\n"; + + for ($d=0; $d"; + $SALES_graph.=" "; + $DROP_graph.=" "; + $OTHER_graph.=" "; + $SALES2_graph.=" "; + $CONVPCT_graph.=" "; + } + $CALLS_graph.="
CLOSER STATS
AGENTCALLS
SALES
DROP
OTHER
SALES
CONV %
".$graph_stats[$d][1]."
".$graph_stats[$d][0]."".$graph_stats[$d][2]."
".$graph_stats[$d][0]."".$graph_stats[$d][3]."
".$graph_stats[$d][0]."".$graph_stats[$d][4]."
".$graph_stats[$d][0]."".$graph_stats[$d][5]."
".$graph_stats[$d][0]."".$graph_stats[$d][6]."%
TOTAL:".trim($TOTcalls)."
"; + $SALES_graph.="TOTAL:".trim($totA1).""; + $DROP_graph.="TOTAL:".trim($totDROP).""; + $OTHER_graph.="TOTAL:".trim($totOTHER).""; + $SALES2_graph.="TOTAL:".trim($TOTsales).""; + $CONVPCT_graph.="TOTAL:".trim($totCpct)."%"; + $JS_onload.="\tDrawCloserGraph('CALLS', '1');\n"; + $JS_text.="function DrawCloserGraph(graph, th_id) {\n"; + $JS_text.=" var CALLS_graph=\"$CALLS_graph\";\n"; + $JS_text.=" var SALES_graph=\"$SALES_graph\";\n"; + $JS_text.=" var DROP_graph=\"$DROP_graph\";\n"; + $JS_text.=" var OTHER_graph=\"$OTHER_graph\";\n"; + $JS_text.=" var SALES2_graph=\"$SALES2_graph\";\n"; + $JS_text.=" var CONVPCT_graph=\"$CONVPCT_graph\";\n"; + $JS_text.="\n"; + $JS_text.=" for (var i=1; i<=6; i++) {\n"; + $JS_text.=" var cellID=\"closergraph\"+i;\n"; + $JS_text.=" document.getElementById(cellID).style.backgroundColor='#DDDDDD';\n"; + $JS_text.=" }\n"; + $JS_text.=" var cellID=\"closergraph\"+th_id;\n"; + $JS_text.=" document.getElementById(cellID).style.backgroundColor='#999999';\n"; + $JS_text.=" var graph_to_display=eval(graph+\"_graph\");\n"; + $JS_text.=" document.getElementById('closer_graph').innerHTML=graph_to_display;\n"; + $JS_text.="}\n"; + $GRAPH_text.=$GRAPH; + + +$ENDtime = date("U"); +$RUNtime = ($ENDtime - $STARTtime); + +if ($report_display_type=="HTML") { + $HTML_text.=$GRAPH_text; + } +else + { + $HTML_text.=$ASCII_text; + } + +if ($DB) {$HTML_text.="\nRun Time: $RUNtime seconds|$db_source\n";} + +$HTML_text.="
\n"; +$HTML_text.="\n"; + +$HTML_text.="\n"; + +if ($file_download > 0) + { + $FILE_TIME = date("Ymd-His"); + $CSVfilename = "FCSTATS_$US$FILE_TIME.csv"; + if ($file_download==1) { + $CSV_text=$CSV_fronter_header.$CSV_fronter_lines.$CSV_fronter_footer.$CSV_closer_header.$CSV_closer_lines.$CSV_closer_footer; + } else if ($file_download==2) { + $CSV_text=$CSV_fronter_header2; + } else if ($file_download==3) { + $CSV_text=$CSV_fronter_header3; + } + $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"; + $JS_text.=$JS_onload; + $JS_text.="\n"; + + echo $HTML_head; + echo $JS_text; + require("admin_header.php"); + echo $HTML_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; + +} + + +?>