/**
  * Store a newly created resource in storage.
  *
  * @return Response
  */
 public function store(ModelNewRequest $request)
 {
     try {
         $roles = $request->input('roles', []);
         $departments = $request->input('departments', []);
         $user_id = $request->input('user_id', null);
         $model = new User($request->all());
         try {
             DB::beginTransaction();
             $model->user_id = $user_id;
             $model->save();
             $model->roles()->sync($roles);
             $model->departments()->sync($departments);
             if ($request->hasFile('photo')) {
                 $uploaded_file = $request->file('photo');
                 if ($uploaded_file->isValid()) {
                     $picture = new Picture();
                     $picture->filename = $this->save_picture($model->name, $uploaded_file);
                     $picture->mime_type = $uploaded_file->getMimeType();
                     $picture->extension = $uploaded_file->guessExtension();
                     if (!$picture->extension) {
                         $picture->extension = $uploaded_file->getExtension();
                     }
                     $picture->user_id = $model->id;
                     $picture->save();
                 }
             }
             DB::commit();
             Flash::info(trans($this->resource_name . 'saved', ['model' => $this->model_name]));
             return redirect(route($this->show_route, [$model->id]));
         } catch (Exception $e) {
             DB::rollBack();
             throw $e;
         }
     } catch (Exception $e) {
         $errors = [];
         if ($e->getCode() == 23000) {
             $errors['email'] = trans($this->resource_name . 'duplicated_email');
         } else {
             Flash::error($e->getMessage());
         }
         return $request->response($errors);
     }
 }