laravel-datatables icon indicating copy to clipboard operation
laravel-datatables copied to clipboard

Sort doesn't work on returned datable

Open mpapado3 opened this issue 3 years ago • 0 comments

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);
            }

mpapado3 avatar Jul 09 '22 11:07 mpapado3