public static function getDepartments($id, $indent, $path)
 {
     $result = [];
     if ($indent < 15) {
         $models = Department::withTrashed()->whereDepartmentId($id)->get();
         foreach ($models as $model) {
             $result[] = ['indent' => $indent, 'name' => $path . '.' . $model->name, 'id' => $model->id, 'parent' => $id];
             $result = array_merge($result, static::getDepartments($model->id, $indent + 1, $path . '.' . $model->name));
         }
     }
     return $result;
 }
 public function getModels($filter = null)
 {
     $models = Department::sortable($this->index_view);
     if ($this->show_trash()) {
         $models = $models->withTrashed();
     }
     if (isset($filter)) {
         foreach ($this->filter_fields as $field) {
             if (trim($filter[$field]) != '') {
                 $values = explode(',', $filter[$field]);
                 $first = true;
                 foreach ($values as $value) {
                     if (in_array($field, $this->filter_numeric_fields)) {
                         if ($first) {
                             $models = $models->Where($field, $value);
                             $first = false;
                         } else {
                             $models = $models->orWhere($field, $value);
                         }
                     } else {
                         if (in_array($field, $this->filter_boolean_fields)) {
                             $value = strtolower($value) == 'x';
                             if ($first) {
                                 $models = $models->Where($field, $value);
                                 $first = false;
                             } else {
                                 $models = $models->orWhere($field, $value);
                             }
                         } else {
                             if ($field == 'parent') {
                                 $value = '%' . $value . '%';
                                 if ($first) {
                                     $models = $models->whereHas('parent', function ($q) use($value) {
                                         $q->where('name', 'like', $value);
                                     });
                                     $first = false;
                                 } else {
                                     $models = $models->orWhereHas('parent', function ($q) use($value) {
                                         $q->where('name', 'like', $value);
                                     });
                                 }
                             } else {
                                 if ($field == 'users') {
                                     $value = '%' . $value . '%';
                                     if ($first) {
                                         $models = $models->whereHas('users', function ($q) use($value) {
                                             $q->where('acronym', 'like', $value);
                                         });
                                         $first = false;
                                     } else {
                                         $models = $models->orWhereHas('users', function ($q) use($value) {
                                             $q->where('acronym', 'like', $value);
                                         });
                                     }
                                 } else {
                                     $value = '%' . $value . '%';
                                     if ($first) {
                                         $models = $models->Where($field, 'LIKE', $value);
                                         $first = false;
                                     } else {
                                         $models = $models->orWhere($field, 'LIKE', $value);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return $models;
 }
 /**
  * Show the form for editing the specified resource.
  *
  * @param  int $id
  * @return Response
  */
 public function edit($id)
 {
     try {
         $model = $this->getModel($id);
         $roles = Role::lists('name', 'id');
         $model_roles = $model->roles->lists('id');
         $departments = Department::lists('name', 'id');
         $model_departments = $model->departments->lists('id');
         $users = User::where('id', '<>', $id)->withTrashed()->lists('display_name', 'id');
         return view($this->edit_view, compact(['model', 'roles', 'model_roles', 'departments', 'model_departments', 'users']));
     } catch (Exception $e) {
         Flash::warning(trans($this->resource_name . 'not_found', ['model' => $this->model_name, 'id' => $id]));
         return $this->index();
     }
 }