/home/mip/mip/app/Modules/Client/Controllers/Applicants/SearchApplicantsController.php
<?php
namespace QxCMS\Modules\Client\Controllers\Applicants;
use Auth;
use Datatables;
use Carbon\Carbon;
use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;
use QxCMS\Modules\Client\Repositories\Applicants\ApplicantRepositoryInterface as Applicant;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;
class SearchApplicantsController extends Controller
{
protected $applicant;
protected $auth;
protected $permission;
protected $prefix_name = '';
protected $module_id = 20;
public function __construct(Permission $permission, Applicant $applicant)
{
$this->applicant = $applicant;
$this->permission = $permission;
$this->auth = Auth::guard('client');
$this->prefix_name = config('modules.client');
$this->getDetails($this->module_id);
}
public function permissions()
{
return $this->permission->getPermission($this->module_id);
}
public function index()
{
$this->authorize('activated', $this->permissions());
$data['permissions'] = $this->permissions();
return view('Client::applicants.search-applicant.index', $data);
}
public function getSearchApplicantsData(Request $request)
{
$applicant = $this->applicant->select('applicants.*')->with('latestJob')
->whereHas('latestJob',function($query){
$query->where('id', '!=', null);
})
->join('job_applied', 'job_applied.applicant_id', '=', 'applicants.id')
->groupBy('job_applied.applicant_id');
return Datatables::of($applicant)
->filter(function ($query) use ($request){
if ($request->has('name')) {
$query->whereRaw("CONCAT(first_name,' ',last_name) like ?", "%{$request->get('name')}%");
$query->orWhereRaw("CONCAT(last_name,' ',first_name) like ?", ["%{$request->get('name')}%"]);
}
})
->editColumn('full_name', function($applicant){
return $applicant->last_name.', '.$applicant->first_name.' '.$applicant->middle_name;
})
->editColumn('position', function($applicant){
if($applicant->latestJob == null) return '';
else return $applicant->latestJob->job->position;
})
->editColumn('apply_date', function($applicant){
if($applicant->latestJob == null) return '';
else return Carbon::parse($applicant->latestJob->apply_date)->format('M d, Y');
})
->orderColumn('full_name', 'last_name $1, first_name $1, middle_name $1')
->make(true);
}
}