Files
wticreatorstudio/Modules/WTIJobBoard/Repositories/JobRequestApplicationsRepository.php
T
Leonard Biano 4d427fb6d5 WTIJobBoard Module Update
Settings for client category recipient emails
2024-08-02 00:43:52 +08:00

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
];
}
}