public function removeByAdmin($id) { $user = \User::getUser(); if (!$user->hasAccess('admin')) { throw new \Exception("Not admin.", 1); return; } if (!($job = $this->findById($id))) { throw new \Exception("Job not found", 1); return; } $company = $job->company; if (!is_null($job->agency_id)) { $agency = $job->agency; } $tmpJob = $job; if ($job->delete()) { $notificationData = ['company_id' => $company->id, 'alert_from' => 'System: Programme Chameleon', 'has_read' => false, 'title' => 'Your job "' . $tmpJob->title . '" has been removed by admin', 'url' => null]; $notification = \Company::addNotification($company, $notificationData); if (isset($agency)) { $notificationData = ['agency_id' => $agency->id, 'alert_from' => 'System: Programme Chameleon', 'has_read' => false, 'title' => 'Your job "' . $tmpJob->title . '" has been removed by admin', 'url' => null]; $notification = \Agency::addNotification($agency, $notificationData); } return true; } return false; }
public function applyForJob($contractor, $job) { if (!($company = $job->company)) { throw new \Exception("Company for this job not found.", 1); return; } // not efficient, need to change if (!($contractor = $this->findById($contractor->id))) { throw new \Exception("Contractor not found.", 1); return; } if ($contractor->jobs->contains($job->id)) { throw new \Exception("You have already applied for this job.", 1); return; } $contractor->jobs()->sync([$job->id => ['status' => 'request', 'created_at' => Carbon::now(), 'updated_at' => Carbon::now()]], false); // TODO: Move to background worker $cUser = $contractor->user; $_hash = new Hash(); $_hash = $_hash->getHasher(); $notificationData = ['company_id' => $company->id, 'title' => 'New Job Application', 'alert_from' => $cUser->first_name . ' ' . $cUser->last_name, 'has_read' => false, 'url' => route('company.job.application') . '?i=' . $_hash->encode($job->id)]; $notification = \Company::addNotification($company, $notificationData); if (!is_null($job->agency_id)) { if ($agency = $job->agency) { $notificationData = ['agency_id' => $job->agency_id, 'title' => 'New Job Application', 'alert_from' => $cUser->first_name . ' ' . $cUser->last_name, 'has_read' => false, 'url' => route('agency.job.application') . '?i=' . $_hash->encode($job->id)]; $notification = \Agency::addNotification($agency, $notificationData); } } // END TODO return $contractor; }
public function updateExpense($id, $agency, $status) { if (!($expense = \Contractor::findExpenseById($id))) { throw new \Exception("Expense not found", 1); return; } $job = $expense->job; if ($agency->id !== $job->agency_id) { throw new \Exception("Expense does not belong to the agency.", 1); return; } if ($status) { $expense->auth_agency = true; $expense->save(); if ($contractor = $expense->contractor) { $notificationData = ['contractor_id' => $contractor->id, 'alert_from' => 'System: Programme Chameleon', 'has_read' => false, 'title' => 'Your expense "' . $expense->title . '" for "' . $job->title . '" has been accepted.', 'description' => 'Accepted by ' . $agency->name, 'url' => '#']; \Contractor::addNotification($contractor, $notificationData); } if (!is_null($job->company_id)) { $_hash = new Hash(); $_hash = $_hash->getHasher(); if ($company = \Company::findCompanyById($job->company_id)) { $notificationData = ['company_id' => $company->id, 'alert_from' => 'System: Programme Chameleon', 'has_read' => false, 'title' => 'Expense "' . $expense->title . '" for "' . $job->title . '" has been accepted.', 'description' => 'Accepted by ' . $agency->name, 'url' => route('company.job.detail') . '?i=' . $_hash->encode($job->id)]; \Company::addNotification($company, $notificationData); } } } else { $expense->auth_agency = true; $expense->save(); if ($contractor = $expense->contractor) { $notificationData = ['contractor_id' => $contractor->id, 'alert_from' => 'System: Programme Chameleon', 'has_read' => false, 'title' => 'Your expense "' . $expense->title . '" for "' . $job->title . '" has been de-authorized.', 'description' => 'De-authorize by ' . $agency->name, 'url' => '#']; \Contractor::addNotification($contractor, $notificationData); } if (!is_null($job->company_id)) { if ($company = \Company::findCompanyById($job->company_id)) { $_hash = new Hash(); $_hash = $_hash->getHasher(); $notificationData = ['company_id' => $company->id, 'alert_from' => 'System: Programme Chameleon', 'has_read' => false, 'title' => 'Expense "' . $expense->title . '" for "' . $job->title . '" has been de-authorized.', 'description' => 'De-authorize by ' . $agency->name, 'url' => route('agency.job.detail') . '?i=' . $_hash->encode($job->id)]; \Company::addNotification($company, $notificationData); } } } return $expense; }