| Current Path : /home/users/unlimited/www/talentorbit.codeskitter.site/app/Http/Controllers/Job/ |
| Current File : /home/users/unlimited/www/talentorbit.codeskitter.site/app/Http/Controllers/Job/JobController.php |
<?php
namespace App\Http\Controllers\Job;
use Auth;
use DB;
use Input;
use Redirect;
use Carbon\Carbon;
use App\Job;
use App\JobApply;
use App\FavouriteJob;
use App\Company;
use App\JobSkill;
use App\JobSkillManager;
use App\Country;
use App\CountryDetail;
use App\State;
use App\City;
use App\CareerLevel;
use App\FunctionalArea;
use App\JobType;
use App\JobShift;
use App\Gender;
use App\Seo;
use App\JobExperience;
use App\DegreeLevel;
use App\ProfileCv;
use App\External_applied;
use App\Helpers\MiscHelper;
use App\Helpers\DataArrayHelper;
use App\Http\Requests;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use DataTables;
use App\Http\Requests\JobFormRequest;
use App\Http\Requests\Front\ApplyJobFormRequest;
use App\Http\Controllers\Controller;
use App\Traits\FetchJobs;
use App\Events\JobApplied;
use Mail;
use App\Mail\JobApplicantStatusMailable;
use App\Models\JobApplication;
use Symfony\Component\HttpFoundation\StreamedResponse;
class JobController extends Controller
{
//use Skills;
use FetchJobs;
private $functionalAreas = '';
private $countries = '';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth', ['except' => ['jobsBySearch', 'jobDetail', 'setStatus','jobApplyExt','postJobApply']]);
$this->functionalAreas = DataArrayHelper::langFunctionalAreasArray();
$this->countries = DataArrayHelper::langCountriesArray();
}
public function jobsBySearch(Request $request)
{
$search = $request->query('search', '');
$job_titles = $request->query('job_title', array());
$company_ids = $request->query('company_id', array());
$industry_ids = $request->query('industry_id', array());
$job_skill_ids = $request->query('job_skill_id', array());
$functional_area_ids = $request->query('functional_area_id', array());
$functionalAreaName = $request->input('functional_area_name');
$country_ids = $request->query('country_id', array());
$state_ids = $request->query('state_id', array());
$city_ids = $request->query('city_id', array());
$is_freelance = $request->query('is_freelance', array());
$career_level_ids = $request->query('career_level_id', array());
$job_type_ids = $request->query('job_type_id', array());
$job_shift_ids = $request->query('job_shift_id', array());
$gender_ids = $request->query('gender_id', array());
$degree_level_ids = $request->query('degree_level_id', array());
$job_experience_ids = $request->query('job_experience_id', array());
$salary_from = $request->query('salary_from', '');
$salary_to = $request->query('salary_to', '');
$salary_currency = $request->query('salary_currency', '');
$is_featured = $request->query('is_featured', 2);
$order_by = $request->query('order_by', 'id');
$limit = 24;
$feature_jobs = Job::where('is_featured', 1)->notExpire()->get();
$jobs = $this->fetchJobs($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, $order_by, $limit);
/* * ************************************************** */
$jobTitlesArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.title');
/* * ************************************************* */
$jobIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.id');
/* * ************************************************** */
$skillIdsArray = $this->fetchSkillIdsArray($jobIdsArray);
/* * ************************************************** */
$countryIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.country_id');
/* * ************************************************** */
$stateIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.state_id');
/* * ************************************************** */
$cityIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.city_id');
/* * ************************************************** */
$companyIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.company_id');
/* * ************************************************** */
$industryIdsArray = $this->fetchIndustryIdsArray($companyIdsArray);
/* * ************************************************** */
/* * ************************************************** */
$functionalAreaIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.functional_area_id');
/* * ************************************************** */
$careerLevelIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.career_level_id');
/* * ************************************************** */
$jobTypeIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.job_type_id');
/* * ************************************************** */
$jobShiftIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.job_shift_id');
/* * ************************************************** */
$genderIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.gender_id');
/* * ************************************************** */
$degreeLevelIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.degree_level_id');
/* * ************************************************** */
$jobExperienceIdsArray = $this->fetchIdsArray($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, 'jobs.job_experience_id');
/* * ************************************************** */
$seoArray = $this->getSEO($functional_area_ids, $country_ids, $state_ids, $city_ids, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids);
/* * ************************************************** */
$currencies = DataArrayHelper::currenciesArray();
/* * ************************************************** */
$seo = Seo::where('seo.page_title', 'like', 'jobs')->first();
return view('job.list')
->with('functionalAreas', $this->functionalAreas)
->with('countries', $this->countries)
->with('currencies', array_unique($currencies))
->with('jobs', $jobs)
->with('jobTitlesArray', $jobTitlesArray)
->with('skillIdsArray', $skillIdsArray)
->with('countryIdsArray', $countryIdsArray)
->with('stateIdsArray', $stateIdsArray)
->with('cityIdsArray', $cityIdsArray)
->with('companyIdsArray', $companyIdsArray)
->with('industryIdsArray', $industryIdsArray)
->with('functionalAreaIdsArray', $functionalAreaIdsArray)
->with('careerLevelIdsArray', $careerLevelIdsArray)
->with('jobTypeIdsArray', $jobTypeIdsArray)
->with('jobShiftIdsArray', $jobShiftIdsArray)
->with('genderIdsArray', $genderIdsArray)
->with('degreeLevelIdsArray', $degreeLevelIdsArray)
->with('jobExperienceIdsArray', $jobExperienceIdsArray)
->with('feature_jobs', $feature_jobs)
->with('seo', $seo);
}
public function jobDetail(Request $request, $job_slug)
{
$job = Job::where('slug', 'like', $job_slug)->firstOrFail();
/* * ************************************************** */
$search = '';
$job_titles = array();
$company_ids = array();
$industry_ids = array();
$job_skill_ids = (array) $job->getJobSkillsArray();
$functional_area_ids = (array) $job->getFunctionalArea('functional_area_id');
$country_ids = (array) $job->getCountry('country_id');
$state_ids = (array) $job->getState('state_id');
$city_ids = (array) $job->getCity('city_id');
$is_freelance = $job->is_freelance;
$career_level_ids = (array) $job->getCareerLevel('career_level_id');
$job_type_ids = (array) $job->getJobType('job_type_id');
$job_shift_ids = (array) $job->getJobShift('job_shift_id');
$gender_ids = (array) $job->getGender('gender_id');
$degree_level_ids = (array) $job->getDegreeLevel('degree_level_id');
$job_experience_ids = (array) $job->getJobExperience('job_experience_id');
$salary_from = 0;
$salary_to = 0;
$salary_currency = '';
$is_featured = 2;
$order_by = 'id';
$limit = 5;
$relatedJobs = $this->fetchJobs($search, $job_titles, $company_ids, $industry_ids, $job_skill_ids, $functional_area_ids, $country_ids, $state_ids, $city_ids, $is_freelance, $career_level_ids, $job_type_ids, $job_shift_ids, $gender_ids, $degree_level_ids, $job_experience_ids, $salary_from, $salary_to, $salary_currency, $is_featured, $order_by, $limit);
/* * ***************************************** */
$seoArray = $this->getSEO((array) $job->functional_area_id, (array) $job->country_id, (array) $job->state_id, (array) $job->city_id, (array) $job->career_level_id, (array) $job->job_type_id, (array) $job->job_shift_id, (array) $job->gender_id, (array) $job->degree_level_id, (array) $job->job_experience_id);
/* * ************************************************** */
$seo = (object) array(
'seo_title' => $job->title,
'seo_description' => $seoArray['description'],
'seo_keywords' => $seoArray['keywords'],
'seo_other' => ''
);
return view('job.detail')
->with('job', $job)
->with('relatedJobs', $relatedJobs)
->with('seo', $seo);
}
public function setStatus(Request $request) {
$applied = json_decode($request->applied, true);
$shortlist = json_decode($request->shortlist, true);
$hired = json_decode($request->hired, true);
$rejected = json_decode($request->rejected, true);
if($applied){
JobApply::whereIn('id', $applied)->update(['status' => 'applied']);
}
if($shortlist){
JobApply::whereIn('id', $shortlist)->update(['status' => 'shortlist']);
$updatedJobApplies = JobApply::whereIn('id', $shortlist)->first();
$job = Job::where('id', $updatedJobApplies->job_id)->first();
Mail::send(new JobApplicantStatusMailable($job,$updatedJobApplies,'Short List'));
}
if($hired){
$jobbb = JobApply::whereIn('id', $hired)->update(['status' => 'hired']);
$updatedJobApplies = JobApply::whereIn('id', $hired)->first();
$job = Job::where('id', $updatedJobApplies->job_id)->first();
Mail::send(new JobApplicantStatusMailable($job,$updatedJobApplies,'Approved'));
}
if($rejected){
JobApply::whereIn('id', $rejected)->update(['status' => 'rejected']);
$updatedJobApplies = JobApply::whereIn('id', $rejected)->first();
$job = Job::where('id', $updatedJobApplies->job_id)->first();
Mail::send(new JobApplicantStatusMailable($job,$updatedJobApplies,'Declined'));
}
}
/* * ************************************************** */
public function addToFavouriteJob(Request $request, $job_slug)
{
$data['job_slug'] = $job_slug;
$data['user_id'] = Auth::user()->id;
$data_save = FavouriteJob::create($data);
flash(__('Job has been added in favorites list'))->success();
return \Redirect::route('job.detail', $job_slug);
}
public function removeFromFavouriteJob(Request $request, $job_slug)
{
$user_id = Auth::user()->id;
FavouriteJob::where('job_slug', 'like', $job_slug)->where('user_id', $user_id)->delete();
flash(__('Job has been removed from favorites list'))->success();
return \Redirect::route('job.detail', $job_slug);
}
public function jobApplyExt(Request $request, $job_slug)
{
$user = Auth::user();
$job = Job::where('slug', 'like', $job_slug)->first();
return view('job.job_apply_form')
->with('job_slug', $job_slug)
->with('job', $job);
}
public function postJobApply(Request $request, $job_slug)
{
$job = Job::where('slug', 'like', $job_slug)->first();
$jobApply = new External_applied();
$jobApply->job_id = $job->id;
$jobApply->name = $request->name;
$jobApply->email = $request->email;
$jobApply->phone = $request->phone;
$resume = $request->file('cv');
// Generate a unique name for the file
$fileName = $request->name.time() . '_' . $resume->getClientOriginalName();
// Move the file to the public/cvs folder
$resume->move(public_path('unprocessed'), $fileName);
$jobApply->cv = $fileName;
$jobApply->save();
flash(__('You have successfully applied for this job'))->success();
$url = $job->application_url; // The URL you want to redirect to
// Check if the URL has a valid protocol prefix
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
// If not, add the default HTTP prefix
$url = "http://" . $url;
}
$request->session()->flash('message.url', $url);
return redirect()->back();
}
public function applyJob(Request $request, $job_slug)
{
$user = Auth::user();
$job = Job::where('slug', 'like', $job_slug)->first();
if ((bool)$user->is_active === false) {
flash(__('Your account is inactive contact site admin to activate it'))->error();
return \Redirect::route('job.detail', $job_slug);
exit;
}
if ((bool) config('jobseeker.is_jobseeker_package_active')) {
if (
($user->jobs_quota <= $user->availed_jobs_quota) ||
($user->package_end_date->lt(Carbon::now()))
) {
flash(__('Please subscribe to package first'))->error();
return \Redirect::route('home');
exit;
}
}
if ($user->isAppliedOnJob($job->id)) {
flash(__('You have already applied for this job'))->success();
return \Redirect::route('job.detail', $job_slug);
exit;
}
$myCvs = ProfileCv::where('user_id', '=', $user->id)->pluck('title', 'id')->toArray();
return view('job.apply_job_form')
->with('job_slug', $job_slug)
->with('job', $job)
->with('myCvs', $myCvs);
}
public function postApplyJob(ApplyJobFormRequest $request, $job_slug)
{
$user = Auth::user();
$user_id = $user->id;
$job = Job::where('slug', 'like', $job_slug)->first();
$jobApply = new JobApply();
$jobApply->user_id = $user_id;
$jobApply->job_id = $job->id;
$jobApply->cv_id = $request->post('cv_id');
$jobApply->current_salary = $request->post('current_salary');
$jobApply->expected_salary = $request->post('expected_salary');
$jobApply->salary_currency = $request->post('salary_currency');
$jobApply->save();
/* * ******************************* */
if ((bool) config('jobseeker.is_jobseeker_package_active')) {
$user->availed_jobs_quota = $user->availed_jobs_quota + 1;
$user->update();
}
/* * ******************************* */
$myCv = ProfileCv::findorFail($request->post('cv_id'));
if($job->external_job =='yes'){
$url = $job->job_link; // The URL you want to redirect to
// Check if the URL has a valid protocol prefix
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
// If not, add the default HTTP prefix
$url = "http://" . $url;
$request->session()->flash('message.url', $url);
}
return redirect()->away($url)->withHeaders(['target' => '_blank']);
}
event(new JobApplied($job, $jobApply,$myCv));
flash(__('You have successfully applied for this job'))->success();
return \Redirect::route('job.detail', $job_slug);
}
public function myJobApplications(Request $request)
{
$myAppliedJobIds = Auth::user()->getAppliedJobIdsArray();
$jobs = Job::whereIn('id', $myAppliedJobIds)->paginate(10);
return view('job.my_applied_jobs')
->with('jobs', $jobs);
}
public function myFavouriteJobs(Request $request)
{
$myFavouriteJobSlugs = Auth::user()->getFavouriteJobSlugsArray();
$jobs = Job::whereIn('slug', $myFavouriteJobSlugs)->paginate(10);
return view('job.my_favourite_jobs')
->with('jobs', $jobs);
}
public function downloadAppliedUsersCsv($jobId)
{
if (!Auth::guard('company')->check()) {
return redirect()->route('employer.login'); // Make sure this is the correct login route
}
$employer = Auth::guard('company')->user();
$job = Job::findOrFail($jobId);
$jobApplications = $job->jobApplications()->with('user')->get();
$csvContent = "Name,Location,Expected Salary,Experience,Career Level,Phone\n";
foreach ($jobApplications as $jobApplication) {
$user = $jobApplication->user;
if ($user) {
$csvContent .= "\"{$user->getName()}\",\"{$user->getLocation()}\",\"{$jobApplication->expected_salary} {$jobApplication->salary_currency}\",\"{$user->getJobExperience('job_experience')}\",\"{$user->getCareerLevel('career_level')}\",\"{$user->phone}\"\n";
}
}
$filename = "applied_users_{$job->title}.csv";
return response()->streamDownload(function () use ($csvContent) {
echo $csvContent;
}, $filename, ['Content-Type' => 'text/csv']);
}
public function downloadCsv(Request $request, $jobId)
{
$job = Job::findOrFail($jobId);
$jobApplications = JobApplication::where('job_id', $jobId)->get();
$csvFileName = "applied_users_{$job->title}.csv";
$response = new StreamedResponse(function () use ($jobApplications) {
$handle = fopen('php://output', 'w');
// Add CSV headers
fputcsv($handle, ['Name', 'Location', 'Expected Salary', 'Experience', 'Career Level', 'Phone']);
// Add data
foreach ($jobApplications as $jobApplication) {
$user = $jobApplication->getUser();
if ($user) {
fputcsv($handle, [
$user->getName(),
$user->getLocation(),
$jobApplication->expected_salary . ' ' . $jobApplication->salary_currency,
$user->getJobExperience('job_experience'),
$user->getCareerLevel('career_level'),
$user->phone
]);
}
}
fclose($handle);
});
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', "attachment; filename={$csvFileName}");
return $response;
}
}