checkPermission('job_manage'); $job_query = Job::query()->with(['location', 'category', 'company'])->orderBy('id', 'desc'); $title = $request->query('s'); $cate = $request->query('category_id'); $company_id = $request->query('company_id'); if ($cate) { $job_query->where('category_id', $cate); } if($company_id){ $job_query->where('company_id', $company_id); } if ($title) { $job_query->where('title', 'LIKE', '%' . $title . '%'); $job_query->orderBy('title', 'asc'); } if(!is_admin()){ $company_id = Auth::user()->company->id ?? ''; $job_query->where('company_id', $company_id); } $data = [ 'rows' => $job_query->paginate(20), "locale"=>\App::getLocale() ]; return view('jobportaljob::admin.job.index', $data); } public function create(Request $request) { $this->checkPermission('job_manage'); $row = new Job(); $row->fill([ 'status' => 'publish', ]); $asins = []; if(isModuleActive('StudioPlusWtiiabaddon')){ $asins = \Modules\StudioPlusWtiiabaddon\Entities\StudioPlusAsin::orderBy('payout_amount')->get()->pluck('range_amount', 'id'); } $data = [ 'categories' => Category::get()->toTree(), 'job_types' => JobType::query()->where('status', 'publish')->get(), 'job_skills' => Skill::query()->where('status', 'publish')->get(), 'job_location' => Location::where('status', 'publish')->get()->toTree(), 'translation' => new JobTranslation(), 'row' => $row, 'asins' => $asins ]; return view('jobportaljob::admin.job.detail', $data); } public function edit(Request $request, $id) { $this->checkPermission('job_manage'); $row = Job::with('skills')->find($id); $translation = $row->translateOrOrigin($request->query('lang')); $company_id = Auth::user()->company->id ?? ''; if (empty($row)) { return redirect(route('job.admin.index')); }elseif(!is_admin() && $company_id != $row->company_id){ return redirect(route('job.admin.index')); } $asins = []; if(isModuleActive('StudioPlusWtiiabaddon')){ $asins = \Modules\StudioPlusWtiiabaddon\Entities\StudioPlusAsin::orderBy('payout_amount')->get()->pluck('range_amount', 'id'); } $data = [ 'row' => $row, 'translation' => $translation, 'categories' => Category::query()->where('status', 'publish')->get()->toTree(), 'job_location' => Location::query()->where('status', 'publish')->get()->toTree(), 'job_types' => JobType::query()->where('status', 'publish')->get(), 'job_skills' => Skill::query()->where('status', 'publish')->get(), 'enable_multi_lang'=>true, 'page_title'=>__("Edit job: :name",['name'=>$row->title]), 'asins' => $asins ]; return view('jobportaljob::admin.job.detail', $data); } public function store(Request $request, $id){ $this->checkPermission('job_manage'); if(!empty($request->input('salary_max')) && (int)$request->input('salary_max') > 0 && !empty($request->input('salary_min')) && (int)$request->input('salary_min') > 0) { $check = Validator::make($request->input(), [ 'salary_max' => 'required|gt:salary_min' ]); if (!$check->validated()) { return back()->withInput($request->input()); } } if(!is_admin() and !auth()->user()->checkJobPlan()){ return redirect(route('user.plan')); } if($id>0){ $row = Job::find($id); if (empty($row)) { return redirect(route('job.admin.index')); } }else{ $row = new Job(); $row->status = "publish"; } $input = $request->input(); $attr = [ 'title', 'content', 'category_id', 'thumbnail_id', 'location_id', 'company_id', 'job_type_id', 'expiration_date', 'hours', 'hours_type', // 'salary_min', // 'salary_max', // 'salary_type', 'gender', // 'map_lat', // 'map_lng', // 'map_zoom', // 'experience', 'is_featured', 'is_urgent', 'status', 'create_user', 'apply_type', 'apply_link', 'apply_email', 'wage_agreement', 'gallery', 'video', 'video_cover_id', 'number_recruitments', 'is_approved', 'project_asin', 'asin_id' ]; if (!empty($input['wage_agreement'])){ $input['salary_min'] = 0; $input['salary_max'] = 0; } $row->fillByAttr($attr, $input); if($request->input('slug')){ $row->slug = $request->input('slug'); } if(empty($request->input('create_user'))){ $row->create_user = Auth::id(); } if(empty($request->input('company_id')) && !is_admin()){ $user = User::with('company')->find(Auth::id()); if(!empty($user->company)){ $row->company_id = $user->company->id; } } $res = $row->saveOriginOrTranslation($request->query('lang'),true); $row->skills()->sync($request->input('job_skills') ?? []); if ($res) { if($id > 0 ){ return back()->with('success', __('Job updated') ); }else{ return redirect(route('job.admin.edit',$row->id))->with('success', __('Job created') ); } } } public function bulkEdit(Request $request) { if(!is_admin() and !auth()->user()->checkJobPlan()){ return redirect(route('user.plan')); } $this->checkPermission('job_manage'); $ids = $request->input('ids'); $action = $request->input('action'); if (empty($ids) or !is_array($ids)) { return redirect()->back()->with('error', __('No items selected!')); } if (empty($action)) { return redirect()->back()->with('error', __('Please select an action!')); } if ($action == "delete") { foreach ($ids as $id) { $query = Job::where("id", $id); if (!$this->checkPermission('job_manage_others')) { $company_id = Auth::user()->company->id ?? ''; $query->where('company_id', $company_id); $this->checkPermission('job_manage'); } $query->first(); if(!empty($query)){ $query->delete(); } } } else { foreach ($ids as $id) { $query = Job::where("id", $id); if (!$this->checkPermission('job_manage_others')) { $company_id = Auth::user()->company->id ?? ''; $query->where('company_id', $company_id); $this->checkPermission('job_manage'); } $query->update(['status' => $action]); } } return redirect()->back()->with('success', __('Update success!')); } public function allApplicants(Request $request){ //$this->setActiveMenu('admin/module/job/all-applicants'); $candidate_id = $request->query('candidate_id'); $rows = JobCandidate::with(['jobInfo', 'candidateInfo', 'cvInfo', 'company', 'company.getAuthor']) ->whereHas('jobInfo', function ($q) use($request){ $job_id = $request->query('job_id'); $company_id = $request->query('company_id'); if (!$this->checkPermission('job_manage_others')) { $company_id = Auth::user()->company->id ?? ''; $q->where('company_id', $company_id); } if( $company_id && $this->checkPermission('job_manage_others')){ $q->where('company_id', $company_id); } if($job_id){ $q->where("id", $job_id); } }); if( $candidate_id && $this->hasPermission('job_manage_others')){ $rows->where('candidate_id', $candidate_id); } $rows->where('status','!=','delete'); $rows = $rows->orderBy('id', 'desc') ->paginate(20); $data = [ 'rows' => $rows ]; return view('jobportaljob::admin.job.all-applicants', $data); } public function applicantsChangeStatus($status, $id){ $this->checkPermission('job_manage'); $row = JobCandidate::with('jobInfo', 'jobInfo.user', 'candidateInfo', 'company', 'company.getAuthor') ->where('id', $id); // if (!$this->hasPermission('job_manage_others')) { // $row = $row->whereHas('jobInfo', function ($q){ // $company_id = Auth::user()->company->id ?? ''; // $q->where('company_id', $company_id); // }); // }; $row = $row->first(); if (empty($row)){ return redirect()->back()->with('error', __('Item not found!')); } $old_status = $row->status; if($status != 'approved' && $status != 'rejected'){ return redirect()->back()->with('error', __('Status unavailable')); } $row->status = $status; $row->save(); //Send Notify and email if($old_status != $status) { event(new EmployerChangeApplicantsStatus($row)); } return redirect()->back()->with('success', __('Update success!')); } public function applicantsBulkEdit(Request $request){ $this->checkPermission('job_manage'); $ids = $request->input('ids'); $action = $request->input('action'); if (empty($ids) or !is_array($ids)) { return redirect()->back()->with('error', __('No items selected!')); } if (empty($action)) { return redirect()->back()->with('error', __('Please select an action!')); } foreach ($ids as $id) { $query = JobCandidate::with('jobInfo', 'jobInfo.user', 'candidateInfo', 'company', 'company.getAuthor')->where('id', $id); // if (!$this->hasPermission('job_manage_others')) { // $query = $query->whereHas('jobInfo', function ($q){ // $company_id = Auth::user()->company->id ?? ''; // $q->where('company_id', $company_id); // }); // } $query = $query->first(); $old_status = $query->status; $query->status = $action; $query->save(); //Send Notify and Email if($old_status != $action) { event(new EmployerChangeApplicantsStatus($query)); } } return redirect()->back()->with('success', __('Update success!')); } public function applicantsExport(){ return (new ApplicantsExport())->download('applicants-' . date('M-d-Y') . '.xlsx'); } public function getForSelect2(Request $request) { $pre_selected = $request->query('pre_selected'); $selected = $request->query('selected'); $expiration_date = $request->query('expiration_date',''); if($pre_selected && $selected){ if(is_array($selected)) { $imploded_strings = implode("','", $selected); $query = Job::query()->select('id', DB::raw('title as text')); $items = $query->whereIn('jp_jobs.id', $selected)->take(50)->orderByRaw(DB::raw("FIELD(id, '$imploded_strings')"))->get(); return response()->json([ 'items'=>$items ]); } $item = Job::find($selected); if(empty($item)){ return response()->json([ 'text'=>'' ]); }else{ return response()->json([ 'text'=>$item->name ]); } } $q = $request->query('q'); $query = Job::select('id', 'title as text')->where("status","publish"); if ($q) { $query->where('title', 'like', '%' . $q . '%'); } if(!is_admin()){ $company_id = Auth::user()->company->id ?? ''; $query->where('company_id', $company_id); } if(!empty($expiration_date)) { $query->where('expiration_date', '>=', date('Y-m-d H:s:i')); } $res = $query->orderBy('id', 'desc')->limit(20)->get(); return response()->json([ 'results' => $res ]); } public function applicantsCreate() { $this->checkPermission('job_manage'); $row = new JobCandidate(); $row->fill([ 'status' => 'publish', ]); $data = [ 'row' => $row, 'breadcrumbs' => [ [ 'name' => __('All Applicants'), 'url' => 'admin/module/job/all-applicants' ], [ 'name' => __('Add Applicant'), 'class' => 'active' ], ], 'translation' => new JobTranslation() ]; return view('jobportaljob::admin.job.detail-applicant', $data); } public function applicantsStore(Request $request) { $user = Auth::user(); $candidate_id = $request->input('candidate_id'); $status = $request->input('status'); // $apply_cv_id = $request->input('apply_cv_id'); $message = $request->input('content'); $job_id = $request->input('job_id'); $company_id = ($user->company) ? $user->company->id : ''; if(empty($candidate_id)){ return redirect()->back()->with('error', __('Choose a candidate')); } // if(empty($apply_cv_id)){ // return redirect()->back()->with('error', __('Choose a cv')); // } if(empty($job_id)){ return redirect()->back()->with('error', __('Choose a job')); } $row = JobCandidate::query() ->where('job_id', $job_id) ->where('candidate_id', $candidate_id) ->first(); if ($row){ return redirect()->back()->with('error', __('You have applied this job already')); } $row = new JobCandidate(); $row->job_id = $job_id; $row->candidate_id = $candidate_id; // $row->cv_id = $apply_cv_id; $row->message = !empty($message) ? $message : ''; $row->status = $status; $row->company_id = $company_id; $row->save(); $row->load('jobInfo', 'jobInfo.user', 'candidateInfo', 'company', 'company.getAuthor'); return redirect()->back()->with('success', __('Apply successfully!')); } public function applicantsGetCv(Request $request) { $id = $request->query('id'); $cvs = CandidateCvs::query()->where('origin_id', $id)->with('media')->get(); return $this->sendSuccess(['cv'=>$cvs],'success'); } }