mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-09-29 12:13:06 -04:00
138 lines
4.4 KiB
PHP
138 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace Modules\WTIJobBoard\Repositories;
|
|
|
|
use Modules\WTIJobBoard\Entities\JobRequest;
|
|
use Modules\WTIJobBoard\Entities\JobRequestApplication;
|
|
use Modules\WTIJobBoard\Entities\JobRequestApplicationAddress;
|
|
use Modules\WTIJobBoard\Entities\JobRequestStatus;
|
|
use Modules\WTIJobBoard\Entities\JobRequestTrack;
|
|
use Modules\WTIJobBoard\Entities\JobRequestSetting;
|
|
use App\Traits\SendMail;
|
|
|
|
class JobRequestApplicationsRepository
|
|
{
|
|
use SendMail;
|
|
|
|
public function store($data)
|
|
{
|
|
$user = auth()->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
|
|
];
|
|
}
|
|
}
|