PATH:
home
/
lab2454c
/
costbloc.com
/
Modules
/
Ticket
/
Http
/
Controllers
/
Vendor
<?php namespace Modules\Ticket\Http\Controllers\Vendor; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Modules\Ticket\DataTables\SupportDataTable; use App\Exports\VendorTicketsExport; use DB; use Excel; use Modules\Ticket\Http\Models\{ Thread, ThreadReply, ThreadStatus, Priority, Department }; use Illuminate\Support\Facades\{ Auth, Session }; use App\Models\{ User, Preference }; use Modules\Ticket\Http\Requests\{ VendorTicketRequest, ReplyRequest }; use App\Services\Mail\TicketReplyMailService; class TicketController extends Controller { /** * Vendor ticket list * @param SupportDataTable $supportDataTable * */ public function index(SupportDataTable $supportDataTable) { $data['departments'] = Department::get(); $data['statuses'] = ThreadStatus::get(); $data['from'] = request()->input('from'); $data['to'] = request()->input('to'); $data['department_id'] = request()->input('department_id'); $data['status_id'] = request()->input('status_id'); $data['thread'] = (new Thread())->getAllData($data['from'], $data['to'], $data['department_id'], $data['status_id']); return $supportDataTable->with(['threadData' => $data['thread']])->render('ticket::index', $data); } /** * Update reply * @param Request $request * */ public function update(Request $request) { if (isset($request->id)) { if (ThreadReply::updateReply($request->message, $request->id)) { \Session::flash('success', __('Successfully Saved')); return redirect()->back(); } } \Session::flash('fail', __('Something went wrong, please try again.')); return redirect()->back(); } /** * Create ticket */ public function create() { $data['projectPanel'] = 0; $data['object_type'] = 'TICKET'; $data['priorities'] = Priority::get(); $data['threadStatus'] = ThreadStatus::get(); $data['departments'] = Department::get(); return view('ticket::add', $data); } /** * Store Ticket * @param VendorTicketRequest $request * * @return [type] */ public function store(VendorTicketRequest $request) { try { $user = Auth::user(); DB::beginTransaction(); $data['receiver_id'] = $user->id; $data['email'] = $user->email ?? null; $data['name'] = $user->name ?? null; $data['department_id'] = $request->department_id; $data['priority_id'] = $request->priority_id; $data['thread_status_id'] = 1; $data['thread_key'] = 'THRD-' . uniqid(); $data['subject'] = $request->subject; $data['thread_type'] = $request->object_type; $data['sender_id'] = 1; // 1 refered to admin $data['date'] = date('Y-m-d H:i:s'); $data['project_id'] = isset($request->project_id) ? $request->project_id : null; $data['last_reply'] = date('Y-m-d H:i:s'); // Creating new thread $id = (new Thread)->store($data); if (!empty($id)) { $replyData['thread_id'] = $id; $replyData['sender_id'] = $user->id; $replyData['message'] = $request->message; $replyData['date'] = $data['date']; $replyData['has_attachment'] = isset($request->file) ? 1 : 0; $threadReply = (new ThreadReply)->store($replyData); } DB::commit(); $attachments = []; if (isset($request->file_id) && !empty($request->file_id)) { $fileId = ThreadReply::where('id', $id)->get(); foreach ($fileId as $key => $file) { $attachments = $file->filesUrlNew(['imageUrl' => 'true']); } } $info['emailInfo'] = (new Thread())->getAllTicketDetailsById($id); $info['assignId'] = 1; // Vendor ticket asigned to Admin $info['files'] = $attachments; $emailResponse = (new TicketReplyMailService)->send($info); if ($emailResponse['status'] == false) { \Session::flash('fail', __($emailResponse['message'])); } Session::flash('success', __('Successfully Saved')); return redirect('vendor/ticket/reply/'.base64_encode($id)); } catch (Exception $e) { DB::rollBack(); return redirect()->back()->withInput()->withErrors(['error' => $e->getMessage()]); } } public function pdf() { $data['from'] = $from = request('from'); $data['to'] = $to = request('to'); $status = request('status'); $departmentId = request('department_id'); $data['customerSelected'] = ''; $data['departmentSelected'] = Department::find($departmentId); $data['statusSelected'] = ThreadStatus::find($status); $data['ticketList'] = (new Thread())->getAllData($from, $to, $departmentId, $status, null)->orderBy('date', 'desc')->get(); $data['company_logo'] = Preference::getAll()->where('category','company')->where('field', 'company_logo')->first('value'); $data['date_range'] = (!empty($from) && !empty($to)) ? formatDate($from) . ' To ' . formatDate($to) : 'No date selected'; return printPDF($data, 'ticket_list_pdf' . time() . '.pdf', 'ticket::vendor_pdf', view('ticket::vendor_pdf', $data), 'pdf'); } public function csv() { return Excel::download(new VendorTicketsExport(), 'tickets_list' . time() . '.csv'); } public function getAllStatus(Request $request) { $data = ['status' => 0]; $data['output'] = ''; $statusName = $request->statusName; $ticketId = $request->ticketId; if (!empty($statusName) && !empty($ticketId)) { $ticketStatus = DB::table('ticket_statuses')->where('name', '!=', $statusName)->orderBy('name')->get(); foreach ($ticketStatus as $key => $value) { $data['output'] .= '<li class="properties"><a class="status_change f-14 color_black" ticket_id="' . $ticketId . '" data-id="' . $value->id . '" data-value="' . $value->name . '">' . $value->name . '</a></li>'; } $data['status'] = 1; } return $data; } public function view($id) { $data['page_title'] = __('Ticket Reply'); $ticket_id = base64_decode($id); $previousurl = url()->previous(); $data['header'] = 'ticket'; $data['ticketStatuses'] = ThreadStatus::getAll(); $data['ticketDetails'] = (new Thread)->getAllTicketDetailsById($ticket_id); if (empty($data['ticketDetails'])) { return redirect()->back()->with('fail', __('The data you are trying to access is not found.')); } $data['priority'] = Priority::where('id', '=', $data['ticketDetails']->priority_id)->first(); $data['ticketReplies'] = (new Thread)->getAllTicketRepliersById($ticket_id); $data['ticketStatus'] = ThreadStatus::where('id', '!=', $data['ticketDetails']->thread_status_id)->orderBy('name')->get(); $data['filePath'] = "public/uploads"; $data['assignee'] = User::where('status', 'active')->get(); return view('ticket::reply', $data); } public function replyStore(ReplyRequest $request) { try { DB::beginTransaction(); if (!empty($request->ticket_id)) { DB::table('threads') ->where('id', $request->ticket_id) ->update([ 'thread_status_id' => 6, // 6 refered to open 'last_reply' => date('Y-m-d H:i:s'), ]); } $data['thread_id'] = $request->ticket_id; $data['sender_id'] = Auth::user()->id; $data['message'] = $request->message; $data['date'] = date('Y-m-d H:i:s'); $thredReplyId = (new ThreadReply)->store($data); $attachments = []; if (isset($request->file_id) && !empty($request->file_id)) { $fileId = ThreadReply::where('id', $thredReplyId)->first(); $attachments = $fileId->filesUrlNew(['imageUrl' => 'true']); } $info['emailInfo'] = (new Thread())->getAllTicketDetailsById($request->ticket_id); $info['assignId'] = empty($info['emailInfo']->assigned_member_id) ? 1 : $info['emailInfo']->assigned_member_id; // Vendor ticket asigned to Admin $info['files'] = $attachments; $emailResponse = (new TicketReplyMailService)->send($info); if ($emailResponse['status'] == false) { \Session::flash('fail', __($emailResponse['message'])); } DB::commit(); Session::flash('success', __('Successfully Saved')); return redirect()->back(); } catch (Exception $e) { DB::rollBack(); return redirect()->back()->withInput()->withErrors(['error' => $e->getMessage()]); } } public function replyDelete(Request $request) { if (isset($request->id) && isset($request->ticket_id)) { // If file exeist then delete $file = DB::table('files')->where(['ticket_reply_id' => $request->id, 'ticket_id' => $request->ticket_id])->first(); if (!empty($file)) { @unlink(public_path() . '/uploads/ticketFile/' . $file->file_name); DB::table('files')->where(['ticket_reply_id' => $request->id, 'ticket_id' => $request->ticket_id])->delete(); } // Delete Ticket Reply $data = DB::table('ticket_replies')->where(['id' => $request->id, 'ticket_id' => $request->ticket_id])->first(); if (!empty($data)) { \DB::table('ticket_replies')->where(['id' => $request->id, 'ticket_id' => $request->ticket_id])->delete(); \Session::flash('success', __('Deleted Successfully.')); return redirect()->back(); } } } public function customerReply($id) { $ticket_id = base64_decode($id); $data['menu'] = 'customer-panel-support'; $data['page_title'] = __('Customer Ticket Reply'); $data['ticketDetails'] = $this->Ticket->getAllTicketDetailsById($ticket_id); if (empty($data['ticketDetails'])) { return redirect()->back()->with('fail', __('The data you are trying to access is not found.')); } $data['assignee'] = User::where('id', $data['ticketDetails']->assigned_member_id)->first(); if ($data['ticketDetails']['customer_id'] != Auth::guard('customer')->user()->id) { Session::flash('fail', __('Invalid Ticket Reply')); return redirect('customer/dashboard'); } $data['ticketReplies'] = $this->Ticket->getAllTicketRepliersById($ticket_id); $replyFiles = []; foreach ($data['ticketReplies'] as $ticketReply) { $replyFiles[$ticketReply->id] = (new File)->getFiles('Ticket Reply', $ticketReply->id); } $data['replyFiles'] = $replyFiles; $data['filePath'] = "public/uploads/tickets"; return view('admin.customerPanel.ticket.reply', $data); } public function changeStatus(Request $request) { $data = ['status' => 0]; if (!empty($request->status_id) && !empty($request->ticketId)) { $previousStatus = Thread::where('id', $request->ticketId)->first(['thread_status_id']); $data['preStatusName'] = str_replace(' ', '', $previousStatus->threadStatus->name); $update = Thread::where(['id' => $request->ticketId])->update([ 'thread_status_id' => $request->status_id, ]); if ($update) { $newStatus = Thread::where('id', $request->ticketId)->first(['thread_status_id']); $ticktStatus = ThreadStatus::where('id', $newStatus->thread_status_id)->pluck('color', 'name')->toArray(); $data['newStatusName'] = str_replace(' ', '', $newStatus->threadStatus->name); $data['newName'] = $newStatus->threadStatus->name; $data['newStatusColor'] = array_values($ticktStatus)[0]; $data['status'] = '1'; } } return $data; } }
[+]
..
[-] FilesController.php
[edit]
[-] TicketController.php
[edit]