Files
agc_2-X/bin/AST_agent_daily_SPH.pl
mattf 641fe3ab5c Added phone login to timeonVDAD reports
Added toggled sorting columns for timeonVDADall report
updated BASE INSTALL doc and vicidial.php comments

git-svn-id: svn://192.168.202.10@843 3d104415-ff17-0410-8863-d5cf3c621b8a
2008-04-22 07:07:48 +00:00

736 lines
28 KiB
Perl

#!/usr/bin/perl
# AST_agent_daily_SPH.pl
#
# This script is designed to gather stats for all agent activity over the course
# of a week and print it in an ASCI text file to be placed
# on a web server for viewing.
#
# This script assumes a work day to be from 2AM to 2AM
#
# Place in the crontab and run every night at 02:00AM for the previous day's stats
# 0 2 * * * /home/cron/AST_agent_daily_SPH.pl
#
# Copyright (C) 2008 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
#
# CHANGES
# 80114-1221 - First version
# 80116-0941 - only print agents with week and month hours of 0 to PIPE file
# 80216-2255 - Add Year-to-date on Sunday mornings only
#
$txt = '.txt';
$US = '_';
$MT[0] = '';
$SQLrestrict = "and campaign_id IN('QRA','QRB','QRC','QRD')";
### begin parsing run-time options ###
if (length($ARGV[0])>1)
{
$i=0;
while ($#ARGV >= $i)
{
$args = "$args $ARGV[$i]";
$i++;
}
if ($args =~ /--help/i)
{
print "allowed run time options:\n [-q] = quiet\n [-t] = test\n\n";
exit;
}
else
{
if ($args =~ /--debug/i)
{
$DB=1;
print "\n-----DEBUG MODE-----\n\n";
}
if ($args =~ /-q/i)
{
$q=1; $Q=1;
}
if ($args =~ /-t/i)
{
$T=1; $TEST=1;
print "\n-----TESTING-----\n\n";
}
}
}
else
{
print "no command line options set\n";
}
### end parsing run-time options ###
$secX = time();
($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";}
$filedate = "$year$mon$mday-$hour$min$sec";
$ABIfiledate = "$mon-$mday-$year$us$hour$min$sec";
$shipdate = "$year-$mon-$mday";
$datestamp = "$year/$mon/$mday $hour:$min";
use Time::Local;
$YTDrun=0;
### find epoch of 2AM today
$TWOAMsec = ( ($secX - ($sec + ($min * 60) + ($hour * 3600) ) ) + 7200);
### find epoch of 2AM yesterday
$TWOAMsecY = ($TWOAMsec - 86400);
($Tsec,$Tmin,$Thour,$Tmday,$Tmon,$Tyear,$Twday,$Tyday,$Tisdst) = localtime($TWOAMsecY);
$Tyear = ($Tyear + 1900);
$Tmon++;
if ($Tmon < 10) {$Tmon = "0$Tmon";}
if ($Tmday < 10) {$Tmday = "0$Tmday";}
if ($Thour < 10) {$Thour = "0$Thour";}
if ($Tmin < 10) {$Tmin = "0$Tmin";}
if ($Tsec < 10) {$Tsec = "0$Tsec";}
$begindate = "$Tyear-$Tmon-$Tmday $Thour:$Tmin:$Tsec";
if ($Twday == '6') {$YTDrun=1; print "RUNNING YTD\n";}
### find epoch of 2AM the first day of the month
$BMONTHsec = ($TWOAMsecY - (86400 * ($Tmday - 1) ) );
### find epoch of 2AM the first day of next month
if ($Tmon>11) {$Tmon=0; $Tyear++;}
$EMONTHsec = timelocal($Tsec,$Tmin,$Thour,1,$Tmon,$Tyear);
if ($Twday==0) {$day='Sunday '; $SETprevday = 6;}
if ($Twday==1) {$day='Monday '; $SETprevday = 0;}
if ($Twday==2) {$day='Tuesday '; $SETprevday = 1;}
if ($Twday==3) {$day='Wednesday'; $SETprevday = 2;}
if ($Twday==4) {$day='Thursday '; $SETprevday = 3;}
if ($Twday==5) {$day='Friday '; $SETprevday = 4;}
if ($Twday==6) {$day='Saturday '; $SETprevday = 5;}
($TMsec,$TMmin,$TMhour,$TMmday,$TMmon,$TMyear,$TMwday,$TMyday,$TMisdst) = localtime($BMONTHsec);
$TMyear = ($TMyear + 1900);
$TMmon++;
if ($TMmon < 10) {$TMmon = "0$TMmon";}
if ($TMmday < 10) {$TMmday = "0$TMmday";}
if ($TMhour < 10) {$TMhour = "0$TMhour";}
if ($TMmin < 10) {$TMmin = "0$TMmin";}
if ($TMsec < 10) {$TMsec = "0$TMsec";}
$beginmonth = "$TMyear-$TMmon-$TMmday $TMhour:$TMmin:$TMsec";
($TMsec,$TMmin,$TMhour,$TMmday,$TMmon,$TMyear,$TMwday,$TMyday,$TMisdst) = localtime($EMONTHsec);
$TMyear = ($TMyear + 1900);
$TMmon++;
if ($TMmon < 10) {$TMmon = "0$TMmon";}
if ($TMmday < 10) {$TMmday = "0$TMmday";}
if ($TMhour < 10) {$TMhour = "0$TMhour";}
if ($TMmin < 10) {$TMmin = "0$TMmin";}
if ($TMsec < 10) {$TMsec = "0$TMsec";}
$endmonth = "$TMyear-$TMmon-$TMmday $TMhour:$TMmin:$TMsec";
#print "|$ABIfiledate|$begindate|$beginmonth|$endmonth|\n";
#exit;
print "\n\n\n\n\n\n\n\n\n\n\n\n-- AST_agent_daily_SPH.pl --\n\n";
print "This program is designed to print sales-per-hour(SPH) to a file for agents' activity for the current week. \n\n";
# default path to astguiclient configuration file:
$PATHconf = '/etc/astguiclient.conf';
open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n";
@conf = <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++;
}
# Customized Variables
$server_ip = $VARserver_ip; # Asterisk server IP
$outfile = "AGENT_SPH_$Tyear-$Tmon-$Tmday$txt";
$Doutfile = "AGENT_SPH_PIPE_$Tyear-$Tmon-$Tmday$txt";
### open the X out file for writing ###
open(out, ">$PATHweb/vicidial/agent_reports/$outfile")
|| die "Can't open $outfile: $!\n";
open(Dout, ">$PATHweb/vicidial/agent_reports/$Doutfile")
|| die "Can't open $Doutfile: $!\n";
if (!$VARDB_port) {$VARDB_port='3306';}
use DBI;
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
or die "Couldn't connect to database: " . DBI->errstr;
$dbhB = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass")
or die "Couldn't connect to database: " . DBI->errstr;
#$vicidial_agent_log = 'vicidial_agent_log_archive';
$vicidial_agent_log = 'vicidial_agent_log';
###########################################################################
########### PAST WEEK STAT GATHERING LOOP #################################
###########################################################################
if ($YTDrun>0)
{
$YEARheadPIPE = 'MONTH HOURS|MONTH SPH|';
$YEARheadFIXED = ' HRS SPH ';
$YEARhHEAD = ' YEAR';
}
print Dout "DATE|AGENT|USER|MON HOURS|MON SPH|TUE HOURS|TUE SPH|WED HOURS|WED SPH|THU HOURS|THU SPH|FRI HOURS|FRI SPH|SAT HOURS|SAT SPH|SUN HOURS|SUN SPH|WEEK HOURS|WEEK SPH|MONTH HOURS|MONTH SPH$YEARheadPIPE|GROUP|\n";
$outline = "REPORT: SPH $Tyear-$Tmon-$Tmday\n\n";
$outline.= " MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY WEEK MONTH$YEARhHEAD\n";
$outline.= "AGENT USER HRS SPH HRS SPH HRS SPH HRS SPH HRS SPH HRS SPH HRS SPH HRS SPH HRS SPH $YEARheadFIXED GROUP \n";
print "$outline";
print out "$outline";
### FIND ALL ACTIVE USERS IN THE SYSTEM IN('1090','1102','1245')='1090'
$stmtA = "select full_name,user,user_group from vicidial_users order by user_group,full_name limit 1000;";
$sthA = $dbhA->prepare($stmtA) or die "preparing: ",$dbhA->errstr;
$sthA->execute or die "executing: $stmtA ", $dbhA->errstr;
$sthArows=$sthA->rows;
$rec_count=0;
while ($sthArows > $rec_count)
{
@aryA = $sthA->fetchrow_array;
$Dname[$rec_count] = $aryA[0];
$Duser[$rec_count] = $aryA[1];
$Dgroup[$rec_count] = $aryA[2];
$name[$rec_count] = sprintf("%-20s", $aryA[0]); while(length($name[$rec_count])>20) {chop($name[$rec_count]);}
$user[$rec_count] = sprintf("%-8s", $aryA[1]);
$group[$rec_count] = sprintf("%-8s", $aryA[2]);
$rec_count++;
}
$sthA->finish();
$Gsph[0]=' 0'; $Gsph[1]=' 0'; $Gsph[2]=' 0'; $Gsph[3]=' 0'; $Gsph[4]=' 0'; $Gsph[5]=' 0'; $Gsph[6]=' 0';
$Gsales[0]=0; $Gsales[1]=0; $Gsales[2]=0; $Gsales[3]=0; $Gsales[4]=0; $Gsales[5]=0; $Gsales[6]=0;
$Ghours[0]=' 0.0'; $Ghours[1]=' 0.0'; $Ghours[2]=' 0.0'; $Ghours[3]=' 0.0'; $Ghours[4]=' 0.0'; $Ghours[5]=' 0.0'; $Ghours[6]=' 0.0';
$GDsph[0]=0; $GDsph[1]=0; $GDsph[2]=0; $GDsph[3]=0; $GDsph[4]=0; $GDsph[5]=0; $GDsph[6]=0;
$GDsales[0]=0; $GDsales[1]=0; $GDsales[2]=0; $GDsales[3]=0; $GDsales[4]=0; $GDsales[5]=0; $GDsales[6]=0;
$GDhours[0]=0; $GDhours[1]=0; $GDhours[2]=0; $GDhours[3]=0; $GDhours[4]=0; $GDhours[5]=0; $GDhours[6]=0;
$GWEEKsph=0; $GWEEKhours=0; $GWEEKsales=0;
$GMONTHsph=0; $GMONTHhours=0; $GMONTHsales=0;
$GYEARsph=0; $GYEARhours=0; $GYEARsales=0;
$TOTsph[0]=' 0'; $TOTsph[1]=' 0'; $TOTsph[2]=' 0'; $TOTsph[3]=' 0'; $TOTsph[4]=' 0'; $TOTsph[5]=' 0'; $TOTsph[6]=' 0';
$TOTsales[0]=0; $TOTsales[1]=0; $TOTsales[2]=0; $TOTsales[3]=0; $TOTsales[4]=0; $TOTsales[5]=0; $TOTsales[6]=0;
$TOThours[0]=' 0.0'; $TOThours[1]=' 0.0'; $TOThours[2]=' 0.0'; $TOThours[3]=' 0.0'; $TOThours[4]=' 0.0'; $TOThours[5]=' 0.0'; $TOThours[6]=' 0.0';
$TOTDsph[0]=0; $TOTDsph[1]=0; $TOTDsph[2]=0; $TOTDsph[3]=0; $TOTDsph[4]=0; $TOTDsph[5]=0; $TOTDsph[6]=0;
$TOTDsales[0]=0; $TOTDsales[1]=0; $TOTDsales[2]=0; $TOTDsales[3]=0; $TOTDsales[4]=0; $TOTDsales[5]=0; $TOTDsales[6]=0;
$TOTDhours[0]=0; $TOTDhours[1]=0; $TOTDhours[2]=0; $TOTDhours[3]=0; $TOTDhours[4]=0; $TOTDhours[5]=0; $TOTDhours[6]=0;
$TOTWEEKsph=0; $TOTWEEKhours=0; $TOTWEEKsales=0;
$TOTMONTHsph=0; $TOTMONTHhours=0; $TOTMONTHsales=0;
$TOTYEARsph=0; $TOTYEARhours=0; $TOTYEARsales=0;
### GO THROUGH EACH USER ACCOUNT AND FIND OUT THE HOURS AND SPH
$i=0;
foreach (@Duser)
{
$j=0;
$sph[0]=' 0'; $sph[1]=' 0'; $sph[2]=' 0'; $sph[3]=' 0'; $sph[4]=' 0'; $sph[5]=' 0'; $sph[6]=' 0';
$sales[0]=0; $sales[1]=0; $sales[2]=0; $sales[3]=0; $sales[4]=0; $sales[5]=0; $sales[6]=0;
$hours[0]=' 0.0'; $hours[1]=' 0.0'; $hours[2]=' 0.0'; $hours[3]=' 0.0'; $hours[4]=' 0.0'; $hours[5]=' 0.0'; $hours[6]=' 0.0';
$Dsph[0]=0; $Dsph[1]=0; $Dsph[2]=0; $Dsph[3]=0; $Dsph[4]=0; $Dsph[5]=0; $Dsph[6]=0;
$Dsales[0]=0; $Dsales[1]=0; $Dsales[2]=0; $Dsales[3]=0; $Dsales[4]=0; $Dsales[5]=0; $Dsales[6]=0;
$Dhours[0]=0; $Dhours[1]=0; $Dhours[2]=0; $Dhours[3]=0; $Dhours[4]=0; $Dhours[5]=0; $Dhours[6]=0;
$WEEKsph=0; $WEEKhours=0; $WEEKsales=0;
$MONTHsph=0; $MONTHhours=0; $MONTHsales=0;
$YEARsph=0; $YEARhours=0; $YEARsales=0;
$UDtarget[0] = ($TWOAMsec - (86400 * 0) ); # X-0 days in the past
$UDtarget[1] = ($TWOAMsec - (86400 * 1) ); # X-1 days in the past
$UDtarget[2] = ($TWOAMsec - (86400 * 2) ); # X-2 days in the past
$UDtarget[3] = ($TWOAMsec - (86400 * 3) ); # X-3 days in the past
$UDtarget[4] = ($TWOAMsec - (86400 * 4) ); # X-4 days in the past
$UDtarget[5] = ($TWOAMsec - (86400 * 5) ); # X-5 days in the past
$UDtarget[6] = ($TWOAMsec - (86400 * 6) ); # X-6 days in the past
$UDtarget[7] = ($TWOAMsec - (86400 * 7) ); # X-7 days in the past
$prevday = $SETprevday;
### GO THROUGH EACH DAY THIS WEEK UP TO TODAY
while ($prevday >= 0)
{
($Tsec,$Tmin,$Thour,$Tmday,$Tmon,$Tyear,$Twday,$Tyday,$Tisdst) = localtime($UDtarget[$j]);
$Tyear = ($Tyear + 1900);
$Tmon++;
if ($Tmon < 10) {$Tmon = "0$Tmon";}
if ($Tmday < 10) {$Tmday = "0$Tmday";}
if ($Thour < 10) {$Thour = "0$Thour";}
if ($Tmin < 10) {$Tmin = "0$Tmin";}
if ($Tsec < 10) {$Tsec = "0$Tsec";}
$enddate = "$Tyear-$Tmon-$Tmday $Thour:$Tmin:$Tsec";
$k = ($j + 1);
($Tsec,$Tmin,$Thour,$Tmday,$Tmon,$Tyear,$Twday,$Tyday,$Tisdst) = localtime($UDtarget[$k]);
$Tyear = ($Tyear + 1900);
$Tmon++;
if ($Tmon < 10) {$Tmon = "0$Tmon";}
if ($Tmday < 10) {$Tmday = "0$Tmday";}
if ($Thour < 10) {$Thour = "0$Thour";}
if ($Tmin < 10) {$Tmin = "0$Tmin";}
if ($Tsec < 10) {$Tsec = "0$Tsec";}
$begindate = "$Tyear-$Tmon-$Tmday $Thour:$Tmin:$Tsec";
$Dsales[$prevday]=0;
$Dhours[$prevday]=0;
$stmtA = "select sum(talk_sec+pause_sec+wait_sec+dispo_sec) from vicidial_agent_log where event_time <= '$enddate' and event_time >= '$begindate' and pause_sec<48800 and wait_sec<48800 and talk_sec<48800 and dispo_sec<48800 and user='$Duser[$i]' $SQLrestrict limit 1;";
$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;
$Dhours[$prevday] = ($aryA[0]/3600);
}
$stmtA = "select count(*) from vicidial_xfer_log vx,vicidial_closer_log vc where vx.call_date <= '$enddate' and vx.call_date >= '$begindate' and vc.status IN('A1','A2','A3','A4','SALE','UPSELL') and vx.user='$Duser[$i]' and vx.xfercallid=vc.xfercallid;";
$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;
$Dsales[$prevday] = $aryA[0];
}
$Dhours[$prevday] = sprintf("%.2f", $Dhours[$prevday]);
$hours[$prevday] = sprintf("%5s", $Dhours[$prevday]);
$sales[$prevday] = sprintf("%5s", $Dsales[$prevday]);
if ( ($Dsales[$prevday] > 0) && ($Dhours[$prevday] > 0) )
{$Dsph[$prevday] = ($Dsales[$prevday]/$Dhours[$prevday]);}
else
{$Dsph[$prevday] = 0;}
$Dsph[$prevday] = sprintf("%.1f", $Dsph[$prevday]);
$sph[$prevday] = sprintf("%4s", $Dsph[$prevday]);
$GDsales[$prevday] = ($GDsales[$prevday] + $Dsales[$prevday]);
$TOTDsales[$prevday] = ($TOTDsales[$prevday] + $Dsales[$prevday]);
$GDhours[$prevday] = ($GDhours[$prevday] + $Dhours[$prevday]);
$TOTDhours[$prevday] = ($TOTDhours[$prevday] + $Dhours[$prevday]);
$WEEKhours = ($WEEKhours + $Dhours[$prevday]);
$WEEKsales = ($WEEKsales + $Dsales[$prevday]);
if ($DB) {print STDERR "$hours[$prevday] $sales[$prevday] $sph[$prevday] $prevday $begindate\n";}
$prevday = ($prevday - 1);
$j++;
}
$stmtA = "select sum(talk_sec+pause_sec+wait_sec+dispo_sec) from vicidial_agent_log where event_time <= '$endmonth' and event_time >= '$beginmonth' and pause_sec<48800 and wait_sec<48800 and talk_sec<48800 and dispo_sec<48800 and user='$Duser[$i]' $SQLrestrict limit 1;";
$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;
$MONTHhours = ($aryA[0]/3600);
}
$stmtA = "select count(*) from vicidial_xfer_log vx,vicidial_closer_log vc where vx.call_date <= '$endmonth' and vx.call_date >= '$beginmonth' and vc.status IN('A1','A2','A3','A4','SALE','UPSELL') and vx.user='$Duser[$i]' and vx.xfercallid=vc.xfercallid;";
$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;
$MONTHsales = $aryA[0];
}
if ($YTDrun>0)
{
$Ybegin='-01-01 01:00:00';
$stmtA = "select sum(talk_sec+pause_sec+wait_sec+dispo_sec) from vicidial_agent_log where event_time <= '$endmonth' and event_time >= '$TMyear$Ybegin' and pause_sec<48800 and wait_sec<48800 and talk_sec<48800 and dispo_sec<48800 and user='$Duser[$i]' $SQLrestrict limit 1;";
$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;
$YEARhours = ($aryA[0]/3600);
}
$stmtA = "select count(*) from vicidial_xfer_log vx,vicidial_closer_log vc where vx.call_date <= '$endmonth' and vx.call_date >= '$TMyear$Ybegin' and vc.status IN('A1','A2','A3','A4','SALE','UPSELL') and vx.user='$Duser[$i]' and vx.xfercallid=vc.xfercallid;";
$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;
$YEARsales = $aryA[0];
}
if ( ($YEARsales > 0) && ($YEARhours > 0) )
{$YEARsph = ($YEARsales/$YEARhours);}
else
{$YEARsph = 0;}
$GYEARsales = ($GYEARsales + $YEARsales);
$TOTYEARsales = ($TOTYEARsales + $YEARsales);
$GYEARhours = ($GYEARhours + $YEARhours);
$TOTYEARhours = ($TOTYEARhours + $YEARhours);
$YEARhours = sprintf("%.0f", $YEARhours);
$YEARhours = sprintf("%5s", $YEARhours);
$YEARsph = sprintf("%.1f", $YEARsph);
$YEARsph = sprintf("%4s", $YEARsph);
$YEARpipe="$YEARhours|$YEARsph|";
$YEARfixed="$YEARhours $YEARsph ";
}
if ( ($WEEKsales > 0) && ($WEEKhours > 0) )
{$WEEKsph = ($WEEKsales/$WEEKhours);}
else
{$WEEKsph = 0;}
if ( ($MONTHsales > 0) && ($MONTHhours > 0) )
{$MONTHsph = ($MONTHsales/$MONTHhours);}
else
{$MONTHsph = 0;}
$GMONTHsales = ($GMONTHsales + $MONTHsales);
$TOTMONTHsales = ($TOTMONTHsales + $MONTHsales);
$GMONTHhours = ($GMONTHhours + $MONTHhours);
$TOTMONTHhours = ($TOTMONTHhours + $MONTHhours);
print Dout "$shipdate|$Dname[$i]|$Duser[$i]|$Dhours[0]|$Dsph[0]|$Dhours[1]|$Dsph[1]|$Dhours[2]|$Dsph[2]|$Dhours[3]|$Dsph[3]|$Dhours[4]|$Dsph[4]|$Dhours[5]|$Dsph[5]|$Dhours[6]|$Dsph[6]|$WEEKhours|$WEEKsph|$MONTHhours|$MONTHsph|$YEARpipe$Dgroup[$i]\n";
### only print to ASCII fixed-length file if week-to-date and month-to-date hours > 0
if ( ($WEEKhours > 0) || ($MONTHhours > 0) )
{
$WEEKhours = sprintf("%.0f", $WEEKhours);
$WEEKhours = sprintf("%5s", $WEEKhours);
$WEEKsph = sprintf("%.1f", $WEEKsph);
$WEEKsph = sprintf("%4s", $WEEKsph);
$MONTHhours = sprintf("%.0f", $MONTHhours);
$MONTHhours = sprintf("%5s", $MONTHhours);
$MONTHsph = sprintf("%.1f", $MONTHsph);
$MONTHsph = sprintf("%4s", $MONTHsph);
$outline = "$name[$i] $user[$i] $hours[0] $sph[0] $hours[1] $sph[1] $hours[2] $sph[2] $hours[3] $sph[3] $hours[4] $sph[4] $hours[5] $sph[5] $hours[6] $sph[6] $WEEKhours $WEEKsph $MONTHhours $MONTHsph $YEARfixed$group[$i]\n";
print "$outline";
print out "$outline";
}
else
{
print "SKIPPED: $name[$i] $user[$i] $WEEKhours $MONTHhours\n";
}
$Dprevgroup = $Dgroup[$i];
$prevgroup = $group[$i];
$i++;
### BEGIN GROUP SUMMARY STATS
if ($Dgroup[$i] !~ /^$Dprevgroup$/)
{
$prevday = $SETprevday;
### GO THROUGH EACH DAY THIS WEEK UP TO TODAY
while ($prevday >= 0)
{
$GDhours[$prevday] = sprintf("%.2f", $GDhours[$prevday]);
$Ghours[$prevday] = sprintf("%5s", $GDhours[$prevday]); while(length($Ghours[$prevday])>5) {chop($Ghours[$prevday]);}
$Gsales[$prevday] = sprintf("%5s", $GDsales[$prevday]);
if ( ($GDsales[$prevday] > 0) && ($GDhours[$prevday] > 0) )
{$GDsph[$prevday] = ($GDsales[$prevday]/$GDhours[$prevday]);}
else
{$GDsph[$prevday] = 0;}
$GDsph[$prevday] = sprintf("%.1f", $GDsph[$prevday]);
$Gsph[$prevday] = sprintf("%4s", $GDsph[$prevday]);
$GWEEKhours = ($GWEEKhours + $GDhours[$prevday]);
$GWEEKsales = ($GWEEKsales + $GDsales[$prevday]);
$prevday = ($prevday - 1);
}
if ( ($GWEEKsales > 0) && ($GWEEKhours > 0) )
{$GWEEKsph = ($GWEEKsales/$GWEEKhours);}
else
{$GWEEKsph = 0;}
if ( ($GMONTHsales > 0) && ($GMONTHhours > 0) )
{$GMONTHsph = ($GMONTHsales/$GMONTHhours);}
else
{$GMONTHsph = 0;}
if ($YTDrun>0)
{
if ( ($GYEARsales > 0) && ($GYEARhours > 0) )
{$GYEARsph = ($GYEARsales/$GYEARhours);}
else
{$GYEARsph = 0;}
$GYEARhours = sprintf("%.0f", $GYEARhours);
$GYEARhours = sprintf("%5s", $GYEARhours); while(length($GYEARhours)>5) {chop($GYEARhours);}
$GYEARsph = sprintf("%.1f", $GYEARsph);
$GYEARsph = sprintf("%4s", $GYEARsph);
$YEARgpipe="$GYEARhours|$GYEARsph|";
$YEARgfixed=" $GYEARhours $GYEARsph";
}
print Dout "$shipdate|TOTAL $Dprevgroup||$GDhours[0]|$GDsph[0]|$GDhours[1]|$GDsph[1]|$GDhours[2]|$GDsph[2]|$GDhours[3]|$GDsph[3]|$GDhours[4]|$GDsph[4]|$GDhours[5]|$GDsph[5]|$GDhours[6]|$GDsph[6]|$GWEEKhours|$GWEEKsph|$GMONTHhours|$GMONTHsph|$YEARgpipe\n";
$GWEEKhours = sprintf("%.0f", $GWEEKhours);
$GWEEKhours = sprintf("%5s", $GWEEKhours); while(length($GWEEKhours)>5) {chop($GWEEKhours);}
$GWEEKsph = sprintf("%.1f", $GWEEKsph);
$GWEEKsph = sprintf("%4s", $GWEEKsph);
$GMONTHhours = sprintf("%.0f", $GMONTHhours);
$GMONTHhours = sprintf("%5s", $GMONTHhours); while(length($GMONTHhours)>5) {chop($GMONTHhours);}
$GMONTHsph = sprintf("%.1f", $GMONTHsph);
$GMONTHsph = sprintf("%4s", $GMONTHsph);
$outline = " GROUP TOTAL $prevgroup $Ghours[0] $Gsph[0] $Ghours[1] $Gsph[1] $Ghours[2] $Gsph[2] $Ghours[3] $Gsph[3] $Ghours[4] $Gsph[4] $Ghours[5] $Gsph[5] $Ghours[6] $Gsph[6] $GWEEKhours $GWEEKsph $GMONTHhours $GMONTHsph$YEARgfixed\n\n";
print "$outline";
print out "$outline";
$Gsph[0]=' 0'; $Gsph[1]=' 0'; $Gsph[2]=' 0'; $Gsph[3]=' 0'; $Gsph[4]=' 0'; $Gsph[5]=' 0'; $Gsph[6]=' 0';
$Gsales[0]=0; $Gsales[1]=0; $Gsales[2]=0; $Gsales[3]=0; $Gsales[4]=0; $Gsales[5]=0; $Gsales[6]=0;
$Ghours[0]=' 0.0'; $Ghours[1]=' 0.0'; $Ghours[2]=' 0.0'; $Ghours[3]=' 0.0'; $Ghours[4]=' 0.0'; $Ghours[5]=' 0.0'; $Ghours[6]=' 0.0';
$GDsph[0]=0; $GDsph[1]=0; $GDsph[2]=0; $GDsph[3]=0; $GDsph[4]=0; $GDsph[5]=0; $GDsph[6]=0;
$GDsales[0]=0; $GDsales[1]=0; $GDsales[2]=0; $GDsales[3]=0; $GDsales[4]=0; $GDsales[5]=0; $GDsales[6]=0;
$GDhours[0]=0; $GDhours[1]=0; $GDhours[2]=0; $GDhours[3]=0; $GDhours[4]=0; $GDhours[5]=0; $GDhours[6]=0;
$GWEEKsph=0; $GWEEKhours=0; $GWEEKsales=0;
$GMONTHsph=0; $GMONTHhours=0; $GMONTHsales=0;
$GYEARsph=0; $GYEARhours=0; $GYEARsales=0;
}
}
### END AGENT STATS
### BEGIN TOTAL STATS
$prevday = $SETprevday;
### GO THROUGH EACH DAY THIS WEEK UP TO TODAY
while ($prevday >= 0)
{
$TOTDhours[$prevday] = sprintf("%.0f", $TOTDhours[$prevday]);
$TOThours[$prevday] = sprintf("%5s", $TOTDhours[$prevday]); while(length($TOThours[$prevday])>5) {chop($TOThours[$prevday]);}
$TOTsales[$prevday] = sprintf("%5s", $TOTDsales[$prevday]);
if ( ($TOTDsales[$prevday] > 0) && ($TOTDhours[$prevday] > 0) )
{$TOTDsph[$prevday] = ($TOTDsales[$prevday]/$TOTDhours[$prevday]);}
else
{$TOTDsph[$prevday] = 0;}
$TOTDsph[$prevday] = sprintf("%.1f", $TOTDsph[$prevday]);
$TOTsph[$prevday] = sprintf("%4s", $TOTDsph[$prevday]);
$TOTWEEKhours = ($TOTWEEKhours + $TOTDhours[$prevday]);
$TOTWEEKsales = ($TOTWEEKsales + $TOTDsales[$prevday]);
$prevday = ($prevday - 1);
}
if ( ($TOTWEEKsales > 0) && ($TOTWEEKhours > 0) )
{$TOTWEEKsph = ($TOTWEEKsales/$TOTWEEKhours);}
else
{$TOTWEEKsph = 0;}
if ( ($TOTMONTHsales > 0) && ($TOTMONTHhours > 0) )
{$TOTMONTHsph = ($TOTMONTHsales/$TOTMONTHhours);}
else
{$TOTMONTHsph = 0;}
if ($YTDrun>0)
{
if ( ($TOTMONTHsales > 0) && ($TOTMONTHhours > 0) )
{$TOTMONTHsph = ($TOTMONTHsales/$TOTMONTHhours);}
else
{$TOTMONTHsph = 0;}
$TOTYEARhours = sprintf("%.0f", $TOTYEARhours);
$TOTYEARhours = sprintf("%5s", $TOTYEARhours); while(length($TOTYEARhours)>5) {chop($TOTYEARhours);}
$TOTYEARsph = sprintf("%.1f", $TOTYEARsph);
$TOTYEARsph = sprintf("%4s", $TOTYEARsph);
$YEARtpipe="$TOTYEARhours|$TOTYEARsph|";
$YEARtfixed=" $TOTYEARhours $TOTYEARsph";
}
print Dout "$shipdate|TOTAL||$TOTDhours[0]|$TOTDsph[0]|$TOTDhours[1]|$TOTDsph[1]|$TOTDhours[2]|$TOTDsph[2]|$TOTDhours[3]|$TOTDsph[3]|$TOTDhours[4]|$TOTDsph[4]|$TOTDhours[5]|$TOTDsph[5]|$TOTDhours[6]|$TOTDsph[6]|$TOTWEEKhours|$TOTWEEKsph|$TOTMONTHhours|$TOTMONTHsph|$YEARtpipe\n";
$TOTWEEKhours = sprintf("%.0f", $TOTWEEKhours);
$TOTWEEKhours = sprintf("%5s", $TOTWEEKhours); while(length($TOTWEEKhours)>5) {chop($TOTWEEKhours);}
$TOTWEEKsph = sprintf("%.1f", $TOTWEEKsph);
$TOTWEEKsph = sprintf("%4s", $TOTWEEKsph);
$TOTMONTHhours = sprintf("%.0f", $TOTMONTHhours);
$TOTMONTHhours = sprintf("%5s", $TOTMONTHhours); while(length($TOTMONTHhours)>5) {chop($TOTMONTHhours);}
$TOTMONTHsph = sprintf("%.1f", $TOTMONTHsph);
$TOTMONTHsph = sprintf("%4s", $TOTMONTHsph);
$outline = " TOTAL $TOThours[0] $TOTsph[0] $TOThours[1] $TOTsph[1] $TOThours[2] $TOTsph[2] $TOThours[3] $TOTsph[3] $TOThours[4] $TOTsph[4] $TOThours[5] $TOTsph[5] $TOThours[6] $TOTsph[6] $TOTWEEKhours $TOTWEEKsph $TOTMONTHhours $TOTMONTHsph$YEARtfixed\n";
print "$outline";
print out "$outline";
exit;
### TOTAL ACTIVE TIME
$active = ($aryA[3] + $aryA[4] + $aryA[5] + $aryA[6]);
$TIME_S = $active;
$TIME_H = int($TIME_S / 3600);
$TIME_S = ($TIME_S - ($TIME_H * 3600));
$TIME_M = int($TIME_S / 60);
$TIME_S = ($TIME_S - ($TIME_M * 60));
if ($TIME_S < 10) {$TIME_S = "0$TIME_S";}
if ($TIME_M < 10) {$TIME_M = "0$TIME_M";}
$TIME_HMS = "$TIME_H:$TIME_M:$TIME_S";
$Dactive = $TIME_HMS;
$active = sprintf("%9s", $TIME_HMS);
### TOTAL TALK TIME
$TIME_S = $aryA[3];
$TIME_H = int($TIME_S / 3600);
$TIME_S = ($TIME_S - ($TIME_H * 3600));
$TIME_M = int($TIME_S / 60);
$TIME_S = ($TIME_S - ($TIME_M * 60));
if ($TIME_S < 10) {$TIME_S = "0$TIME_S";}
if ($TIME_M < 10) {$TIME_M = "0$TIME_M";}
$TIME_HMS = "$TIME_H:$TIME_M:$TIME_S";
$Dtalk = $TIME_HMS;
$talk = sprintf("%9s", $TIME_HMS);
### TOTAL PAUSE TIME
$TIME_S = $aryA[4];
$TIME_H = int($TIME_S / 3600);
$TIME_S = ($TIME_S - ($TIME_H * 3600));
$TIME_M = int($TIME_S / 60);
$TIME_S = ($TIME_S - ($TIME_M * 60));
if ($TIME_S < 10) {$TIME_S = "0$TIME_S";}
if ($TIME_M < 10) {$TIME_M = "0$TIME_M";}
$TIME_HMS = "$TIME_H:$TIME_M:$TIME_S";
$Dpause = $TIME_HMS;
$pause = sprintf("%9s", $TIME_HMS);
### TOTAL WAIT TIME
$TIME_S = $aryA[5];
$TIME_H = int($TIME_S / 3600);
$TIME_S = ($TIME_S - ($TIME_H * 3600));
$TIME_M = int($TIME_S / 60);
$TIME_S = ($TIME_S - ($TIME_M * 60));
if ($TIME_S < 10) {$TIME_S = "0$TIME_S";}
if ($TIME_M < 10) {$TIME_M = "0$TIME_M";}
$TIME_HMS = "$TIME_H:$TIME_M:$TIME_S";
$Dwait = $TIME_HMS;
$wait = sprintf("%9s", $TIME_HMS);
### TOTAL DISPO TIME
$TIME_S = $aryA[6];
$TIME_H = int($TIME_S / 3600);
$TIME_S = ($TIME_S - ($TIME_H * 3600));
$TIME_M = int($TIME_S / 60);
$TIME_S = ($TIME_S - ($TIME_M * 60));
if ($TIME_S < 10) {$TIME_S = "0$TIME_S";}
if ($TIME_M < 10) {$TIME_M = "0$TIME_M";}
$TIME_HMS = "$TIME_H:$TIME_M:$TIME_S";
$Ddispo = $TIME_HMS;
$dispo = sprintf("%9s", $TIME_HMS);
$stmtB = "select event_time,UNIX_TIMESTAMP(event_time) from $vicidial_agent_log where event_time <= '$shipdate 23:59:59' and event_time >= '$begindate 00:00:00' and user='$aryA[2]' order by event_time limit 1;";
$sthB = $dbhB->prepare($stmtB) or die "preparing: ",$dbhB->errstr;
$sthB->execute or die "executing: $stmtA ", $dbhB->errstr;
@aryB = $sthB->fetchrow_array;
$Dfirst_time = $aryB[0];
$first_time = sprintf("%21s", $aryB[0]);
$Dfirst_log = $aryB[1];
$first_log = $aryB[1];
$stmtB = "select event_time,UNIX_TIMESTAMP(event_time) from $vicidial_agent_log where event_time <= '$shipdate 23:59:59' and event_time >= '$begindate 00:00:00' and user='$aryA[2]' order by event_time desc limit 1;";
$sthB = $dbhB->prepare($stmtB) or die "preparing: ",$dbhB->errstr;
$sthB->execute or die "executing: $stmtA ", $dbhB->errstr;
@aryB = $sthB->fetchrow_array;
$Dlast_time = $aryB[0];
$last_time = sprintf("%21s", $aryB[0]);
$Dlast_log = $aryB[1];
$last_log = $aryB[1];
$TIME_S = ($last_log - $first_log);
$TIME_H = int($TIME_S / 3600);
$TIME_S = ($TIME_S - ($TIME_H * 3600));
$TIME_M = int($TIME_S / 60);
$TIME_S = ($TIME_S - ($TIME_M * 60));
if ($TIME_S < 10) {$TIME_S = "0$TIME_S";}
if ($TIME_M < 10) {$TIME_M = "0$TIME_M";}
$TIME_HMS = "$TIME_H:$TIME_M:$TIME_S";
$TIME_HMS = "N/A";
$Dlogin_time = $TIME_HMS;
$login_time = sprintf("%9s", $TIME_HMS);
print Dout "$shipdate|$Dname|$Duser|$Dcalls|$Dtalk|$Dpause|$Dwait|$Ddispo|$Dactive|$Dlogin_time|$Dfirst_time|$Dlast_time\n";
print out "$name$user$calls$talk$pause$wait$dispo$active$login_time$first_time$last_time\n";
print "$name$user$calls$talk$pause$wait$dispo$active$login_time$first_time$last_time\n";
close(Dout);
close(out);
### calculate time to run script ###
$secY = time();
$secZ = ($secY - $secX);
$secZm = ($secZ /60);
print "script execution time in seconds: $secZ minutes: $secZm\n";
exit;