user(); $application = new JobRequestApplication(); $application->fill($data); $application->applicant_id = $user->id; $application->save(); $address = new JobRequestApplicationAddress(); $address->fill($data); $address->application_id = $application->id; $address->save(); return $application; } public function update($data) { $application = JobRequestApplication::find($data['job_request_application_id']); if($application){ $application->fill($data); $application->update(); unset($data['job_request_application_id']); unset($data['job_request_id']); unset($data['cover']); $application->address()->update($data); return $application; } return false; } public function hire($id) { $application = JobRequestApplication::find($id); if ($application) { $application->is_hired = true; $application->update(); $application->request()->update(['job_status' => 'In Progress', 'track_package_status' => 'Creator Selected']); $status_creator_selected = JobRequestStatus::where('name', 'creator-selected')->first(); if ($status_creator_selected) { $track = new JobRequestTrack(); $track->job_request_id = $application->job_request_id; $track->status_id = $status_creator_selected->id; $track->save(); $setting = JobRequestSetting::where('job_request_category_id',$application->request->type)->where('user_id',$application->request->client_id)->whereNotNull('email')->first(); $client = (object)['email' => $setting ? $setting->email : $application->request->client->email, 'first_name' => $application->request->client->first_name]; $this->sendJobRequestUpdate($client, 'Creator Selected', $application->request->asin); } $this->sendJobRequestUpdate($application->creator->email, 'Creator Hired', $application->request->asin); return $application; } return false; } public function terminate($id) { $application = JobRequestApplication::find($id); if ($application) { $application->is_hired = false; $application->update(); $application->request()->update(['job_status' => 'Approved', 'track_package_status' => 'Approved']); $status_creator_selected = JobRequestStatus::where('name', 'creator-selected')->first(); if ($status_creator_selected) { JobRequestTrack::where('job_request_id',$application->job_request_id)->where('status_id',$status_creator_selected->id)->delete(); } return true; } return false; } public function cancel($id) { $application = JobRequestApplication::find($id); if ($application) { $application->address()->delete(); $application->delete(); return true; } return false; } public function creator($id) { $query = JobRequest::query()->with(['client.company', 'category', 'product'])->where('status','publish')->whereNull('deleted_at')->orderByDesc('id'); $applied = $query->clone()->doesntHave('hiredCreator')->whereHas('applications', function($query) use($id) { $query->where('applicant_id',$id); })->get(); $hired = $query->clone()->whereHas('applications', function($query) use($id) { $query->where('applicant_id',$id)->where('is_hired',1); })->get(); return [ 'applied' => $applied, 'hired' => $hired ]; } }