public function single_shelf()
 {
     $store_id = Request::segment(2);
     $department_id = Request::segment(4);
     $shelf_id = Request::segment(6);
     $base_search_url = web_url() . "/store/" . $store_id . "/department/" . $department_id . "/shelf/" . $shelf_id . "?shelf_id=" . $shelf_id;
     if (Input::has('per_page')) {
         $per_page = Input::get('per_page');
     } else {
         $per_page = 20;
     }
     if (Input::has('page')) {
         $page = Input::get('page');
     } else {
         $page = 0;
     }
     $shelf = Shelf::where('id', $shelf_id)->where('store_id', $store_id)->where('department_id', $department_id)->first();
     if (!$shelf) {
         if (Request::format() == 'html') {
             // Not Found Page
             die;
         } else {
             $response_array = array('success' => 'false', 'error_code' => '402', 'error' => 'Shelf not found in the choosen store');
             $response_code = 200;
             $response = Response::json($response_array, $response_code);
             return $response;
         }
     }
     $shelf_data = $shelf->toArray();
     $shelf_data['products'] = array();
     $query = Product::where('shelf_id', $shelf_id)->where('store_id', $store_id);
     $brands = $query->leftJoin('brands', 'products.brand_id', '=', 'brands.id')->select(DB::raw('distinct brands.*'))->get();
     $query = Product::where('shelf_id', $shelf_id)->where('store_id', $store_id);
     $options = $query->leftJoin('product_tag', 'products.id', '=', 'product_tag.product_id')->Join('options', 'product_tag.option_id', '=', 'options.id')->select(DB::raw('distinct options.*'))->get();
     $query = Product::where('shelf_id', $shelf_id)->where('store_id', $store_id);
     $base_search_url_options = $base_search_url;
     if (Input::has('options')) {
         $option_ids = Input::get('options');
         $query = $query->leftJoin('product_tag', 'products.id', '=', 'product_tag.product_id')->whereIn('product_tag.option_id', Input::get('options'));
         foreach (Input::get('options') as $option) {
             $base_search_url_options .= "&options[]=" . $option;
         }
     } else {
         $option_ids = array();
     }
     $base_search_url_brand = $base_search_url;
     if (Input::has('brand')) {
         $brand_id = Input::get('brand');
         $query = $query->where('brand_id', Input::get('brand'));
         $base_search_url_brand .= "&brand=" . Input::get('brand');
     } else {
         $brand_id = 0;
     }
     if (Input::has('sort_by') && Input::get('sort_by') == 'price') {
         $query = $query->orderBy('price');
     } else {
         $query = $query->orderBy('total_sale', 'desc');
     }
     $products = $query->select('products.*')->distinct()->get();
     foreach ($products as $product) {
         $shelf_product = $product->toarray();
         array_push($shelf_data['products'], $shelf_product);
     }
     $response_array['options'] = $options->toArray();
     $response_array['brands'] = $brands->toArray();
     $response_array['shelf'] = $shelf_data;
     if (Request::format() == 'html' && $page == 0) {
         return View::make('shelf')->with('data', $response_array)->with('store', $this->store)->with('departments', $this->departments)->with('zipcode', $this->zipcode)->with('city', $this->city)->with('stores', $this->stores)->with('q', Input::get('q'))->with('base_search_url_brand', $base_search_url_brand)->with('base_search_url_options', $base_search_url_options)->with('option_ids', $option_ids)->with('brand_id', $brand_id);
     } else {
         $response_array['success'] = 'true';
         $response_code = 200;
         $response = Response::json($response_array, $response_code);
         return $response;
     }
 }
 public function get_shelf_ajax()
 {
     $department_id = Input::get('department_id');
     $shelves = Shelf::where('department_id', $department_id)->get()->toArray();
     $response_code = 200;
     $response = Response::json($shelves, $response_code);
     return $response;
 }