laravel-datatables
laravel-datatables copied to clipboard
Sort doesn't work on returned datable
Summary of problem or feature request
The created datable is presented and I have a created a filter panel with custom search field, which work as expected. The sort on the table doesn't seem to work at all, with or without the ->filter() option. Even the default 'order: [1, 'asc]' on the jquery doesn't seem to work. I have checked the network tab on the chrome console and the request for the sort is being send.
Code snippet of problem
if(request()->ajax()) {
if (auth()->user()->id === 1 || auth()->user()->all_teams === 1) {
$data = Ticket::select('tickets.*', 'customers.lastname as lastname', 'customers.phone as phone', 'customers.email as email')
->leftJoin('customers', 'customers.id', 'tickets.cust_id')
->where('tickets.status', '=', 'Closed')
->latest('tickets.updated_at');
} else {
$data = Ticket::select('tickets.*', 'customers.lastname', 'customers.phone', 'customers.email')
->leftJoin('team_user','team_user.team_id','tickets.team_id')
->leftJoin('customers', 'customers.id', 'tickets.cust_id')
->whereNotNull('team_user.user_id')
->where([
['team_user.user_id', Auth::id()],
['tickets.status', '=', 'Closed']
])
->orWhere('tickets.toassignuser_id', Auth::id())
->distinct()
->latest('tickets.updated_at');
}
// $data = Ticket::whereIn('status', ['Closed'])->latest('updated_at')->get();
return DataTables::of($data)
->addColumn('ticket_id', function($data){
$note = DB::table('ticketnotes')->pluck('ticketnotes.ticket_id')->toArray();
if($data->ticketnote->isEmpty()){
$ticket_id = '<a href="'.url('admin/ticket-view/' . $data->ticket_id).'">'.$data->ticket_id.'</a> <span class="badge badge-danger-light">'.$data->overduestatus.'</span>';
}else{
$ticket_id = '<a href="'.url('admin/ticket-view/' . $data->ticket_id).'">'.$data->ticket_id.'</a> <span class="badge badge-danger-light">'.$data->overduestatus.'</span> <span class="badge badge-warning-light">Note</span>';
}
return $ticket_id;
})
->addColumn('subject', function($data){
$subject = '<a href="'.url('admin/ticket-view/' . $data->ticket_id).'">'.Str::limit($data->subject, '40').'</a>';
return $subject;
})
->addColumn('cust_id',function($data){
$cust_id = $data->cust->username;
return $cust_id;
})
->addColumn('priority',function($data){
if($data->priority != null){
if($data->priority == "Low"){
$priority = '<span class="badge badge-success-light">'.$data->priority.'</span>';
}
elseif($data->priority == "High"){
$priority = '<span class="badge badge-danger-light">'.$data->priority.'</span>';
}
elseif($data->priority == "Critical"){
$priority = '<span class="badge badge-danger-dark">'.$data->priority.'</span>';
}
else{
$priority = '<span class="badge badge-warning-light">'.$data->priority.'</span>';
}
}else{
$priority = '~';
}
return $priority;
})
->addColumn('created_at',function($data){
$created_at = $data->created_at->format('Y-m-d H:i:s');
return $created_at;
})
->addColumn('category_id', function($data){
if($data->category_id != null){
$category_id = Str::limit($data->category->name, '40');
return $category_id;
}else{
return '~';
}
})
->addColumn('location_id', function($data){
if($data->locations != null){
$location_id = '';
foreach ($data->locations as $location) {
$location_id .= $location->name.' ';
}
return $location_id;
}else{
return '~';
}
})
->addColumn('status', function($data){
if($data->status == "New"){
$status = '<button type="button" data-id="'.$data->id.'" id="status_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-success"> '.$data->status.' </button>';
}
elseif($data->status == "Re-Open"){
$status = '<button type="button" data-id="'.$data->id.'" id="status_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-teal">'.$data->status.'</span> ';
}
elseif($data->status == "Inprogress"){
$status = '<button type="button" data-id="'.$data->id.'" id="status_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-info">'.$data->status.'</span>';
}
elseif($data->status == "On-Hold"){
$status = '<button type="button" data-id="'.$data->id.'" id="status_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-warning">'.$data->status.'</span>';
}
else{
$status = '<button type="button" data-id="'.$data->id.'" id="status_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-danger">'.$data->status.'</span>';
}
return $status;
})
->addColumn('team_id', function($data){
if(Auth::user()->can('Team Edit')) {
if($data->team != null){
$team = '<button data-id="'.$data->ticket_id.'" id="team_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-info">'.$data->team->name.'</button>';
}else{
$team = '<button data-id="'.$data->ticket_id.'" id="team_" data-bs-toggle="tooltip" data-bs-placement="top" title="Change" class="btn btn-info">Assign</button>';
}
} else {
if ($data->team != null) {
return $data->team->name;
} else {
return '~';
}
}
return $team;
})
->addColumn('toassignuser_id', function($data){
if(Auth::user()->can('Ticket Assign')){
if($data->toassignuser == null){
$toassignuser_id = '<a href="javascript:void(0)" data-id="'.$data->id.'" id="assigned" class="btn btn-outline-primary btn-sm" data-bs-toggle="tooltip" data-bs-placement="top" title="Assign">
Assign
</a>';
}
else{
if($data->toassignuser_id != null){
$toassignuser_id = '
<div class="btn-group btn-group-sm" role="group" aria-label="Basic outlined example">
<a href="javascript:void(0)" data-id="' .$data->id.'" class="btn btn-outline-primary" id="assigned" data-bs-toggle="tooltip" data-bs-placement="top" title="Change">'.$data->toassignuser->name.'</a>
<a href="javascript:void(0)" data-id="' .$data->id.'" class="btn btn-outline-primary" id="btnremove" data-bs-toggle="tooltip" data-bs-placement="top" title="Unassign"><i class="fe fe-x" ></i></a>
</div>
';
}else{
$toassignuser_id = '<a href="javascript:void(0)" data-id="'.$data->id.'" id="assigned" class="btn btn-outline-primary btn-sm" data-bs-toggle="tooltip" data-bs-placement="top" title="Change">
Assign
</a>';
}
}
}
else{
$toassignuser_id = '~';
}
return $toassignuser_id;
})
->addColumn('last_reply', function($data){
if($data->last_reply == null){
$last_reply = $data->created_at->diffForHumans();
}else{
$last_reply = $data->last_reply->diffForHumans();
}
return $last_reply;
})
->addColumn('action', function($data){
$button = '<div class = "d-flex">';
if(Auth::user()->can('Ticket Edit')){
$button .= '<a href="'.url('admin/ticket-view/' . $data->ticket_id).'" class="action-btns1 edit-testimonial"><i class="feather feather-edit text-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="Edit"></i></a>';
}else{
$button .= '~';
}
if(Auth::user()->can('Ticket Delete')){
$button .= '<a href="javascript:void(0)" data-id="'.$data->id.'" class="action-btns1" id="show-delete" ><i class="feather feather-trash-2 text-danger" data-id="'.$data->id.'" data-bs-toggle="tooltip" data-bs-placement="top" title="Delete"></i></a>';
}else{
$button .= '~';
}
$button .= '</div>';
return $button;
})
->addColumn('checkbox', function($data){
if(Auth::user()->can('Ticket Delete')){
return '<input type="checkbox" name="student_checkbox[]" class="checkall" value="'.$data->id.'" />';
}else{
return '<input type="checkbox" name="student_checkbox[]" class="checkall" value="'.$data->id.'" disabled />';
}
})
->filter(function ($instance) use ($request) {
if ($request->has('subject') && $request->subject !== null) {
$instance->where('tickets.subject', 'LIKE', '%'.$request->subject.'%');
}
if ($request->has('category') && $request->category !== null) {
$instance->where('tickets.category_id', $request->category);
}
if ($request->has('location') && $request->location !== null) {
$instance->with('locations')
->whereHas('locations', function($query) use ($request) {
$query->where('location_id', $request->location);
});
}
if ($request->has('dateFrom') && $request->dateFrom !== null) {
$instance->where('tickets.created_at', '>', Carbon::parse($request->dateFrom));
}
if ($request->has('dateTo') && $request->dateTo !== null) {
$instance->where('tickets.created_at', '<', Carbon::parse($request->dateTo));
}
if ($request->has('priority') && $request->priority !== null) {
$instance->where('tickets.priority','LIKE', '%'.$request->priority.'%');
}
if ($request->has('status') && $request->status !== null) {
$instance->where('tickets.status','LIKE', '%'.$request->status.'%');
}
if ($request->has('team') && $request->team !== null) {
$instance->where('tickets.team_id', $request->team);
}
if ($request->has('assign') && $request->assign !== null) {
$instance->where('tickets.toassignuser_id', $request->assign);
}
if ($request->has('datatable_search') && $request->datatable_search !== null) {
$instance->where('ticket_id', 'LIKE', '%'.$request->datatable_search.'%')
->orWhere('lastname', 'LIKE', '%'.$request->datatable_search.'%')
->orWhere('phone', 'LIKE', '%'.$request->datatable_search.'%')
->orWhere('email', 'LIKE', '%'.$request->datatable_search.'%');
}
})
->rawColumns(['action','cust_id','subject','status','team_id','priority','created_at','toassignuser_id','last_reply','ticket_id','checkbox'])
->addIndexColumn()
->make(true);
}