public function listProduct()
    {
        if (!Request::ajax()) {
            return App::abort(404);
        }
        $admin_id = Auth::admin()->get()->id;
        $start = Input::has('start') ? (int) Input::get('start') : 0;
        $length = Input::has('length') ? Input::get('length') : 10;
        $search = Input::has('search') ? Input::get('search') : [];
        $products = Product::with('mainImage')->select(DB::raw('id, name, sku, sell_price, short_description, active,
												(SELECT COUNT(*)
													FROM notifications
										         	WHERE notifications.item_id = products.id
										         		AND notifications.item_type = "Product"
														AND notifications.admin_id = ' . $admin_id . '
														AND notifications.read = 0 ) as new'));
        if (!empty($search)) {
            foreach ($search as $key => $value) {
                if (empty($value)) {
                    continue;
                }
                if ($key == 'active') {
                    if ($value == 'yes') {
                        $value = 1;
                    } else {
                        $value = 0;
                    }
                    $products->where($key, $value);
                } else {
                    if ($key == 'sell_price') {
                        $value = trim($value);
                        if (strpos($value, '-') !== false) {
                            list($from, $to) = explode('-', $value);
                            $products->where($key, '>', (double) $from);
                            $products->where($key, '<', (double) $to);
                        } else {
                            $products->where($key, (double) $value);
                        }
                    } else {
                        if ($key == 'category' && !empty($value)) {
                            if (is_numeric($value)) {
                                $products->whereHas('categories', function ($query) use($value) {
                                    $query->where('categories.id', $value);
                                });
                            } else {
                                if (is_array($value)) {
                                    foreach ($value as $k => $v) {
                                        if (empty($v)) {
                                            unset($value[$k]);
                                        }
                                    }
                                    if (empty($value)) {
                                        continue;
                                    }
                                    $products->whereHas('categories', function ($query) use($value) {
                                        $query->whereIn('categories.id', $value);
                                    });
                                } else {
                                    $products->whereHas('categories', function ($query) use($value) {
                                        $query->where('categories.name', 'like', '%' . $value . '%');
                                    });
                                }
                            }
                        } else {
                            $value = ltrim(rtrim($value));
                            $products->where($key, 'like', '%' . $value . '%');
                        }
                    }
                }
            }
        }
        $order = Input::has('order') ? Input::get('order') : [];
        if (!empty($order)) {
            $columns = Input::has('columns') ? Input::get('columns') : [];
            foreach ($order as $value) {
                $column = $value['column'];
                if (!isset($columns[$column]['name']) || empty($columns[$column]['name'])) {
                    continue;
                }
                $products->orderBy($columns[$column]['name'], $value['dir'] == 'asc' ? 'asc' : 'desc');
            }
        }
        $count = $products->count();
        if ($length > 0) {
            $products = $products->skip($start)->take($length);
        }
        $arrProducts = $products->get();
        $arrReturn = ['draw' => Input::has('draw') ? Input::get('draw') : 1, 'recordsTotal' => Product::count(), 'recordsFiltered' => $count, 'data' => []];
        $arrRemoveNew = [];
        if (!empty($arrProducts)) {
            foreach ($arrProducts as $product) {
                if (isset($product->main_image[0])) {
                    $image = URL . '/' . str_replace('/images/products', '/images/products/thumbs', $product->main_image[0]->path);
                } else {
                    $image = URL . '/assets/images/noimage/110x110.gif';
                }
                $name = $product->name;
                if ($product->new) {
                    $name .= '| <span class="badge badge-danger">new</span>';
                    $arrRemoveNew[] = $product->id;
                }
                if (empty($product->short_description)) {
                    $product->short_description = '(empty)';
                }
                $data = Product::getSmallestPrice($product, true);
                $arrReturn['data'][] = array(++$start, $product->id, $name, $product->sku, "({$data['sizew']}x{$data['sizeh']})|{$data['sell_price']}", $image, $product->short_description, $product->active);
            }
        }
        if (!empty($arrRemoveNew)) {
            Notification::whereIn('item_id', $arrRemoveNew)->where('item_type', 'Product')->where('admin_id', $admin_id)->update(['read' => 1]);
        }
        $response = Response::json($arrReturn);
        $response->header('Content-Type', 'application/json');
        return $response;
    }
Example #2
0
 public static function getProductByKey($arrData)
 {
     $skip = isset($arrData['skip']) ? $arrData['skip'] : 0;
     $take = isset($arrData['take']) ? $arrData['take'] : 0;
     $key = isset($arrData['key']) ? $arrData['key'] : '';
     $key = trim($key);
     $key = explode("+", $key);
     $raw_query = '';
     foreach ($key as $index => $value) {
         if ($index == 0) {
             $raw_query .= '`name` like "%' . $value . '%"  or `short_name` like "%' . $value . '%" ';
         } else {
             $raw_query .= 'or `name` like "%' . $value . '%"  or `short_name` like "%' . $value . '%" ';
         }
     }
     $products = Product::select('id', 'sku', 'short_name', 'name')->with(['images' => function ($query) {
         $query->select('path');
         $query->where('imageables.option', 'like', '%"main":1%');
     }])->with(['categories' => function ($query) {
         $query->select('short_name');
     }])->whereRaw($raw_query)->where('active', 1)->take($take)->skip($skip)->orderBy('id', 'desc')->get();
     if (!$products->isEmpty()) {
         foreach ($products as $key => $product) {
             $product->sell_price = Product::getSmallestPrice($product);
             if (isset($product->images[0])) {
                 $product->image = URL . '/' . str_replace('/images/products/', '/images/products/thumbs/', $product->images[0]->path);
             } else {
                 $product->image = URL . '/assets/images/noimage/213x213.gif';
             }
             if (isset($product->categories[0])) {
                 $product->category = $product->categories[0]['short_name'];
             } else {
                 $product->category = '';
             }
             unset($product->images);
             unset($product->categories);
         }
         $products = $products->toArray();
         return $products;
     }
     return [];
 }