/home/mip/mip/app/Modules/Client/Controllers/Applicants/ApplicantsController.php
<?php
namespace QxCMS\Modules\Client\Controllers\Applicants;
use Auth;
use Excel;
use Session;
use Datatables;
use Carbon\Carbon;
use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;
use QxCMS\Modules\Client\Models\Applicants\JobApplied as JobApplied;
use QxCMS\Modules\Client\Repositories\JobOpening\JobOpeningRepositoryInterface as JobOpening;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;
class ApplicantsController extends Controller
{
protected $job_applied;
protected $job_opening;
protected $auth;
protected $permission;
protected $prefix_name = '';
protected $module_id = 19;
public function __construct(Permission $permission, JobOpening $job_opening, JobApplied $job_applied)
{
$this->job_applied = $job_applied;
$this->job_opening = $job_opening;
$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.index', $data);
}
public function view($hashid)
{
$this->authorize('activated', $this->permissions());
$data['permissions'] = $this->permissions();
$id = decode($hashid);
$data['job'] = $this->job_opening->findById($id);
return view('Client::applicants.view', $data);
}
public function excel($hashid)
{
$id = decode($hashid);
$data['job'] = $this->job_opening->findById($id);
$data['applicants'] = $this->job_applied->select(['job_applied.*', 'applicants.first_name', 'applicants.middle_name', 'applicants.last_name', 'applicants.mobile_number'])
->where('job_id', $id)->with('applicant')
->join('applicants', 'applicants.id', '=', 'job_applied.applicant_id')
->orderBy('applicants.last_name', 'asc')->get();
$data['type'] = 'Applicant Lists';
Excel::create('Applicant Lists', function($excel) use ($data){
$excel->setTitle('Applicant Lists');
$excel->sheet('sheet1', function($sheet) use ($data) {
$sheet->loadView('Client::applicants.includes.applicant-lists-table', $data);
});
})->export('xlsx');
}
public function getApplicantsData()
{
$dateToday = Carbon::now()->toDateString();
$job = $this->job_opening->where('status', 'Open')
->where('opening_date', '<=', $dateToday)
->where('closing_date', '>=', $dateToday)
->withCount('applicants');
return Datatables::of($job)
->filterColumn('opening_date', function($query, $keyword) {
$query->whereRaw("DATE_FORMAT(opening_date,'%b %d, %Y') like ?", ["%$keyword%"]);
})
->filterColumn('closing_date', function($query, $keyword) {
$query->whereRaw("DATE_FORMAT(closing_date,'%b %d, %Y') like ?", ["%$keyword%"]);
})
->editColumn('opening_date', function($job){
return Carbon::parse($job->opening_date)->format('M d, Y');
})
->editColumn('closing_date', function($job){
return Carbon::parse($job->closing_date)->format('M d, Y');
})
->editColumn('applicants_count', function($job){
if($job->applicants_count != 0){
return '<a href="'.route($this->prefix_name.'.applicants.view', $job->hashid).'" data-toggle="tooltip" data-placement="top" title="No. Applied" target="_blank">'.$job->applicants_count.'</a>';
}else{
return $job->applicants_count;
}
})
->make(true);
}
public function getApplicantListData($hashid)
{
$id = decode($hashid);
$applicant = $this->job_applied->select(['job_applied.*', 'applicants.first_name', 'applicants.middle_name', 'applicants.last_name', 'applicants.mobile_number'])->where('job_id', $id)->with('applicant')
->join('applicants', 'applicants.id', '=', 'job_applied.applicant_id');
return Datatables::of($applicant)
->editColumn('full_name', function($applicant){
return $applicant->applicant->last_name.', '.$applicant->applicant->first_name.' '.$applicant->applicant->middle_name;
})
->editColumn('apply_date', function($applicant){
return Carbon::parse($applicant->apply_date)->format('M d, Y');
})
->orderColumn('full_name', 'applicants.last_name $1, applicants.first_name $1, applicants.middle_name $1')
->make(true);
}
}