MIF_E31210141/Modules/Seller/Http/Controllers/TicketController.php

159 lines
5.9 KiB
PHP

<?php
namespace Modules\Seller\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use DataTables;
use Modules\Seller\Entities\TicketModel;
use Modules\Seller\Entities\TicketResponseModel;
use Modules\Seller\Events\TicketCreated;
use App\Enums\GlobalEnum;
class TicketController extends Controller
{
public function index(Request $request)
{
if ($request->ajax()) {
$data = TicketModel::where('user_id', auth()->user()->id)->select('*');
// Convert the Eloquent Collection to a regular PHP array
$data->each(function ($item, $key) {
$item->rowIndex = $key + 1;
});
return Datatables::of($data)
->addIndexColumn()
->addColumn('title-post', function($row){
$text = '
<p class="mb-0">' . $row->subject . '</p>
<p class="mb-0 small">Terakhir diperbarui pada ' . $row->updated_at->format('j F Y, h:i:s') . '</p>
';
return $text;
})
->addColumn('action', function($row){
$view = route('ticket.view', ['id' => $row->id]);
$delete = route('ticket.delete', ['id' => $row->id]);
$btn = '
<a href="' . $view . '" class="btn btn-light btn-sm px-4"><i class="ki-outline ki-eye"></i></a>
<a data-url="' . $delete . '" href="#" class="btn btn-light btn-sm deleteContent px-4"><i class="ki-outline ki-trash"></i></a>
';
return $btn;
})
->addColumn('status', function($row){
if ($row->is_status == GlobalEnum::isTicketSellerPending) {
return '<span class="mb-1 badge font-medium bg-light-dark text-dark">Pending</span>';
} elseif($row->is_status == GlobalEnum::isTicketAdminReplied) {
return '<span class="mb-1 badge font-medium bg-light-primary text-primary">Admin Membalas</span>';
} elseif($row->is_status == GlobalEnum::isTicketSellerClosed) {
return '<span class="mb-1 badge font-medium bg-light-danger text-danger">Ditutup</span>';
}
})
->addColumn('priority', function($row){
if ($row->is_priority == GlobalEnum::isTicketPriorityNormal) {
return '<span class="mb-1 badge font-medium bg-light-info text-info">Normal</span>';
} elseif($row->is_priority == GlobalEnum::isTicketPriorityMedium) {
return '<span class="mb-1 badge font-medium bg-light-primary text-primary">Medium</span>';
} elseif($row->is_priority == GlobalEnum::isTicketPriorityHigh) {
return '<span class="mb-1 badge font-medium bg-light-danger text-danger">Tinggi</span>';
}
})
->rawColumns(['title-post','action','status','priority'])
->make(true);
}
$data = [
'subtitle' => 'Semua Tiket',
'button' => true,
'module' => [
'url' => route('ticket.create'),
'name' => 'Tambah baru'
]
];
return view('seller::ticket.index', compact('data'));
}
public function create()
{
$data = [
'subtitle' => 'Tambah Baru',
];
return view('seller::ticket.add', compact('data'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'subject' => 'required',
'message' => 'required',
'is_priority' => 'required',
]);
if($validator->fails()) {
return redirect()->back()->withErrors($validator->errors());
}
$input = $request->all();
$ticket = new TicketModel([
'id' => Str::uuid(),
'user_id' => auth()->user()->id,
'subject' => $input['subject'],
'is_priority' => $input['is_priority'],
'is_status' => 1
]);
$check = TicketModel::where('subject', $ticket->subject)->count();
$ticketResponse = new TicketResponseModel();
$ticketResponse->id = Str::uuid();
$ticketResponse->id_ticket = $ticket->id; // Isi dengan nilai yang sesuai
$ticketResponse->user_id = $ticket->user_id; // Isi dengan nilai yang sesuai
$ticketResponse->message = clean($input['message']);
$postTicket = $ticket->save();
$postTicketResponse = $ticketResponse->save();
if($check == 0) {
if($postTicket && $postTicketResponse) {
return redirect()->route('ticket')->with('swal', swal_alert('success', 'Anda berhasil membuka tiket baru.'));
} else {
return redirect()->route('ticket')->with('swal', swal_alert('error', 'Terjadi kesalahan saat membuka tiket.'));
}
} else {
return redirect()->route('ticket')->with('swal', swal_alert('error', 'Ditemukan data yang telah ada'));
}
}
public function view($id)
{
$data = [
'subtitle' => 'Ticket #' . explode('-', $id)[0],
];
$ticketResponse = TicketModel::find($id)->responses;
return view('seller::ticket.detail', compact('data', 'ticketResponse'));
}
public function update(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'subject' => 'required',
'message' => 'required',
'is_priority' => 'required',
]);
}
public function destroy($id)
{
//
}
}