crums->add(__('Dashboard'), route('home'))->add(__('Yêu cầu hỗ trợ')); return view("frontend.ticket.ticket", compact('title', 'breadcrumbs')); } public function create() { $title = "Gửi yêu cầu hỗ trợ"; $ticket = true; $breadcrumbs = $this->crums->add(__('Dashboard'), route('home'))->add(__('DS Yêu cầu hỗ trợ'), route('ticket'))->add(__('Gửi yêu cầu hỗ trợ')); $itemProduct = \App\Models\InvoiceItem::whereHas('invoice', function ($query) { $query->where('customer_id', customer()->id); }) ->where('invoice_type', 1) ->get(); return view("frontend.ticket.add", compact('title', 'itemProduct', 'ticket', 'breadcrumbs')); } public function store(Request $request, Upload $upload) { $validator = Validator::make( $request->all(), [ 'full_name' => 'required', 'email' => 'required', 'subject' => 'required', 'room' => 'required', 'description' => 'required', ], [ 'full_name' => [ 'required' => 'Yêu cầu không hợp lệ' ], 'email' => [ 'required' => 'Yêu cầu không hợp lệ' ], 'subject' => [ 'required' => 'Tiêu đề không được để trống' ], 'room' => [ 'required' => 'Vui lòng chọn phòng ban cần hỗ trợ' ], 'description' => [ 'required' => 'Vui lòng nhập nội dung cần hỗ trợ' ] ] ); if ($validator->fails()) { return back()->withInput()->withErrors($validator); } if ($request->fileTicket) { $data = $upload->ImageUpload($request->fileTicket); if ($data['error']) { return back()->withInput()->withErrors($data['message']); } } $type = !empty($request->product) ? explode("|", $request->product) : []; try { DB::beginTransaction(); $dataJson = [ 'product' => count($type) ? $type[1] : "", 'product_type' => count($type) ? $type[0] : "", 'file' => isset($data) ? $data['data'] : "" ]; $ticket = Ticket::create([ 'subject' => $request->subject, 'ticket_num' => random_int(1000000, 99999999), 'description' => $request->description, 'customer_id' => $request->user('users')->id, 'data' => json_encode($dataJson), 'room' => $request->room, 'status' => 1 ]); DB::commit(); // Dispatch job to send Telegram notification $customer = \App\Models\Customer::find($ticket->customer_id); \App\Jobs\Ticket\TicketJobs::dispatch($ticket, $customer); } catch (\Exception $exception) { DB::rollBack(); return back()->withInput()->withErrors($exception->getMessage()); } return redirect()->route('ticket')->with('success', 'Gửi yêu cầu hỗ trợ thành công!'); } public function show(Request $request) { $validator = Validator::make( $request->all(), [ 'ticket_num' => 'required' ], [ 'ticket_num' => [ 'required' => 'Yêu cầu không hợp lệ' ] ] ); if ($validator->fails()) { return back()->withErrors($validator); } $ticket = Ticket::with([ 'Reply' => function ($query) { $query->latest('id'); }, 'Reply.User', 'Customer' ])->where('ticket_num', $request->ticket_num)->latest('id')->get(); $title = "Ticket #" . $request->ticket_num; return view("frontend.ticket.view", compact('title', 'ticket')); } public function ReplyStore(Request $request, Upload $upload) { $validator = Validator::make( $request->all(), [ 'ticket_num' => 'required', 'description' => 'required', ], [ 'ticket_num' => [ 'required' => 'Yêu cầu không hợp lệ' ], 'description' => [ 'required' => 'Vui lòng nhập nội dung cần hỗ trợ' ] ] ); if ($validator->fails()) { return back()->withInput()->withErrors($validator); } $ticket = Ticket::where('ticket_num', $request->ticket_num)->first(); if (!$ticket) { return back()->withInput()->withErrors('Yêu cầu không hợp lệ'); } if ($request->fileTicket) { $data = $upload->ImageUpload($request->fileTicket); if ($data['error']) { return back()->withInput()->withErrors($data['message']); } } try { DB::beginTransaction(); $dataJson = json_decode($ticket->data, true); $dataJson['file'] = isset($data) ? $data['data'] : ""; Ticket::create([ 'subject' => $ticket->subject, 'ticket_num' => $ticket->ticket_num, 'description' => $request->description, 'customer_id' => $ticket->customer_id, 'data' => json_encode($dataJson), 'room' => $ticket->room, 'status' => 1 ]); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); return back()->withInput()->withErrors($exception->getMessage()); } return back()->with('success', 'Trả lời yêu cầu hỗ trợ thành công!'); } public function ClosedTicket(Request $request) { $validator = Validator::make( $request->all(), [ 'ticket_num' => 'required' ], [ 'ticket_num' => [ 'required' => 'Yêu cầu không hợp lệ' ] ] ); if ($validator->fails()) { return back()->withInput()->withErrors($validator); } try { DB::beginTransaction(); Ticket::where('ticket_num', $request->ticket_num)->update(['status' => 0]); DB::commit(); } catch (\Exception $exception) { DB::rollBack(); return back()->withInput()->withErrors($exception->getMessage()); } return redirect()->route('ticket')->with('success', 'Yêu cầu xử lý thành công!'); } }