For all level 7 users the links to other admin sections are removed in reports For the dispo screen on the agent interface the last number dialed is displayed instead of the main customer phone number. git-svn-id: svn://192.168.202.10@1518 3d104415-ff17-0410-8863-d5cf3c621b8a
424 lines
14 KiB
PHP
424 lines
14 KiB
PHP
<?php
|
|
# timeclock_report.php
|
|
#
|
|
# Copyright (C) 2010 Matt Florell <vicidial@gmail.com> LICENSE: AGPLv2
|
|
#
|
|
# CHANGES
|
|
#
|
|
# 80529-0055 - First build
|
|
# 80617-1416 - Fixed totals tally bug
|
|
# 80707-0754 - Fixed groups bug, changed formatting
|
|
# 90310-2059 - 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
|
|
#
|
|
|
|
require("dbconnect.php");
|
|
|
|
##### Pull values from posted form variables #####
|
|
$PHP_AUTH_USER=$_SERVER['PHP_AUTH_USER'];
|
|
$PHP_AUTH_PW=$_SERVER['PHP_AUTH_PW'];
|
|
$PHP_SELF=$_SERVER['PHP_SELF'];
|
|
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["user_group"])) {$user_group=$_GET["user_group"];}
|
|
elseif (isset($_POST["user_group"])) {$user_group=$_POST["user_group"];}
|
|
if (isset($_GET["shift"])) {$shift=$_GET["shift"];}
|
|
elseif (isset($_POST["shift"])) {$shift=$_POST["shift"];}
|
|
if (isset($_GET["order"])) {$order=$_GET["order"];}
|
|
elseif (isset($_POST["order"])) {$order=$_POST["order"];}
|
|
if (isset($_GET["user"])) {$user=$_GET["user"];}
|
|
elseif (isset($_POST["user"])) {$user=$_POST["user"];}
|
|
if (isset($_GET["DB"])) {$DB=$_GET["DB"];}
|
|
elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];}
|
|
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 (strlen($shift)<2) {$shift='ALL';}
|
|
if (strlen($order)<2) {$order='hours_down';}
|
|
|
|
$report_name = 'User Timeclock Report';
|
|
$db_source = 'M';
|
|
|
|
#############################################
|
|
##### START SYSTEM_SETTINGS LOOKUP #####
|
|
$stmt = "SELECT use_non_latin,outbound_autodial_active,slave_db_server,reports_use_slave_db,webroot_writable FROM system_settings;";
|
|
$rslt=mysql_query($stmt, $link);
|
|
if ($DB) {echo "$stmt\n";}
|
|
$qm_conf_ct = mysql_num_rows($rslt);
|
|
if ($qm_conf_ct > 0)
|
|
{
|
|
$row=mysql_fetch_row($rslt);
|
|
$non_latin = $row[0];
|
|
$SSoutbound_autodial_active = $row[1];
|
|
$slave_db_server = $row[2];
|
|
$reports_use_slave_db = $row[3];
|
|
$webroot_writable = $row[4];
|
|
}
|
|
##### END SETTINGS LOOKUP #####
|
|
###########################################
|
|
|
|
if ( (strlen($slave_db_server)>5) and (preg_match("/$report_name/",$reports_use_slave_db)) )
|
|
{
|
|
mysql_close($link);
|
|
$use_slave_server=1;
|
|
$db_source = 'S';
|
|
require("dbconnect.php");
|
|
echo "<!-- Using slave server $slave_db_server $db_source -->\n";
|
|
}
|
|
|
|
$PHP_AUTH_USER = ereg_replace("[^0-9a-zA-Z]","",$PHP_AUTH_USER);
|
|
$PHP_AUTH_PW = ereg_replace("[^0-9a-zA-Z]","",$PHP_AUTH_PW);
|
|
|
|
$stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and pass='$PHP_AUTH_PW' and user_level > 6 and view_reports='1' and active='Y';";
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
if ($non_latin > 0) { $rslt=mysql_query("SET NAMES 'UTF8'");}
|
|
$rslt=mysql_query($stmt, $link);
|
|
$row=mysql_fetch_row($rslt);
|
|
$auth=$row[0];
|
|
|
|
$stmt="SELECT count(*) from vicidial_users where user='$PHP_AUTH_USER' and pass='$PHP_AUTH_PW' and user_level='7' and view_reports='1' and active='Y';";
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
$rslt=mysql_query($stmt, $link);
|
|
$row=mysql_fetch_row($rslt);
|
|
$reports_only_user=$row[0];
|
|
|
|
if( (strlen($PHP_AUTH_USER)<2) or (strlen($PHP_AUTH_PW)<2) or (!$auth))
|
|
{
|
|
Header("WWW-Authenticate: Basic realm=\"VICI-PROJECTS\"");
|
|
Header("HTTP/1.0 401 Unauthorized");
|
|
echo "Invalid Username/Password: |$PHP_AUTH_USER|$PHP_AUTH_PW|\n";
|
|
exit;
|
|
}
|
|
|
|
$stmt="SELECT user_group from vicidial_users where user='$PHP_AUTH_USER' and pass='$PHP_AUTH_PW' and user_level > 6 and view_reports='1' and active='Y';";
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
$rslt=mysql_query($stmt, $link);
|
|
$row=mysql_fetch_row($rslt);
|
|
$LOGuser_group = $row[0];
|
|
|
|
$stmt="SELECT allowed_campaigns,allowed_reports from vicidial_user_groups where user_group='$LOGuser_group';";
|
|
if ($DB) {echo "|$stmt|\n";}
|
|
$rslt=mysql_query($stmt, $link);
|
|
$row=mysql_fetch_row($rslt);
|
|
$LOGallowed_campaigns = $row[0];
|
|
$LOGallowed_reports = $row[1];
|
|
|
|
if ( (!preg_match("/$report_name/",$LOGallowed_reports)) and (!preg_match("/ALL REPORTS/",$LOGallowed_reports)) )
|
|
{
|
|
Header("WWW-Authenticate: Basic realm=\"VICI-PROJECTS\"");
|
|
Header("HTTP/1.0 401 Unauthorized");
|
|
echo "You are not allowed to view this report: |$PHP_AUTH_USER|$report_name|\n";
|
|
exit;
|
|
}
|
|
|
|
$NOW_DATE = date("Y-m-d");
|
|
$NOW_TIME = date("Y-m-d H:i:s");
|
|
$STARTtime = date("U");
|
|
if (!isset($group)) {$group = '';}
|
|
if (!isset($query_date)) {$query_date = $NOW_DATE;}
|
|
if (!isset($end_date)) {$end_date = $NOW_DATE;}
|
|
|
|
$stmt="select user_group from vicidial_user_groups order by user_group;";
|
|
$rslt=mysql_query($stmt, $link);
|
|
if ($DB) {echo "$stmt\n";}
|
|
$user_groups_to_print = mysql_num_rows($rslt);
|
|
$i=0;
|
|
$LISTuser_groups[$i]='---ALL---';
|
|
$i++;
|
|
$user_groups_to_print++;
|
|
while ($i < $user_groups_to_print)
|
|
{
|
|
$row=mysql_fetch_row($rslt);
|
|
$LISTuser_groups[$i] =$row[0];
|
|
$i++;
|
|
}
|
|
|
|
##### START HTML #####
|
|
?>
|
|
|
|
<HTML>
|
|
<HEAD>
|
|
|
|
<style type="text/css">
|
|
<!--
|
|
div.scroll_callback {height: 300px; width: 620px; overflow: scroll;}
|
|
div.scroll_list {height: 400px; width: 140px; overflow: scroll;}
|
|
div.scroll_script {height: 331px; width: 600px; background: #FFF5EC; overflow: scroll; font-size: 12px; font-family: sans-serif;}
|
|
div.text_input {overflow: auto; font-size: 10px; font-family: sans-serif;}
|
|
.body_text {font-size: 13px; font-family: sans-serif;}
|
|
.preview_text {font-size: 13px; font-family: sans-serif; background: #CCFFCC}
|
|
.preview_text_red {font-size: 13px; font-family: sans-serif; background: #FFCCCC}
|
|
.body_small {font-size: 11px; font-family: sans-serif;}
|
|
.body_tiny {font-size: 10px; font-family: sans-serif;}
|
|
.log_text {font-size: 11px; font-family: monospace;}
|
|
.log_text_red {font-size: 11px; font-family: monospace; font-weight: bold; background: #FF3333}
|
|
.sd_text {font-size: 16px; font-family: sans-serif; font-weight: bold;}
|
|
.sh_text {font-size: 14px; font-family: sans-serif; font-weight: bold;}
|
|
.sb_text {font-size: 12px; font-family: sans-serif;}
|
|
.sk_text {font-size: 11px; font-family: sans-serif;}
|
|
.skb_text {font-size: 13px; font-family: sans-serif; font-weight: bold;}
|
|
.ON_conf {font-size: 11px; font-family: monospace; color: black; background: #FFFF99}
|
|
.OFF_conf {font-size: 11px; font-family: monospace; color: black; background: #FFCC77}
|
|
.cust_form {font-family: sans-serif; font-size: 10px; overflow: auto}
|
|
|
|
.select_bold {font-size: 14px; font-family: sans-serif; font-weight: bold;}
|
|
.header_white {font-size: 14px; font-family: sans-serif; font-weight: bold; color: white}
|
|
.data_records {font-size: 12px; font-family: sans-serif; color: black}
|
|
.data_records_fix {font-size: 12px; font-family: monospace; color: black}
|
|
.data_records_fix_small {font-size: 9px; font-family: monospace; color: black}
|
|
|
|
-->
|
|
</style>
|
|
|
|
<script language="JavaScript" src="calendar_db.js"></script>
|
|
<link rel="stylesheet" href="calendar.css">
|
|
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
|
<TITLE>
|
|
|
|
<?php
|
|
echo "$report_name";
|
|
|
|
##### BEGIN Set variables to make header show properly #####
|
|
$ADD = '311111';
|
|
$hh = 'usergroups';
|
|
$LOGast_admin_access = '1';
|
|
$ADMIN = 'admin.php';
|
|
$page_width='770';
|
|
$section_width='750';
|
|
$header_font_size='3';
|
|
$subheader_font_size='2';
|
|
$subcamp_font_size='2';
|
|
$header_selected_bold='<b>';
|
|
$header_nonselected_bold='';
|
|
$usergroups_color = '#FFFF99';
|
|
$usergroups_font = 'BLACK';
|
|
$usergroups_color = '#E6E6E6';
|
|
$subcamp_color = '#C6C6C6';
|
|
##### END Set variables to make header show properly #####
|
|
|
|
require("admin_header.php");
|
|
|
|
|
|
|
|
$user_group_ct = count($user_group);
|
|
$user_group_string='|';
|
|
|
|
$i=0;
|
|
while($i < $user_group_ct)
|
|
{
|
|
$user_group_string .= "$user_group[$i]|";
|
|
$user_group_SQL .= "'$user_group[$i]',";
|
|
$i++;
|
|
}
|
|
if ( (ereg("--ALL--",$user_group_string) ) or ($user_group_ct < 1) )
|
|
{
|
|
$user_group_SQL = "";
|
|
}
|
|
else
|
|
{
|
|
$user_group_SQL = eregi_replace(",$",'',$user_group_SQL);
|
|
$user_group_SQL = "and vicidial_timeclock_log.user_group IN($user_group_SQL)";
|
|
}
|
|
|
|
if ($DB > 0)
|
|
{
|
|
echo "<BR>\n";
|
|
echo "$user_group_ct|$user_group_string|$user_group_SQL\n";
|
|
echo "<BR>\n";
|
|
}
|
|
|
|
echo "<CENTER>\n";
|
|
echo "<FORM ACTION=\"$PHP_SELF\" METHOD=GET name=vicidial_report id=vicidial_report>\n";
|
|
echo "<INPUT TYPE=HIDDEN NAME=DB VALUE=\"$DB\">";
|
|
echo "<TABLE BORDER=0 CELLSPACING=6><TR><TD ALIGN=LEFT VALIGN=TOP>\n";
|
|
|
|
echo "<font class=\"select_bold\"><B>Date Range:</B></font><BR><CENTER>\n";
|
|
echo "<INPUT TYPE=TEXT NAME=query_date SIZE=10 MAXLENGTH=10 VALUE=\"$query_date\">";
|
|
|
|
?>
|
|
<script language="JavaScript">
|
|
var o_cal = new tcal ({
|
|
// form name
|
|
'formname': 'vicidial_report',
|
|
// input name
|
|
'controlname': 'query_date'
|
|
});
|
|
o_cal.a_tpl.yearscroll = false;
|
|
// o_cal.a_tpl.weekstart = 1; // Monday week start
|
|
</script>
|
|
<?php
|
|
|
|
echo "<BR>to<BR>\n";
|
|
echo "<INPUT TYPE=TEXT NAME=end_date SIZE=10 MAXLENGTH=10 VALUE=\"$end_date\">";
|
|
|
|
?>
|
|
<script language="JavaScript">
|
|
var o_cal = new tcal ({
|
|
// form name
|
|
'formname': 'vicidial_report',
|
|
// input name
|
|
'controlname': 'end_date'
|
|
});
|
|
o_cal.a_tpl.yearscroll = false;
|
|
// o_cal.a_tpl.weekstart = 1; // Monday week start
|
|
</script>
|
|
<?php
|
|
|
|
echo "</TD><TD ALIGN=LEFT VALIGN=TOP>\n";
|
|
echo "<font class=\"select_bold\"><B>User Groups:</B></font><BR><CENTER>\n";
|
|
echo "<SELECT SIZE=5 NAME=user_group[] multiple>\n";
|
|
$o=0;
|
|
while ($user_groups_to_print > $o)
|
|
{
|
|
if (ereg("\|$LISTuser_groups[$o]\|",$user_group_string))
|
|
{echo "<option selected value=\"$LISTuser_groups[$o]\">$LISTuser_groups[$o]</option>\n";}
|
|
else
|
|
{echo "<option value=\"$LISTuser_groups[$o]\">$LISTuser_groups[$o]</option>\n";}
|
|
$o++;
|
|
}
|
|
echo "</SELECT>\n";
|
|
|
|
echo "</TD></TD><TD ALIGN=LEFT VALIGN=TOP>\n";
|
|
echo "<font class=\"select_bold\"><B>Order:</B></font><BR>\n";
|
|
echo "<SELECT SIZE=1 NAME=order>\n";
|
|
echo "<option selected value=\"$order\">$order</option>\n";
|
|
echo "<option value=\"\">--</option>\n";
|
|
echo "<option>hours_up</option>\n";
|
|
echo "<option>hours_down</option>\n";
|
|
echo "<option>user_up</option>\n";
|
|
echo "<option>user_down</option>\n";
|
|
echo "<option>name_up</option>\n";
|
|
echo "<option>name_down</option>\n";
|
|
echo "<option>group_up</option>\n";
|
|
echo "<option>group_down</option>\n";
|
|
echo "</SELECT><BR><CENTER>\n";
|
|
|
|
echo "</TD><TD ALIGN=LEFT VALIGN=TOP>\n";
|
|
echo "<font class=\"select_bold\"><B>User:</B></font><BR>\n";
|
|
echo "<INPUT TYPE=text NAME=user SIZE=7 MAXLENGTH=20 VALUE=\"$user\">\n";
|
|
|
|
echo "<BR><BR><INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=SUBMIT>\n";
|
|
echo "</TD></TD><TD ALIGN=LEFT VALIGN=TOP>\n";
|
|
echo "</TD><TD ALIGN=CENTER VALIGN=TOP ROWSPAN=3>\n";
|
|
echo "<FONT class=\"select_bold\" COLOR=BLACK SIZE=2> <a href=\"./admin.php?ADD=999999\">REPORTS</a> </FONT>\n";
|
|
|
|
echo "</TD></TR></TABLE>\n";
|
|
echo "</FORM>\n\n";
|
|
|
|
echo "<PRE><FONT SIZE=3>\n";
|
|
|
|
|
|
echo "User Timeclock Report $NOW_TIME\n";
|
|
|
|
echo "Time range: $query_date to $end_date\n\n";
|
|
echo "---------- USER TIMECLOCK DETAILS -------------\n";
|
|
echo "These totals do NOT include any active sessions\n</PRE>\n";
|
|
|
|
echo "<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3><TR BGCOLOR=BLACK>\n";
|
|
echo "<TD ALIGN=CENTER><FONT class=\"header_white\">#</TD>\n";
|
|
echo "<TD ALIGN=CENTER><FONT class=\"header_white\"> USER </TD>\n";
|
|
echo "<TD ALIGN=CENTER><FONT class=\"header_white\"> NAME </TD>\n";
|
|
echo "<TD ALIGN=CENTER><FONT class=\"header_white\"> GROUP </TD>\n";
|
|
echo "<TD ALIGN=CENTER><FONT class=\"header_white\"> HOURS </TD>\n";
|
|
echo "</TR>\n";
|
|
|
|
$order_SQL='';
|
|
if ($order == 'hours_up') {$order_SQL = "order by login";}
|
|
if ($order == 'hours_down') {$order_SQL = "order by login desc";}
|
|
if ($order == 'user_up') {$order_SQL = "order by vicidial_users.user";}
|
|
if ($order == 'user_down') {$order_SQL = "order by vicidial_users.user desc";}
|
|
if ($order == 'name_up') {$order_SQL = "order by full_name";}
|
|
if ($order == 'name_down') {$order_SQL = "order by full_name desc";}
|
|
if ($order == 'group_up') {$order_SQL = "order by vicidial_timeclock_log.user_group";}
|
|
if ($order == 'group_down') {$order_SQL = "order by vicidial_timeclock_log.user_group desc";}
|
|
|
|
if (strlen($user) > 0) {$user_SQL = "and vicidial_timeclock_log.user='$user'";}
|
|
else {$user_SQL='';}
|
|
|
|
$stmt="select vicidial_users.user,full_name,sum(login_sec) as login,vicidial_timeclock_log.user_group from vicidial_users,vicidial_timeclock_log where event IN('LOGIN','START') and event_date >= '$query_date 00:00:00' and event_date <= '$end_date 23:59:59' and vicidial_users.user=vicidial_timeclock_log.user $user_SQL $user_group_SQL group by vicidial_users.user,vicidial_timeclock_log.user_group $order_SQL limit 100000;";
|
|
$rslt=mysql_query($stmt, $link);
|
|
if ($DB) {echo "$stmt\n";}
|
|
$rows_to_print = mysql_num_rows($rslt);
|
|
$i=0;
|
|
while ($i < $rows_to_print)
|
|
{
|
|
$dbHOURS=0;
|
|
$row=mysql_fetch_row($rslt);
|
|
$user_id[$i] = $row[0];
|
|
$full_name[$i] = $row[1];
|
|
$login_sec[$i] = $row[2]; $TOTlogin_sec = ($TOTlogin_sec + $row[2]);
|
|
$u_group[$i] = $row[3];
|
|
|
|
if ($login_sec[$i] > 0)
|
|
{
|
|
$dbHOURS = ($login_sec[$i] / 3600);
|
|
$dbHOURS = round($dbHOURS, 2);
|
|
$dbHOURS = sprintf("%01.2f", $dbHOURS);
|
|
}
|
|
else
|
|
{$dbHOURS='0.00';}
|
|
|
|
$hours[$i] = $dbHOURS;
|
|
$hoursSORT[$i] = "$dbHOURS-----$i";
|
|
|
|
$i++;
|
|
}
|
|
|
|
|
|
$j=0;
|
|
while ($j < $rows_to_print)
|
|
{
|
|
|
|
$hours_split = explode("-----",$hoursSORT[$j]);
|
|
$i = $hours_split[1];
|
|
|
|
if (eregi("1$|3$|5$|7$|9$", $j))
|
|
{$bgcolor='bgcolor="#B9CBFD"';}
|
|
else
|
|
{$bgcolor='bgcolor="#9BB9FB"';}
|
|
|
|
echo "<TR $bgcolor>\n";
|
|
echo "<TD ALIGN=LEFT><FONT class=\"data_records_fix_small\">$j</TD>\n";
|
|
echo "<TD><FONT class=\"data_records\"><A HREF=\"user_status.php?user=$user_id[$i]\">$user_id[$i]</A> </TD>\n";
|
|
echo "<TD><FONT class=\"data_records\">$full_name[$i] </TD>\n";
|
|
echo "<TD><FONT class=\"data_records\">$u_group[$i] </TD>\n";
|
|
echo "<TD ALIGN=RIGHT><FONT class=\"data_records_fix\"> $hours[$i]</TD>\n";
|
|
echo "</TR>\n";
|
|
|
|
$j++;
|
|
}
|
|
|
|
|
|
if ($TOTlogin_sec > 0)
|
|
{
|
|
$TOTdbHOURS = ($TOTlogin_sec / 3600);
|
|
$TOTdbHOURS = round($TOTdbHOURS, 0);
|
|
$TOTdbHOURS = sprintf("%01.0f", $TOTdbHOURS);
|
|
}
|
|
else
|
|
{$TOTdbHOURS='0.00';}
|
|
|
|
$TOThours = $TOTdbHOURS;
|
|
|
|
|
|
echo "<TR BGCOLOR=#E6E6E6>\n";
|
|
echo "<TD ALIGN=LEFT COLSPAN=4><FONT class=\"data_records\">TOTALS</TD>\n";
|
|
echo "<TD ALIGN=RIGHT><FONT class=\"data_records_fix\"> $TOThours</TD>\n";
|
|
echo "</TR>\n";
|
|
|
|
echo "</TABLE>\n";
|
|
|
|
?>
|
|
</CENTER>
|
|
</BODY></HTML>
|