Edit File: ProductService.php
<?php namespace App\Services\Store; 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\Models\User; use App\Traits\ApiTrait; use App\Traits\Uploadable; use Auth; use Session; use Carbon\Carbon; class ProductService { use Uploadable; use ApiTrait; //Additive public function getProducts(array $request) { $user = Auth::user(); $store = Store::where('user_id', $user->id) ->first(); $products = Product::where('store_id', $store->id) ->where(function ($query) use ($request) { if (isset($request['search'])) { if ($request['search']) { $query->where('name->ar', 'like', '%' . $request['search'] . '%') ->orwhere('name->en', 'like', '%' . $request['search'] . '%'); } } }) ->orderBy('created_at' , 'desc') ->paginate($this->paginateNum()); return $products; } public function getSingleProduct($id) { $product = Product::find($id); if(! $product) { $product['fail_msg'] = trans('stores_dashboard.product_not_found'); } return $product; } public function postProduct(array $request) { $user = Auth::user(); $store = $user->store; $menu = StoreMenuCategory::find($request['store_menu_category_id']); if(! $menu) { $data['fail_msg'] = trans('stores_dashboard.not_found'); return $data; } $data['store_id'] = $store->id; $data['name'] = [ 'ar' => $request['name_ar'], 'en' => $request['name_en'], ]; $data['desc'] = [ 'ar' => $request['desc_ar'], 'en' => $request['desc_en'], ]; $data['type'] = $request['type']; $data['preparing_time'] = $request['preparing_time']; if (isset($request['image'])) { $data['image'] = $this->uploadOne($request['image'], 'products', 'image', 250, null); } $data['store_menu_category_id'] = $request['store_menu_category_id']; $product = Product::create($data); if ($product) { $group = new ProductGroup(); $group->price = $request['price']; $group->in_stock_qty = $request['in_stock_qty']; if (isset($request['discount_price'])) { $group->discount_price = $request['discount_price']; }else{ $group->discount_price = null; } if (isset($request['from'])) { $group->from = Carbon::parse($request['from'])->format('y-m-d'); }else{ $group->from= null ; } if (isset($request['to'])) { $group->to = Carbon::parse($request['to'])->format('y-m-d'); }else{ $group->to = null; } $group->product_id = $product->id; $group->save(); $store->updateCacheWithProducts(); return $product; } } public function updateProducts(array $request) { $user = Auth::user(); $store = $user->store; $product = Product::find($request['product_id']); if(! $product) { $data['fail_msg'] = trans('stores_dashboard.not_found'); return $data; } $menu = StoreMenuCategory::find($request['store_menu_category_id']); if(! $menu) { $data['fail_msg'] = trans('stores_dashboard.not_found'); return $data; } $product->name = [ 'ar' => $request['name_ar'], 'en' => $request['name_en'], ]; $product->desc = [ 'ar' => $request['desc_ar'], 'en' => $request['desc_en'], ]; $product->store_id = $store->id; if (isset($request['preparing_time'])){ $product->preparing_time = $request['preparing_time']; } if ($request['type'] == 'simple'){ Productfeature::where('product_id' , $product->id)->delete(); ProductGroup::where('properities' , '!=' , null)->where('product_id' , $product->id)->delete(); } if (isset($request['image'])) { $product->image = $this->uploadOne($request['image'], 'products', 'image', 250, null); } $product->store_menu_category_id = $request['store_menu_category_id']; $product->type = $request['type']; if ($product->update()) { $group = $product->groups()->first(); $group->price = $request['price']; if(isset($request['discount_price'])){ $group->discount_price = $request['discount_price']; }else { $group->discount_price = 0; } if(isset($request['from'])){ $group->from = Carbon::parse($request['from'])->format('Y-m-d'); }else{ $group->from = null; } if(isset($request['to'])){ $group->to = Carbon::parse($request['to'])->format('Y-m-d'); }else{ $group->to = null; } $group->in_stock_qty = $request['in_stock_qty']; $group->product_id = $product->id; $group->update(); } $store = Store::find($product->store_id); $store->updateCacheWithProducts(); return $product->fresh(); } public function getFeatures() { $data['features'] = Feature::whereHas('properities')->get(); return $data; } public function getFeatureProperties($id) { $data = Properity::where('feature_id' , $id)->get(); return $data; } public function postProductFeatures(array $request) { $product = Product::find($request['product_id']); $feature = Feature::find($request['feature_id']); if (!$product || !$feature) { $msg = trans('stores_dashboard.feature'); $data['fail_msg'] = $msg; return $data; } $pr = Productfeature::where('feature_id', $request['feature_id'])->where('product_id', $request['product_id'])->first(); if ($pr) { $msg = trans('stores_dashboard.same_feature'); $data['fail_msg'] = $msg; return $data; } $pr = new Productfeature(); $pr->feature_id = $request['feature_id']; $pr->product_id = $request['product_id']; $pr->save(); $data['msg'] = trans('dashboard.created_successfully'); $data['pr'] = $pr; $data['feature'] = $feature; $store = Store::find($product->store_id); $store->updateCacheWithProducts(); return $data; } public function removeProductFeature(array $data) { $pr = Productfeature::where('product_id', $data['product_id'])->where('feature_id', $data['feature_id'])->first(); if (!$pr) { $msg = trans('stores_dashboard.feature_not_fount'); $data['fail_msg'] = $msg; return $data; } $id = $pr->id; $pr->delete(); $store = Store::find($pr->product->store_id); $store->updateCacheWithProducts(); // return $id; } public function postProductFeatureProperities(array $request) { $product = Product::find($request['product_id']); if (!$product) { $msg = 'wrong id.'; $data['fail_msg'] = $msg; return $data; } $new_feature_ids =[]; $old_product_feature_ids =[]; $old_product_features = $product->productfeatures; foreach ($old_product_features as $old) { array_push($old_product_feature_ids , $old->feature_id); } if ($request['productfeatures']) { foreach (json_decode($request['productfeatures']) as $featureProperty) { array_push($new_feature_ids , $featureProperty->feature_id); if($old_product_features) { if (in_array($featureProperty->feature_id, $old_product_feature_ids)) { $pr = Productfeature::where('feature_id', $featureProperty->feature_id)->where('product_id', $request['product_id'])->first(); }else { $pr = Productfeature::create([ 'feature_id' => $featureProperty->feature_id, 'product_id' => $request['product_id'] ]); } }else { $pr = Productfeature::create([ 'feature_id' => $featureProperty->feature_id, 'product_id' => $request['product_id'] ]); } if ($pr) { $pr->productfeatureproperities()->delete(); foreach ($featureProperty->properties as $p) { $properity = Properity::find($p->id); if ($p) { $pfr = Productfeatureproperity::create([ 'productfeature_id'=>$pr->id, 'properity_id' => $p->id, ]); } } $store = Store::find($pr->product->store_id); $store->updateCacheWithProducts(); } else { $msg = trans('stores_dashboard.add_feature_option'); $data['fail_msg'] = $msg; return $data; } } } else { $msg = trans('stores_dashboard.add_feature_option'); $data['fail_msg'] = $msg; return $data; } foreach ($old_product_features as $fe) { if(!in_array($fe->feature_id , $new_feature_ids)){ $fe->delete(); } } return $product->fresh(); } public function editProducts($id) { $user = Auth::user(); $store = Store::where('user_id', $user->id) ->first(); $data['product'] = Product::find($id); if (!$data['product']) { return redirect()->back()->with(['fail' => trans('stores_dashboard.product_not_found')]); } $data['group'] = $data['product']->groups()->first(); $data['features'] = Feature::get(); $data['menus'] = StoreMenuCategory::where('store_id', $store->id)->get(); return $data; } public function identicalValues($arrayA, $arrayB) { sort($arrayA); sort($arrayB); return $arrayA == $arrayB; } public function postGroups(array $request) { info('join'); $product = Product::find($request['product_id']); if (!$product) { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'Opps! Looks like somrthing went wrong' : 'حدث خطأ ما'; $data['fail_msg'] = $msg; return $data; } // $groups = ProductGroup::where('product_id', $request['product_id'])->where('properities', '!=', null)->delete(); $groups = $product->groups()->where('properities','!=' , null)->delete(); info($request['productfeatures_ids']); foreach (json_decode($request['productfeatures_ids']) as $p) { $properities = json_encode($p->properties); $group = new ProductGroup(); $group->properities = $properities; $group->product_id = $request['product_id']; $first_group = $product->groups()->first(); $group->price = $p->price ?? $first_group->price; if (isset($p->discount_price)) { $group->discount_price = $p->discount_price; } if (isset($p->from)) { $group->from = Carbon::parse($p->from)->format('Y-m-d'); } if (isset($p->to)) { $group->to = Carbon::parse($p->to)->format('Y-m-d'); } $group->in_stock_qty = $p->qty ?? $first_group->in_stock_qty; $group->save(); info($group->id); $group = ProductGroup::find($group->id); $store = Store::find($product->store_id); $store->updateCacheWithProducts(); } return $product->fresh(); } public function removeGroup($id) { $group = ProductGroup::find($id); if (!$group) { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'This group is mot available' : 'هذه المجموعة غير متاحة'; return $data['fail_msg'] = $msg; } $id = $group->id; $group->status = 'deleted'; $group->update(); $store = Store::find($group->product->store_id); $store->updateCacheWithProducts(); return $id; } public function getUpdateGroups($id) { $product = Product::find($id); $groups = ProductGroup::where('product_id', $id)->where('properities','!=' , null)->get(); return $groups; } public function updateGroups(array $request) { $group = ProductGroup::find($request['group_id']); if (!$group) { $msg = Session::has('lang') && Session::get('lang') == 'en' ? 'Opps! Looks like somrthing went wrong' : 'حدث خطأ ما'; return $data['fail_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(); return $group; } public function deleteProduct($id) { $product = Product::find($id); $product->delete(); $msg = trans('auth.deleted_success'); return $msg; } }
Back to File Manager