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