Example #1
0
 /**
  * //Devuelve pdf con datos de reserva
  * @param Input::get('idEventos') string cadena 
  *
  * @return  Response::make($result)->header('Content-Type', 'application/pdf')
  */
 public function build()
 {
     if (Evento::withTrashed()->where('evento_id', '=', Input::get('idEventos'))->count() == 0) {
         return View::make('pdf.msg');
     }
     $event = Evento::withTrashed()->where('evento_id', '=', Input::get('idEventos'))->first();
     $events = Evento::withTrashed()->where('evento_id', '=', Input::get('idEventos'))->get();
     $recursos = Evento::where('evento_id', '=', Input::get('idEventos'))->groupby('recurso_id')->get();
     setlocale(LC_TIME, 'es_ES@euro', 'es_ES.UTF-8', 'esp');
     $strDayWeek = sgrDate::getStrDayWeek($event->fechaEvento);
     $strDayWeekInicio = sgrDate::getStrDayWeek($event->fechaInicio);
     $strDayWeekFin = sgrDate::getStrDayWeek($event->fechaFin);
     $created_at = ucfirst(strftime('%A %d de %B  a las %H:%M:%S', strtotime($event->created_at)));
     $impreso_at = ucfirst(strftime('%A %d de %B  a las %H:%M:%S', strtotime('now')));
     $html = View::make('pdf.justificante')->with(compact('event', 'events', 'strDayWeek', 'strDayWeekInicio', 'strDayWeekFin', 'recursos', 'created_at', 'impreso_at'));
     $result = myPDF::getPDF($html, 'comprobante');
     return Response::make($result)->header('Content-Type', 'application/pdf');
 }
Example #2
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;
 }
Example #3
0
 private function superaHoras()
 {
     $supera = false;
     //Número de horas ya reservadas en global
     $nh = Auth::user()->numHorasReservadas();
     //número de horas del evento a modificar (hay que restarlas de $nh)
     $event = Evento::find(Input::get('idEvento'));
     $nhcurrentEvent = sgrDate::diffHours($event->horaInicio, $event->horaFin);
     //Actualiza el valor de horas ya reservadas quitando las del evento que se modifica
     $nh = $nh - $nhcurrentEvent;
     //Estas son las horas que se quieren reservar
     $nhnewEvent = sgrDate::diffHours(Input::get('hInicio'), Input::get('hFin'));
     //máximo de horas a la semana
     $maximo = Config::get('options.max_horas');
     //credito = máximo (12) menos horas ya reservadas (nh)
     $credito = $maximo - $nh;
     //número de horas que aún puede el alumno reservar
     if ($credito < $nhnewEvent) {
         $supera = true;
     }
     //$supera = 'nh='.$nh.',$nhnewEvent='.$nhnewEvent.',nhcurrentEvent='.$nhcurrentEvent;
     return $supera;
 }
Example #4
0
 private function existeSolapamientocsv($data, $file, $numFila)
 {
     $solapamientos = false;
     $csv = new csv();
     //estado del evento?? (solapamientos)
     $idLugar = $data['ID_LUGAR'];
     $fechaDesde = sgrDate::dateCSVtoSpanish($data['F_DESDE_HORARIO1']);
     //d-m-Y
     $fechaHasta = sgrDate::dateCSVtoSpanish($data['F_HASTA_HORARIO1']);
     //d-m-Y
     $horaInicio = $data['INI'];
     $horaFin = $data['FIN'];
     $diaSemana = $data['COD_DIA_SEMANA'];
     $f = fopen($file, "r");
     $contadorfila = 1;
     while (($fila = fgetcsv($f, 0, ';', '"')) !== false && !$solapamientos) {
         $datosfila = $csv->filterFila($fila);
         if ($datosfila['ID_LUGAR'] == $idLugar && $datosfila['COD_DIA_SEMANA'] == $diaSemana && $contadorfila != $numFila) {
             //posible solapamiento
             $filafechaDesde = sgrDate::dateCSVtoSpanish($datosfila['F_DESDE_HORARIO1']);
             //d-m-Y
             $filafechaHasta = sgrDate::dateCSVtoSpanish($datosfila['F_HASTA_HORARIO1']);
             //d-m-Y
             $filahoraInicio = $datosfila['INI'];
             $filahoraFin = $datosfila['FIN'];
             if (strtotime(sgrDate::parsedatetime($fechaDesde, 'd-m-Y', 'Y-m-d')) <= strtotime(sgrDate::parsedatetime($filafechaHasta, 'd-m-Y', 'Y-m-d')) && strtotime(sgrDate::parsedatetime($fechaHasta, 'd-m-Y', 'Y-m-d')) >= strtotime(sgrDate::parsedatetime($filafechaDesde, 'd-m-Y', 'Y-m-d'))) {
                 //posible solapamiento
                 if (strtotime($horaInicio) < strtotime($filahoraFin) && strtotime($horaFin) > strtotime($filahoraInicio)) {
                     //hay solapamiento
                     $solapamientos = true;
                 }
                 //tercer if
             }
             //segundo if
         }
         //primer if
         $contadorfila++;
     }
     //fin del while
     fclose($f);
     return $solapamientos;
 }
Example #5
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;
 }