%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/workeasy-api/app/Http/Controllers/Api/
Upload File :
Create Path :
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.');
        }

    }
}

Zerion Mini Shell 1.0