%PDF- %PDF-
Direktori : /var/www/html/workeasy-api/app/Http/Controllers/Api/ |
Current File : /var/www/html/workeasy-api/app/Http/Controllers/Api/CompanyOffersController.php |
<?php namespace Workeasy\Http\Controllers\Api; use EllipseSynergie\ApiResponse\Contracts\Response; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Workeasy\Http\Requests\Offers\OfferStoreRequest; use Workeasy\Http\Requests\Offers\OfferUpdateRequest; use Workeasy\Http\Requests\Users\ChangeImageRequest; use Workeasy\Models\Company; use Workeasy\Models\ContractType; use Workeasy\Models\JobPosition; use Workeasy\Models\Offer; use Workeasy\Transformers\OfferTransformer; class CompanyOffersController extends ApiController { private $transformer; const MEDIA_COLLECTION = 'offers'; const MEDIA_DISK = 'offers'; public function __construct(Response $response, OfferTransformer $transformer) { parent::__construct($response); $this->transformer = $transformer; } public function index(Request $request) { $company = $this->getUserCompany(); return $this->response->withCollection($company->offers, $this->transformer); } public function show($offer) { /** @var Company $company */ $company = $this->getUserCompany(); $offer = $company->offers()->findOrFail($offer); return $this->response->withItem($offer, $this->transformer); } public function store(OfferStoreRequest $request) { DB::beginTransaction(); try { /** @var Company $company */ $company = $this->getUserCompany(); $contract = ContractType::query()->findOrFail($request->contract_id); $job = JobPosition::query()->findOrFail($request->job_id); /** @var Offer $offer */ $offer = Offer::query() ->make($request->only('name', 'start_date', 'end_date', 'contract_id', 'description')); $offer->company()->associate($company); $offer->contractType()->associate($contract); $offer->jobPosition()->associate($job); if ($request->get('media')) { $offer->updateOfferImage($request->get('media')); } // else { // $media = $job->media()->get(); // $media_path = $media[0]->getPath(); // $offer->addMedia($media[0]->getPath())->toMediaCollection(self::MEDIA_COLLECTION, self::MEDIA_DISK); // } $offer->save(); DB::commit(); return $this->response->withItem($offer, $this->transformer); } catch (\Exception $exception) { DB::rollback(); return $this->response->errorInternalError($exception->getMessage()); } } public function update(OfferUpdateRequest $request, $offer) { DB::beginTransaction(); try { /** @var Company $company */ $company = $this->getUserCompany(); /** @var Offer $offer */ $contract = ContractType::query()->findOrFail($request->contract_id); $job = JobPosition::query()->findOrFail($request->job_id); $offer = $company->offers()->findOrFail($offer); $offer->company()->associate($company); $offer->contractType()->associate($contract); $offer->jobPosition()->associate($job); $offer->update($request->only('name', 'start_date', 'end_date', 'contract_id', 'description')); DB::commit(); return $this->response->withItem($offer->fresh(), $this->transformer); } catch (\Exception $exception) { DB::rollback(); return $this->response->errorInternalError($exception->getMessage()); } } public function destroy($offer_id) { /** @var Company $company */ $company = $this->getUserCompany(); /** @var Offer $offer */ $offer = $company->offers()->findOrFail($offer_id); if ($offer->candidates()->count() > 0) { return $this->response->errorForbidden('This offer can not be deleted.'); } $offer->delete(); return response()->json([], 204); } public function changeOfferImage(ChangeImageRequest $request, $offer_id) { /** @var Offer $offer */ $offer = Offer::query()->findOrFail($offer_id); $offer->updateOfferImage($request->get('media')); return $this->response->withItem($offer->fresh(), $this->transformer); } public function deleteOfferImage($offer_id) { /** @var Company $company */ $company = $this->getUserCompany(); /** @var Offer $offer */ $offer = $company->offers()->findOrFail($offer_id); $job = $offer->jobPosition()->first(); if($offer->media()->count() > 0){ $media = $offer->media()->first(); $media->delete(); return response()->json([], 204); } elseif ($offer->media()->count() < 1 && $media = $job->media()->count() > 0) { return $this->response->errorForbidden('This image can not be deleted.'); } } }