File "OfficeSuppliesApiController.php"

Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Api/V1/Admin/OfficeSuppliesApiController.php
File size: 5.79 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Api\V1\Admin;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\MediaUploadingTrait;
use App\Http\Requests\Admin\StoreOfficeSupplyRequest;
use App\Http\Requests\Admin\StoreProductRequest;
use App\Http\Requests\Admin\UpdateOfficeSupplyRequest;
use App\Http\Requests\Admin\UpdateProductRequest;
use App\Http\Resources\Admin\OfficeSuppliesInfoResource;
use App\Http\Resources\Admin\OfficeSuppliesResource;
use App\Http\Resources\Admin\ProductDetailsResource;
use App\Http\Resources\Admin\ProductResource;
use App\Http\Resources\Admin\ProductResourceWithAttributes;
use App\Http\Resources\Admin\ProductSimple;
use App\Models\OfficeSupplies;
use App\Models\Product;
use App\Models\ProductPrice;
use App\Models\ProductVariation;
use App\Models\ProductVariationCombination;
use App\Models\ProductVariationRange;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\Response;

class OfficeSuppliesApiController extends Controller
{
    use MediaUploadingTrait;

    public function index(Request $request)
    {
        abort_if(Gate::denies('office_supplies_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        OfficeSuppliesResource::withoutWrapping();
        $officeSupplies = OfficeSupplies::with([
            'vendor',
        ])->orderBy('created_at', 'DESC');

        if($request->has('search') && !empty($request->search)) {
            $officeSupplies = $officeSupplies->where('name', 'LIKE', '%'.$request->search.'%')->orWhere('sku', 'LIKE', '%'.$request->search.'%')->orWhere('description', 'LIKE', '%'.$request->search.'%');
        }
        $office_supplies = $officeSupplies->paginate(10);

        return OfficeSuppliesResource::collection($office_supplies);
    }

    public function getActiveOfficeSupplies(Request $request)
    {
        abort_if(Gate::denies('office_supplies_create'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        OfficeSuppliesResource::withoutWrapping();
        $office_supplies = OfficeSupplies::active()
            ->with([
            'vendor',
        ])->orderBy('name', 'DESC')->get();

        return OfficeSuppliesResource::collection($office_supplies);
    }

    public function store(StoreOfficeSupplyRequest $request)
    {
        DB::beginTransaction();
        try {
            $office_supply = OfficeSupplies::create([
                'vendor_id'     => $request['vendor_id'],
                'name'          => $request['name'],
                'sku'           => $request['sku'],
                'description'   => $request['description'],
                'price'         => $request['price'],
                'status'        => $request['status'],
            ]);

            if ($request->hasFile('featured_image')) {
                $office_supply->addMediaFromRequest('featured_image')
                    ->toMediaCollection('featured_image', 'office_supplies')->save();
            }

            DB::commit();

            return (new OfficeSuppliesResource($office_supply))
                ->response()
                ->setStatusCode(Response::HTTP_CREATED);

        } catch (\Exception $e){
            \Log::channel('db_errors')->info('Office Supplies Create Error');
            \Log::channel('db_errors')->info($e->getMessage());
            return response()
                ->json([
                    'message' => "Can not create office supply.",
                    'errors' => ["error" => ["Unable to create office supply."]]
                ], Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }

    public function show(OfficeSupplies $office_supply)
    {
        abort_if(Gate::denies('office_supplies_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        return new OfficeSuppliesResource($office_supply);
    }

    public function update(UpdateOfficeSupplyRequest $request, OfficeSupplies $office_supply)
    {
        DB::beginTransaction();
        try {

            $office_supply->update([
                'vendor_id'     => $request['vendor_id'],
                'name'          => $request['name'],
                'sku'           => $request['sku'],
                'description'   => $request['description'],
                'price'         => $request['price'],
                'status'        => $request['status'],
            ]);

            if ($request->hasFile('featured_image')) {
                if (!empty($office_supply->featured_image)) {
                    $office_supply->clearMediaCollection('featured_image');
                }
                $office_supply->addMediaFromRequest('featured_image')
                    ->toMediaCollection('featured_image', 'office_supplies');
                $office_supply->save();
            }

            $office_supply->save();

            DB::commit();

            return (new OfficeSuppliesResource($office_supply))
                ->response()
                ->setStatusCode(Response::HTTP_CREATED);

        }catch (\Exception $e){
            \Log::channel('db_errors')->info('Office Supplies Update Error');
            \Log::channel('db_errors')->info($e->getMessage());
            DB::rollBack();
            return response()
                ->json([
                    'message' => "Can not update office supply.",
                    'errors' => ["error" => ["Unable to update office supply."]]
                ], Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }

    public function toggleStatus(OfficeSupplies $office_supply)
    {
        abort_if(Gate::denies('product_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');
        $office_supply->status = !$office_supply->status;
        $office_supply->save();

        return response()
            ->json(['message' => 'Office supply status updated successfully'], Response::HTTP_OK);
    }
}