index.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:16k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: index.php,v $
  15. // | $Date: 2004/02/10 01:34:30 $
  16. // | $Revision: 1.40 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - Technician performance and statistics page.
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. include "./../global.php";
  23. require_once(INCLUDE_PATH.'functions/calendar_functions.php');
  24. if (function_exists('gd_info')) {
  25. $graphing = 1;
  26. } else {
  27. $graphing = 0;
  28. }
  29. tech_nav('Reports & Statistics');
  30. /************************************
  31. * QUICK STATS
  32. ************************************/
  33. if (!$graphing) {
  34. echo "<center><b>Warning:</b> Graphing is not enabled, you will not see the graphs that should be displayed.</center><br /><br />";
  35. }
  36. $first_entry = $db->query_return("SELECT min(timestamp) AS early FROM ticket_log");
  37. $first_entry = our_date($first_entry['early'], 'day');
  38. // Grab ticket counts (closed and customers helped)
  39. $total = $db->query_return("SELECT COUNT(distinct ticket_log.ticketid) AS total FROM ticket_log WHERE techid = '$user[id]' AND actionid = '14'");
  40. $total = number_format($total['total']);
  41. $reps = $db->query_return("SELECT COUNT(id) AS total FROM ticket_message WHERE techid = '$user[id]'");
  42. $reps = number_format($reps['total']);
  43. $db->query("SELECT DISTINCT ticketid FROM ticket_message WHERE techid = '$user[id]'", 'ticketid');
  44. while ($res = $db->row_array()) {
  45.         $custs[] = $res['ticketid'];
  46. }
  47. $custs = $db->query_return("SELECT COUNT(DISTINCT userid) AS total FROM ticket WHERE id in " . array2sql($custs));
  48. $custs = number_format($custs['total']);
  49. $simple_stats[] = "Sent $reps response(s)";
  50. $simple_stats[] = "Closed a total of $total ticket(s)";
  51. $simple_stats[] = "Helped $custs customer(s)";
  52. /************************************
  53. * AVERAGE RESOLUTION TIME
  54. ************************************/
  55. // CATEGORY
  56. $db->query("SELECT (min(ticket_message.date) - ticket.date_opened) AS life, ticket_cat.name AS category 
  57. FROM ticket, ticket_message 
  58. LEFT JOIN ticket_cat ON ticket_cat.id = ticket.category 
  59. WHERE ticket_message.ticketid = ticket.id
  60. AND techid = '$user[id]'
  61. GROUP by ticketid
  62. ORDER BY ticket_cat.name
  63. ");
  64. $speed = array();
  65. $speed_tot = array();
  66. $cat_data = array();
  67. while ($result = $db->row_array()) {
  68. $speed[$result['category']]['count']++;
  69. $speed[$result['category']]['time'] += $result['life'];
  70. $speed_tot['count']++;
  71. $speed_tot['time'] += $result['life'];
  72. }
  73. foreach ($speed AS $category => $data) {
  74. $cat_data[] = array('category' => $category, 'life' => ($data['time'] / $data['count']));
  75. }
  76. if ($speed_tot['count']) {
  77. $cat_data[] = array('category' => '<B><I>Average</I></B>', 'life' => ($speed_tot['time'] / $speed_tot['count']));
  78. } else {
  79. $cat_data[] = array('category' => '<B><I>Average</I></B>', 'life' => 'None');
  80. }
  81. foreach ($cat_data AS $key => $val) {
  82. $catspeeds = 1;
  83. if (!$val[category]) {
  84. $val[category] = "<I>Uncategorized</I>";
  85. }
  86. $val['life'] = clean_time($val['life'], 1);
  87. $avg_response_category[] = array($val[category], $val[life]);
  88. }
  89. if (!$catspeeds) {
  90. $avg_response_category[] = 'None';
  91. }
  92. // PRIORITY
  93. $db->query("SELECT (min(ticket_message.date) - ticket.date_opened) AS life, ticket_pri.name AS priority 
  94. FROM ticket, ticket_message 
  95. LEFT JOIN ticket_pri ON ticket_pri.id = ticket.priority 
  96. WHERE ticket_message.ticketid = ticket.id
  97. AND techid = '$user[id]' 
  98. GROUP by ticketid
  99. ORDER BY ticket_pri.name
  100. ");
  101. $speed = array();
  102. $speed_tot = array();
  103. $pri_data = array();
  104. while ($result = $db->row_array()) {
  105. $speed[$result['priority']]['count']++;
  106. $speed[$result['priority']]['time'] += $result['life'];
  107. $speed_tot['count']++;
  108. $speed_tot['time'] += $result['life'];
  109. }
  110. foreach ($speed AS $priority => $data) {
  111. $pri_data[] = array('priority' => $priority, 'life' => ($data['time'] / $data['count']));
  112. }
  113. if ($speed_tot['count']) {
  114. $pri_data[] = array('priority' => '<B><I>Average</I></B>', 'life' => ($speed_tot['time'] / $speed_tot['count']));
  115. } else {
  116. $pri_data[] = array('priority' => '<B><I>Average</I></B>', 'life' => 'None');
  117. }
  118. foreach ($pri_data AS $key => $val) {
  119. $prispeeds = 1;
  120. if (!$val[priority]) {
  121. $val[priority] = "<I>Unprioritized</I>";
  122. }
  123. $val['life'] = clean_time($val['life'], 1);
  124. $avg_response_pri[] = array($val[priority], $val[life]);
  125. }
  126. if (!$prispeeds) {
  127. $avg_response_pri[] = 'None';
  128. }
  129. // OTHER TECHS (TODAY)
  130. $time = strtotime(date('Y-m-d'));
  131. $techs = $db->query_return_array("SELECT (min(ticket_message.date) - ticket.date_opened) AS life, username
  132.         FROM ticket, ticket_message
  133.         LEFT JOIN tech ON ticket.tech = tech.id
  134.         WHERE ticket_message.ticketid = ticket.id 
  135.                 AND ticket.tech != '$user[id]'
  136.                 AND ticket_message.techid 
  137. AND ticket_message.date >= '$time'
  138.         GROUP by ticketid
  139. ");
  140. if (is_array($techs)) {
  141.         foreach ($techs AS $tech) {
  142.                 $avg_resp_other[$tech['username']]['sum'] += $tech['life'];
  143.                 $avg_resp_other[$tech['username']]['count']++;
  144.         }
  145.         foreach($avg_resp_other AS $techname => $val) {
  146.                 if ($techname) {
  147.                         $avg_resp_tech_today[] = array($techname, clean_time($val['sum'] / $val['count']));
  148.                 }
  149.         }
  150. } else {
  151.         $avg_resp_tech_today[] = array("No data available.");
  152. }
  153. // OTHER TECHS (THIS WEEK)
  154. $time = strtotime(date('Y-m-d') . " - 1 week");
  155. $techs = $db->query_return_array("SELECT (min(ticket_message.date) - ticket.date_opened) AS life, username
  156.         FROM ticket, ticket_message
  157.         LEFT JOIN tech ON ticket.tech = tech.id
  158.         WHERE ticket_message.ticketid = ticket.id 
  159.                 AND ticket.tech != '$user[id]'
  160.                 AND ticket_message.techid 
  161. AND ticket_message.date >= '$time'
  162.         GROUP by ticketid
  163. ");
  164. if (is_array($techs)) {
  165.         foreach ($techs AS $tech) {
  166.                 $avg_resp_other[$tech['username']]['sum'] += $tech['life'];
  167.                 $avg_resp_other[$tech['username']]['count']++;
  168.         }
  169.         foreach($avg_resp_other AS $techname => $val) {
  170.                 if ($techname) {
  171.                         $avg_resp_tech_week[] = array($techname, clean_time($val['sum'] / $val['count']));
  172.                 }
  173.         }
  174. } else {
  175.         $avg_resp_tech_week[] = array("No data available.");
  176. }
  177. /************************************
  178. * YOUR OPEN TICKETS
  179. ************************************/
  180. // CATEGORY 
  181. $db->query("
  182. SELECT COUNT(*) AS total, ticket_cat.name AS category 
  183. FROM ticket, ticket_cat
  184. WHERE tech = '$user[id]'
  185. AND ticket.category = ticket_cat.id 
  186. AND ticket.is_open 
  187. AND ticket.awaiting_tech
  188. GROUP BY category
  189. ");
  190. unset($cats);
  191. while ($result = $db->row_array()) {
  192. $cats++;
  193. $awaiting_response_category[] = array($result[category], $result[total]);
  194. }
  195. $awaiting_response_category[] = array('<b>Total</b>', '<b>' . $cats . '</b>');
  196. // add graph
  197. if (!$cats) {
  198. $awaiting_response_category[] = 'None';
  199. } elseif ($graphing) {
  200. $awaiting_response_category[] = "<img src="graph.php?type=category">";
  201. }
  202. // PRIORITY
  203. $db->query("
  204. SELECT COUNT(*) AS total, ticket_pri.name AS priority 
  205. FROM ticket, ticket_pri 
  206. WHERE tech = '$user[id]' 
  207. AND ticket.priority = ticket_pri.id 
  208. AND ticket.is_open 
  209. AND ticket.awaiting_tech
  210. GROUP BY priority
  211. ");
  212. unset($pris);
  213. while ($result = $db->row_array()) {
  214. $pris++;
  215. $awaiting_response_priority[] = array($result[priority], $result[total]);
  216. }
  217. $awaiting_response_priority[] = array('<b>Total</b>', '<b>' . $pris . '</b>');
  218. if (!$pris) {
  219. $awaiting_response_priority[] = 'None';
  220. } elseif ($graphing) {
  221. $awaiting_response_priority[] = "<img src="graph.php?type=priority">";
  222. }
  223. /*****************************************************
  224. TICKETS CLOSED BY THIS TECH
  225. *****************************************************/
  226. // CATEGORY
  227. $stats = $db->query_return_array("
  228. SELECT COUNT(*) AS total, 
  229. ticket_cat.name AS category
  230. FROM ticket
  231. LEFT JOIN ticket_cat ON ticket_cat.id = ticket.category
  232. WHERE tech = '$user[id]'
  233. GROUP BY category
  234. ");
  235. $stat_tot = 0;
  236. if (is_array($stats)) {
  237. foreach ($stats AS $stat) {
  238. if (!$stat['category']) {
  239. $stat['category'] = '<I>Uncategorized</I>';
  240. }
  241. $your_close_category[] = array($stat[category], $stat[total]);
  242. $stat_tot += $stat['total'];
  243. }
  244. }
  245. if ($stat_tot) {
  246. $your_close_category[] = array('<b>Total</b>', '<b>' . $stat_tot . '</b>');
  247. } else {
  248. $your_close_category[] = 'No tickets closed';
  249. }
  250. // PRIORITY
  251. if ($stat_tot) {
  252. $stats = $db->query_return_array("
  253. SELECT COUNT(*) AS total, 
  254. ticket_pri.name AS priority
  255. FROM ticket
  256. LEFT JOIN ticket_pri ON ticket_pri.id = ticket.priority
  257. WHERE tech = '$user[id]'
  258. GROUP BY priority
  259. ");
  260. foreach ($stats AS $stat) {
  261. if (!$stat['priority']) {
  262. $stat['priority'] = '<I>Unprioritized</I>';
  263. }
  264. $your_close_priority[] = array($stat[priority], $stat[total]);
  265. }
  266. $your_close_priority[] = array('<b>Total</b>', '<b>' . $stat_tot . '</b>');
  267. } else {
  268. $your_close_priority[] = 'No tickets closed';
  269. }
  270. /************************************
  271. * TECH RANKING
  272. ************************************/
  273. // TECHS 
  274. $db->query("
  275. SELECT COUNT(ticket_log.id) AS total, tech.username 
  276. FROM ticket_log, tech
  277. WHERE ticket_log.techid = tech.id 
  278. GROUP BY techid 
  279. ORDER BY 'total' 
  280. DESC LIMIT 5
  281. ");
  282. while ($result = $db->row_array()) {
  283. $techscount += $result[total];
  284. $top_tech_ticket_closed[] = array($result[username], $result[total]);
  285. }
  286. // totals
  287. $top_tech_ticket_closed[] = array('<b>Total</b>', '<b>' . $techscount . '</b>');
  288. // no results
  289. if (!is_array($top_tech_ticket_closed)) {
  290. $top_tech_ticket_closed[] = "No closed tickets";
  291. }
  292. // MOST CUSTOMERS HELPED
  293. $custs = $db->query_return_array("
  294. SELECT COUNT(ticket.id) AS total, 
  295. user.username 
  296. FROM ticket, 
  297. user 
  298. WHERE tech = '$user[id]' 
  299. AND !is_open 
  300. AND ticket.userid = user.id 
  301. GROUP BY userid 
  302. ORDER BY total DESC LIMIT 10
  303. ");
  304. if (is_array($custs)) {
  305. foreach ($custs AS $cust) {
  306. $top_tech_customer_helped[] = array($cust[username], $cust[total]);
  307. $cust_total += $cust[total];
  308. }
  309. $top_tech_customer_helped[] = array('Total', '<b>'  . $cust_total . '</b>');
  310. } else {
  311. $top_tech_customer_helped[] = 'None';
  312. }
  313. /************************************
  314. * USER RANKING
  315. ************************************/
  316. $topusers = $db->query_return_array("
  317. SELECT COUNT(ticket.id) AS total, user.username, user.id AS userid 
  318. FROM ticket 
  319. LEFT JOIN user ON (ticket.userid = user.id)
  320. GROUP BY ticket.userid 
  321. ORDER BY 'total' 
  322. DESC LIMIT 5
  323. ");
  324. if ($db->num_rows()) {
  325. foreach ($topusers AS $val) {
  326. $users++;
  327. $top_users_tickets[] = array($val[username], $val[total]);
  328. }
  329. }
  330. /************************************
  331. * TECH TIME ACTIVITY
  332. ************************************/
  333. $from = strtotime(date('Y-n-d') . ' -2 weeks');
  334. if ($_REQUEST['all']) {
  335. $techlog = $db->query_return_array("SELECT * FROM tech_timelog WHERE techid = '$user[id]' ORDER BY stamp");
  336. $time_link = "Total Logged Time (all logged events) <A HREF="index.php">View Last Two Weeks</A></CENTER>";
  337. } else {
  338. $techlog = $db->query_return_array("SELECT * FROM tech_timelog WHERE techid = '$user[id]' AND stamp >= '$from' ORDER BY stamp");
  339. $time_link = "Total Logged Time (past two weeks) <A HREF="index.php?all=1">View All Entries</A>";
  340. }
  341. foreach ($techlog AS $val) {
  342. if ($last) {
  343. if (($diff = $val['stamp'] - $last) <= $settings['max_log_duration']) {
  344. $techtime[date('Y-m-d', $val['stamp'])] += $diff;
  345. $total += $diff;
  346. }
  347. }
  348. $last = $val['stamp'];
  349. }
  350. if (is_array($techtime)) {
  351. foreach ($techtime AS $key => $data) {
  352. $time_log[] = array(date('D, M jS Y', strtotime($key)), clean_time($data));
  353. }
  354. }
  355. $time_log[] = array('<b>Total</b>', '<b>' . clean_time($total) . '</b>');
  356. /************************************
  357. * LETS DISPLAY EVERYTHING
  358. ************************************/
  359. // basic stats
  360. echo table_list("Since $first_entry you have:", $simple_stats, '95%');
  361. echo "<br /><br />";
  362. // open tickets awaiting response (category / priority)
  363. echo "<table cellpadding="3" align="center" width="95%" cellspacing="0"><tr><td valign="top" width="50%">";
  364. echo table_list("Your Open Tickets Awaiting Your Response (by Category):", $awaiting_response_category, '100%');
  365. echo "</td><td><td width="40">&nbsp;</td><td valign="top" width="50%">";
  366. echo table_list("Your Open Tickets Awaiting Your Response (by Priority):", $awaiting_response_priority, '100%');
  367. echo "</td></tr></table>";
  368. echo "<br /><br />";
  369. // avg response times
  370. echo "<table cellpadding="3" align="center" width="95%" cellspacing="0"><tr><td valign="top" width="50%">";
  371. echo table_list("Your Avg. Response Time</B> (by Category):", $avg_response_category, '100%');
  372. echo "</td><td><td width="40">&nbsp;</td><td valign="top" width="50%">";
  373. echo table_list("Your Avg. Response Time</B> (by Priority)", $avg_response_pri, '100%');
  374. echo "</td></tr></table>";
  375. echo "<br /><br />";
  376. echo "<table cellpadding="3" align="center" width="95%" cellspacing="0"><tr><td valign="top" width="50%">";
  377. echo table_list("Others' Avg. Response Time (Today)", $avg_resp_tech_today, '100%');
  378. echo "</td><td><td width="40">&nbsp;</td><td valign="top" width="50%">";
  379. echo table_list("Others' Avg. Response Time (Week)", $avg_resp_tech_week, '100%');
  380. echo "</td></tr></table>";
  381. echo "<br /><br />";
  382. // tickets you have closed (category / priority)
  383. echo "<table cellpadding="3" align="center" width="95%" cellspacing="0"><tr><td valign="top" width="50%">";
  384. echo table_list("Your Closed Tickets (by Category):", $your_close_category, '100%');
  385. echo "</td><td><td width="40">&nbsp;</td><td valign="top" width="50%">";
  386. echo table_list("Your Closed Tickets (by Priority):", $your_close_priority, '100%');
  387. echo "</td></tr></table>";
  388. echo "<br /><br />";
  389. // list of techs by number of tickets closed and number of customers helped
  390. echo "<table cellpadding="3" align="center" width="95%" cellspacing="0"><tr><td valign="top" width="50%">";
  391. echo table_list("Top Techs</B> (by tickets closed):", $top_tech_ticket_closed, '100%');
  392. echo "</td><td><td width="40">&nbsp;</td><td valign="top" width="50%">";
  393. echo table_list("Customers Most Helped</B> (Tickets Closed):", $top_tech_customer_helped, '100%');
  394. echo "</td></tr></table>";
  395. echo "<br /><br />";
  396. // users by number of tickets created
  397. echo "<table cellpadding="3" align="center" width="95%" cellspacing="0"><tr><td valign="top" width="50%">";
  398. echo table_list("Top User Ticket Submitters</B> (by tickets opened)", $top_users_tickets, '100%');
  399. echo "</td><td><td width="40">&nbsp;</td><td valign="top" width="50%">";
  400. echo "</td></tr></table>";
  401. echo "<br /><br />";
  402. // basic stats
  403. echo table_list($time_link, $time_log, '95%');
  404. tech_footer();
  405. ?>