diff --git a/app/Helper/Finder.php b/app/Helper/Finder.php index 8f0bb2d30..bb2e467ed 100644 --- a/app/Helper/Finder.php +++ b/app/Helper/Finder.php @@ -181,4 +181,17 @@ class Finder return $contents; } + + /** + * SPECIAL CHECK FOR STATUS FOR APPROVAL + * This function is used to special check status for any type of checks. + * + * @return type array + */ + public static function getCustomedStatus() + { + $status = Ticket_Status::select('id', 'name', 'icon_class')->get(); + + return $status; + } } diff --git a/app/Http/Controllers/Agent/helpdesk/Filter/FilterController.php b/app/Http/Controllers/Agent/helpdesk/Filter/FilterController.php index bebcb738b..6d955882b 100644 --- a/app/Http/Controllers/Agent/helpdesk/Filter/FilterController.php +++ b/app/Http/Controllers/Agent/helpdesk/Filter/FilterController.php @@ -2,338 +2,1078 @@ namespace App\Http\Controllers\Agent\helpdesk\Filter; +//requests use App\Http\Controllers\Agent\helpdesk\TicketController; use App\Http\Controllers\Controller; +//controllers +use App\Http\Requests; +use App\Model\helpdesk\Agent\Department; +//models +use App\Model\helpdesk\Agent\DepartmentAssignAgents; use App\Model\helpdesk\Filters\Filter; use App\Model\helpdesk\Filters\Label; +use App\Model\helpdesk\Manage\Help_topic; +use App\Model\helpdesk\Ticket\Ticket_Priority; +use App\Model\helpdesk\Ticket\Ticket_Status; use App\Model\helpdesk\Ticket\Tickets; +use App\Model\helpdesk\Ticket\TicketStatusType; +use App\User; +//classes use Auth; use DB; use Illuminate\Http\Request; +use UTC; +/** + * ----------------------------------------------------------------------------- + * FilterController + * -----------------------------------------------------------------------------. + * + * + * @author Manish Verma + * @copyright (c) 2017, Ladybird Web Solution + * + * @version v2.0 + */ class FilterController extends Controller { protected $request; + /** + * @category constructor function + * + * @param Array/Object $request + * + * @return null + */ public function __construct(Request $req) { $this->middleware(['auth', 'role.agent']); $this->request = $req; - } - - public function getFilter(Request $request) - { - $labels = $this->request->input('labels'); - $tags = $this->request->input('tags'); - if ($request->has('department')) { - $table = $this->departmentTickets($request->input('department'), $request->input('status')); - } else { - $segment = $this->request->input('segment'); - $table = $this->segments($segment); - } - $tickets = []; - $render = false; - if (is_array($labels) && count($labels) > 0) { - $table = $table - ->leftJoin('filters as label', function ($join) { - $join->on('tickets.id', '=', 'label.ticket_id') - ->where('label.key', '=', 'label'); - }) - ->whereIn('label.value', $labels); - } - if (is_array($tags) && count($tags) > 0) { - $table = $table - ->leftJoin('filters as tag', function ($join) { - $join->on('tickets.id', '=', 'tag.ticket_id') - ->where('tag.key', '=', 'tag'); - }) - ->whereIn('tag.value', $tags); - } - if ((is_array($tags) && count($tags) > 0) || (is_array($labels) && count($labels) > 0)) { - $render = true; - } - // return \Datatables::of($table)->make(); - return \Ttable::getTable($table); - } - - public function filterByKey($key, $labels = []) - { - $filter = new Filter(); - $query = $filter->where('key', $key) - ->where(function ($query) use ($labels) { - if (is_array($labels) && count($labels) > 0) { - for ($i = 0; $i < count($labels); $i++) { - $query->orWhere('value', 'LIKE', '%'.$labels[$i].'%'); - } - } - }) - ->pluck('ticket_id') - ->toArray(); - - return $query; - } - - public function segments($segment) - { - if (strpos($segment, 'user') !== false) { - return $this->formatUserTickets($segment); - } - $table = $this->table(); - switch ($segment) { - case '/ticket/inbox': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id)->orWhere('assigned_to', '=', Auth::user()->id); - } - - return $table - ->Join('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status') - ->whereIn('ticket_status.id', [1, 7]); - }); - case '/ticket/closed': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->Join('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status') - ->whereIn('ticket_status.state', ['closed']); - }); - case '/ticket/myticket': - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->orWhere('tickets.assigned_to', '=', Auth::user()->id) - ->where('tickets.status', '=', 1); - case '/unassigned': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->where('tickets.assigned_to', '=', null) - ->where('tickets.status', '=', 1); - case '/ticket/overdue': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->where('tickets.status', '=', 1) - ->where('tickets.isanswered', '=', 0) - ->whereNotNull('tickets.duedate') - ->where('tickets.duedate', '!=', '00-00-00 00:00:00') - - // ->where('duedate','>',\Carbon\Carbon::now()); - ->where('tickets.duedate', '<', \Carbon\Carbon::now()); - case '/ticket/approval/closed': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->Join('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status') - ->where('tickets.status', '=', 7); - }); - - case '/trash': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->Join('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status') - ->where('tickets.status', '=', 5); - }); - - case '/ticket/answered': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->Join('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status') - ->where('tickets.status', '=', 1) - ->where('tickets.isanswered', '=', 1); - }); - case '/ticket/assigned': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->where('tickets.assigned_to', '>', 0) - ->where('tickets.status', '=', 1); - case '/ticket/open': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->where('isanswered', '=', 0) - ->where('tickets.status', '=', 1); - case '/duetoday': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->where('tickets.status', '=', 1) - - ->whereNotNull('tickets.duedate') - ->whereDate('tickets.duedate', '=', \Carbon\Carbon::now()->format('Y-m-d')); - - case '/ticket/followup': - if (Auth::user()->role == 'agent') { - $id = Auth::user()->primary_dpt; - $table = $table->where('tickets.dept_id', '=', $id); - } - - return $table - ->leftJoin('ticket_status', function ($join) { - $join->on('ticket_status.id', '=', 'tickets.status'); - }) - ->where('tickets.status', '=', 1) - // ->where('tickets.isanswered', '=', 0) - ->where('tickets.follow_up', '=', 1); - } - } - - public function table() - { - // if (Auth::user()->role == 'admin') { - $ticket = new Tickets(); - $tickets = $ticket - ->leftJoin('ticket_thread', function ($join) { - $join->on('tickets.id', '=', 'ticket_thread.ticket_id') - ->whereNotNull('title') - ->where('ticket_thread.is_internal', '<>', 1); - }) - ->leftJoin('ticket_thread as ticket_thread2', 'ticket_thread2.ticket_id', '=', 'tickets.id') - ->Join('ticket_source', 'ticket_source.id', '=', 'tickets.source') - ->leftJoin('ticket_priority', 'ticket_priority.priority_id', '=', 'tickets.priority_id') - ->leftJoin('users as u', 'u.id', '=', 'tickets.user_id') - ->leftJoin('users as u1', 'u1.id', '=', 'tickets.assigned_to') - ->leftJoin('ticket_attachment', 'ticket_attachment.thread_id', '=', 'ticket_thread.id') - - ->leftJoin('ticket_collaborator', 'ticket_collaborator.ticket_id', '=', 'tickets.id') - ->select( - 'tickets.id', - 'ticket_thread.title', - 'tickets.ticket_number', - 'ticket_priority.priority', - 'u.user_name as user_name', - 'u1.user_name as assign_user_name', - \DB::raw('max(ticket_thread.updated_at) as updated_at'), - \DB::raw('min(ticket_thread.updated_at) as created_at'), - 'u.first_name as first_name', - 'u.last_name as last_name', - 'u1.first_name as assign_first_name', - 'u1.last_name as assign_last_name', - 'ticket_priority.priority_color', - DB::raw('COUNT(DISTINCT ticket_thread2.id) as countthread'), - DB::raw('COUNT(ticket_attachment.thread_id) as countattachment'), - DB::raw('COUNT(ticket_collaborator.ticket_id) as countcollaborator'), - 'tickets.status', - 'tickets.user_id', - 'tickets.priority_id', 'tickets.assigned_to', - 'ticket_status.name as tickets_status', - 'ticket_source.css_class as css', - DB::raw('substring_index(group_concat(ticket_thread.poster order by ticket_thread.id desc) , ",", 1) as last_replier'), - DB::raw('substring_index(group_concat(ticket_thread.title order by ticket_thread.id asc) , ",", 1) as ticket_title'), - 'u.active as verified') - ->groupby('tickets.id'); - - return $tickets; - } - - public function filter($render, $ticket_id = []) - { - if (Auth::user()->role == 'admin') { - $tickets = Tickets::whereIn('status', [1, 7]); - } else { - $dept = DB::table('department')->where('id', '=', Auth::user()->primary_dpt)->first(); - $tickets = Tickets::whereIn('status', [1, 7])->where('dept_id', '=', $dept->id); - } - if ($render == true) { - $tickets = $tickets->whereIn('id', $ticket_id); - } - - return $tickets; - } - - public function ticketController() - { - $PhpMailController = new \App\Http\Controllers\Common\PhpMailController(); - $NotificationController = new \App\Http\Controllers\Common\NotificationController(); - $ticket_controller = new TicketController($PhpMailController, $NotificationController); - - return $ticket_controller; - } - - public function departmentTickets($dept, $status) - { - $table = $this->table(); - - return $table->leftJoin('department as dep', 'tickets.dept_id', '=', 'dep.id') - ->leftJoin('ticket_status', 'tickets.status', '=', 'ticket_status.id') - ->where('dep.name', $dept) - ->where('ticket_status.name', $status); + $this->gmt = self::getGMT(); } /** - *@category function to format and return user tickets + * @category function to handle ticket table/filteration request and build tables * - *@param string $segment + * @param Array/Object $request * - *@return builder + * @return json response //build by getTable() function in TicketController */ - public function formatUserTickets($segment) + public function getFilter(Request $request) { - $convert_to_array = explode('/', $segment); - $user_id = $convert_to_array[2]; - $user = \DB::table('users')->select('role', 'id')->where('id', '=', $user_id)->first(); $table = $this->table(); - if ($user->role == 'user') { - $table = $table->leftJoin('ticket_status', 'tickets.status', '=', 'ticket_status.id') - ->where('tickets.user_id', '=', $user->id) - ->where('ticket_status.name', $convert_to_array[3]); + if ($request->has('segment')) { + $segment = $this->request->input('segment'); + $table = $this->formatUserTickets($segment); } else { - $table = $table->leftJoin('ticket_status', 'tickets.status', '=', 'ticket_status.id') - ->where('tickets.assigned_to', '=', $user->id) - ->where('ticket_status.name', $convert_to_array[3]); + if ($request->has('api') && $request->get('api') == '1') { + $inputs = []; + foreach ($request->all() as $key => $value) { + if ($key != 'api' && $key != 'token' && $key != 'page' && $key + != 'sort-by' && $key != 'order' && $key != 'records_per_page') { + $inputs[$key] = explode(',', $value); // + } + } + + return $table = $this->checkRequestIsCorrect($table, $inputs); + } else { + $inputs = json_decode(htmlspecialchars_decode($request->get('options'))); + // dd($inputs); + $table = $this->checkRequestIsCorrect($table, (array) $inputs); + } + } + return \Ttable::genreateTableJson($table); + } + + /** + * @category function to build basic query builder for ticket tables + * + * @param null + * + * @var $tickets + * + * @return builder $tickets + */ + public function table() + { + $ticket = new Tickets(); + $tickets = $ticket + ->leftJoin('ticket_source', 'ticket_source.id', '=', 'tickets.source') + ->leftJoin('ticket_priority', 'ticket_priority.priority_id', '=', 'tickets.priority_id') + ->leftJoin('users as u1', 'u1.id', '=', 'tickets.user_id') + ->leftJoin('teams', 'teams.id', '=', 'tickets.team_id') + ->leftJoin('users as u2', 'u2.id', '=', 'tickets.assigned_to') + ->leftJoin('ticket_collaborator', 'ticket_collaborator.ticket_id', '=', 'tickets.id') + ->leftJoin('ticket_thread as th', 'th.ticket_id', '=', 'tickets.id') + ->leftJoin('ticket_attachment', 'ticket_attachment.thread_id', '=', 'th.id') + ->select( + 'tickets.id', 'th.title', 'tickets.ticket_number', 'u1.user_name as c_uname', 'u2.user_name as a_uname', \DB::raw('CONVERT_TZ(max(th.updated_at), "+00:00", "'.$this->gmt.'") as updated_at2'), \DB::raw('CONVERT_TZ(min(th.updated_at), "+00:00", "'.$this->gmt.'") as created_at2'), \DB::raw('CONVERT_TZ(max(tickets.duedate), "+00:00", "'.$this->gmt.'") as duedate'), \DB::raw('max(th.updated_at) as updated_at'), \DB::raw('min(th.updated_at) as created_at'), 'tickets.duedate as due', 'u1.id as c_uid', 'ticket_priority.priority as priority', 'u1.first_name AS c_fname', 'u1.last_name as c_lname', 'u2.id as a_uid', 'u2.first_name as a_fname', 'u2.last_name as a_lname', 'u1.active as verified', 'teams.name', 'tickets.assigned_to', 'ticket_priority.priority_color as color', 'ticket_source.css_class as css', \DB::raw('COUNT(ticket_attachment.thread_id) as countattachment'), DB::raw('COUNT(ticket_collaborator.ticket_id) as countcollaborator'), \DB::raw('COUNT(DISTINCT th.id) as countthread'), \DB::raw('substring_index(group_concat(if(`th`.`is_internal` = 0, `th`.`poster`,null)ORDER By th.id desc) , ",", 1) as last_replier'), \DB::raw('substring_index(group_concat(th.title order by th.id asc SEPARATOR "-||,||-") , "-||,||-", 1) as ticket_title'), 'ticket_source.name as source' + )->groupby('tickets.id'); + + return $tickets; + } + + /** + * @category function to check of all the parameters passed to the URL are correct or not + * + * @param array $inputs + * + * @return bool true/false + */ + public function checkRequestIsCorrect($table, $inputs) + { + $available_options = [ + 'show', + 'status', + 'types', + 'tags', + 'labels', + 'sla', + 'departments', + 'source', + 'created-by', + 'assigned', + 'assigned-to', + 'created', + 'updated', + 'due-on', + 'priority', + 'last-response-by', + 'ticket-number', + 'help-topic', + ]; + $mytickets = false; + if ($inputs['show'][0] == 'mytickets') { + $mytickets = true; + } + ksort($inputs); + foreach ($inputs as $key => $input) { + if (!in_array($key, $available_options)) { + // dd('here '.$key); + $table = $table->where('tickets.id', '=', null); + } else { + $table = $this->filterByInputs($key, $input, $table, $mytickets); + } } return $table; } + + /** + * @category function to filter tickets based on user input requests + * + * @param string $input, $value, $table + * + * @return builder $table + */ + public function filterByInputs($input, $value, $table, $is_mytickets) + { + switch ($input) { + case 'show': + $table = $this->showPage($value, $table); + + return $table; + break; + case 'status': + $table = $this->filterByStatus($value, $table); + + return $table; + break; + + case 'types': + $table = $table->leftJoin('ticket_type', 'ticket_type.id', '=', 'tickets.type') + ->whereIn('ticket_type.name', $value); + + return $table; + break; + + case 'tags': + $table = $table + ->leftJoin('filters as tag', function ($join) { + $join->on('tickets.id', '=', 'tag.ticket_id') + ->where('tag.key', '=', 'tag'); + }) + ->whereIn('tag.value', $value); + + return $table; + break; + + case 'labels': + $table = $table + ->leftJoin('filters as label', function ($join) { + $join->on('tickets.id', '=', 'label.ticket_id') + ->where('label.key', '=', 'label'); + }) + ->whereIn('label.value', $value); + + return $table; + break; + + case 'departments': + $table = $this->departmentFilter($value, $table, $is_mytickets); + + return $table; + break; + + case 'source': + $table = $this->filterBySource($value, $table); + + return $table; + break; + + case 'created-by': + $users = []; + foreach ($value as $username) { + array_push($users, substr($username, 2, strlen($username))); + } + $users = $this->getUserIDs($users, 'creator'); + if (count($users) > 0) { + $table = $table->whereIn('tickets.user_id', $users); + } else { + $table = $table->where('tickets.id', '=', null); + } + + return $table; + break; + + case 'assigned': + if ($value[0] == '') { + return $table; + } else { + if ($value[0] == 0 || $value[0] == '0') { + $table = $table->where(function ($query) { + $query->where(function ($query2) { + $query2->where('tickets.team_id', '=', 0) + ->orWhere('tickets.team_id', '=', null); + })->where(function ($query3) { + $query3->where('tickets.assigned_to', '=', 0) + ->orWhere('tickets.assigned_to', '=', null); + }); + }); + } elseif ($value[0] == 1 || $value[0] == '1') { + $table = $table->where(function ($query) { + $query->where(function ($query2) { + $query2->where('tickets.team_id', '<>', 0) + ->Where('tickets.team_id', '<>', null); + })->orWhere(function ($query3) { + $query3->where('tickets.assigned_to', '<>', 0) + ->Where('tickets.assigned_to', '<>', null); + }); + }); + } else { + //do something here; + } + + return $table; + } + break; + + case 'assigned-to': + $table = $this->filterByAssigned($value, $table); + + return $table; + break; + + case 'created': + $table = $this->filterByDate('create', $value, $table); + + return $table; + break; + + case 'updated': + $table = $this->filterByDate('update', $value, $table); + + return $table; + break; + + case 'due-on': + $table = $this->filterByDate('due-today', $value, $table); + + return $table; + break; + + // case 'show-overdue': + // $table = $this->filterByDate('overdue', $value, $table); + // return $table; + // break; + + case 'priority': + $table = $this->filterByPriority($value, $table); + + return $table; + break; + + case 'sla': + $table = $this->filterBySla($value, $table); + + return $table; + break; + + case 'last-response-by': + $table = $this->filterByLastResponder($value, $table); + + return $table; + break; + case 'ticket-number': + $table = $table->whereIn('tickets.ticket_number', $value); + + return $table; + break; + case 'help-topic': + $table = $this->filterByHelpTopic($value, $table); + + return $table; + break; + default: + break; + } + } + + /** + * @category function to filter the tickets based on show value in the request + * + * @param array $value(), builder object $table + * + * @return builder object $table + */ + public function showPage($value, $table) + { + $table = $this->userIsAgent($table); + $has_status = array_key_exists('status', (array) json_decode(htmlspecialchars_decode($this->request->get('options')))); + switch ($value[0]) { + case 'inbox': + return $this->returnShowPageWithStatus($has_status, $table, 'open'); + break; + + case 'mytickets': + $table = $table->Where('tickets.assigned_to', '=', Auth::user()->id); + + return $this->returnShowPageWithStatus($has_status, $table, 'open'); + break; + + case 'trash': + return $this->returnShowPageWithStatus($has_status, $table, 'deleted'); + break; + + case 'followup': + $table = $table->where('tickets.follow_up', '=', 1); + + return $this->returnShowPageWithStatus($has_status, $table, 'open'); + break; + + case 'overdue': + $table = $table->where('isanswered', '=', 0) + ->whereNotNull('tickets.duedate') + ->where('tickets.duedate', '!=', '00-00-00 00:00:00') + ->where('tickets.duedate', '<', \Carbon\Carbon::now()); + + return $this->returnShowPageWithStatus($has_status, $table, 'open'); + + case 'approval': + return $this->returnShowPageWithStatus($has_status, $table, 'approval'); + break; + + case 'closed': + return $this->returnShowPageWithStatus($has_status, $table, 'closed'); + + default: + $table = $table->where('tickets.id', '=', null); + + return $table; + break; + } + } + + /** + * @category function to update querybuilder according to user's role + * + * @param $table querybuilder + * + * @var $id, $dept + * + * @return $table + */ + public function userIsAgent($table) + { + if (Auth::user()->role == 'agent') { + $id = Auth::user()->id; + $dept = DepartmentAssignAgents::where('agent_id', '=', $id)->pluck('department_id')->toArray(); + $table = $table->where(function ($query) use ($dept) { + $query->whereIn('tickets.dept_id', $dept) + ->orWhere('assigned_to', '=', Auth::user()->id); + }); + } + + return $table; + } + + /** + * @category function to filter tickets builder based on agent/admin departments + * + * @param array $value //requested department, $table + * + * @var array $departmentTickets + * + * @return $table + */ + public function departmentFilter($value, $table, $is_mytickets) + { + if (count($value) == 1 && (strcasecmp($value[0], 'all') == 0)) { + if ($is_mytickets) { + $table = $table; + } else { + $table = $this->userIsAgent($table); + } + } else { + $departmentTickets = $this->userCanSeeDepartmentTicket($value); + if ($departmentTickets[0]) { + $table = $table->leftJoin('department as dep', 'tickets.dept_id', '=', 'dep.id') + ->whereIn('dep.id', $departmentTickets[1]); + } else { + $table = $table->where('tickets.id', '=', null); + } + } + + return $table; + } + + /** + * @category function to return department ids and access right of departments for agents + * + * @param array $departments + * + * @var array $requested_dept + * + * @return array of boolean and array values + */ + public function userCanSeeDepartmentTicket($departments) + { + $requested_dept = Department::whereIn('name', $departments)->pluck('id')->toArray(); + if (Auth::user()->role == 'admin') { + return [true, $requested_dept]; + } else { + $agent_dept = DepartmentAssignAgents::where('agent_id', '=', Auth::user()->id)->pluck('department_id')->toArray(); + if (count($requested_dept) > 0 && count($agent_dept) > 0) { + return [count(array_intersect($requested_dept, $agent_dept)) == count($requested_dept), $requested_dept]; + } + + return [false, []]; + } + } + + /** + * @category function to filter and return ticket query builder based on priority + * + * @param array $priority, builder $table + * + * @var array $priority_ids + * + * @return builder + */ + public function filterByPriority($priority, $table) + { + $priority_ids = Ticket_Priority::whereIn('priority', $priority)->pluck('priority_id')->toArray(); + if (count($priority_ids) > 0) { + return $table->whereIn('tickets.priority_id', $priority_ids); + } + + return $table->where('tickets.id', '=', null); + } + + /** + * @category function to filter and return builder by ticket creator + * + * @param string array $user_name, builder $table + * + * @var array $users + * + * @return filtered builder + */ + public function getUserIDs($user_names, $user_type) + { + $query = DB::table('users')->where(function ($query) use ($user_names) { + $query->whereIn('user_name', $user_names) + ->orWhereIn('email', $user_names); + }); + if ($user_type == 'assign') { + $query->where('role', '<>', 'user'); + } else { + $query->where('role', '=', 'user'); + } + $users = $query->pluck('id'); + + return $users; + } + + /** + * @category function to fetch team id's where name is like given parameter + * + * @param array of string values $name + * + * @var $query, array $teams(all fetched teams id) + * + * @return array $teams + */ + public function getTeamIds($name) + { + $query = DB::table('teams')->whereIn('name', $name); + $teams = $query->pluck('id'); + + return $teams; + } + + /** + * @category function to filter the tickets by assigned team or agents + * + * @param string array $name, builder $table + * + * @var array $users (stores id's of agents and admin), + * array $teams (stores ids of teams), array asssigned merged arrya of unique elements in $teams and $users + * + * @return builder $table + */ + public function filterByAssigned($name, $table) + { + $team_array = []; + $agent_array = []; + foreach ($name as $value) { + if (substr($value, 0, 2) == 'a-') { + array_push($agent_array, substr($value, 2, strlen($value))); + } elseif (substr($value, 0, 2) == 't-') { + array_push($team_array, substr($value, 2, strlen($value))); + } + } + + $users = $this->getUserIDs($agent_array, 'assign'); + $teams = $this->getTeamIds($team_array); + $table = $table->where(function ($query) use ($teams, $users) { + $query->whereIn('tickets.team_id', $teams) + ->orWhereIn('tickets.assigned_to', $users); + }); + // dd($table->toSql()); + return $table; + } + + /** + * @category function to filter table for various date option like created, last modified, duo date and overdue + * + * @param string $type (to check type of filter to apply on date), string $value for filters, builder $table + * + * @var array $date [start and end dates] + * + * @return builder + */ + public function filterByDate($type, $value, $table) + { + switch ($type) { + case 'create': + $date = $this->getDate($value); + $table = $this->getTableAfterDateFilration($date, $table, 'create', $value[0]); + + return $table; + break; + case 'update': + $date = $this->getDate($value); + $table = $this->getTableAfterDateFilration($date, $table, 'update', $value[0]); + + return $table; + break; + case 'due-today': + $date = $this->getDate($value); + $table = $this->getTableAfterDateFilration($date, $table, 'due', $value[0]); + + return $table; + break; + // case 'overdue': + // if ($value[0] == 1 || $value[0] == '1') { + // $table = $table->where('isanswered', '=', 0) + // ->whereNotNull('tickets.duedate') + // ->where('tickets.duedate', '!=', '00-00-00 00:00:00') + // ->where('tickets.duedate', '<', \Carbon\Carbon::now()); + // } + // return $table; + // break; + } + } + + /** + * @category function to get start and end date to apply date filter + * + * @param string $value + * + * @var date string $start, date string $end + * + * @return array of start and end date + */ + public function getDate($value) + { + $dt = \Carbon\Carbon::now()->tz(timezone()); + switch ($value[0]) { + case '5-minutes': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subMinutes(5)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '10-minutes': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subMinutes(10)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '15-minutes': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subMinutes(15)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '30-minutes': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subMinutes(30)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '1-hour': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subHour()->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '4-hours': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subHours(4)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '8-hours': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subHours(8)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '12-hours': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subHours(12)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '24-hours': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->subHours(24)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '15-days': + $date = date('Y-m-d H:i:s'); + $end = carbon($date)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date)->subDays(15)->tz(timezone())->startOfDay()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case '30-days': + $date_end = date('Y-m-d H:i:s'); + $date_start = date('Y-m-d 00:00:00'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_start)->subDays(30)->tz(timezone())->startOfDay()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'this-week': + $date_end = date('Y-m-d H:i:s'); + $start = carbon($date_end)->tz(timezone())->startOfWeek()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'this-month': + $date_end = date('Y-m-d H:i:s'); + $start = carbon($date_end)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'this-year': + $date_end = date('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->format('Y-m-d H:i:s'); + $start = carbon($date_end)->tz(timezone())->startOfYear()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'today': + $date = date('Y-m-d H:i:s'); + $start = carbon($date)->tz(timezone())->startOfDay()->format('Y-m-d H:i:s'); + $end = carbon($date)->tz(timezone())->endOFDay()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'yesterday': + $date = date('Y-m-d H:i:s'); + $end = carbon($date)->subDay()->tz(timezone())->endOFDay()->format('Y-m-d H:i:s'); + $start = carbon($date)->subDay()->tz(timezone())->startOfDay()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'next-hour': + $date_start = date('Y-m-d H:i:s'); + $start = carbon($date_start)->tz('UTC')->format('Y-m-d H:i:s'); + $end = carbon($date_start)->addHour()->tz('UTC')->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'next-4-hours': + $date_start = date('Y-m-d H:i:s'); + $start = carbon($date_start)->tz('UTC')->format('Y-m-d H:i:s'); + $end = carbon($date_start)->addHours(4)->tz('UTC')->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'next-8-hours': + $date_start = date('Y-m-d H:i:s'); + $start = carbon($date_start)->tz('UTC')->format('Y-m-d H:i:s'); + $end = carbon($date_start)->addHours(8)->tz('UTC')->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'next-12-hours': + $date_start = date('Y-m-d H:i:s'); + $start = carbon($date_start)->tz('UTC')->format('Y-m-d H:i:s'); + $end = carbon($date_start)->addHours(12)->tz('UTC')->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'tomorrow': + $date = date('Y-m-d H:i:s'); + $end = carbon($date)->addDay()->tz(timezone())->endOfDay()->format('Y-m-d H:i:s'); + $start = carbon($date)->addDay()->tz(timezone())->startOfDay()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'last-week': + $date_start = date('Y-m-d 00:00:00'); + $date_end = date('Y-m-d 23:59:59'); + $start = carbon($date_start)->subWeek()->tz(timezone())->startOfWeek()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->subWeek()->tz(timezone())->endOfWeek()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'last-month': + $date_start = date('Y-m-d 00:00:00'); + $date_end = date('Y-m-d 23:59:59'); + $start = carbon($date_start)->subMonth()->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->subMonth()->tz(timezone())->endOfMonth()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'last-2-months': + $date_start = date('Y-m-d 00:00:00'); + $date_end = date('Y-m-d 23:59:59'); + $start = carbon($date_start)->subMonths(2)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'last-3-months': + $date_start = date('Y-m-d 00:00:00'); + $date_end = date('Y-m-d 23:59:59'); + $start = carbon($date_start)->subMonths(3)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'last-6-months': + $date_start = date('Y-m-d 00:00:00'); + $date_end = date('Y-m-d 23:59:59'); + $start = carbon($date_start)->subMonths(6)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->startOfMonth()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + + case 'last-year': + $date_start = date('Y-m-d 00:00:00'); + $date_end = date('Y-m-d 23:59:59'); + $start = carbon($date_start)->subYear()->tz(timezone())->startOfYear()->format('Y-m-d H:i:s'); + $end = carbon($date_end)->tz(timezone())->startOfYear()->format('Y-m-d H:i:s'); + + return [$start, $end]; + break; + // cases for due date + + case 'any-time': + return ['any']; + break; + default: + return []; + break; + } + } + + /** + * @category function to apply date filters in table builder after + * getting start and end date based on the type of date filter + * + * @param array $dates, builder $table, $column (type of filter based on which column is being chosen), $value + * + * @var string $check_column (name of column), array $dates + * + * @return builder + */ + public function getTableAfterDateFilration($date, $table, $column, $value) + { + $check_column = ''; + $dates = []; + if ($column == 'create') { + $check_column = 'created_at2'; + } elseif ($column == 'update') { + $check_column = 'updated_at2'; + } else { + $check_column = 'tickets.duedate'; + } + if (count($date) == 2) { + $table = $table->having($check_column, '>=', $date[0])->having($check_column, '<=', $date[1]); + if ($column == 'due') { + $table = $table->where('isanswered', '=', 0); + } + } elseif (count($date) == 1) { + //do nothing + } else { + $table = $table->where('tickets.id', '=', null); + } + // dd($table->toSql()); + return $table; + } + + /** + * @category function to filter ticket by source of creation + * + * @param array $name of source, builder $table + * + * @var array $sources + * + * @return builder + */ + public function filterBySource($source_names, $table) + { + $sources = DB::table('ticket_source')->whereIn('name', $source_names)->orWhereIn('value', $source_names)->pluck('id'); + if (count($sources) == 0) { + return $table->where('tickets.id', '=', null); + } + + return $table->whereIn('tickets.source', $sources); + } + + /** DEPRICATED + * @category function to get array of status to filter tickets + * + * @param string $status + * + * @return array $status_array + */ + // public function getStatusArray($status) + // { + // $type = new TicketStatusType(); + // $values = $type->select('name', 'id') + // ->whereIn('name', [$status]) + // ->with(['status' => function ($query) { + // $query->select('id as status_id', 'name', 'purpose_of_status'); + // }]) + // ->get() + // ->pluck('status') + // ->flatten() + // ->pluck('status_id') + // ->toArray() + // ; + // return $values; + // } + + /** + * @category function to filter tickets by SLA + * + * @param string array $value, builder $table + * @ + * + * @return builder + */ + public function filterBySla($value, $table) + { + $query = DB::table('sla_plan'); + foreach ($value as $sla) { + $query->orWhere('name', '=', $sla); + } + $sla_ids = $query->pluck('id'); + if (count($sla_ids) > 0) { + return $table->whereIn('tickets.sla', $sla_ids); + } + + return $table->where('tickets.id', '=', null); + } + + /** + * @category function to filter table builder based on requested status + * + * @param string array $status_array, builder $table + * + * @return builder $table + */ + public function filterByStatus($status_array, $table) + { + $status = DB::table('ticket_status')->whereIn('name', $status_array)->pluck('id'); + if (count($status) > 0) { + return $table->whereIn('tickets.status', $status); + } else { + return $table->where('tickets.id', '=', null); + } + } + + /** + * @category function to format and return user tickets + * + * @param string $segment + * + * @return builder + */ + public function formatUserTickets($segment) + { + $table = $this->table(); + $convert_to_array = explode('/', $segment); + if ($convert_to_array[1] == 'user') { + $user_id = $convert_to_array[2]; + $user = \DB::table('users')->select('role', 'id')->where('id', '=', $user_id)->first(); + if ($user->role == 'user') { + $table = $table->where('tickets.user_id', '=', $user->id); + } else { + $table = $table->where('tickets.assigned_to', '=', $user->id); + } + } elseif ($convert_to_array[1] == 'organizations') { + $users = []; //initialize by assuming there is no user in the organization + $organizations_details = \App\Model\helpdesk\Agent_panel\Organization::select('id', 'domain')->where('id', '=', $convert_to_array[2])->first()->toArray(); //fetch organization details + if (count($organizations_details) > 0) { //if organizationdetails found then process further + $org_users = \App\Model\helpdesk\Agent_panel\User_org::select('user_id')->where('org_id', '=', $organizations_details['id'])->get()->toArray(); + if (count($org_users) > 0) { + $users = array_column($org_users, 'user_id'); + } + if ($organizations_details['domain'] != '') { + $str = str_replace(',', '|@', '@'.$organizations_details['domain']); + $domain_users = User::select('id')->where('role', '=', 'user')->whereRaw("email REGEXP '".$str."'")->whereNOtIn('id', $users); + $domain_users = $domain_users->where('is_delete', '!=', 1)->where('ban', '!=', 1)->get()->toArray(); + if (count($domain_users) > 0) { + $users = array_merge($users, array_column($domain_users, 'id')); + } + } + } + $table = $table->whereIn('tickets.user_id', $users); + } elseif ($convert_to_array[1] == 'department') { + $table = $table->where('dept_id', '=', $convert_to_array[2]); + } else { + $table = $table->where('team_id', '=', $convert_to_array[2]); + } + + return $table->whereIn('tickets.status', getStatusArray($convert_to_array[3])); + } + + /** + * @category function to filter results on basis of last replier + * + * @param string array $value, builder $ticket + * + * @return builder + */ + public function filterByLastResponder($value, $tickets) + { + if ($value[0] == 'Client') { + return $tickets->having('last_replier', '=', 'Client'); + } else { + return $tickets->having('last_replier', '<>', 'Client'); + } + } + + /** + * @category function to get GMT for system timezone + * + * @param null + * + * @var $system, $tz + * + * @return string GMT value of timezone + */ + public function getGMT() + { + $system = \App\Model\helpdesk\Settings\System::select('time_zone')->first(); + $timezone = \DB::table('timezone')->select('location')->where('name', '=', $system->time_zone)->first(); + $location = '(GMT) London'; + if ($timezone) { + $location = $timezone->location; + } + $tz = explode(')', substr($location, stripos($location, 'T') + + 1)); + + return $tz[0]; + } + + /** + * @category function to apply help topic filter + * + * @param array $value, object $table + * + * @return builder + */ + public function filterByHelpTopic($value, $table) + { + $help_topics = Help_topic::whereIn('topic', $value)->pluck('id')->toArray(); + + return $table->whereIn('help_topic_id', $help_topics); + } + + /** + * @category function to return builder for show filter after checking if input + * request has status or not + * + * @param bool $has_status(if request has status filter values or not), + * Object $table, string $status(basic pupose if status) + * + * @return object $table; + */ + public function returnShowPageWithStatus($has_status, $table, $status) + { + if ($has_status) { + return $table; + } + + return $table->whereIn('tickets.status', getStatusArray($status)); + } } diff --git a/app/Http/Controllers/Agent/helpdesk/Filter/FilterControllerOld.php b/app/Http/Controllers/Agent/helpdesk/Filter/FilterControllerOld.php new file mode 100644 index 000000000..030340453 --- /dev/null +++ b/app/Http/Controllers/Agent/helpdesk/Filter/FilterControllerOld.php @@ -0,0 +1,339 @@ +middleware(['auth', 'role.agent']); + $this->request = $req; + } + + public function getFilter(Request $request) + { + $labels = $this->request->input('labels'); + $tags = $this->request->input('tags'); + if ($request->has('department')) { + $table = $this->departmentTickets($request->input('department'), $request->input('status')); + } else { + $segment = $this->request->input('segment'); + $table = $this->segments($segment); + } + $tickets = []; + $render = false; + if (is_array($labels) && count($labels) > 0) { + $table = $table + ->leftJoin('filters as label', function ($join) { + $join->on('tickets.id', '=', 'label.ticket_id') + ->where('label.key', '=', 'label'); + }) + ->whereIn('label.value', $labels); + } + if (is_array($tags) && count($tags) > 0) { + $table = $table + ->leftJoin('filters as tag', function ($join) { + $join->on('tickets.id', '=', 'tag.ticket_id') + ->where('tag.key', '=', 'tag'); + }) + ->whereIn('tag.value', $tags); + } + if ((is_array($tags) && count($tags) > 0) || (is_array($labels) && count($labels) > 0)) { + $render = true; + } + // return \Datatables::of($table)->make(); + return \Ttable::getTable($table); + } + + public function filterByKey($key, $labels = []) + { + $filter = new Filter(); + $query = $filter->where('key', $key) + ->where(function ($query) use ($labels) { + if (is_array($labels) && count($labels) > 0) { + for ($i = 0; $i < count($labels); $i++) { + $query->orWhere('value', 'LIKE', '%'.$labels[$i].'%'); + } + } + }) + ->pluck('ticket_id') + ->toArray(); + + return $query; + } + + public function segments($segment) + { + if (strpos($segment, 'user') !== false) { + return $this->formatUserTickets($segment); + } + $table = $this->table(); + switch ($segment) { + case '/ticket/inbox': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id)->orWhere('assigned_to', '=', Auth::user()->id); + } + + return $table + ->Join('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status') + ->whereIn('ticket_status.id', [1, 7]); + }); + case '/ticket/closed': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->Join('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status') + ->whereIn('ticket_status.state', ['closed']); + }); + case '/ticket/myticket': + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->orWhere('tickets.assigned_to', '=', Auth::user()->id) + ->where('tickets.status', '=', 1); + case '/unassigned': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->where('tickets.assigned_to', '=', null) + ->where('tickets.status', '=', 1); + case '/ticket/overdue': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->where('tickets.status', '=', 1) + ->where('tickets.isanswered', '=', 0) + ->whereNotNull('tickets.duedate') + ->where('tickets.duedate', '!=', '00-00-00 00:00:00') + + // ->where('duedate','>',\Carbon\Carbon::now()); + ->where('tickets.duedate', '<', \Carbon\Carbon::now()); + case '/ticket/approval/closed': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->Join('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status') + ->where('tickets.status', '=', 7); + }); + + case '/trash': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->Join('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status') + ->where('tickets.status', '=', 5); + }); + + case '/ticket/answered': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->Join('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status') + ->where('tickets.status', '=', 1) + ->where('tickets.isanswered', '=', 1); + }); + case '/ticket/assigned': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->where('tickets.assigned_to', '>', 0) + ->where('tickets.status', '=', 1); + case '/ticket/open': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->where('isanswered', '=', 0) + ->where('tickets.status', '=', 1); + case '/duetoday': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->where('tickets.status', '=', 1) + + ->whereNotNull('tickets.duedate') + ->whereDate('tickets.duedate', '=', \Carbon\Carbon::now()->format('Y-m-d')); + + case '/ticket/followup': + if (Auth::user()->role == 'agent') { + $id = Auth::user()->primary_dpt; + $table = $table->where('tickets.dept_id', '=', $id); + } + + return $table + ->leftJoin('ticket_status', function ($join) { + $join->on('ticket_status.id', '=', 'tickets.status'); + }) + ->where('tickets.status', '=', 1) + // ->where('tickets.isanswered', '=', 0) + ->where('tickets.follow_up', '=', 1); + } + } + + public function table() + { + // if (Auth::user()->role == 'admin') { + $ticket = new Tickets(); + $tickets = $ticket + ->leftJoin('ticket_thread', function ($join) { + $join->on('tickets.id', '=', 'ticket_thread.ticket_id') + ->whereNotNull('title') + ->where('ticket_thread.is_internal', '<>', 1); + }) + ->leftJoin('ticket_thread as ticket_thread2', 'ticket_thread2.ticket_id', '=', 'tickets.id') + ->Join('ticket_source', 'ticket_source.id', '=', 'tickets.source') + ->leftJoin('ticket_priority', 'ticket_priority.priority_id', '=', 'tickets.priority_id') + ->leftJoin('users as u', 'u.id', '=', 'tickets.user_id') + ->leftJoin('users as u1', 'u1.id', '=', 'tickets.assigned_to') + ->leftJoin('ticket_attachment', 'ticket_attachment.thread_id', '=', 'ticket_thread.id') + + ->leftJoin('ticket_collaborator', 'ticket_collaborator.ticket_id', '=', 'tickets.id') + ->select( + 'tickets.id', + 'ticket_thread.title', + 'tickets.ticket_number', + 'ticket_priority.priority', + 'u.user_name as user_name', + 'u1.user_name as assign_user_name', + \DB::raw('max(ticket_thread.updated_at) as updated_at'), + \DB::raw('min(ticket_thread.updated_at) as created_at'), + 'u.first_name as first_name', + 'u.last_name as last_name', + 'u1.first_name as assign_first_name', + 'u1.last_name as assign_last_name', + 'ticket_priority.priority_color', + DB::raw('COUNT(DISTINCT ticket_thread2.id) as countthread'), + DB::raw('COUNT(ticket_attachment.thread_id) as countattachment'), + DB::raw('COUNT(ticket_collaborator.ticket_id) as countcollaborator'), + 'tickets.status', + 'tickets.user_id', + 'tickets.priority_id', 'tickets.assigned_to', + 'ticket_status.name as tickets_status', + 'ticket_source.css_class as css', + DB::raw('substring_index(group_concat(ticket_thread.poster order by ticket_thread.id desc) , ",", 1) as last_replier'), + DB::raw('substring_index(group_concat(ticket_thread.title order by ticket_thread.id asc) , ",", 1) as ticket_title'), + 'u.active as verified') + ->groupby('tickets.id'); + + return $tickets; + } + + public function filter($render, $ticket_id = []) + { + if (Auth::user()->role == 'admin') { + $tickets = Tickets::whereIn('status', [1, 7]); + } else { + $dept = DB::table('department')->where('id', '=', Auth::user()->primary_dpt)->first(); + $tickets = Tickets::whereIn('status', [1, 7])->where('dept_id', '=', $dept->id); + } + if ($render == true) { + $tickets = $tickets->whereIn('id', $ticket_id); + } + + return $tickets; + } + + public function ticketController() + { + $PhpMailController = new \App\Http\Controllers\Common\PhpMailController(); + $NotificationController = new \App\Http\Controllers\Common\NotificationController(); + $ticket_controller = new TicketController($PhpMailController, $NotificationController); + + return $ticket_controller; + } + + public function departmentTickets($dept, $status) + { + $table = $this->table(); + + return $table->leftJoin('department as dep', 'tickets.dept_id', '=', 'dep.id') + ->leftJoin('ticket_status', 'tickets.status', '=', 'ticket_status.id') + ->where('dep.name', $dept) + ->where('ticket_status.name', $status); + } + + /** + *@category function to format and return user tickets + * + *@param string $segment + * + *@return builder + */ + public function formatUserTickets($segment) + { + $convert_to_array = explode('/', $segment); + $user_id = $convert_to_array[2]; + $user = \DB::table('users')->select('role', 'id')->where('id', '=', $user_id)->first(); + $table = $this->table(); + if ($user->role == 'user') { + $table = $table->leftJoin('ticket_status', 'tickets.status', '=', 'ticket_status.id') + ->where('tickets.user_id', '=', $user->id) + ->where('ticket_status.name', $convert_to_array[3]); + } else { + $table = $table->leftJoin('ticket_status', 'tickets.status', '=', 'ticket_status.id') + ->where('tickets.assigned_to', '=', $user->id) + ->where('ticket_status.name', $convert_to_array[3]); + } + + return $table; + } +} diff --git a/app/Http/Controllers/Agent/helpdesk/TicketController.php b/app/Http/Controllers/Agent/helpdesk/TicketController.php index e9b74f9a0..34138bb3c 100644 --- a/app/Http/Controllers/Agent/helpdesk/TicketController.php +++ b/app/Http/Controllers/Agent/helpdesk/TicketController.php @@ -70,126 +70,6 @@ class TicketController extends Controller $this->middleware('auth'); } - /** - * Show the Inbox ticket list page. - * - * @return type response - */ - public function inbox_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.inbox', compact('table')); - } - - /** - * Show the Open ticket list page. - * - * @return type response - */ - public function open_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.open', compact('table')); - } - - /** - * Show the answered ticket list page. - * - * @return type response - */ - public function answered_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.answered', compact('table')); - } - - /** - * Show the Myticket list page. - * - * @return type response - */ - public function myticket_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.myticket', compact('table')); - } - - /** - * Show the Overdue ticket list page. - * - * @return type response - */ - public function overdue_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.overdue', compact('table')); - } - - /** - * Show the Open ticket list page. - * - * @return type response - */ - public function dueTodayTicketlist() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.duetodayticket', compact('table')); - } - - /** - * Show the Closed ticket list page. - * - * @return type response - */ - public function closed_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.closed', compact('table')); - } - - /** - * Show the ticket list page. - * - * @return type response - */ - public function assigned_ticket_list() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.assigned', compact('table')); - } - /** * Show the New ticket page. * @@ -1691,51 +1571,6 @@ class TicketController extends Controller return $system; } - /** - * shows trashed tickets. - * - * @return type response - */ - public function trash() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.trash', compact('table')); - } - - /** - * shows unassigned tickets. - * - * @return type - */ - public function unassigned() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.unassigned', compact('table')); - } - - /** - * shows tickets assigned to Auth::user(). - * - * @return type - */ - public function myticket() - { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.ticket.myticket', compact('table')); - } - /** * cleanMe. * @@ -2011,41 +1846,6 @@ class TicketController extends Controller $ticket->save(); } - /** - * Show the deptopen ticket list page. - * - * @return type response - */ - public function deptopen($id) - { - $dept = Department::where('name', '=', $id)->first(); - if (Auth::user()->role == 'agent') { - if (Auth::user()->primary_dpt == $dept->id) { - return view('themes.default1.agent.helpdesk.dept-ticket.tickets', compact('id')); - } else { - return redirect()->back()->with('fails', 'Unauthorised!'); - } - } else { - return view('themes.default1.agent.helpdesk.dept-ticket.tickets', compact('id')); - } - } - - public function deptTicket($dept, $status) - { - if (\Auth::user()->role === 'agent') { - $dept2 = Department::where('id', '=', \Auth::user()->primary_dpt)->first(); - if ($dept !== $dept2->name) { - return redirect()->back()->with('fails', Lang::get('lang.unauthorized_access')); - } - } - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.dept-ticket.tickets', compact('dept', 'status', 'table')); - } - /** * Show the deptclose ticket list page. * @@ -2479,110 +2279,6 @@ class TicketController extends Controller } } - /* - * chumper's function to return data to chumper datatable. - * @param Array-object $tickets - * - * @return Array-object - */ - - public static function getTable($tickets) - { - return \Datatables::of($tickets) - ->addColumn('id', function ($tickets) { - return ""; - }) - ->addColumn('title', function ($tickets) { - if (isset($tickets->ticket_title)) { - $string = str_limit($tickets->ticket_title, 20); - } else { - $string = '(no subject)'; - } - $collab = $tickets->countcollaborator; - if ($collab > 0) { - $collabString = ' '; - } else { - $collabString = null; - } - $attachCount = $tickets->countattachment; - if ($attachCount > 0) { - $attachString = ' '; - } else { - $attachString = ''; - } - $css = $tickets->css; - $titles = ''; - if ($tickets->ticket_title) { - $titles = $tickets->ticket_title; - } - $tooltip_script = self::tooltip($tickets->id); - - return "
- id])."'>".ucfirst($string)." (".$tickets->countthread.") - ".$collabString.$attachString.$tooltip_script. - "Loading...
"; - }) - ->addColumn('ticket_number', function ($tickets) { - return "id])."' title='".$tickets->ticket_number."'>#".$tickets->ticket_number.''; - }) - ->addColumn('priority', function ($tickets) { - $rep = ($tickets->last_replier == 'client') ? '#F39C12' : '#000'; - $priority = $tickets->priority; - if ($priority != null) { - $prio = ''; - } else { - $prio = $tickets->last_relier_role; - } - - return $prio; - }) - ->addColumn('user_name', function ($tickets) { - $from = $tickets->first_name; - $url = route('user.show', $tickets->user_id); - $name = ''; - if ($from) { - $name = $tickets->first_name.' '.$tickets->last_name; - } else { - $name = $tickets->user_name; - } - $color = ''; - if ($tickets->verified == 0 || $tickets->verified == '0') { - $color = ""; - } - - return "user_name).'''.Lang::get('lang.see-profile2')."'>".ucfirst(str_limit($name, 30)).' '.$color.''; - }) - ->addColumn('assign_user_name', function ($tickets) { - if ($tickets->assigned_to == null) { - return "Unassigned"; - } else { - $assign = $tickets->assign_user_name; - $url = route('user.show', $tickets->assigned_to); - - return "assign_first_name).'''.Lang::get('lang.see-profile2')."'>".ucfirst($tickets->assign_first_name).' '.ucfirst($tickets->assign_last_name).''; - } - }) - ->addColumn('updated_at', function ($tickets) { - $TicketDatarow = $tickets->updated_at; - $updated = '--'; - if ($TicketDatarow) { - $updated = $tickets->updated_at; - } - - return ''.$updated.''.UTC::usertimezone($updated); - }) - ->addColumn('created_at', function ($tickets) { - $TicketDatarow = $tickets->created_at; - $updated = '--'; - if ($TicketDatarow) { - $updated = $tickets->created_at; - } - - return ''.$updated.''.UTC::usertimezone($updated); - }) - ->make(); - } - /** *@category function to call and show ticket details in tool tip via ajax * @@ -2864,23 +2560,6 @@ class TicketController extends Controller } } - /** - * @return type - */ - public function followupTicketList() - { - try { - $table = \Datatable::table() - ->addColumn( - '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) - ->noScript(); - - return view('themes.default1.agent.helpdesk.followup.followup', compact('table')); - } catch (Exception $e) { - return Redirect()->back()->with('fails', $e->getMessage()); - } - } - public static function getSubject($subject) { //$subject = $this->attributes['title']; @@ -2966,4 +2645,483 @@ class TicketController extends Controller //catch the exception } } + + /** + * Ticket table rendering related functions + */ + + /** + * Function to get basic datatable format + * + * @return object + */ + public function getTableFormat() + { + return \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity') + )->noScript(); + } + + /** + * Function to return new ticket table view + * + * @return repsone/view + */ + public function getTicketsView() + { + $table = $this->getTableFormat(); + + return view('themes.default1.agent.helpdesk.ticket.tickets', compact('table')); + } + + /** + * chumper's function to return data to chumper datatable. + * @param Array-object $tickets + * + * @return Array-object + */ + public static function genreateTableJson($tickets) + { + return \Datatables::of($tickets) + ->editColumn('id', function ($tickets) { + $rep = ($tickets->last_replier == 'client') ? '#F39C12' + : '#000'; + + return "
"; + }) + ->addColumn('title', function ($tickets) { + if (isset($tickets->ticket_title)) { + $string = utfEncoding($tickets->ticket_title); + if (strlen($string) > 25) { + $string = str_limit($string, 30).'...'; + } + } else { + $string = Lang::get('lang.no-subject'); + } + + $collab = $tickets->countcollaborator; + if ($collab > 0) { + $collabString = ' '; + } else { + $collabString = null; + } + + $attachCount = $tickets->countattachment; + if ($attachCount > 0) { + $attachString = ' '; + } else { + $attachString = ''; + } + + $css = $tickets->css; + $source = $tickets->source; + $titles = ''; + if ($tickets->ticket_title) { + $titles = $tickets->ticket_title; + } + + $due = ''; + if ($tickets->duedate != null) { + $now = strtotime(\Carbon\Carbon::now()->tz(timezone())); + $duedate = strtotime($tickets->duedate); + + if ($duedate - $now < 0) { + $due = ' '.Lang::get('lang.overdue').''; + } else { + if (date('Ymd', $duedate) == date('Ymd', $now)) { + $due = ' '.Lang::get('lang.duetoday').''; + } + } + } + + $thread_count = '('.$tickets->countthread.')'; + if (Lang::getLocale() == 'ar') { + $thread_count = '‏('.$tickets->countthread.')'; + } + + $tooltip_script = self::tooltip($tickets->id); + + return "
+ id])."'>".$string." ".$thread_count." + $source])."' class='".$css."'>".$collabString.$attachString.$due.$tooltip_script. + "".Lang::get('lang.loading').'
'; + }) + ->editColumn('ticket_number', function ($tickets) { + return "id])."' class='$".ucfirst($tickets->priority)."*' title='".Lang::get('lang.click-here-to-see-more-details')."'>#".$tickets->ticket_number.''; + }) + ->editColumn('c_uname', function ($tickets) { + $from = $tickets->c_fname; + $url = route('user.show', $tickets->c_uid); + $name = $tickets->c_uname; + if ($from) { + $name = utfEncoding($tickets->c_fname).' '.utfEncoding($tickets->c_lname); + } + + $color = ''; + if ($tickets->verified == 0 || $tickets->verified == '0') { + $color = ""; + } + + return "".str_limit($name, 30).' '.$color.''; + }) + ->editColumn('a_uname', function ($tickets) { + if ($tickets->assigned_to == null && $tickets->name == null) { + return "Unassigned"; + } else { + $assign = $tickets->assign_user_name; + if ($tickets->assigned_to != null) { + $assign = utfEncoding($tickets->a_fname).' '.utfEncoding($tickets->a_lname); + $url = route('user.show', $tickets->assigned_to); + + return "".mb_substr($assign, 0, 30, 'UTF-8').''; + } else { + $url1 = '#'; + + return "name).'''.Lang::get('lang.see-profile2')."'>".mb_substr(ucfirst($tickets->name), 0, 30, 'UTF-8').''; + } + } + }) + ->editColumn('updated_at', function ($tickets) { + $TicketDatarow = $tickets->updated_at; + $updated = '--'; + if ($TicketDatarow) { + $updated = faveoDate($tickets->updated_at); + } + + return ''.$updated.''.$updated; + }) + ->make(); + } + + /** + * ===================================================================== + * DEPRECATED FUNCTIONS BLOCK + * ===================================================================== + * Functions under this block have been deprecated and are no + * longer used by the system.Though we have not removed these functions + * in v1.10 but we will remove these routes in upcoming releas + * ===================================================================== + **/ + + /** + * Show the Inbox ticket list page. + * + * @return type response + */ + public function inbox_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.inbox', compact('table')); + } + + /** + * Show the Open ticket list page. + * + * @return type response + */ + public function open_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.open', compact('table')); + } + + /** + * Show the answered ticket list page. + * + * @return type response + */ + public function answered_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.answered', compact('table')); + } + + /** + * Show the Myticket list page. + * + * @return type response + */ + public function myticket_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.myticket', compact('table')); + } + + /** + * Show the Overdue ticket list page. + * + * @return type response + */ + public function overdue_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.overdue', compact('table')); + } + + /** + * Show the Open ticket list page. + * + * @return type response + */ + public function dueTodayTicketlist() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.duetodayticket', compact('table')); + } + + /** + * Show the Closed ticket list page. + * + * @return type response + */ + public function closed_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.closed', compact('table')); + } + + /** + * Show the ticket list page. + * + * @return type response + */ + public function assigned_ticket_list() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.assigned', compact('table')); + } + + /** + * Show the deptopen ticket list page. + * + * @return type response + */ + public function deptopen($id) + { + $dept = Department::where('name', '=', $id)->first(); + if (Auth::user()->role == 'agent') { + if (Auth::user()->primary_dpt == $dept->id) { + return view('themes.default1.agent.helpdesk.dept-ticket.tickets', compact('id')); + } else { + return redirect()->back()->with('fails', 'Unauthorised!'); + } + } else { + return view('themes.default1.agent.helpdesk.dept-ticket.tickets', compact('id')); + } + } + + public function deptTicket($dept, $status) + { + if (\Auth::user()->role === 'agent') { + $dept2 = Department::where('id', '=', \Auth::user()->primary_dpt)->first(); + if ($dept !== $dept2->name) { + return redirect()->back()->with('fails', Lang::get('lang.unauthorized_access')); + } + } + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.dept-ticket.tickets', compact('dept', 'status', 'table')); + } + + /** + * shows trashed tickets. + * + * @return type response + */ + public function trash() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.trash', compact('table')); + } + + /** + * shows unassigned tickets. + * + * @return type + */ + public function unassigned() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.unassigned', compact('table')); + } + + /** + * shows tickets assigned to Auth::user(). + * + * @return type + */ + public function myticket() + { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.ticket.myticket', compact('table')); + } + + /** + * @return type + */ + public function followupTicketList() + { + try { + $table = \Datatable::table() + ->addColumn( + '', Lang::get('lang.subject'), Lang::get('lang.ticket_id'), Lang::get('lang.priority'), Lang::get('lang.from'), Lang::get('lang.assigned_to'), Lang::get('lang.last_activity'), Lang::get('lang.created-at')) + ->noScript(); + + return view('themes.default1.agent.helpdesk.followup.followup', compact('table')); + } catch (Exception $e) { + return Redirect()->back()->with('fails', $e->getMessage()); + } + } + + /* + * chumper's function to return data to chumper datatable. + * @param Array-object $tickets + * + * @return Array-object + */ + + public static function getTable($tickets) + { + return \Datatables::of($tickets) + ->addColumn('id', function ($tickets) { + return ""; + }) + ->addColumn('title', function ($tickets) { + if (isset($tickets->ticket_title)) { + $string = str_limit($tickets->ticket_title, 20); + } else { + $string = '(no subject)'; + } + $collab = $tickets->countcollaborator; + if ($collab > 0) { + $collabString = ' '; + } else { + $collabString = null; + } + $attachCount = $tickets->countattachment; + if ($attachCount > 0) { + $attachString = ' '; + } else { + $attachString = ''; + } + $css = $tickets->css; + $titles = ''; + if ($tickets->ticket_title) { + $titles = $tickets->ticket_title; + } + $tooltip_script = self::tooltip($tickets->id); + + return "
+ id])."'>".ucfirst($string)." (".$tickets->countthread.") + ".$collabString.$attachString.$tooltip_script. + "Loading...
"; + }) + ->addColumn('ticket_number', function ($tickets) { + return "id])."' title='".$tickets->ticket_number."'>#".$tickets->ticket_number.''; + }) + ->addColumn('priority', function ($tickets) { + $rep = ($tickets->last_replier == 'client') ? '#F39C12' : '#000'; + $priority = $tickets->priority; + if ($priority != null) { + $prio = ''; + } else { + $prio = $tickets->last_relier_role; + } + + return $prio; + }) + ->addColumn('user_name', function ($tickets) { + $from = $tickets->first_name; + $url = route('user.show', $tickets->user_id); + $name = ''; + if ($from) { + $name = $tickets->first_name.' '.$tickets->last_name; + } else { + $name = $tickets->user_name; + } + $color = ''; + if ($tickets->verified == 0 || $tickets->verified == '0') { + $color = ""; + } + + return "user_name).'''.Lang::get('lang.see-profile2')."'>".ucfirst(str_limit($name, 30)).' '.$color.''; + }) + ->addColumn('assign_user_name', function ($tickets) { + if ($tickets->assigned_to == null) { + return "Unassigned"; + } else { + $assign = $tickets->assign_user_name; + $url = route('user.show', $tickets->assigned_to); + + return "assign_first_name).'''.Lang::get('lang.see-profile2')."'>".ucfirst($tickets->assign_first_name).' '.ucfirst($tickets->assign_last_name).''; + } + }) + ->addColumn('updated_at', function ($tickets) { + $TicketDatarow = $tickets->updated_at; + $updated = '--'; + if ($TicketDatarow) { + $updated = $tickets->updated_at; + } + + return ''.$updated.''.UTC::usertimezone($updated); + }) + ->addColumn('created_at', function ($tickets) { + $TicketDatarow = $tickets->created_at; + $updated = '--'; + if ($TicketDatarow) { + $updated = $tickets->created_at; + } + + return ''.$updated.''.UTC::usertimezone($updated); + }) + ->make(); + } } diff --git a/app/Http/helpers.php b/app/Http/helpers.php index bfce0a9d6..9848ca70d 100644 --- a/app/Http/helpers.php +++ b/app/Http/helpers.php @@ -146,3 +146,68 @@ function faveotime($date, $hour = 0, $min = 0, $sec = 0) return $date1->hour($hour)->minute($min)->second($sec); } + +/** + * @category function to return array values if status id + * + * @param string purpose of status + * + * @return array ids of status with purpose passed as string + */ +function getStatusArray($status) +{ + $type = new App\Model\helpdesk\Ticket\Ticket_Status(); + $values = $type->where('state', '=', $status)->pluck('id')->toArray(); + + return $values; +} + +/** + * @category function to UTF encoding + * + * @param string name + * + * @return string name + */ +function utfEncoding($name) +{ + $title = ''; + $array = imap_mime_header_decode($name); + if (is_array($array) && count($array) > 0) { + foreach ($array as $text) { + $title .= $text->text; + } + $name = $title; + } + + return $name; +} + +function faveoDate($date = '', $format = '', $tz = '') +{ + if (!$date) { + $date = \Carbon\Carbon::now(); + } + if (!is_object($date)) { + $date = carbon($date); + } + if (!$format || !$tz) { + $system = App\Model\helpdesk\Settings\System::select('time_zone', 'date_time_format')->first(); + } + if (!$format) { + $format = $system->date_time_format; + } + if (!$tz) { + $tz = $system->time_zone; + } + + try { + if ($format == 'human-read') { + return $date->tz($tz)->diffForHumans(); + } + + return $date->tz($tz)->format($format); + } catch (\Exception $ex) { + return 'invalid'; + } +} \ No newline at end of file diff --git a/resources/views/themes/default1/admin/helpdesk/agent/departments/create.blade.php b/resources/views/themes/default1/admin/helpdesk/agent/departments/create.blade.php index c04e5f11b..0c865769b 100644 --- a/resources/views/themes/default1/admin/helpdesk/agent/departments/create.blade.php +++ b/resources/views/themes/default1/admin/helpdesk/agent/departments/create.blade.php @@ -83,12 +83,12 @@ class="active"
{!! Form::label('sla',Lang::get('lang.SLA_plan')) !!} - {!!Form::select('sla', [''=>Lang::get('lang.select_a_sla'), Lang::get('lang.sla_plans')=>$slas->lists('grace_period','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('sla', [''=>Lang::get('lang.select_a_sla'), Lang::get('lang.sla_plans')=>$slas->pluck('grace_period','id')->toArray()],null,['class' => 'form-control select']) !!}
{!! Form::label('manager',Lang::get('lang.manager')) !!} - {!!Form::select('manager',[''=>Lang::get('lang.select_a_manager'),Lang::get('lang.manager')=>$user->lists('full_name','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('manager',[''=>Lang::get('lang.select_a_manager'),Lang::get('lang.manager')=>$user->pluck('full_name','id')->toArray()],null,['class' => 'form-control select']) !!}
@@ -100,7 +100,7 @@ class="active"
{!! Form::label('outgoing_email',Lang::get('lang.outgoing_email')) !!} - {!!Form::select('outgoing_email', ['' => Lang::get('lang.system_default'), Lang::get('lang.emails')=>$emails->lists('email_name','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('outgoing_email', ['' => Lang::get('lang.system_default'), Lang::get('lang.emails')=>$emails->pluck('email_name','id')->toArray()],null,['class' => 'form-control select']) !!}
diff --git a/resources/views/themes/default1/admin/helpdesk/agent/departments/edit.blade.php b/resources/views/themes/default1/admin/helpdesk/agent/departments/edit.blade.php index 91b820ab4..42000a62b 100644 --- a/resources/views/themes/default1/admin/helpdesk/agent/departments/edit.blade.php +++ b/resources/views/themes/default1/admin/helpdesk/agent/departments/edit.blade.php @@ -83,12 +83,12 @@ class="active"
{!! Form::label('sla',Lang::get('lang.SLA_plan')) !!} - {!!Form::select('sla', [''=>Lang::get('lang.select_a_sla'), Lang::get('lang.sla_plans')=>$slas->lists('grace_period','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('sla', [''=>Lang::get('lang.select_a_sla'), Lang::get('lang.sla_plans')=>$slas->pluck('grace_period','id')->toArray()],null,['class' => 'form-control select']) !!}
{!! Form::label('manager',Lang::get('lang.manager')) !!} - {!!Form::select('manager',[null=>Lang::get('lang.select_a_manager'),Lang::get('lang.manager')=>$user->lists('full_name','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('manager',[null=>Lang::get('lang.select_a_manager'),Lang::get('lang.manager')=>$user->pluck('full_name','id')->toArray()],null,['class' => 'form-control select']) !!}
@@ -100,7 +100,7 @@ class="active"
{!! Form::label('outgoing_email',Lang::get('lang.outgoing_email')) !!} - {!!Form::select('outgoing_email', ['' => Lang::get('lang.system_default'), Lang::get('lang.emails')=>$emails->lists('email_name','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('outgoing_email', ['' => Lang::get('lang.system_default'), Lang::get('lang.emails')=>$emails->pluck('email_name','id')->toArray()],null,['class' => 'form-control select']) !!}
diff --git a/resources/views/themes/default1/admin/helpdesk/emails/emails/create.blade.php b/resources/views/themes/default1/admin/helpdesk/emails/emails/create.blade.php index f5031be01..8a7dbba32 100644 --- a/resources/views/themes/default1/admin/helpdesk/emails/emails/create.blade.php +++ b/resources/views/themes/default1/admin/helpdesk/emails/emails/create.blade.php @@ -73,19 +73,19 @@ class="active"
{!! Form::label('department',Lang::get('lang.department')) !!} {!! $errors->first('department', ':message') !!} - {!!Form::select('department', [''=>'--System Default--','departments'=>$departments->lists('name','id')->toArray()],null,['class' => 'form-control select', 'id' => 'department' ]) !!} + {!!Form::select('department', [''=>'--System Default--','departments'=>$departments->pluck('name','id')->toArray()],null,['class' => 'form-control select', 'id' => 'department' ]) !!}
{!! Form::label('priority',Lang::get('lang.priority')) !!} {!! $errors->first('priority', ':message') !!} - {!!Form::select('priority', [''=>'--System Default--','Priorities'=>$priority->lists('priority_desc','priority_id')->toArray()],null,['class' => 'form-control select', 'id' => 'priority']) !!} + {!!Form::select('priority', [''=>'--System Default--','Priorities'=>$priority->pluck('priority_desc','priority_id')->toArray()],null,['class' => 'form-control select', 'id' => 'priority']) !!}
{!! Form::label('help_topic',Lang::get('lang.help_topic')) !!} {!! $errors->first('help_topic', ':message') !!} - {!!Form::select('help_topic', [''=>'--System Default--','Help Topics'=>$helps->lists('topic','id')->toArray()],null,['class' => 'form-control select', 'id' => 'help_topic']) !!} + {!!Form::select('help_topic', [''=>'--System Default--','Help Topics'=>$helps->pluck('topic','id')->toArray()],null,['class' => 'form-control select', 'id' => 'help_topic']) !!}
diff --git a/resources/views/themes/default1/admin/helpdesk/emails/emails/edit.blade.php b/resources/views/themes/default1/admin/helpdesk/emails/emails/edit.blade.php index eb2c18343..1dc50dd40 100644 --- a/resources/views/themes/default1/admin/helpdesk/emails/emails/edit.blade.php +++ b/resources/views/themes/default1/admin/helpdesk/emails/emails/edit.blade.php @@ -80,19 +80,19 @@ class="active"
{!! Form::label('department',Lang::get('lang.department')) !!} {!! $errors->first('department', ':message') !!} - {!!Form::select('department', [''=>'--System Default--','departments'=>$departments->lists('name','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('department', [''=>'--System Default--','departments'=>$departments->pluck('name','id')->toArray()],null,['class' => 'form-control select']) !!}
{!! Form::label('priority',Lang::get('lang.priority')) !!} {!! $errors->first('priority', ':message') !!} - {!!Form::select('priority', [''=>'--System Default--','Priorities'=>$priority->lists('priority_desc','priority_id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('priority', [''=>'--System Default--','Priorities'=>$priority->pluck('priority_desc','priority_id')->toArray()],null,['class' => 'form-control select']) !!}
{!! Form::label('help_topic',Lang::get('lang.help_topic')) !!} {!! $errors->first('help_topic', ':message') !!} - {!!Form::select('help_topic', [''=>'--System Default--','Help Topics'=>$helps->lists('topic','id')->toArray()],null,['class' => 'form-control select']) !!} + {!!Form::select('help_topic', [''=>'--System Default--','Help Topics'=>$helps->pluck('topic','id')->toArray()],null,['class' => 'form-control select']) !!}
diff --git a/resources/views/themes/default1/agent/helpdesk/selectlists/selectlistjavascript.blade.php b/resources/views/themes/default1/agent/helpdesk/selectlists/selectlistjavascript.blade.php new file mode 100644 index 000000000..55ad75c1c --- /dev/null +++ b/resources/views/themes/default1/agent/helpdesk/selectlists/selectlistjavascript.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/themes/default1/agent/helpdesk/ticket/more/tickets-model.blade.php b/resources/views/themes/default1/agent/helpdesk/ticket/more/tickets-model.blade.php new file mode 100644 index 000000000..442adc125 --- /dev/null +++ b/resources/views/themes/default1/agent/helpdesk/ticket/more/tickets-model.blade.php @@ -0,0 +1,138 @@ + + + + + + + \ No newline at end of file diff --git a/resources/views/themes/default1/agent/helpdesk/ticket/more/tickets-options-script.blade.php b/resources/views/themes/default1/agent/helpdesk/ticket/more/tickets-options-script.blade.php new file mode 100644 index 000000000..bdc8eae81 --- /dev/null +++ b/resources/views/themes/default1/agent/helpdesk/ticket/more/tickets-options-script.blade.php @@ -0,0 +1,335 @@ + \ No newline at end of file diff --git a/resources/views/themes/default1/agent/helpdesk/ticket/tickets.blade.php b/resources/views/themes/default1/agent/helpdesk/ticket/tickets.blade.php new file mode 100644 index 000000000..b6b7bbbad --- /dev/null +++ b/resources/views/themes/default1/agent/helpdesk/ticket/tickets.blade.php @@ -0,0 +1,384 @@ +@extends('themes.default1.agent.layout.agent') + +@section('Tickets') +class="active" +@stop + +@section('ticket-bar') +active +@stop + + + +@if($activepage == 'trash') + @section('trash') + class="active" + @stop +@elseif ($activepage == 'mytickets') + @section('myticket') + class="active" + @stop +@elseif ($activepage == 'followup') + @section('followup') + class="active" + @stop +@elseif($activepage == 'inbox') + @section('inbox') + class="active" + @stop +@elseif($activepage == 'overdue') + @section('overdue') + class="active" + @stop +@elseif($activepage == 'closed') + @section('closed') + class="active" + @stop +@elseif($activepage == 'approval') + @section('approval') + class="active" + @stop +@elseif($activepage == 0) + @section('unassigned') + class="active" + @stop +@else + @section('inbox') + class="active" + @stop +@endif + +@section('PageHeader') +

{{Lang::get('lang.tickets')}}

+ +@stop +@section('content') + +
+
+

+ @if($activepage == 'trash') + {{Lang::get('lang.trash')}} + @elseif ($activepage == 'mytickets') + {{Lang::get('lang.my_tickets')}} + @elseif ($activepage == 'followup') + {{Lang::get('lang.followup')}} + @elseif($activepage == 'inbox') + {{Lang::get('lang.inbox')}} + @elseif($activepage == 'overdue') + {{Lang::get('lang.overdue')}} + @elseif($activepage == 'closed') + {{Lang::get('lang.closed')}} + @elseif($activepage == 'approval') + {{Lang::get('lang.approval')}} + @elseif($activepage == 0) + {{Lang::get('lang.unassigned')}} + @else + {{Lang::get('lang.inbox')}} + @endif + @if(count(Input::all()) > 2 && $activepage != '0') + / {{Lang::get('lang.filtered-results')}} + @else() + @if(count(Input::get('departments')) == 1 && Input::get('departments')[0] != 'All') + / {{Lang::get('lang.filtered-results')}} + @elseif (count(Input::get('departments')) > 1) + / {{Lang::get('lang.filtered-results')}} + @endif + @endif +

+
+ +
+ @if(Session::has('success')) +
+ + + {{Session::get('success')}} +
+ @endif + + @if(Session::has('fails')) +
+ {!! Lang::get('lang.alert') !!}! + + {{Session::get('fails')}} +
+ @endif + + + + + + + + +
+ + + +
+ + + @if($activepage == 'trash') + + @endif +

+ +

+ + {!! Form::open(['id'=>'modalpopup', 'route'=>'select_all','method'=>'post']) !!} + {!!$table->render('vendor.Chumper.template')!!} + {!! Form::close() !!} + + +
+
+
+ + + +@include('themes.default1.agent.helpdesk.ticket.more.tickets-model') + +{!! $table->script('vendor.Chumper.tickets-javascript') !!} +@include('themes.default1.agent.helpdesk.ticket.more.tickets-options-script') + +@include('themes.default1.agent.helpdesk.selectlists.selectlistjavascript') + +@stop \ No newline at end of file diff --git a/resources/views/vendor/Chumper/tickets-javascript.blade.php b/resources/views/vendor/Chumper/tickets-javascript.blade.php new file mode 100644 index 000000000..15eed39ae --- /dev/null +++ b/resources/views/vendor/Chumper/tickets-javascript.blade.php @@ -0,0 +1,130 @@ + + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 0445bcd19..b1ec60a5c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -330,27 +330,6 @@ Route::group(['middleware' => ['web']], function () { Route::delete('canned/destroy/{id}', ['as' => 'canned.destroy', 'uses' => 'Agent\helpdesk\CannedController@destroy']); /* Canned delete */ Route::get('/test', ['as' => 'thr', 'uses' => 'Agent\helpdesk\MailController@fetchdata']); /* Fetch Emails */ Route::get('/ticket', ['as' => 'ticket', 'uses' => 'Agent\helpdesk\TicketController@ticket_list']); /* Get Ticket */ - Route::get('/ticket/inbox', ['as' => 'inbox.ticket', 'uses' => 'Agent\helpdesk\TicketController@inbox_ticket_list']); /* Get Inbox Ticket */ - - Route::get('/ticket/get-inbox', ['as' => 'get.inbox.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_inbox']); /* Get tickets in datatable */ - Route::get('/ticket/open', ['as' => 'open.ticket', 'uses' => 'Agent\helpdesk\TicketController@open_ticket_list']); /* Get Open Ticket */ - - Route::get('/ticket/get-open', ['as' => 'get.open.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_open']); /* Get tickets in datatable */ - Route::get('/ticket/answered', ['as' => 'answered.ticket', 'uses' => 'Agent\helpdesk\TicketController@answered_ticket_list']); /* Get Answered Ticket */ - - Route::get('/ticket/get-answered', ['as' => 'get.answered.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_answered']); /* Get tickets in datatable */ - Route::get('/ticket/myticket', ['as' => 'myticket.ticket', 'uses' => 'Agent\helpdesk\TicketController@myticket_ticket_list']); /* Get Tickets Assigned to logged user */ - - Route::get('/ticket/get-myticket', ['as' => 'get.myticket.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_myticket']); /* Get tickets in datatable */ - Route::get('/ticket/overdue', ['as' => 'overdue.ticket', 'uses' => 'Agent\helpdesk\TicketController@overdue_ticket_list']); /* Get Overdue Ticket */ - - Route::get('/ticket/get-overdue', ['as' => 'get.overdue.ticket', 'uses' => 'Agent\helpdesk\TicketController@getOverdueTickets']); /* Get Overdue Ticket */ - Route::get('/ticket/closed', ['as' => 'closed.ticket', 'uses' => 'Agent\helpdesk\TicketController@closed_ticket_list']); /* Get Closed Ticket */ - - Route::get('/ticket/get-closed', ['as' => 'get.closed.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_closed']); /* Get tickets in datatable */ - Route::get('/ticket/assigned', ['as' => 'assigned.ticket', 'uses' => 'Agent\helpdesk\TicketController@assigned_ticket_list']); /* Get Assigned Ticket */ - - Route::get('/ticket/get-assigned', ['as' => 'get.assigned.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_assigned']); /* Get tickets in datatable */ Route::get('/newticket', ['as' => 'newticket', 'uses' => 'Agent\helpdesk\TicketController@newticket']); /* Get Create New Ticket */ Route::get('/newticket/autofill', ['as' => 'post.newticket.autofill', 'uses' => 'Agent\helpdesk\TicketController@autofill']); @@ -370,12 +349,6 @@ Route::group(['middleware' => ['web']], function () { Route::get('/email/ban/{id}', ['as' => 'ban.email', 'uses' => 'Agent\helpdesk\TicketController@ban']); /* Get Ban Email */ Route::get('/ticket/surrender/{id}', ['as' => 'ticket.surrender', 'uses' => 'Agent\helpdesk\TicketController@surrender']); /* Get Ticket Surrender */ Route::get('/aaaa', 'Client\helpdesk\GuestController@ticket_number'); - Route::get('trash', ['as' => 'get-trash', 'uses' => 'Agent\helpdesk\TicketController@trash']); /* To show Deleted Tickets */ - - Route::get('/ticket/trash', ['as' => 'get.trash.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_trash']); /* Get tickets in datatable */ - Route::get('unassigned', ['as' => 'unassigned', 'uses' => 'Agent\helpdesk\TicketController@unassigned']); /* To show Unassigned Tickets */ - - Route::get('/ticket/unassigned', ['as' => 'get.unassigned.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_unassigned']); /* Get tickets in datatable */ Route::get('dashboard', ['as' => 'dashboard', 'uses' => 'Agent\helpdesk\DashboardController@index']); /* To show dashboard pages */ Route::get('agen', 'Agent\helpdesk\DashboardController@ChartData'); @@ -393,13 +366,6 @@ Route::group(['middleware' => ['web']], function () { Route::patch('user-org-edit-assign/{id}', ['as' => 'user.editassign.org', 'uses' => 'Agent\helpdesk\UserController@UsereditAssignOrg']); Route::patch('/user-org/{id}', 'Agent\helpdesk\UserController@User_Create_Org'); Route::patch('/head-org/{id}', 'Agent\helpdesk\OrganizationController@Head_Org'); - // Department ticket - Route::get('/{dept}/open', ['as' => 'dept.open.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptopen']); // Open - Route::get('tickets/{dept}/{status}', ['as' => 'dept.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptTicket']); // Open - - Route::get('/{dept}/assigned', ['as' => 'dept.inprogress.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptinprogress']); // Inprogress - - Route::get('/{dept}/closed', ['as' => 'dept.closed.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptclose']); // Closed Route::post('rating/{id}', ['as' => 'ticket.rating', 'uses' => 'Agent\helpdesk\TicketController@rating']); /* Get overall Ratings */ Route::post('rating2/{id}', ['as' => 'ticket.rating2', 'uses' => 'Agent\helpdesk\TicketController@ratingReply']); /* Get reply Ratings */ @@ -435,23 +401,84 @@ Route::group(['middleware' => ['web']], function () { */ Route::get('labels-ticket', ['as'=>'labels.ticket', 'uses'=>'Admin\helpdesk\Label\LabelController@attachTicket']); Route::get('json-labels', ['as'=>'labels.json', 'uses'=>'Admin\helpdesk\Label\LabelController@getLabel']); - Route::get('filter', ['as'=>'filter', 'uses'=>'Agent\helpdesk\Filter\FilterController@getFilter']); /* * Tags */ - Route::get('add-tag', ['as'=>'tag.add', 'uses'=>'Agent\helpdesk\Filter\TagController@addToFilter']); Route::get('get-tag', ['as'=>'tag.get', 'uses'=>'Agent\helpdesk\Filter\TagController@getTag']); + + Route::group(['middleware' => ['force.option', 'role.agent']], function () { + Route::get('tickets', ['as' => 'tickets-view', 'uses' => 'Agent\helpdesk\TicketController@getTicketsView']); + }); + Route::get('get-filtered-tickets', ['as'=>'get-filtered-tickets', 'uses'=>'Agent\helpdesk\Filter\FilterController@getFilter']); + + /** + *======================================================================= + * DEPRECATED ROUTE BLOCKS START + *======================================================================= + * Route defined under this block will be derecated and are no longer + * used in the system. Though we have not removed these routes in v1.10 but + * we will remove these routes in upcoming releas + *======================================================================= + */ + Route::get('/ticket/inbox', ['as' => 'inbox.ticket', 'uses' => 'Agent\helpdesk\TicketController@inbox_ticket_list']); /* Get Inbox Ticket */ + + Route::get('/ticket/get-inbox', ['as' => 'get.inbox.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_inbox']); /* Get tickets in datatable */ + Route::get('/ticket/open', ['as' => 'open.ticket', 'uses' => 'Agent\helpdesk\TicketController@open_ticket_list']); /* Get Open Ticket */ + + Route::get('/ticket/get-open', ['as' => 'get.open.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_open']); /* Get tickets in datatable */ + Route::get('/ticket/answered', ['as' => 'answered.ticket', 'uses' => 'Agent\helpdesk\TicketController@answered_ticket_list']); /* Get Answered Ticket */ + + Route::get('/ticket/get-answered', ['as' => 'get.answered.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_answered']); /* Get tickets in datatable */ + Route::get('/ticket/myticket', ['as' => 'myticket.ticket', 'uses' => 'Agent\helpdesk\TicketController@myticket_ticket_list']); /* Get Tickets Assigned to logged user */ + + Route::get('/ticket/get-myticket', ['as' => 'get.myticket.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_myticket']); /* Get tickets in datatable */ + Route::get('/ticket/overdue', ['as' => 'overdue.ticket', 'uses' => 'Agent\helpdesk\TicketController@overdue_ticket_list']); /* Get Overdue Ticket */ + + Route::get('/ticket/get-overdue', ['as' => 'get.overdue.ticket', 'uses' => 'Agent\helpdesk\TicketController@getOverdueTickets']); /* Get Overdue Ticket */ + Route::get('/ticket/closed', ['as' => 'closed.ticket', 'uses' => 'Agent\helpdesk\TicketController@closed_ticket_list']); /* Get Closed Ticket */ + + Route::get('/ticket/get-closed', ['as' => 'get.closed.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_closed']); /* Get tickets in datatable */ + Route::get('/ticket/assigned', ['as' => 'assigned.ticket', 'uses' => 'Agent\helpdesk\TicketController@assigned_ticket_list']); /* Get Assigned Ticket */ + + Route::get('/ticket/get-assigned', ['as' => 'get.assigned.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_assigned']); /* Get tickets in datatable */ + + //due today ticket + Route::get('duetoday', ['as' => 'ticket.duetoday', 'uses' =>'Agent\helpdesk\TicketController@dueTodayTicketlist']); + + // Route::post('duetoday/list/ticket', ['as' => 'ticket.post.duetoday', 'uses' =>'Agent\helpdesk\TicketController@getDueToday']); + Route::get('duetoday/list/ticket', ['as' => 'ticket.post.duetoday', 'uses' =>'Agent\helpdesk\TicketController@getDueToday']); /* Get Open Ticket */ + Route::get('trash', ['as' => 'get-trash', 'uses' => 'Agent\helpdesk\TicketController@trash']); /* To show Deleted Tickets */ + + Route::get('/ticket/trash', ['as' => 'get.trash.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_trash']); /* Get tickets in datatable */ + Route::get('unassigned', ['as' => 'unassigned', 'uses' => 'Agent\helpdesk\TicketController@unassigned']); /* To show Unassigned Tickets */ + + Route::get('/ticket/unassigned', ['as' => 'get.unassigned.ticket', 'uses' => 'Agent\helpdesk\TicketController@get_unassigned']); /* Get tickets in datatable */ + // Department ticket + Route::get('/{dept}/open', ['as' => 'dept.open.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptopen']); // Open + Route::get('tickets/{dept}/{status}', ['as' => 'dept.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptTicket']); // Open + + Route::get('/{dept}/assigned', ['as' => 'dept.inprogress.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptinprogress']); // Inprogress + + Route::get('/{dept}/closed', ['as' => 'dept.closed.ticket', 'uses' => 'Agent\helpdesk\TicketController@deptclose']); // Closed + /** + * Followup tickets + */ + Route::get('/ticket/followup', ['as' => 'followup.ticket', 'uses' => 'Agent\helpdesk\TicketController@followupTicketList']); // Get Closed Ticket / + + Route::get('/ticket/get-followup', ['as' => 'get.followup.ticket', 'uses' => 'Agent\helpdesk\TicketController@getFollowup']); // Get tickets in datatable / + Route::get('/ticket/close/get-approval/{id}', ['as' => 'get.close.approval.ticket', 'uses' => 'Agent\helpdesk\TicketController@getCloseapproval']); // Get tickets in datatable / + Route::get('filter', ['as'=>'filter', 'uses'=>'Agent\helpdesk\Filter\FilterControllerOld@getFilter']); + + /** + *======================================================================= + * DEPRECATED ROUTE BLOCKS END + *======================================================================= + */ }); - /* - * Followup tickets - */ - Route::get('/ticket/followup', ['as' => 'followup.ticket', 'uses' => 'Agent\helpdesk\TicketController@followupTicketList']); // Get Closed Ticket / - - Route::get('/ticket/get-followup', ['as' => 'get.followup.ticket', 'uses' => 'Agent\helpdesk\TicketController@getFollowup']); // Get tickets in datatable / - Route::get('/ticket/close/get-approval/{id}', ['as' => 'get.close.approval.ticket', 'uses' => 'Agent\helpdesk\TicketController@getCloseapproval']); // Get tickets in datatable / + /* |------------------------------------------------------------------ |Guest Routes @@ -767,11 +794,6 @@ Route::group(['middleware' => ['web']], function () { Route::post('restore/{id}', ['as' => 'user.restore', 'uses' => 'Agent\helpdesk\UserController@restoreUser']); - //due today ticket - Route::get('duetoday', ['as' => 'ticket.duetoday', 'uses' =>'Agent\helpdesk\TicketController@dueTodayTicketlist']); - - // Route::post('duetoday/list/ticket', ['as' => 'ticket.post.duetoday', 'uses' =>'Agent\helpdesk\TicketController@getDueToday']); - Route::get('duetoday/list/ticket', ['as' => 'ticket.post.duetoday', 'uses' =>'Agent\helpdesk\TicketController@getDueToday']); /* Get Open Ticket */ // Breadcrumbs::register('open.ticket', function ($breadcrumbs) { // $breadcrumbs->parent('dashboard'); // $breadcrumbs->push(Lang::get('lang.tickets') . '  >  ' . Lang::get('lang.open'), route('open.ticket'));