| Current Path : /var/www/html/administrator/components/com_jssupportticket/models/ |
| Current File : /var/www/html/administrator/components/com_jssupportticket/models/reports.php |
<?php
/**
* @Copyright Copyright (C) 2015 ... Ahmad Bilal
* @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
* Company: Buruj Solutions
+ Contact: www.burujsolutions.com , info@burujsolutions.com
* Created on: May 22, 2015
^
+ Project: JS Tickets
^
*/
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.model');
jimport('joomla.html.html');
class JSSupportticketModelReports extends JSSupportTicketModel {
function __construct() {
parent::__construct();
}
function getOverallReportData(){
$db = JFactory::getDbo();
$result = array();
//Overall Data by status
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL)";
$db->setQuery($query);
$openticket = $db->loadResult();
$result['openticket'] = $openticket;
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4";
$db->setQuery($query);
$closeticket = $db->loadResult();
$result['closeticket'] = $closeticket;
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 ";
$db->setQuery($query);
$answeredticket = $db->loadResult();
$result['answeredticket'] = $answeredticket;
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4";
$db->setQuery($query);
$overdueticket = $db->loadResult();
$result['overdueticket'] = $overdueticket;
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets`";
$db->setQuery($query);
$alltickets = $db->loadResult();
$result['alltickets'] = $alltickets;
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND lastreply != '0000-00-00 00:00:00'";
$db->setQuery($query);
$pendingticket = $db->loadResult();
$result['status_chart'] = "['".JText::_('New')."',$openticket],['".JText::_('Answered')."',$answeredticket],['".JText::_('Overdue')."',$overdueticket],['".JText::_('Pending')."',$pendingticket]";
$total = $openticket + $closeticket + $answeredticket + $overdueticket + $pendingticket;
$result['bar_chart'] = "
['".JText::_('New')."',$openticket,'#FF9900'],
['".JText::_('Answered')."',$answeredticket,'#179650'],
['".JText::_('Closed')."',$closeticket,'#5F3BBB'],
['".JText::_('Pending')."',$pendingticket,'#D98E11'],
['".JText::_('Overdue')."',$overdueticket,'#DB624C']
";
$query = "SELECT dept.departmentname,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE departmentid = dept.id) AS totalticket
FROM `#__js_ticket_departments` AS dept";
$db->setQuery($query);
$department = $db->loadObjectList();
$result['pie3d_chart1'] = "";
foreach($department AS $dept){
$result['pie3d_chart1'] .= "['$dept->departmentname',$dept->totalticket],";
}
$query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id) AS totalticket
FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
$db->setQuery($query);
$department = $db->loadObjectList();
$result['pie3d_chart2'] = "";
foreach($department AS $dept){
$result['pie3d_chart2'] .= "['".JText::_($dept->priority)."',$dept->totalticket],";
}
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE ticketviaemail = 1";
$db->setQuery($query);
$ticketviaemail = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE ticketviaemail = 0";
$db->setQuery($query);
$directticket = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_replies` WHERE ticketviaemail = 1";
$db->setQuery($query);
$replyviaemail = $db->loadResult();
$query = "SELECT COUNT(id) FROM `#__js_ticket_replies` WHERE ticketviaemail = 0";
$db->setQuery($query);
$directreply = $db->loadResult();
$result['stack_data'] = "['".JText::_('Tickets')."',$directticket,$ticketviaemail,''],['".JText::_('Replies')."',$directreply,$replyviaemail,'']";
$query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) ) AS totalticket
FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
$db->setQuery($query);
$openticket_pr = $db->loadObjectList();
$query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND isanswered = 1 AND status != 4 AND status != 0 ) AS totalticket
FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
$db->setQuery($query);
$answeredticket_pr = $db->loadObjectList();
$query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND isoverdue = 1 AND status != 4 ) AS totalticket
FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
$db->setQuery($query);
$overdueticket_pr = $db->loadObjectList();
$query = "SELECT priority.priority,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE priorityid = priority.id AND isanswered != 1 AND status != 4 AND isoverdue != 1 AND (lastreply != '0000-00-00 00:00:00') ) AS totalticket
FROM `#__js_ticket_priorities` AS priority ORDER BY priority.priority";
$db->setQuery($query);
$pendingticket_pr = $db->loadObjectList();
$result['stack_chart_horizontal']['title'] = "['".JText::_('Tickets')."',";
$result['stack_chart_horizontal']['data'] = "['".JText::_('Overdue')."',";
foreach($overdueticket_pr AS $pr){
$result['stack_chart_horizontal']['title'] .= "'".JText::_($pr->priority)."',";
$result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
}
$result['stack_chart_horizontal']['title'] .= "]";
$result['stack_chart_horizontal']['data'] .= "],['".JText::_('Pending')."',";
foreach($pendingticket_pr AS $pr){
$result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
}
$result['stack_chart_horizontal']['data'] .= "],['".JText::_('Answered')."',";
foreach($answeredticket_pr AS $pr){
$result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
}
$result['stack_chart_horizontal']['data'] .= "],['".JText::_('New')."',";
foreach($openticket_pr AS $pr){
$result['stack_chart_horizontal']['data'] .= $pr->totalticket.",";
}
$result['stack_chart_horizontal']['data'] .= "]";
$query = "SELECT staff.firstname,staff.lastname,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE staffid = staff.id) AS totalticket
FROM `#__js_ticket_staff` AS staff";
$db->setQuery($query);
$stafftickets = $db->loadObjectList();
$result['slice_chart'] = '';
if(!empty($stafftickets))
foreach($stafftickets AS $ticket){
$staffname = $ticket->firstname;
if(!empty($ticket->lastname)){
$staffname .= ' '.$ticket->lastname;
}
$result['slice_chart'] .= "['".$staffname."',$ticket->totalticket],";
}
//To show priority colors on chart
$jsonColorList = "[";
$query = "SELECT prioritycolour FROM `#__js_ticket_priorities` ORDER BY priority ";
$db->setQuery($query);
foreach($db->loadObjectList() as $priority){
$jsonColorList.= "'".$priority->prioritycolour."',";
}
$jsonColorList .= "]";
$result['priorityColorList'] = $jsonColorList;
//end priority colors
return $result;
}
function getStaffReports(){
$db = JFactory::getDbo();
$result = array();
$date_start = JFactory::getApplication()->input->get('date_start');
$date_end = JFactory::getApplication()->input->get('date_end');
$jsresetbutton = JFactory::getApplication()->input->get('jsresetbutton',0);
if($jsresetbutton == 1){
$date_start = null;
$date_end = null;
}
if( $date_start != '' && $date_end != '' ){
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
$uid = JFactory::getApplication()->input->get('uid');
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
$_SESSION['JSST_SEARCH']['uid'] = $uid;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
$uid = (isset($_SESSION['JSST_SEARCH']['uid']) && $_SESSION['JSST_SEARCH']['uid'] != '') ? $_SESSION['JSST_SEARCH']['uid'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$dates = '';
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$result['filter']['uid'] = $uid;
$staffid = $this->getJSModel('staff')->getStaffId($uid);
$result['filter']['staffname'] = $this->getJSModel('staff')->getMyName($staffid);
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT count(id) FROM `#__js_ticket_tickets` WHERE date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$totalticket = $db->loadResult();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND status != 4 AND isoverdue != 1 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$staffid;
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['ticket_total']['openticket'] = $open_ticket;
$result['ticket_total']['closeticket'] = $close_ticket;
$result['ticket_total']['answeredticket'] = $answered_ticket;
$result['ticket_total']['overdueticket'] = $overdue_ticket;
$result['ticket_total']['pendingticket'] = $pending_ticket;
$result['ticket_total']['totalticket'] = $totalticket;
$result['line_chart_json_array'] = $json_array;
// Pagination
$query = "SELECT count(staff.id)
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid";
if($uid) $query .= ' WHERE staff.uid = '.$uid;
$db->setQuery($query);
$total = $db->loadResult();
$result['total'] = $total;
$query = "SELECT staff.photo,staff.id,staff.firstname,staff.lastname,staff.username,staff.email,user.name AS display_name,user.email,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS pendingticket ,
(SELECT AVG(feed.rating) FROM `#__js_ticket_feedbacks` AS feed JOIN `#__js_ticket_tickets` AS ticket ON ticket.id= feed.ticketid WHERE date(ticket.created) <= " . $db->quote($curdate) . " AND date(ticket.created) >= " . $db->quote($fromdate) . " AND ticket.staffid = staff.id) AS avragerating
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid";
if($uid) $query .= ' WHERE staff.uid = '.$uid;
$db->setQuery($query);
$staffs = $db->loadObjectList();
foreach ($staffs as $staff) {
$staff->time = $this->getJSModel('staff')->getAverageTimeByStaffId($staff->id);// time 0 contains avergage time in seconds and 1 contains wheter it is conflicted or not
}
$result['staffs_report'] =$staffs;
return $result;
}
function getUserReports(){
$db = JFactory::getDbo();
$result = array();
$date_start = JFactory::getApplication()->input->getDate('date_start');
$date_end = JFactory::getApplication()->input->getDate('date_end');
$jsresetbutton = JFactory::getApplication()->input->get('jsresetbutton',0);
if($jsresetbutton == 1){
$date_start = null;
$date_end = null;
}
if( $date_start != '' && $date_end != '' ){
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
$uid = JFactory::getApplication()->input->get('uid');
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
$_SESSION['JSST_SEARCH']['uid'] = $uid;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
$uid = (isset($_SESSION['JSST_SEARCH']['uid']) && $_SESSION['JSST_SEARCH']['uid'] != '') ? $_SESSION['JSST_SEARCH']['uid'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$dates = '';
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$result['filter']['uid'] = $uid;
$result['filter']['username'] = $this->getJSModel('staff')->getUserNameById($uid);
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND staffid = ".$uid;
$db->setQuery($query);
$totalticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND lastreply != '0000-00-00 00:00:00' AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($uid) $query .= " AND uid = ".$uid;
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
$date_totalticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($totalticket AS $ticket) {
if (!isset($date_totalticket[date('Y-m-d', strtotime($ticket->created))]))
$date_totalticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_totalticket[date('Y-m-d', strtotime($ticket->created))] = $date_totalticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
$total_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$totalticket_tmp = isset($date_totalticket[$nextdate]) ? $date_totalticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
$total_ticket += $totalticket_tmp;
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['ticket_total']['openticket'] = $open_ticket;
$result['ticket_total']['closeticket'] = $close_ticket;
$result['ticket_total']['answeredticket'] = $answered_ticket;
$result['ticket_total']['overdueticket'] = $overdue_ticket;
$result['ticket_total']['pendingticket'] = $pending_ticket;
$result['ticket_total']['totalticket'] = $total_ticket;
$result['line_chart_json_array'] = $json_array;
// Pagination
$query = "SELECT COUNT(user.id)
FROM `#__users` AS user
WHERE NOT EXISTS (SELECT id FROM `#__js_ticket_staff` WHERE uid = user.id) ";
if($uid) $query .= " AND user.id = ".$uid;
$db->setQuery($query);
$total = $db->loadResult();
$result['total'] = $total;
$query = "SELECT user.name AS display_name,user.email AS user_email,user.id,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS pendingticket
FROM `#__users` AS user
WHERE NOT EXISTS (SELECT id FROM `#__js_ticket_staff` WHERE uid = user.id) ";
if($uid) $query .= " AND user.id = ".$uid;
$db->setQuery($query);
$users = $db->loadObjectList();
$result['users_report'] =$users;
return $result;
}
function getStaffDetailReportByStaffId($id){
$db = JFactory::getDbo();
$result = array();
if(!is_numeric($id)) return false;
if($id != 0 && $id != " " ){
$date_start = JFactory::getApplication()->input->get('date_start');
$date_end = JFactory::getApplication()->input->get('date_end');
$jsresetbutton = JFactory::getApplication()->input->get('jsresetbutton',0);
if($jsresetbutton == 1){
$date_start = null;
$date_end = null;
}
if( $date_start != '' && $date_end != '' ){
if(JFactory::getApplication()->input->getMethod() == 'POST'){// why this? because
// if detailed form is posted, we need to get dates in mysql format
// but if get method, dates are already in mysql format in url
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND staffid = ".$id;
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['line_chart_json_array'] = $json_array;
$query = "SELECT staff.photo,staff.id,staff.firstname,staff.lastname,staff.username,staff.email,user.name AS display_name,user.email AS user_email,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND staffid = staff.id) AS pendingticket ,
(SELECT AVG(feed.rating) FROM `#__js_ticket_feedbacks` AS feed JOIN `#__js_ticket_tickets` AS ticket ON ticket.id= feed.ticketid WHERE date(ticket.created) <= " . $db->quote($curdate) . " AND date(ticket.created) >= " . $db->quote($fromdate) . " AND ticket.staffid = staff.id) AS avragerating
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid
WHERE staff.id = ".$id;
$db->setQuery($query);
$staff = $db->loadObject();
$staff->time = $this->getJSModel('staff')->getAverageTimeByStaffId($staff->id);// time 0 contains avergage time in seconds and 1 contains wheter it is conflicted or not
$result['staff_report'] = $staff;
// ticket ids for staff member on which he replied but are not assigned to him
$query = "SELECT DISTINCT(ticketid) AS ticketid
FROM `#__js_ticket_staff_time`
WHERE staffid = ".$id;
$db->setQuery($query);
$all_tickets = $db->loadObjectList();
$ticketid_string = '';
$comma = '';
foreach ($all_tickets as $ticket) {
$ticketid_string .= $comma.$ticket->ticketid;
$comma = ', ';
}
if($ticketid_string == ''){
$q_strig = "(staffid = ".$id.")";
}else{
$q_strig = "(staffid = ".$id." OR ticket.id IN (".$ticketid_string."))";
}
// Pagination
$query = "SELECT COUNT(ticket.id)
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
WHERE ".$q_strig." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$total = $db->loadResult();
$result['total'] = $total;
//Tickets
$query = "SELECT ticket.*,priority.priority, priority.prioritycolour , feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE ".$q_strig." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$result['staff_tickets'] = $db->loadObjectList();
foreach ($result['staff_tickets'] as $ticket) {
$ticket->time = $this->getJSModel('staff')->getTimeTakenByTicketIdAndStaffId($ticket->id,$id);
}
return $result;
}
}
function getStaffDetailReportByUserId($id){
$db = JFactory::getDbo();
$result = array();
if(!is_numeric($id)) return false;
$date_start = JFactory::getApplication()->input->get('date_start');
$date_end = JFactory::getApplication()->input->get('date_end');
$jsresetbutton = JFactory::getApplication()->input->get('jsresetbutton',0);
if($jsresetbutton == 1){
$date_start = null;
$date_end = null;
}
if( $date_start != '' && $date_end != '' ){
if(JFactory::getApplication()->input->getMethod() == 'POST'){//why this?
//because, form is posted, then we need to convert dates in mysql format
//if not posted, dates come from url, that are already in mysql format
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND uid = ".$id;
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['line_chart_json_array'] = $json_array;
$query = "SELECT user.name AS display_name,user.email AS user_email,user.id,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND uid = user.id) AS pendingticket
FROM `#__users` AS user
WHERE user.id = ".$id;
$db->setQuery($query);
$staff = $db->loadObject();
$result['user_report'] =$staff;
// Pagination
$query = "SELECT COUNT(ticket.id)
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
WHERE uid = ".$id." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$total = $db->loadResult();
$result['total'] = $total;
//Tickets
$query = "SELECT ticket.*,priority.priority, priority.prioritycolour , feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE uid = ".$id." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$result['user_tickets'] = $db->loadObjectList();
foreach ($result['user_tickets'] as $ticket) {
$ticket->time = $this->getJSModel('staff')->getTimeTakenByTicketId($ticket->id);
}
return $result;
}
function getStaffReportsFE($date_start ,$date_end , $limitstart, $limit){
$db = JFactory::getDbo();
if( $date_start != '' && $date_end != '' ){
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
$user = JSSupportticketCurrentUser::getInstance();
$id = $user->getStaffId();
//Line Chart Data
$curdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$dates = '';
$fromdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$results['filter']['date_start'] = $curdate;
$results['filter']['date_end'] = $fromdate;
$staffid = $user->getStaffId();
$results['filter']['staffname'] = $this->getJSModel('staff')->getMyName($staffid);
$nextdate = $fromdate;
// find my depats
$query = "SELECT dept.departmentid FROM `#__js_ticket_acl_user_access_departments` AS dept WHERE dept.staffid = $staffid";
$db->setQuery($query);
$data = $db->loadObjectList();
$my_depts = '';
foreach ($data as $key => $value) {
if($my_depts)
$my_depts .= ',';
$my_depts .= $value->departmentid;
}
// get mytickets, or all tickets with my departments
if($my_depts)
$dep_query = " AND (ticket.staffid = $staffid OR ticket.departmentid IN ($my_depts)) ";
else
$dep_query = " AND ( ticket.staffid = $staffid ) ";
//Query to get Data
$query = "SELECT ticket.created FROM `#__js_ticket_tickets` AS ticket WHERE ticket.status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "'";
$query .= $dep_query;
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT ticket.created FROM `#__js_ticket_tickets` AS ticket WHERE ticket.status = 4 AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "'";
$query .= $dep_query;
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT ticket.created FROM `#__js_ticket_tickets` AS ticket WHERE ticket.isanswered = 1 AND ticket.status != 4 AND ticket.status != 0 AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "'";
$query .= $dep_query;
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT ticket.created FROM `#__js_ticket_tickets` AS ticket WHERE ticket.isoverdue = 1 AND ticket.status != 4 AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "'";
$query .= $dep_query;
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT ticket.created FROM `#__js_ticket_tickets` AS ticket WHERE ticket.isanswered != 1 AND isoverdue != 1 AND ticket.status != 4 AND (ticket.lastreply != '0000-00-00 00:00:00') AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "'";
$query .= $dep_query;
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$json_array = "";
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
if($nextdate == $curdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $curdate);
$results['ticket_total']['openticket'] = $open_ticket;
$results['ticket_total']['closeticket'] = $close_ticket;
$results['ticket_total']['answeredticket'] = $answered_ticket;
$results['ticket_total']['overdueticket'] = $overdue_ticket;
$results['ticket_total']['pendingticket'] = $pending_ticket;
$results['line_chart_json_array'] = $json_array;
// Pagination staffs listing
$query = "SELECT COUNT(DISTINCT staff.id)
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid
LEFT JOIN `#__js_ticket_acl_user_access_departments` AS dep ON dep.staffid = staff.id ";
$query .= " WHERE (staff.id = $staffid OR dep.departmentid IN (SELECT dept.departmentid FROM `#__js_ticket_acl_user_access_departments` AS dept WHERE dept.staffid = $staffid))";
$db->setQuery($query);
$total = $db->loadResult();
if ($total <= $limitstart)
$limitstart = 0;
// data
$query = "SELECT DISTINCT staff.photo,staff.id,staff.firstname,staff.lastname,staff.username,staff.email,user.name AS display_name,user.email AS user_email,user.username AS user_nicename,
(SELECT COUNT(ticket.id) FROM `#__js_ticket_tickets` AS ticket WHERE ticket.status = 0 AND isoverdue != 1 AND (ticket.lastreply = '0000-00-00 00:00:00' OR ticket.lastreply IS NULL) AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "' AND ticket.staffid = staff.id) AS openticket,
(SELECT COUNT(ticket.id) FROM `#__js_ticket_tickets` AS ticket WHERE ticket.status = 4 AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "' AND ticket.staffid = staff.id) AS closeticket,
(SELECT COUNT(ticket.id) FROM `#__js_ticket_tickets` AS ticket WHERE ticket.isanswered = 1 AND ticket.status != 4 AND ticket.status != 0 AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "' AND ticket.staffid = staff.id) AS answeredticket,
(SELECT COUNT(ticket.id) FROM `#__js_ticket_tickets` AS ticket WHERE ticket.isoverdue = 1 AND ticket.status != 4 AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "' AND ticket.staffid = staff.id) AS overdueticket,
(SELECT COUNT(ticket.id) FROM `#__js_ticket_tickets` AS ticket WHERE ticket.isanswered != 1 AND isoverdue != 1 AND ticket.status != 4 AND (ticket.lastreply != '0000-00-00 00:00:00') AND date(ticket.created) >= '" . $curdate . "' AND date(ticket.created) <= '" . $fromdate . "' AND ticket.staffid = staff.id) AS pendingticket
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid
LEFT JOIN `#__js_ticket_acl_user_access_departments` AS dep ON dep.staffid = staff.id";
$query .= " WHERE (staff.id = $staffid OR dep.departmentid IN (SELECT dept.departmentid FROM `#__js_ticket_acl_user_access_departments` AS dept WHERE dept.staffid = $staffid))";
$db->setQuery($query, $limitstart, $limit);
$staffs = $db->loadObjectList();
$results['staffs_report'] = $staffs;
$results[1] = $total;
return $results;
}
function isValidStaffid($staffid){
if( ! is_numeric($staffid))
return false;
$db = JFactory::getDbo();
$user = JSSupportticketCurrentUser::getInstance();
$id = $user->getStaffId();
if( $id == $staffid )
return true;
$query = "SELECT staff.id AS staffid
FROM `#__js_ticket_staff` AS staff
JOIN `#__users` AS user ON user.id = staff.uid
JOIN `#__js_ticket_acl_user_access_departments` AS dep ON dep.staffid = staff.id ";
$query .= " WHERE (dep.departmentid IN (SELECT dept.departmentid FROM `#__js_ticket_acl_user_access_departments` AS dept WHERE dept.staffid = $id))";
$db->setQuery($query);
$result = $db->loadObjectList();
foreach ($result as $staff) {
if($staff->staffid == $staffid)
return true;
}
return false;
}
function getDepartmentReportsFE($limitstart , $limit){
$db = JFactory::getDbo();
$user = JSSupportticketCurrentUser::getInstance();
$staffid = $user->getStaffId();
$query = "SELECT dept.departmentname,(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE departmentid = dept.id ) AS totalticket
FROM `#__js_ticket_departments` AS dept
JOIN `#__js_ticket_acl_user_access_departments` AS acl ON acl.departmentid = dept.id
WHERE acl.staffid = $staffid AND dept.status = 1";
$db->setQuery($query);
$department = $db->loadObjectList();
$results['pie3d_chart1'] = "";
$i = 0;
foreach($department AS $dept){
if($dept->totalticket == 0)
$i += 1;
$results['pie3d_chart1'] .= "['$dept->departmentname',$dept->totalticket],";
}
if(count($department) == $i)
$results['pie3d_chart1'] = '';
// pagination
$query = "SELECT count(dept.id)
FROM `#__js_ticket_departments` AS dept
JOIN `#__js_ticket_acl_user_access_departments` AS acl ON acl.departmentid = dept.id
WHERE acl.staffid = $staffid AND dept.status = 1";
$db->setQuery($query);
$total = $db->loadResult();
if ($total <= $limitstart)
$limitstart = 0;
$query = "SELECT dept.departmentname,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND departmentid = dept.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND departmentid = dept.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND departmentid = dept.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND departmentid = dept.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND departmentid = dept.id) AS pendingticket
FROM `#__js_ticket_departments` AS dept
JOIN `#__js_ticket_acl_user_access_departments` AS acl ON acl.departmentid = dept.id
WHERE acl.staffid = $staffid AND dept.status = 1 ";
$db->setQuery($query , $limitstart , $limit);
$departments = $db->loadObjectList();
$results['departments_report'] = $departments;
$results[1] = $total;
return $results;
}
function getDepartmentReports(){
$db = JFactory::getDbo();
$result = array();
$date_start = JFactory::getApplication()->input->get('date_start');
$date_end = JFactory::getApplication()->input->get('date_end');
$jsresetbutton = JFactory::getApplication()->input->get('jsresetbutton',0);
if($jsresetbutton == 1){
$date_start = null;
$date_end = null;
}
if( $date_start != '' && $date_end != '' ){
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
$uid = JFactory::getApplication()->input->get('uid');
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$dates = '';
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['ticket_total']['openticket'] = $open_ticket;
$result['ticket_total']['closeticket'] = $close_ticket;
$result['ticket_total']['answeredticket'] = $answered_ticket;
$result['ticket_total']['overdueticket'] = $overdue_ticket;
$result['ticket_total']['pendingticket'] = $pending_ticket;
$result['line_chart_json_array'] = $json_array;
// Pagination
$query = "SELECT COUNT(department.id)
FROM `#__js_ticket_departments` AS department ";
$db->setQuery($query);
$total = $db->loadResult();
$result['total'] = $total;
$query = "SELECT department.departmentname AS display_name,email.email AS department_email,department.id,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS pendingticket
FROM `#__js_ticket_departments` AS department
LEFT JOIN `#__js_ticket_email` AS email ON email.id = department.emailid ";
$db->setQuery($query);
$users = $db->loadObjectList();
$result['departments_report'] =$users;
return $result;
}
function getDepartmentDetailReportById($id){
$db = JFactory::getDbo();
$result = array();
if(!is_numeric($id)) return false;
$date_start = JFactory::getApplication()->input->get('date_start');
$date_end = JFactory::getApplication()->input->get('date_end');
$jsresetbutton = JFactory::getApplication()->input->get('jsresetbutton',0);
if($jsresetbutton == 1){
$date_start = null;
$date_end = null;
}
if( $date_start != '' && $date_end != '' ){
if( $date_start != '' && $date_end != '' ){
if(JFactory::getApplication()->input->getMethod() == 'POST'){//why this?
//because, form is posted, then we need to convert dates in mysql format
//if not posted, dates come from url, that are already in mysql format
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
}
}
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$openticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$closeticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$answeredticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$overdueticket = $db->loadObjectList();
$query = "SELECT created FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
if($id) $query .= " AND departmentid = ".$id;
$db->setQuery($query);
$pendingticket = $db->loadObjectList();
$date_openticket = array();
$date_closeticket = array();
$date_answeredticket = array();
$date_overdueticket = array();
$date_pendingticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))]))
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($closeticket AS $ticket) {
if (!isset($date_closeticket[date('Y-m-d', strtotime($ticket->created))]))
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_closeticket[date('Y-m-d', strtotime($ticket->created))] = $date_closeticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($answeredticket AS $ticket) {
if (!isset($date_answeredticket[date('Y-m-d', strtotime($ticket->created))]))
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_answeredticket[date('Y-m-d', strtotime($ticket->created))] = $date_answeredticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($overdueticket AS $ticket) {
if (!isset($date_overdueticket[date('Y-m-d', strtotime($ticket->created))]))
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_overdueticket[date('Y-m-d', strtotime($ticket->created))] = $date_overdueticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
foreach ($pendingticket AS $ticket) {
if (!isset($date_pendingticket[date('Y-m-d', strtotime($ticket->created))]))
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = 0;
$date_pendingticket[date('Y-m-d', strtotime($ticket->created))] = $date_pendingticket[date('Y-m-d', strtotime($ticket->created))] + 1;
}
$open_ticket = 0;
$close_ticket = 0;
$answered_ticket = 0;
$overdue_ticket = 0;
$pending_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
$openticket_tmp = isset($date_openticket[$nextdate]) ? $date_openticket[$nextdate] : 0;
$closeticket_tmp = isset($date_closeticket[$nextdate]) ? $date_closeticket[$nextdate] : 0;
$answeredticket_tmp = isset($date_answeredticket[$nextdate]) ? $date_answeredticket[$nextdate] : 0;
$overdueticket_tmp = isset($date_overdueticket[$nextdate]) ? $date_overdueticket[$nextdate] : 0;
$pendingticket_tmp = isset($date_pendingticket[$nextdate]) ? $date_pendingticket[$nextdate] : 0;
$json_array .= "[new Date($year,$month,$day),$openticket_tmp,$answeredticket_tmp,$pendingticket_tmp,$overdueticket_tmp,$closeticket_tmp],";
$open_ticket += $openticket_tmp;
$close_ticket += $closeticket_tmp;
$answered_ticket += $answeredticket_tmp;
$overdue_ticket += $overdueticket_tmp;
$pending_ticket += $pendingticket_tmp;
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['line_chart_json_array'] = $json_array;
$query = "SELECT department.departmentname AS display_name,email.email AS department_email,department.id,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 0 AND isoverdue != 1 AND (lastreply = '0000-00-00 00:00:00' OR lastreply IS NULL) AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS openticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE status = 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS closeticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered = 1 AND status != 4 AND status != 0 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS answeredticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isoverdue = 1 AND status != 4 AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS overdueticket,
(SELECT COUNT(id) FROM `#__js_ticket_tickets` WHERE isanswered != 1 AND isoverdue != 1 AND status != 4 AND (lastreply != '0000-00-00 00:00:00') AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate) . " AND departmentid = department.id) AS pendingticket
FROM `#__js_ticket_departments` AS department
LEFT JOIN `#__js_ticket_email` AS email ON email.id = department.emailid
WHERE department.id = ".$id;
$db->setQuery($query);
$departments = $db->loadObject();
$result['department_report'] =$departments;
// Pagination
$query = "SELECT COUNT(ticket.id)
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
WHERE departmentid = ".$id." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$total = $db->loadResult();
$result['total'] = $total;
//Tickets
$query = "SELECT ticket.*,priority.priority, priority.prioritycolour , feedback.rating
FROM `#__js_ticket_tickets` AS ticket
JOIN `#__js_ticket_priorities` AS priority ON priority.id = ticket.priorityid
LEFT JOIN `#__js_ticket_feedbacks` AS feedback ON feedback.ticketid = ticket.id
WHERE departmentid = ".$id." AND date(ticket.created) >= " . $db->quote($fromdate) . " AND date(ticket.created) <= " . $db->quote($curdate);
$db->setQuery($query);
$result['department_tickets'] = $db->loadObjectList();
foreach ($result['department_tickets'] as $ticket) {
$ticket->time = $this->getJSModel('staff')->getTimeTakenByTicketId($ticket->id);
}
return $result;
}
function getFieldsForExport(){
$status_combo = array(
array('value' => null, 'text' => JText::_('Select Ticket Status')),
array('value' => '0', 'text' => JText::_('New')),
array('value' => '1', 'text' => JText::_('Pending')),
array('value' => '2', 'text' => JText::_('In Progress')),
array('value' => '3', 'text' => JText::_('Answerd')),
array('value' => '4', 'text' => JText::_('Closed'))
);
$yesno = array(
array('value' => null, 'text' => JText::_('Select Ticket Overdue Status')),
array('value' => '1', 'text' => JText::_('Yes')),
array('value' => '2', 'text' => JText::_('No'))
);
$departments = $this->getJSModel('department')->getDepartments();
$priorities = $this->getJSModel('priority')->getPriorities();
$lists['staffmembers'] = JHTML::_('select.genericList', $this->getJSModel('staff')->getStaffMembers(), 'staffid', 'class="inputbox " ' . '', 'value', 'text', '');
$lists['departments'] = JHTML::_('select.genericList', $departments, 'departmentid', '', 'value', 'text','');
$lists['priorities'] = JHTML::_('select.genericList', $priorities, 'priorityid', '', 'value', 'text','');
$lists['ticketstatus'] = JHTML::_('select.genericList', $status_combo, 'ticketstatus', '', 'value', 'text','');
$lists['isoverdue'] = JHTML::_('select.genericList', $yesno, 'isoverdue', '', 'value', 'text','');
return $lists;
}
function getSatisfactionReport(){
$db = JFactory::getDbo();
$query = "SELECT rating AS rate
FROM `#__js_ticket_feedbacks` ";
$db->setQuery($query);
$records = $db->loadObjectList();
$arr = array();
$arr[1] = 0;
$arr[2] = 0;
$arr[3] = 0;
$arr[4] = 0;
$arr[5] = 0;
$count = 0;
foreach ($records as $key ) {
$arr[$key->rate] += 1;
$count++;
}
$arr[6] = $count;
$result['result'] = $arr;
$query = "SELECT AVG(rating) as ava
FROM `#__js_ticket_feedbacks` ";
$db->setQuery($query);
$result['avg'] = $db->loadResult();
return $result;
}
function getStaffTimeReport($id){
$db = JFactory::getDbo();
$result = array();
if(!is_numeric($id)) return false;
$date_start = JFactory::getApplication()->input->get('date_start');
$date_end = JFactory::getApplication()->input->get('date_end');
if($date_start > $date_end){
$tmp = $date_start;
$date_start = $date_end;
$date_end = $tmp;
}
if( $date_start != '' && $date_end != '' ){
$config = $this->getJSModel('config')->getConfigs();
$dateformat = $config['date_format'];
if ($dateformat == 'm-d-Y') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[0] . '-' . $arr[1];
} elseif ($dateformat == 'd-m-Y' OR $dateformat == 'Y-m-d') {
$arr = explode('-', $date_start);
$date_start = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
$arr = explode('-', $date_end);
$date_end = $arr[2] . '-' . $arr[1] . '-' . $arr[0];
}
$date_start = JHTML::_('date',strtotime($date_start),"Y-m-d H:i:s" );
$date_end = JHTML::_('date',strtotime($date_end),"Y-m-d H:i:s" );
}
$formsearch = JFactory::getApplication()->input->get('option', 'post');
if ($formsearch == 'com_jssupportticket') {
$_SESSION['JSST_SEARCH']['date_start'] = $date_start;
$_SESSION['JSST_SEARCH']['date_end'] = $date_end;
}
if (JFactory::getApplication()->input->get('pagenum', 'get', null) != null) {
$date_start = (isset($_SESSION['JSST_SEARCH']['date_start']) && $_SESSION['JSST_SEARCH']['date_start'] != '') ? $_SESSION['JSST_SEARCH']['date_start'] : null;
$date_end = (isset($_SESSION['JSST_SEARCH']['date_end']) && $_SESSION['JSST_SEARCH']['date_end'] != '') ? $_SESSION['JSST_SEARCH']['date_end'] : null;
}
//Line Chart Data
$curdate = ($date_end != null) ? date('Y-m-d',strtotime($date_end)) : date('Y-m-d');
$fromdate = ($date_start != null) ? date('Y-m-d',strtotime($date_start)) : date('Y-m-d', strtotime("now -1 month"));
$result['filter']['date_start'] = $fromdate;
$result['filter']['date_end'] = $curdate;
$result['filter']['id'] = $id;
$nextdate = $curdate;
//Query to get Data
$query = "SELECT created,usertime
FROM `#__js_ticket_staff_time`
WHERE staffid = ".$id." AND date(created) >= " . $db->quote($fromdate) . " AND date(created) <= " . $db->quote($curdate);
$db->setQuery($query);
$openticket = $db->loadObjectList();
$date_openticket = array();
foreach ($openticket AS $ticket) {
if (!isset($date_openticket[date('Y-m-d', strtotime($ticket->created))])){
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = 0;
}
$date_openticket[date('Y-m-d', strtotime($ticket->created))] = $date_openticket[date('Y-m-d', strtotime($ticket->created))] + $ticket->usertime;
}
$open_ticket = 0;
$json_array = "";
do{
$year = date('Y',strtotime($nextdate));
$month = date('m',strtotime($nextdate));
$month = $month - 1; //js month are 0 based
$day = date('d',strtotime($nextdate));
if(isset($date_openticket[$nextdate])){
$mins = floor($date_openticket[$nextdate] / 60);
$openticket_tmp = $mins;
}else{
$openticket_tmp = 0;
}
$json_array .= "[new Date($year,$month,$day),$openticket_tmp],";
if($nextdate == $fromdate){
break;
}
$nextdate = date('Y-m-d', strtotime($nextdate . " -1 days"));
}while($nextdate != $fromdate);
$result['line_chart_json_array'] = $json_array;
return $result;
}
}
?>