public function listProductType()
 {
     if (!Request::ajax()) {
         return App::abort(404);
     }
     $start = Input::has('start') ? (int) Input::get('start') : 0;
     $length = Input::has('length') ? Input::get('length') : 10;
     $search = Input::has('search') ? Input::get('search') : [];
     $productTypes = ProductType::select('id', 'name', 'description');
     if (!empty($search)) {
         foreach ($search as $key => $value) {
             if (empty($value)) {
                 continue;
             }
             $value = ltrim(rtrim($value));
             $productTypes->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;
             }
             $productTypes->orderBy($columns[$column]['name'], $value['dir'] == 'asc' ? 'asc' : 'desc');
         }
     }
     $count = $productTypes->count();
     if ($length > 0) {
         $productTypes = $productTypes->skip($start)->take($length);
     }
     $arrTypes = $productTypes->get()->toArray();
     $arrReturn = ['draw' => Input::has('draw') ? Input::get('draw') : 1, 'recordsTotal' => ProductType::count(), 'recordsFiltered' => $count, 'data' => []];
     if (!empty($arrTypes)) {
         foreach ($arrTypes as $type) {
             $arrReturn['data'][] = array(++$start, $type['id'], $type['name'], $type['description']);
         }
     }
     $response = Response::json($arrReturn);
     $response->header('Content-Type', 'application/json');
     return $response;
 }