Edit File: ProductController.php
<?php namespace App\Http\Controllers\Admin; use App\Models\Order; use App\Models\ProductAdditive; use App\Models\ProductAdditiveCategory; use App\Traits\Report; use App\Models\Feature; use App\Models\Product; use App\Models\ProductGroup; use App\Traits\Uploadable; use Illuminate\Http\Request; use App\Models\Productfeature; use App\Models\StoreMenuCategory; use App\Models\Store; use App\Http\Controllers\Controller; use App\Models\Productfeatureproperity; use App\Http\Requests\Admin\Product\Store as Storeproduct; class ProductController extends Controller { use Uploadable; /*************************** get all **************************/ public function index($id) { $rows = Product::where(['store_id' => $id])->orderBy('created_at' , 'desc')->get(); return view('admin.products.index', compact('rows' , 'id')); } /*************************** create product page **************************/ public function create($id) { $additives = ProductAdditiveCategory::where('store_id', $id)->orderBy('created_at' , 'desc')->get(); $menus = StoreMenuCategory::where('store_id',$id)->get(); return view('admin.products.create' , compact('id' , 'menus' , 'additives')); } /*************************** create product page **************************/ /*************************** store product function **************************/ public function store(Storeproduct $request , $id) { $product = Product::create($request->only(['store_menu_category_id' , 'type' , 'image' ]) + ([ 'name' => [ 'ar' => $request->name_ar , 'en' => $request->name_en ] , 'desc' => [ 'ar' => $request->desc_ar , 'en' => $request->desc_en ] , 'store_id' => $id, ])); ProductGroup::create($request->only(['price' , 'discount' ]) + [ 'product_id' => $product->id , ]); if($request['additives']){ foreach ( $request['additives'] as $addition) { ProductAdditive::create([ 'product_id' => $product->id, 'product_additive_category_id' => $addition ]); } } $store=Store::find($id); $store->updateCacheWithProducts(); Report::addToLog(' اضافة منتج') ; if( $product->type=='multiple' ){ return response(['message' => awtTrans('تم اضافة المنتج بنجاح . من فضلك قم باضافة السمات') , 'url' => route('admin.stores.products.features' , ['id' => $product->id])]) ; }else{ return response(['message' => awtTrans('تم اضافة المنتج بنجاح') , 'url' => route('admin.stores.products' , ['id' => $id])]) ; } } /*************************** store product function **************************/ /*************************** edit product page **************************/ public function edit($id) { $row = Product::findOrFail($id); $menus = StoreMenuCategory::where('store_id', $row->store_id)->get(); $additives = ProductAdditiveCategory::where('store_id', $id)->orderBy('created_at' , 'desc')->get(); $product_addtivies = ProductAdditive::where('product_id', $row->id)->pluck('product_additive_category_id')->toArray(); return view('admin.products.edit' , ['row' => $row , 'menus' => $menus , 'additives' => $additives , 'product_addtivies' => $product_addtivies]); } /*************************** edit product page **************************/ /*************************** update product **************************/ public function update(Storeproduct $request, $id) { $row = product::findOrFail($id) ; $row->update($request->only(['store_menu_category_id' , 'type' ,'available' , 'image']) + ([ 'name' => [ 'ar' => $request->name_ar , 'en' => $request->name_en ] , 'desc' => [ 'ar' => $request->desc_ar , 'en' => $request->desc_en ] , ])); $row->groupOne()->update($request->only(['price' , 'discount' ])); if($request['additives']){ ProductAdditive::where('product_id', $row->id)->delete(); foreach ( $request['additives'] as $addition) { ProductAdditive::create([ 'product_id' => $row->id, 'product_additive_category_id' => $addition ]); } } Report::addToLog(' تعديل منتج') ; $store=Store::find($row->store_id); $store->updateCacheWithProducts(); if( $row->type =='multiple' ){ return response([ 'message' => awtTrans('تم تعديل المنتج بنجاح . من فضلك قم باضافة السمات') , 'url' => route('admin.stores.products.features' , ['id' => $row->id])]) ; }else{ return response([ 'message' => awtTrans('تم تعديل المنتج بنجاح') , 'url' => route('admin.stores.products' , ['id' => $row->store_id])]) ; } } /*************************** update product **************************/ /*************************** delete product **************************/ public function destroy($id) { Report::addToLog(' حذف منتج') ; $row = Product::findOrFail($id); if(Order::whereHas('orderproducts', function ($query) use ($row) {$query->where('product_id', $row->id);})->where('status' , '!=' , 'finished')->exists()) { return response()->json(['key' => 'fail' , 'msg' => awtTrans('لا يمكن حذف هذا المنتج')]); } $row->delete(); $store=Store::find($row->store_id); $store->updateCacheWithProducts(); return response()->json(['id' =>$id]); } /*************************** delete product **************************/ /*************************** delete all products **************************/ public function destroyAll(Request $request) { $requestIds = json_decode($request->data); foreach ($requestIds as $id) { $ids[] = $id->id; } if ($products=Product::WhereIn('id',$ids)->get()) { $row=$products->first(); $store=Store::find($row->store_id); $products->map->delete(); $store->updateCacheWithProducts(); Report::addToLog(' حذف العديد من المنتجات') ; return response()->json('success'); } else { return response()->json('failed'); } } /*************************** delete all products **************************/ /*************************** show product **************************/ public function show($id) { $row = Product::findOrFail($id); return view('admin.products.show' , ['row' => $row]); } /*************************** show product **************************/ /*************************** store feature page **************************/ public function addFeatures($id) { $product = Product::with('productfeatures')->findOrFail($id); $features = Feature::all(); return view('admin.products.features',compact('product','features')); } /*************************** store feature page **************************/ /*************************** update and create feature function **************************/ public function featureUpdate(Request $request , $id) { $product = Product::findOrFail($id); $product->productfeatures()->delete() ; if(empty($request->feature_id) || ! $request->feature_id){ return response()->json(['key' => 'fail' , 'msg' => awtTrans('يجب اختيار السمات اولا')]); } if ($request->feature_id) { foreach ($request->feature_id as $feature) { $productfeature = $product->productfeatures()->Create(['feature_id' => $feature]); if ($request->proparties) { foreach ($request->proparties[$feature] as $proparty) { Productfeatureproperity::create(['productfeature_id' => $productfeature->id , 'properity_id' => $proparty ]); } } } } $store=Store::find($product->store_id); $store->updateCacheWithProducts(); return response()->json(['key' => 'success' , 'url' => route('admin.stores.products.groups' , ['id' => $product->id])]); } /*************************** update and create feature function **************************/ /*************************** delete feature function **************************/ public function deleteFeature(Request $request) { $product = Productfeature::find($request->id)->delete(); // $store=Store::find($product->store_id); // $store->updateCacheWithProducts(); return response()->json(); } /*************************** delete feature function **************************/ /*************************** create feature page **************************/ public function addGroups($id) { $product = Product::with('productfeatures')->findOrFail($id); return view('admin.products.groups',compact('product')); } /*************************** create feature page **************************/ /*************************** delete geroup page **************************/ public function deleteGroub(Request $request) { $product = ProductGroup::findOrFail($request->id)->delete(); $store=Store::find($product->store_id); $store->updateCacheWithProducts(); return response()->json(); } /*************************** delete geroup page **************************/ /*************************** update and create group function **************************/ public function updateGroub(Request $request) { if ($request->group_id) { $group = ProductGroup::findOrFail($request->group_id) ; $group->update([ 'properities' => $request->ids , 'price' => $request->price , 'discount' => $request->discount , 'in_stock_qty' => $request->in_stock_qty , ]); }else{ $group = ProductGroup::create([ 'properities' => $request->ids , 'price' => $request->price , 'discount' => $request->discount , 'in_stock_qty' => $request->in_stock_qty , 'product_id' => $request->product_id , ]); } $store=Store::find($group->product->store_id); $store->updateCacheWithProducts(); return response()->json(['group' => $group ]); } /*************************** update and create group function **************************/ }
Back to File Manager