Edit File: ProductController.php
<?php namespace App\Http\Controllers\StoresDashboard; use App\Http\Controllers\Controller; use App\Http\Requests\StoreProductRequest; use App\Models\Feature; use App\Models\Product; use App\Models\ProductAdditive; use App\Models\ProductAdditiveCategory; use App\Models\Productfeature; use App\Models\Productfeatureproperity; use App\Models\ProductGroup; use App\Models\Properity; use App\Models\Store; use App\Models\StoreMenuCategory; use App\Traits\ApiTrait; use App\Traits\GeneralTrait; use App\Traits\Uploadable; use Auth; use App\Services\Store\ProductService; use App\Services\Store\MenuService; use Illuminate\Http\Request; use Redirect; use Session; class ProductController extends Controller { use ApiTrait, GeneralTrait, Uploadable; public function get_products(Request $request) { $product_service = new ProductService(); $products = $product_service->getProducts($request->all()); return view('stores_dashboard.products.products', compact( 'products')); } public function get_add_product(Request $request) { $product_service = new MenuService(); $menus = $product_service->get_menus(); return view('stores_dashboard.products.new_product', compact( 'menus')); } public function post_product(StoreProductRequest $request) { $product_service = new ProductService(); $product = $product_service->postProduct($request->validated()); if($product['fail_msg']) { return response()->json([ 'key' => 'fail', 'msg' => $product['fail_msg'], ]); } if ($product->type == 'multiple') { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'ٌproduct is added successfully , add fearutes please!' : 'تم إضافه المنتج بنجاح. من فضلك قم بإضافة السمات'; $url = route('stores_dashboard.add_product_features', ['id' => $product->id]); } else { $msg = trans('dashboard.created_successfully'); $url = route('stores_dashboard.get_products'); } return response()->json([ 'key' => 'success', 'msg' => $msg, 'url' => $url, ]); } public function editProducts(Request $request) { $product_service = new ProductService(); $data = $product_service->editProducts($id=$request['id']); $product = $data['product']; $group = $data['group']; $features = $data['features']; $menus = $data['menus']; return view('stores_dashboard.products.edit', compact('product', 'group', 'features', 'menus')); } public function updateProducts(StoreProductRequest $request) { $product_service = new ProductService(); $product = $product_service->updateProducts($request->validated()); if($product['fail_msg']) { return response()->json([ 'key' => 'fail', 'msg' => $product['fail_msg'], ]); } if ($product->type == 'multiple') { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'ٌproduct is added successfully , add fearutes please!' : 'تم إضافه المنتج بنجاح. من فضلك قم بإضافة السمات'; $url = route('stores_dashboard.add_product_features', ['id' => $product->id]); } else { $msg = trans('dashboard.alerts.updated_successfully'); $url = route('stores_dashboard.get_products'); } $store=Store::find($product->store_id); $store->updateCacheWithProducts(); return response()->json([ 'key' => 'success', 'value' => '1', 'url' => $url, 'msg' => $msg, ]); } public function get_add_product_features($id) { $product_service = new ProductService(); $data = $product_service->getFeatures(); $product = Product::find($id); $features = $data['features']; return view('stores_dashboard.products.add_product_feature', compact('product', 'features')); } public function postProductFeatures(Request $request) { $product_service = new ProductService(); $data = $product_service->postProductFeatures($request->all()); if(isset($data['fail_msg'])) { return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $data['fail_msg'], ]); } $pr = $data['pr']; $feature = $data['feature']; $msg = $data['msg']; return response()->json([ 'key' => 'success', 'value' => '1', 'feature_name' => $feature->name, 'productfeature_id' => $pr->id, 'properities' => $feature->properities, 'msg' => $msg, ]); } public function removeProductFeature(Request $request) { $product_service = new ProductService(); $id = $product_service->removeProductFeature($request->all()); if($id['fail_msg']) { return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $id['fail_msg'], ]); } return response()->json([ 'key' => 'success', 'value' => '1', 'id' => $id, ]); } public function postProductFeatureProperities(Request $request) { $product = Product::find($request['id']); if (!$product) { $msg = 'wrong id.'; return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $msg, ]); } $ids = $request['productfeature_id']; if ($ids) { foreach ($ids as $id) { $pr = Productfeature::find($id); if ($pr) { $pr->productfeatureproperities()->delete(); $properities = 'properities' . $id; if ($request[$properities]) { foreach ($request[$properities] as $p) { $properity = Properity::find($p); if ($p) { $pfr = new Productfeatureproperity(); $pfr->productfeature_id = $id; $pfr->properity_id = $p; $pfr->save(); } } $store=Store::find($pr->product->store_id); $store->updateCacheWithProducts(); } else { $msg = trans('stores_dashboard.add_feature_option'); return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $msg, ]); } } } } else { $msg = trans('stores_dashboard.add_feature_option'); return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $msg, ]); } $msg = trans('stores_dashboard.features_added_successfully'); $url = route('stores_dashboard.addGroups', ['id' => $product->id]); return response()->json([ 'key' => 'success', 'value' => '1', 'msg' => $msg, 'url' => $url, ]); } public function addGroups($id) { $product = Product::find($id); if (!$product || $product->type == 'simple') { return redirect()->route('store.products'); } $groups = []; foreach ($product->groups()->where('properities', '!=', null)->where('status', 'posted')->get() as $group) { $properities = []; foreach (json_decode($group->properities) as $id) { $properity = Properity::find($id); if ($properity) { array_push($properities, $properity->name); } } $groups[] = [ 'id' => $group->id, 'in_stock_qty' => $group->in_stock_qty, 'price' => $group->price, 'properities' => $properities, ]; } $store=Store::find($product->store_id); $store->updateCacheWithProducts(); return view('stores_dashboard.products.addGroups', compact('product', 'groups')); } public function identical_values($arrayA, $arrayB) { sort($arrayA); sort($arrayB); return $arrayA == $arrayB; } public function postGroups(Request $request) { $product = Product::find($request['id']); if (!$product) { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'Opps! Looks like somrthing went wrong' : 'حدث خطأ ما'; return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $msg, ]); } $groups = ProductGroup::where('product_id', $request['id'])->where('status', 'posted')->where('properities', '!=', null)->get(); if ($groups) { foreach ($groups as $group) { if ($this->identical_values(json_decode($group->properities), $request['productfeatures_ids'])) { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'ٌYou have added this group before' : 'قمت من قبل باضافه هذه المجموعة'; return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $msg, ]); } } } $properities = json_encode($request['productfeatures_ids']); $arr = []; foreach ($request['productfeatures_ids'] as $id) { $properity = Properity::find($id); if ($properity) { array_push($arr, $properity->name); } } $group = new ProductGroup(); $group->properities = $properities; $group->product_id = $request['id']; $first_group = $product->groups()->first(); $group->price = $first_group->price; $group->in_stock_qty = $first_group->in_stock_qty; $group->save(); $group = ProductGroup::find($group->id); $store=Store::find($product->store_id); $store->updateCacheWithProducts(); return response()->json([ 'key' => 'success', 'value' => '1', 'group_id' => $group->id, 'in_stock_qty' => $group->in_stock_qty, 'price' => $group->price, 'arr' => $arr, ]); } public function removeGroup(Request $request) { $removeGroup = new ProductService(); $data = $removeGroup->removeGroup($request->all()); if($data['fail_msg']) { return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $data['fail_msg'], ]); } return response()->json([ 'key' => 'success', 'value' => '1', 'id' => $data, ]); } public function updateGroups(Request $request) { $group = ProductGroup::find($request['group_id']); if (!$group) { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'Opps! Looks like somrthing went wrong' : 'حدث خطأ ما'; return response()->json([ 'key' => 'fail', 'value' => '0', 'msg' => $msg, ]); } if ($request['price']) { $group->price = $request['price']; } if ($request['in_stock_qty']) { $group->in_stock_qty = $request['in_stock_qty']; } $group->update(); $group->refresh(); $store=Store::find($group->product->store_id); $store->updateCacheWithProducts(); $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'Information added successfully' : 'تم إضافة المعلومات بنجاح'; return response()->json([ 'key' => 'success', 'value' => '1', 'msg' => $msg, 'id' => $group->id, 'in_stock_qty' => $group->in_stock_qty, 'price' => $group->price, ]); } public function deleteProducts(Request $request) { $product_service = new ProductService(); $msg = $product_service->deleteProducts($request->all()); return response()->json([ 'key' => 'success', 'value' => '1', 'msg' => $msg, 'id' => $product->id, ]); } public function get_add_addition(Request $request, $id) { $get_add_addition = new ProductService(); $msg = $get_add_addition->get_add_addition($id); return view('stores_dashboard.products.add_additive', compact( 'categories', 'product', 'additions')); } public function post_addition(Request $request) { $post_addition = new ProductService(); $post_addition->post_addition($request->all()); $msg = trans('dashboard.created_successfully'); $url = route('stores_dashboard.get_products'); return response()->json([ 'key' => 'success', 'msg' => $msg, 'url' => $url, ]); } public function delete_product(Request $request) { $delete_product = new ProductService(); $msg = $delete_product->deleteProduct($request->id); $url = route('stores_dashboard.get_products'); $store=auth()->user()->store; $store->updateCacheWithProducts(); return response()->json([ 'key' => 'success', 'msg' => $msg, 'url' => $url, ]); } }
Back to File Manager