Exemple #1
0
 public function validate($data)
 {
     //$this->data = $data;
     //return false;
     //formatear fechas
     if (!empty($data['fEvento'])) {
         $date = DateTime::createFromFormat('d-m-Y', $data['fEvento']);
         $data['fEvento'] = $date->format('Y-m-d');
     }
     if (!empty($data['fInicio'])) {
         $date = DateTime::createFromFormat('d-m-Y', $data['fInicio']);
         $data['fInicio'] = $date->format('Y-m-d');
     }
     if (!empty($data['fFin'])) {
         $date = DateTime::createFromFormat('d-m-Y', $data['fFin']);
         $data['fFin'] = $date->format('Y-m-d');
     }
     //mensages
     //req1: alumno solo pueden reservar entre firstMonday y lastFriday  (por implementar)
     if (Auth::user()->isUser()) {
         setlocale(LC_ALL, 'es_ES@euro', 'es_ES', 'esp');
         $this->messages['fInicio.req1'] = '<br />Puedes reservar entre el <strong>' . strftime('%A, %d de %B de %Y', sgrCalendario::fristMonday()) . '</strong> y el <strong>' . strftime('%A, %d de %B de %Y', sgrCalendario::lastFriday()) . '</strong><br />';
     }
     if (Auth::user()->isAvanceUser()) {
         setlocale(LC_ALL, 'es_ES@euro', 'es_ES', 'esp');
         $this->messages['fInicio.req5'] = 'Puedes reservar a partir del <strong>' . strftime('%A, %d de %B de %Y', sgrCalendario::fristMonday()) . '</strong><br />';
     }
     if (Auth::user()->isTecnico()) {
         setlocale(LC_ALL, 'es_ES@euro', 'es_ES', 'esp');
         $tsToday = strtotime('today');
         $this->messages['fInicio.req6'] = 'Puedes reservar a partir del <strong>' . strftime('%A, %d de %B de %Y', $tsToday) . '</strong><br />';
     }
     if (isset($data['dias']) && in_array('6', $data['dias'])) {
         $this->messages['dias.req4'] = $this->messages['dias.req4'] . " No se puede reservar en <strong>sábado</strong><br />";
     }
     if (isset($data['dias']) && in_array('0', $data['dias'])) {
         $this->messages['dias.req4'] = $this->messages['dias.req4'] . " No se puede reservar en <strong>domingo</strong><br />";
     }
     if (!empty($data['fFin'])) {
         $this->messages['fFin.datefincurso'] = 'Las reservas deben de finalizar dentro del curso académico actual. (Fecha limite: ' . date('d-m-Y', strtotime(Config::get('options.fin_cursoAcademico'))) . ')';
     }
     if (!empty($data['fInicio'])) {
         $this->messages['fInicio.dateiniciocurso'] = 'No es posible realizar reservas hasta que se finalice la carga del POD: fecha prevista a partir del día ' . date('d-m-Y', strtotime(Config::get('options.inicio_gestiondesatendida')));
     }
     if (!empty($data['reservarParaUvus'])) {
         $this->messages['reservarParaUvus.existeuvus'] = 'Usuario "' . $data['reservarParaUvus'] . '" no registrado.';
     }
     //fin mensages
     // make a new validator object
     $v = Validator::make($data, $this->rules, $this->messages);
     //requisito: reserva para otro usuario -> debe de existir en la Base de Datos
     if (!empty($data['reservarParaUvus'])) {
         $v->sometimes('reservarParaUvus', 'existeuvus', function ($data) {
             if (User::where('username', '=', $data['reservarParaUvus'])->count() == 0) {
                 return true;
             }
         });
     }
     //requisito: alumnos no pueden reservar dos recurso a la misma hora, mismo día
     if (!empty($data['fEvento']) && !empty($data['hFin']) && !empty($data['hInicio'])) {
         $v->sometimes('fEvento', 'reservaunica', function ($data) {
             if (Auth::user()->capacidad == '1') {
                 //setlocale(LC_ALL,'es_ES@euro','es_ES','esp');
                 //determinar si tiene reserva en otro recurso con misma fechaEvento, horainicio y horafin solapadas.
                 $id_recurso = Recurso::find($data['id_recurso'])->id;
                 $where = " (( horaInicio <= '" . $data['hInicio'] . "' and horaFin >= '" . $data['hFin'] . "' ) ";
                 $where .= " or ( horaFin > '" . $data['hFin'] . "' and horaInicio < '" . $data['hFin'] . "')";
                 $where .= " or ( horaInicio > '" . $data['hInicio'] . "' and horaInicio < '" . $data['hFin'] . "')";
                 $where .= " or horaFin < '" . $data['hFin'] . "' and horaFin > '" . $data['hInicio'] . "')";
                 $where .= " and recurso_id != " . $id_recurso;
                 $numEventosOtroRecurso = Evento::where('user_id', '=', Auth::user()->id)->where('fechaEvento', '=', date('Y-m-d', strtotime($data['fEvento'])))->whereRaw($where)->count();
                 if ($numEventosOtroRecurso > 0) {
                     return true;
                 }
             }
         });
     }
     //req1: alumno solo pueden reservar entre firstMonday y lastFriday
     if (!empty($data['fInicio']) && strtotime($data['fInicio']) != false) {
         $v->sometimes('fInicio', 'req1', function ($data) {
             if (Auth::user()->isUser()) {
                 if (sgrCalendario::fristMonday() > strtotime($data['fInicio']) || sgrCalendario::lastFriday() < strtotime($data['fInicio'])) {
                     return true;
                 }
             }
         });
     }
     //req2: alumno supera el máximo de horas a la semana (12)
     // empty($data['action'] -> solo se comprueba en la reserva nueva (add)
     if (!empty($data['hFin']) && !empty($data['hInicio']) && empty($data['action'])) {
         $v->sometimes('hFin', 'req2', function ($data) {
             if (Auth::user()->isUser()) {
                 $nh = Auth::user()->numHorasReservadas();
                 //Número de horas ya reservadas
                 $nh2 = sgrDate::diffHours($data['hInicio'], $data['hFin']);
                 //números de horas que se quiere reservar
                 $maximo = Config::get('options.max_horas');
                 $credito = $maximo - $nh;
                 //número de horas que aún puede el alumno reservar
                 if ($credito < $nh2) {
                     return true;
                 }
             }
         });
     }
     //deshabilitado
     if (isset($data['id_recurso']) && $data['id_recurso'] != 0) {
         $v->sometimes('titulo', 'deshabilitado', function ($data) {
             if (1 == Recurso::findOrFail($data['id_recurso'])->disabled) {
                 return true;
             }
         });
     }
     //req3:
     if (isset($data['fInicio']) && strtotime($data['fInicio']) != false && isset($data['dias'])) {
         $v->sometimes('titulo', 'req3', function ($data) {
             $idrecurso = $data['id_recurso'];
             $recurso = Recurso::findOrFail($idrecurso);
             $sgrRecurso = RecursoFactory::getRecursoInstance($recurso->tipo);
             $sgrRecurso->setRecurso($recurso);
             $excluyeId = '';
             if (isset($data['idSerie'])) {
                 $excluyeId = $data['idSerie'];
             }
             return $sgrRecurso->recursoOcupado($data, $excluyeId);
         });
     }
     //req4: Sábados y domingos no se puede reservar
     if (isset($data['dias'])) {
         $v->sometimes('dias', 'req4', function ($data) {
             $dias = $data['dias'];
             // 0 = domingo, 6 = sábado
             if (in_array('0', $dias) || in_array('6', $dias)) {
                 return true;
             }
         });
     }
     //Req5:
     // --> alumnos y pdi (capacidades 1 y 2): solo pueden reservar a partir de firstmonday
     if (!empty($data['fInicio']) && strtotime($data['fInicio']) != false) {
         $v->sometimes('fInicio', 'req5', function ($data) {
             if (Auth::user()->isAvanceUser()) {
                 if (sgrCalendario::fristMonday() > strtotime($data['fInicio'])) {
                     return true;
                 }
             }
         });
     }
     //Req6:
     // --> técnicos  (capacidad 3, 4 y 5): reservas a partir del día de hoy (para mañana)
     if (!empty($data['fInicio']) && strtotime($data['fInicio']) != false) {
         $v->sometimes('fInicio', 'req6', function ($data) {
             if (Auth::user()->isTecnico()) {
                 if (strtotime('today') > strtotime($data['fInicio'])) {
                     return true;
                 }
             }
         });
     }
     //after: fInicio & fFin > today
     if (!empty($data['fInicio']) && strtotime($data['fInicio']) != false) {
         $intFinicio = strtotime($data['fInicio']);
         $intNow = strtotime('now');
         $intDiaAnterior = strtotime('-1 day', $intFinicio);
         //fecha posterior al día actual
         $v->sometimes('fInicio', 'after:' . date('d-m-Y', $intDiaAnterior), function ($data) {
             return true;
         });
         //fecha fin mayor o igual que fecha inicio => mayor que el día anterior a fecha inicio
         if ($data['repetir'] == 'CS') {
             $v->sometimes('fFin', 'required|date|date_format:Y-m-d|after:' . date('d-m-Y', $intDiaAnterior), function ($data) {
                 return true;
             });
         }
     }
     //after:hinicio < hfin
     if (!empty($data['hInicio'])) {
         $aHini = explode(':', $data['hInicio']);
         $timehorainicio = mktime($aHini[0], $aHini[1]);
         $v->sometimes('hFin', 'required|date_format:H:i|after:' . date('H:i', $timehorainicio), function ($data) {
             return true;
         });
     }
     // requisito: reservas debe finalizar dentro del curso académico actual (Restringido a todos los usuarios menos a los validadores)
     if (!empty($data['fFin']) && !empty($data['repetir']) && !Auth::user()->isValidador()) {
         $v->sometimes('fFin', 'datefincurso', function ($data) {
             $fechaFinCurso = Config::get('options.fin_cursoAcademico');
             $fechaMaximaEvento = $data['fEvento'];
             if ($data['repetir'] == 'CS') {
                 $fechaMaximaEvento = $data['fFin'];
             }
             //Reptición cada semana
             if (strtotime($fechaMaximaEvento) > strtotime($fechaFinCurso)) {
                 return true;
             }
         });
     }
     // requisito dateiniciocurso: lasreservas debe de ser posteriores a la fecha de inicio curso actual (Restringido a usuarios alumnos, pdi, administradores y tecnicos)
     if (!empty($data['fInicio']) && !Auth::user()->isValidador() && !Auth::user()->isAdmin()) {
         $v->sometimes('fInicio', 'dateiniciocurso', function ($data) {
             $hoy = strtotime('today');
             $diaInicio = strtotime(Config::get('options.inicio_gestiondesatendida'));
             if ($diaInicio > $hoy) {
                 return true;
             }
         });
     }
     // check for failure
     if ($v->fails()) {
         $this->errors = $v->messages()->toArray();
         return false;
     }
     $this->data = $data;
     //return false;
     // validation pass
     return true;
 }
Exemple #2
0
 /**
  * Implementa requisito: usuarios del perfil alumno (capacidad = 1) pueden reservar como másimo 12 horas a la semana.
  * 
  *	@param void
  *	@return $nh int	Número de horas reservadas por el usuario logueado en la semana reservable inmediatemente siguiente a la actual (perfil alumno) 
  */
 public function numHorasReservadas()
 {
     $nh = 0;
     $fristMonday = sgrCalendario::fristMonday();
     //devuelve timestamp
     $lastFriday = sgrCalendario::lastFriday();
     //devuelve timestamp
     $fm = date('Y-m-d', $fristMonday);
     //formato para la consulta sql (fechaIni en Inglés)
     $lf = date('Y-m-d', $lastFriday);
     //formato para la consulta sql (fechaFin en Inglés)
     $events = $this->userEvents()->where('fechaEvento', '>=', $fm)->where('fechaEvento', '<=', $lf)->get();
     foreach ($events as $key => $event) {
         $nh = $nh + sgrDate::diffHours($event->horaInicio, $event->horaFin);
     }
     return $nh;
 }