def test_HorarioReservaInvalido_InicioReservacion_Mayor_FinalReservacion(self): ReservaInicio = datetime.now()+timedelta(minutes=1) ReservaFin = datetime.now() HoraApertura = time(hour = 0, minute = 0, second = 0) HoraCierre = time(hour = 23, minute = 59, second = 59) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'El horario de inicio de reservacion debe ser menor al horario de fin de la reserva.'))
def test_HorarioReservaInvalido_TiempoTotalMenor1h(self): ReservaInicio = datetime(year=2000,month=2,day=6,hour = 13, minute = 0, second = 0) ReservaFin = datetime(year=2000,month=2,day=6,hour = 13, minute = 59, second = 59) HoraApertura = time(hour = 12, minute = 0, second = 0) HoraCierre = time(hour = 18, minute = 0, second = 0) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'El tiempo de reserva debe ser al menos de 1 hora.'))
def test_HorarioReservaInvalido_InicioReservacion_Mayor_FinalReservacion(self): ReservaInicio = datetime.now()+timedelta(minutes=1) ReservaFin = datetime.now() HoraApertura = time(hour = 0, minute = 0, second = 0) HoraCierre = time(hour = 23, minute = 59, second = 59) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'El horario de inicio de reservacion debe ser menor al horario de fin de la reserva.'))
def test_HorarioReservaInvalido_TiempoTotalMenor1h(self): ReservaInicio = datetime(year=2000,month=2,day=6,hour = 13, minute = 0, second = 0) ReservaFin = datetime(year=2000,month=2,day=6,hour = 13, minute = 59, second = 59) HoraApertura = time(hour = 12, minute = 0, second = 0) HoraCierre = time(hour = 18, minute = 0, second = 0) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'El tiempo de reserva debe ser al menos de 1 hora.'))
def test_SieteDiasDeReserva(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(7) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (True, ''))
def test_UnDiaDeReserva_Estacionamiento_No_24_horas(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'No puede haber reservas entre dos días distintos'))
def test_reservaHorarioCompletoYUnMinuto(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,6) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,18,1) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'El horario de fin de la reserva debe estar en un horario válido.'))
def test_reservaHorarioCompleto(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,6) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,18) + timedelta(days=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (True,''))
def test_UnDiaDeReserva_Estacionamiento_No_24_horas(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'No puede haber reservas entre dos dias distintos'))
def test_HorarioReservaValido(self): hoy=datetime.now() ReservaInicio = datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) ReservaFin = datetime(hoy.year,hoy.month,hoy.day,17) + timedelta(days=1) HoraApertura = time(hour = 12, minute = 0, second = 0) HoraCierre = time(hour = 18, minute = 0, second = 0) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (True, ''))
def test_ExitoMaxHorizonte(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(days=14,hours=23,minutes=59) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre,horizonte=360) self.assertEqual(x, (True, ''))
def test_Horizonte1Hora(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(hours=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre,horizonte=1) self.assertEqual(x, (True, ''))
def test_HorizonteNulo(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(hours=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre,horizonte=0) self.assertEqual(x, (False, 'La reserva debe estar dentro del horizonte de reservacion.'))
def test_HorarioReservaInvalido_ReservaInicial_Menor_HorarioApertura(self): hoy=datetime.now() ReservaInicio = datetime(hoy.year,hoy.month,hoy.day,7) + timedelta(days=1) ReservaFin = datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) HoraApertura=time(8,0) HoraCierre=time(18,0) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'El horario de inicio de reserva debe estar en un horario válido.'))
def test_HorarioReservaInvalido_ReservaFinal_Mayor_HorarioCierre(self): HoraApertura = time(hour = 10, minute = 0, second = 0) HoraCierre = time(hour = 22, minute = 0, second = 0) hoy=datetime.today() ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,17) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,23) + timedelta(days=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'El horario de fin de la reserva debe estar en un horario válido.'))
def test_QuinceDiasDeReservaYUnMinuto(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(days=16,minutes=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (False, 'Se puede reservar un puesto por un maximo de 15 dias dependiendo horizonte de reservacion.'))
def test_HorarioReservaValido(self): hoy=datetime.now() ReservaInicio = datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) ReservaFin = datetime(hoy.year,hoy.month,hoy.day,17) + timedelta(days=1) HoraApertura = time(hour = 12, minute = 0, second = 0) HoraCierre = time(hour = 18, minute = 0, second = 0) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (True, ''))
def test_UnDiaDeReserva_Estacionamiento_24_horas(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre) self.assertEqual(x, (True, ''))
def test_HorarioReservaInvalido_ReservaInicial_Menor_HorarioApertura(self): hoy=datetime.now() ReservaInicio = datetime(hoy.year,hoy.month,hoy.day,7) + timedelta(days=1) ReservaFin = datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) HoraApertura=time(8,0) HoraCierre=time(18,0) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'El horario de inicio de reserva debe estar en un horario válido.'))
def test_ReservaInicio_Ayer(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,15) - timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'La reserva no puede tener lugar en el pasado.'))
def test_reservaHorarioCompleto(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,6) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,18) + timedelta(days=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (True,''))
def test_HorarioReservaInvalido_ReservaFinal_Mayor_HorarioCierre(self): HoraApertura = time(hour = 10, minute = 0, second = 0) HoraCierre = time(hour = 22, minute = 0, second = 0) hoy=datetime.today() ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,17) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,23) + timedelta(days=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'El horario de fin de la reserva debe estar en un horario válido.'))
def test_reservaHorarioCompletoYUnMinuto(self): hoy=datetime.now() HoraApertura=time(6,0) HoraCierre=time(18,0) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,6) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,18,1) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'El horario de fin de la reserva debe estar en un horario válido.'))
def test_UnDiaDeReserva_Estacionamiento_24_horas(self): hoy=datetime.now() HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=1) ReservaFin=datetime(hoy.year,hoy.month,hoy.day,15) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (True, ''))
def test_SieteDiasDeReserva(self): hoy=datetime.now().replace(hour = 0, minute = 0) HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(7) - timedelta(minutes=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (True, ''))
def test_SieteDiasDeReservaYUnMinuto(self): hoy=datetime.now().replace(hour = 0, minute = 0) HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(days=7,minutes=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (False, 'La reserva debe estar dentro de los próximos 7 días.'))
def test_SieteDiasDeReserva(self): hoy = datetime.now().replace(hour=0, minute=0) HoraApertura = time(0, 0) HoraCierre = time(23, 59) ReservaInicio = hoy ReservaFin = hoy + timedelta(7) - timedelta(minutes=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual(x, (True, ''))
def test_SieteDiasDeReservaYUnMinuto(self): hoy = datetime.now().replace(hour=0, minute=0) HoraApertura = time(0, 0) HoraCierre = time(23, 59) ReservaInicio = hoy ReservaFin = hoy + timedelta(days=7, minutes=1) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual( x, (False, 'La reserva debe estar dentro de los próximos 7 días.'))
def receive_sms(request): ip = get_client_ip(request) # Busca el IP del telefono donde esta montado el SMS Gateway port = '8000' # Puerto del telefono donde esta montado el SMS Gateway phone = request.GET.get('phone', False) sms = request.GET.get('text', False) if (not sms or not phone): return HttpResponse(status=400) # Bad request phone = urllib.parse.quote(str(phone)) # Codificacion porcentaje del numero de telefono recibido # Tratamiento del texto recibido try: sms = sms.split(' ') id_sms = int(sms[0]) inicio_reserva = sms[1] + ' ' + sms[2] final_reserva = sms[3] + ' ' + sms[4] inicio_reserva = parse_datetime(inicio_reserva) final_reserva = parse_datetime(final_reserva) except: return HttpResponse(status=400) # Bad request # Validacion del id de estacionamiento recibido por SMS try: estacionamiento = Estacionamiento.objects.get(id = id_sms) except ObjectDoesNotExist: text = 'No existe el estacionamiento ' + str(id_sms) + '.' text = urllib.parse.quote(str(text)) urllib.request.urlopen('http://{0}:{1}/sendsms?phone={2}&text={3}&password='******'No existe el estacionamiento ' + str(id_sms) + '.') # Validacion de las dos fechas recibidas por SMS m_validado = validarHorarioReserva( inicio_reserva, final_reserva, estacionamiento.apertura, estacionamiento.cierre, ) if m_validado[0]: '''reserva_sms = Reserva( estacionamiento = estacionamiento, inicioReserva = inicio_reserva, finalReserva = final_reserva, ) reserva_sms.save()''' text = 'Se realizó la reserva satisfactoriamente.' text = urllib.parse.quote(str(text)) urllib.request.urlopen('http://{0}:{1}/sendsms?phone={2}&text={3}&password='******'http://{0}:{1}/sendsms?phone={2}&text={3}&password='******'')
def test_ReservaInicio_Ayer(self): hoy = datetime.now() HoraApertura = time(6, 0) HoraCierre = time(18, 0) ReservaInicio = datetime(hoy.year, hoy.month, hoy.day, 15) - timedelta(days=1) ReservaFin = datetime(hoy.year, hoy.month, hoy.day, 15) + timedelta(days=2) x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, 7) self.assertEqual( x, (False, 'La reserva no puede tener lugar en el pasado.'))
def test_DiasDeReservaYUnMinuto(self): hoy=datetime.now().replace(hour = 0, minute = 0) HoraApertura=time(0,0) HoraCierre=time(23,59) ReservaInicio=hoy ReservaFin=hoy + timedelta(days=15,minutes=1) horizonteDias = "15" horizonteHoras = "0" x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, horizonteDias, horizonteHoras) a = str(horizonteDias) b = str(horizonteHoras) self.assertEqual(x, (False, 'Se puede reservar un puesto por un máximo de ' + horizonteDias + ' dias '+ horizonteHoras +' horas'))
def test_DiasDeReservaYUnMinuto(self): hoy = datetime.now().replace(hour=0, minute=0) HoraApertura = time(0, 0) HoraCierre = time(23, 59) ReservaInicio = hoy ReservaFin = hoy + timedelta(days=15, minutes=1) horizonteDias = "15" horizonteHoras = "0" x = validarHorarioReserva(ReservaInicio, ReservaFin, HoraApertura, HoraCierre, horizonteDias, horizonteHoras) a = str(horizonteDias) b = str(horizonteHoras) self.assertEqual( x, (False, 'Se puede reservar un puesto por un máximo de ' + horizonteDias + ' dias ' + horizonteHoras + ' horas'))
def estacionamiento_reserva(request, _id): _id = int(_id) # Verificamos que el objeto exista antes de continuar try: estacionamiento = Estacionamiento.objects.get(id = _id) except ObjectDoesNotExist: raise Http404 # Verificamos que el estacionamiento este parametrizado if (estacionamiento.apertura is None): return HttpResponse(status = 403) # Esta prohibido entrar aun # Si se hace un GET renderizamos los estacionamientos con su formulario if request.method == 'GET': form = ReservaForm() # Si es un POST estan mandando un request elif request.method == 'POST': form = ReservaForm(request.POST) # Verificamos si es valido con los validadores del formulario if form.is_valid(): inicioReserva = form.cleaned_data['inicio'] finalReserva = form.cleaned_data['final'] # debería funcionar con excepciones, y el mensaje debe ser mostrado # en el mismo formulario m_validado = validarHorarioReserva( inicioReserva, finalReserva, estacionamiento.apertura, estacionamiento.cierre, ) # Si no es valido devolvemos el request if not m_validado[0]: return render( request, 'template-mensaje.html', { 'color' :'red' , 'mensaje': m_validado[1] } ) if marzullo(_id, inicioReserva, finalReserva): reservaFinal = Reserva( estacionamiento = estacionamiento, inicioReserva = inicioReserva, finalReserva = finalReserva, ) monto = Decimal( estacionamiento.tarifa.calcularPrecio( inicioReserva,finalReserva ) ) request.session['monto'] = float( estacionamiento.tarifa.calcularPrecio( inicioReserva, finalReserva ) ) request.session['finalReservaHora'] = finalReserva.hour request.session['finalReservaMinuto'] = finalReserva.minute request.session['inicioReservaHora'] = inicioReserva.hour request.session['inicioReservaMinuto'] = inicioReserva.minute request.session['anioinicial'] = inicioReserva.year request.session['mesinicial'] = inicioReserva.month request.session['diainicial'] = inicioReserva.day request.session['aniofinal'] = finalReserva.year request.session['mesfinal'] = finalReserva.month request.session['diafinal'] = finalReserva.day return render( request, 'confirmar.html', { 'id' : _id , 'monto' : monto , 'reserva' : reservaFinal , 'color' : 'green' , 'mensaje' : 'Existe un puesto disponible' } ) else: # Cambiar mensaje return render( request, 'template-mensaje.html', {'color' : 'red' , 'mensaje' : 'No hay un puesto disponible para ese horario' } ) return render( request, 'reserva.html', { 'form': form , 'estacionamiento': estacionamiento } )
def estacionamiento_reserva(request, _id): _id = int(_id) # Verificamos que el objeto exista antes de continuar try: estacionamiento = Estacionamiento.objects.get(id=_id) except ObjectDoesNotExist: raise Http404 # Verificamos que el estacionamiento este parametrizado if (estacionamiento.apertura is None): return HttpResponse(status=403) # Esta prohibido entrar aun # Si se hace un GET renderizamos los estacionamientos con su formulario if request.method == 'GET': form = ReservaForm() # Si es un POST estan mandando un request elif request.method == 'POST': form = ReservaForm(request.POST) # Verificamos si es valido con los validadores del formulario if form.is_valid(): inicioReserva = form.cleaned_data['inicio'] finalReserva = form.cleaned_data['final'] # debería funcionar con excepciones, y el mensaje debe ser mostrado # en el mismo formulario m_validado = validarHorarioReserva( inicioReserva, finalReserva, estacionamiento.apertura, estacionamiento.cierre, ) # Si no es valido devolvemos el request if not m_validado[0]: return render(request, 'template-mensaje.html', { 'color': 'red', 'mensaje': m_validado[1] }) if marzullo(_id, inicioReserva, finalReserva): reservaFinal = Reserva( estacionamiento=estacionamiento, inicioReserva=inicioReserva, finalReserva=finalReserva, ) monto = Decimal( estacionamiento.tarifa.calcularPrecio( inicioReserva, finalReserva)) request.session['monto'] = float( estacionamiento.tarifa.calcularPrecio( inicioReserva, finalReserva)) request.session['finalReservaHora'] = finalReserva.hour request.session['finalReservaMinuto'] = finalReserva.minute request.session['inicioReservaHora'] = inicioReserva.hour request.session['inicioReservaMinuto'] = inicioReserva.minute request.session['anioinicial'] = inicioReserva.year request.session['mesinicial'] = inicioReserva.month request.session['diainicial'] = inicioReserva.day request.session['aniofinal'] = finalReserva.year request.session['mesfinal'] = finalReserva.month request.session['diafinal'] = finalReserva.day return render( request, 'confirmar.html', { 'id': _id, 'monto': monto, 'reserva': reservaFinal, 'color': 'green', 'mensaje': 'Existe un puesto disponible' }) else: # Cambiar mensaje return render( request, 'template-mensaje.html', { 'color': 'red', 'mensaje': 'No hay un puesto disponible para ese horario' }) return render(request, 'reserva.html', { 'form': form, 'estacionamiento': estacionamiento })
def receive_sms(request): ip = get_client_ip( request) # Busca el IP del telefono donde esta montado el SMS Gateway port = '8000' # Puerto del telefono donde esta montado el SMS Gateway phone = request.GET.get('phone', False) sms = request.GET.get('text', False) if (not sms or not phone): return HttpResponse(status=400) # Bad request phone = urllib.parse.quote( str(phone)) # Codificacion porcentaje del numero de telefono recibido # Tratamiento del texto recibido try: sms = sms.split(' ') id_sms = int(sms[0]) inicio_reserva = sms[1] + ' ' + sms[2] final_reserva = sms[3] + ' ' + sms[4] inicio_reserva = parse_datetime(inicio_reserva) final_reserva = parse_datetime(final_reserva) except: return HttpResponse(status=400) # Bad request # Validacion del id de estacionamiento recibido por SMS try: estacionamiento = Estacionamiento.objects.get(id=id_sms) except ObjectDoesNotExist: text = 'No existe el estacionamiento ' + str(id_sms) + '.' text = urllib.parse.quote(str(text)) urllib.request.urlopen( 'http://{0}:{1}/sendsms?phone={2}&text={3}&password='******'No existe el estacionamiento ' + str(id_sms) + '.') # Validacion de las dos fechas recibidas por SMS m_validado = validarHorarioReserva( inicio_reserva, final_reserva, estacionamiento.apertura, estacionamiento.cierre, ) if m_validado[0]: '''reserva_sms = Reserva( estacionamiento = estacionamiento, inicioReserva = inicio_reserva, finalReserva = final_reserva, ) reserva_sms.save()''' text = 'Se realizó la reserva satisfactoriamente.' text = urllib.parse.quote(str(text)) urllib.request.urlopen( 'http://{0}:{1}/sendsms?phone={2}&text={3}&password='******'http://{0}:{1}/sendsms?phone={2}&text={3}&password='******'')