/**
  * Determina si una encuesta no expiro en su fecha de validez, luego determina si ya tiene una resolucion (en caso que no la crea)
  * ademas verifica que la resolcion no se le haya paso el tiempo de llenado
  *
  * @param Request $request
  * @param Encuesta $encuesta
  *
  * @return Resolucion
  */
 private function getResolucion(Request $request, Encuesta $encuesta)
 {
     if ($encuesta->getFechaValidoHasta()->getTimestamp() < (new \DateTime(date('Y-m-d')))->getTimestamp()) {
         redirect()->to('resoluciones/error')->withInput(['message' => 'La encuesta que intentas llenar ya no esta disponible']);
     }
     $resolucion = Resolucion::findOrCreateForUser($encuesta, $request->user());
     if ($resolucion->getFechaFin()->getTimestamp() < (new \DateTime())->getTimestamp()) {
         redirect()->to('resoluciones/error')->withInput(['message' => 'Ya expiro el tiempo de llenado para la encuesta solicitada']);
     }
     return $resolucion;
 }
 /**
  *
  * @param Encuesta $encuesta
  * @param User $user
  *
  * @return Resolucion
  */
 public static function makeForUser(Encuesta $encuesta, User $user)
 {
     return DB::transaction(function () use($encuesta, $user) {
         $fecha = new \DateTime();
         /** @var Resolucion $resolucion */
         $resolucion = self::forceCreate(['user_id' => $user->id, 'encuesta_id' => $encuesta->id, 'fecha_inicio' => $fecha->format('Y-m-d H:i:s'), 'fecha_fin' => $fecha->modify("+{$encuesta->tiempo_resolucion} hours")->format('Y-m-d H:i:s'), 'tiempo' => $encuesta->tiempo_resolucion * 60 * 60, 'estado' => 'pendiente']);
         $rango = range(0, $encuesta->preguntas()->count() - 1);
         shuffle($rango);
         $indexs = array_slice($rango, 0, $encuesta->cantidad_preguntas);
         $preguntas = $encuesta->preguntas()->get();
         foreach ($indexs as $index) {
             Respuesta::forceCreate(['resolucion_id' => $resolucion->id, 'pregunta_id' => $preguntas->get($index)->id, 'texto' => '']);
         }
         return $resolucion;
     });
 }
 public static function delete(Encuesta $encuesta)
 {
     if ($encuesta->resoluciones()->count() > 0) {
         throw new \Exception("No se puede eliminar una encuesta con resoluciones");
     }
     return DB::transaction(function () use($encuesta) {
         $encuesta->preguntas->each(function (Pregunta $pregunta) {
             $pregunta->solucionesPosibles->each(function (SolucionPosible $solucionPosible) {
                 $solucionPosible->delete();
             });
             $pregunta->delete();
         });
         $encuesta->delete();
         return true;
     });
 }
 public function anyAll()
 {
     $results = Encuesta::all(['id', 'titulo', 'tiempo_resolucion', 'termino', 'curso', 'user_id', 'cantidad_preguntas'])->each(function (Encuesta $encuesta) {
         $encuesta->creador_por = $encuesta->user->fullname;
         $encuesta->preguntas = $encuesta->preguntas()->count() . '/' . $encuesta->cantidad_preguntas;
     });
     return ['data' => $results];
 }
 public function postResponder(Request $request, $id)
 {
     $resolucion = $this->getResolucion($request, Encuesta::findOrFail($id));
     if (!is_object($resolucion)) {
         return redirect()->to('dashboard/error')->with(['message' => $resolucion]);
     }
     $resolucion->guardarRespuestas($request->all());
     return view('dashboard.agradecer_respuesta');
 }
 /**
  * @param array $input
  * @return Encuesta
  */
 private static function crearEncuestaDesdeInput(array $input)
 {
     $data = json_decode($input['data']);
     return Encuesta::forceCreate(['user_id' => Auth::user()->id, 'titulo' => $input['encuesta']['titulo'], 'curso' => $input['encuesta']['curso'], 'termino' => $input['encuesta']['termino'], 'descripcion' => $input['encuesta']['descripcion'] ?: null, 'html' => $data->survey->html, 'tiempo_resolucion' => $input['encuesta']['duracion'], 'tipo' => 'calificada', 'valido_hasta' => $input['encuesta']['valido_hasta'], 'cantidad_preguntas' => $input['encuesta']['cantidad_preguntas']]);
 }
 public function getEliminar($encuesta)
 {
     $encuesta = Encuesta::findOrFail($encuesta);
     \App\Componentes\Encuestas\Editor::delete($encuesta);
     return redirect('consultas-encuestas');
 }
 public function search(Request $request)
 {
     $encuestas = Encuesta::where('Fecha_Encuesta', 'like', '%' . $request->Fecha . '%')->get();
     return \View::make('encuesta/list', compact('encuestas'));
 }