eloquent($query) ->addColumn('deleted_html', function (Fax $fax) { return view('raw.partials.deleted', compact('fax')); }) ->addColumn('processed_html', function (Fax $fax) { return view('raw.partials.processed', compact('fax')); }) ->addColumn('to', function (Fax $fax) { return $fax->toCaller(); }) ->addColumn('agent', function (Fax $fax) { return $fax->lastname ? $fax->lastname . ', ' . $fax->firstname : ""; }) ->addColumn('filename_html', function (Fax $fax) { return view('raw.partials.filename', compact('fax')); }) ->filter(function (Builder $builder) { if (request()->has('deleted')) { $builder->where('fax.deleted', 'N'); } if (request()->has('processed')) { $builder->where('fax.processed', 'N'); } if ($filename = request()->get('filename')) { $builder->where('fax.filename', 'like', "%$filename%"); } if ($filename = request()->get('from_fax')) { $builder->where('fax.filename', 'like', "%$filename%"); } if ($filename = request()->get('to_fax')) { $builder->where('fax.filename', 'like', "%$filename%"); } if ($agent = request()->get('agent')) { $builder->whereRaw( "(upper(agent.firstname) LIKE upper(?) or upper(agent.lastname) LIKE upper(?))", ["%$agent%", "%$agent%"] ); } if ($received_at = request()->get('received_at')) { $builder->whereDate( 'fax.daterecieved', Carbon::parse($received_at)->format('Y-m-d') ); } if ($recent_date = request()->get('recent_date')) { $builder->whereRaw( "fax.daterecieved >= trunc(sysdate) - ? AND daterecieved <= trunc(sysdate)+1", [$recent_date] ); } }) ->rawColumns(['filename_html', 'deleted_html', 'processed_html']); } /** * @param \App\Queries\RawFaxQuery $rawFaxQuery * @return \Illuminate\Database\Eloquent\Builder */ public function query(RawFaxQuery $rawFaxQuery) { $builder = $rawFaxQuery->handle(); return $builder; } /** * Optional method if you want to use html builder. * * @return \Yajra\DataTables\Html\Builder */ public function html() { $script = <<builder() ->columns($this->getColumns()) ->minifiedAjax('', $script) ->parameters([ 'order' => [[2, 'desc']], 'searching' => false, 'lengthMenu' => [10, 20, 50, 100], 'pageLength' => 20, 'buttons' => [], ]); } /** * Get columns. * * @return array */ protected function getColumns() { return [ 'deleted' => [ 'class' => 'text-center', 'data' => 'deleted_html', 'width' => '10px', ], 'processed' => [ 'title' => 'Cooked', 'data' => 'processed_html', 'class' => 'text-center', 'width' => '10px', ], 'faxid' => [ 'title' => 'Fax ID', ], 'filename' => [ 'data' => 'filename_html', 'title' => 'File Name', ], 'callername' => [ 'title' => 'Faxed From', 'orderable' => false, 'searchable' => false, ], 'to' => [ 'title' => 'Faxed To', 'orderable' => false, 'searchable' => false, ], 'daterecieved' => [ 'title' => 'Date Received', ], 'agent' => [ 'name' => 'agent.lastname', 'title' => 'Agent', ], ]; } /** * Get filename for export. * * @return string */ protected function filename() { return 'raw-fax_' . time(); } }