def sacar_turno(id): permisos.validar_permisos('turno_edit') turno = Turno.get_by_id(id) if request.method == 'POST': t = request.form if t['email'] == '': disponible = 1 else: disponible = 0 Turno.edit(id, t['email'], t['telefono'], disponible) return redirect(url_for('index_turno', turno=turno)) else: return render_template('turnos_para_centro/sacar_turno.html', turno=turno)
def reserva(id): ide = id em = "*****@*****.**" te = "00000000000" fecha = '2020-12-24' h_i = '08:00:00' disponible = 0 hora_ini = datetime.datetime.strptime(h_i, "%H:%M:%S") var1 = hora_ini var1 = str(var1.hour) + ':' + str(var1.minute) + ":" + str(var1.second) var = hora_ini + datetime.timedelta(minutes=30) var = str(var.hour) + ':' + str(var.minute) + ":" + str(var.second) hora_fin = var turnos = Turno.query.filter_by(dia=fecha).all() lista = [] ok = True for turno in turnos: if str(turno.centro_id) == str(id): dic = { 'centro_id': turno.centro_id, 'hora_inicio': str(turno.hora_ini), 'hora_fin': str(turno.hora_fin), 'fecha': str(turno.dia) } lista.append(dic) for l in lista: if l['hora_inicio'] == var1: ok = False if ok == True: try: Turno.edit(ide, em, te, disponible) response = {'exito': 'Se agrego la reserva'} return jsonify(response) except: response = {'error': 'No existe el id del centro'} return jsonify(response) else: response = { 'Turnos': lista, 'Error': 'El turno que quiere reservar ya no esta disponible' } return jsonify(response)
def top10_centros_del_mes(): ''' Controlador para el api Endpoint /api/estadisticas/top10_centros_del_mes. Responde a un GET brindando los 10 con mayor cantidad de turnos y la cantidad de turnos ''' # Leer tablas try: centros_y_sus_turnos = [] todos_los_centros = Centro_de_ayuda.publicados() for centro in todos_los_centros: turnos_para_centro = Turno.turnos_tomados_para_centro(centro.id) cant_turnos = len(turnos_para_centro) centros_y_sus_turnos.append({ "nombre": centro.nombre, "cantidad": cant_turnos }) except: return jsonify( {"error": "500 Error en la lectura de la base de datos"}), 500 # Procesar centros_ordenados = sorted(centros_y_sus_turnos, key=lambda k: k['cantidad'], reverse=True) mejores_10_centros = centros_ordenados[:10] mejores_10_centros.reverse() # Generar respuesta response = {'top_10': mejores_10_centros} return jsonify(response), 200
def index_turno(id='', page=1, email=' '): permisos.validar_permisos('turno_index') per_page = Configuracion.get_config().cantPagina centros = Centro_de_ayuda.all() if request.method == 'GET': email = email if request.method == 'POST': page = 1 params = request.form email = params['email'] or ' ' if email == ' ': if id: turnos_todos = Turno.get_proximos_turnos(id).filter( Turno.email.like('%' + '%')).paginate(page, per_page=per_page) return render_template('turnos_para_centro/index_turno.html', turnos=turnos_todos, centros=centros, email=email, id=id) else: turnos_todos = Turno.query.filter( Turno.email.like('%' + '%')).paginate(page, per_page=per_page) return render_template('turnos_para_centro/index_turno.html', turnos=turnos_todos, centros=centros, email=email) else: if id: turnos_todos = Turno.query.filter_by(centro_id=id).filter( Turno.email.like('%' + email + '%')).paginate( page, per_page=per_page) return render_template('turnos_para_centro/index_turno.html', turnos=turnos_todos, centros=centros, email=email, id=id) else: turnos_todos = Turno.query.filter( Turno.email.like('%' + email + '%')).paginate( page, per_page=per_page) return render_template('turnos_para_centro/index_turno.html', turnos=turnos_todos, centros=centros, email=email)
def total_turnos_del_mes(): ''' Controlador para el api Endpoint /api/estadisticas/total_turnos_del_mes. Responde a un GET brindando los turnos solicitados en los últimos 30 días ''' # Inicializar variables contadores_turnos_por_dia = {} dia_actual = datetime.now() for i in range(30): contadores_turnos_por_dia[dia_actual.strftime("%m-%d-%Y")] = 0 dia_actual = dia_actual - timedelta(days=1) # Leer tablas try: turnos = Turno.turnos_tomados_del_mes() except: return jsonify( {"error": "500 Error en la lectura de la base de datos"}), 500 # Procesar for turno in turnos: try: contadores_turnos_por_dia[turno.dia.strftime( "%m-%d-%Y" )] = contadores_turnos_por_dia[turno.dia.strftime("%m-%d-%Y")] + 1 except: res = [] # Generar respuesta res = [] dia_actual = datetime.now() for i in range(30): str_del_dia = dia_actual.strftime("%m-%d-%Y") try: turnos_del_dia = contadores_turnos_por_dia[str_del_dia] res.append({"dia": str_del_dia, "turnos": turnos_del_dia}) except: nada = 'nada' dia_actual = dia_actual - timedelta(days=1) response = {'turnos_por_dia': res} return jsonify(response), 200
def pedir_reserva(id_centro): if request.method == "GET": # Devuelvo el cuerpo de la consulta post response = { "centro_id": "8", "nombre": "Juan", "apellido": "Perez", "email_donante": "*****@*****.**", "fecha": "2020-11-12", "bloque_horario": "09:30 - 10:00", "telefono_donante": "2215930941" } return jsonify(response), 200 else: # Me estan haciendo post! nuevo_turno = request.get_json() print("Se va a imprimir el json") print(request.get_json()) # Obtengo los datos centro_id = nuevo_turno["centro_id"] fecha = nuevo_turno["fecha"] bloque_horario = nuevo_turno["bloque_horario"] hora_ini = bloque_horario[0:5] hora_fin = bloque_horario[8:13] email_donante = nuevo_turno["email_donante"] telefono = nuevo_turno["telefono_donante"] nombre = nuevo_turno["nombre_donante"] apellido = nuevo_turno["apellido_donante"] print("Se pudo leer bien el json") print(hora_ini) print(centro_id) print(fecha) # Proceso if Turno.es_valido(centro_id=centro_id, fecha=fecha, hora_inicio=hora_ini): try: if Turno.reservar_turno(centro_id=centro_id, email_donante=email_donante, telefono_donante=telefono, nombre_donante=nombre, apellido_donante=apellido, hora_inicio=hora_ini, hora_fin=hora_fin, fecha=fecha): diccionario = { "centro_id": centro_id, "email_donante": email_donante, "telefono_donante": telefono, "nombre_donante": nombre, "apellido_donante": apellido, "hora_inicio": hora_ini, "hora_fin": hora_fin, "fecha": fecha } response = {"atributos": diccionario} return jsonify(response), 201 except Exception as e: return jsonify({"error": "500 Internal Server Error"}), 500 else: print("Sale porque le turno ya esta ocupado") return jsonify({"error": "400 Bad request"}), 400
def crear_turno(id_centro): permisos.validar_permisos('turno_create') centros = Centro_de_ayuda.all() turnos_todos = Turno.all() centro = Centro_de_ayuda.query.filter_by(id=id_centro).first() f = str(date.today()) if request.method == 'POST': t = request.form fecha = t['fecha'] id_centro = t['id_centro'] solo_fecha = t['solo_fecha'] if solo_fecha == "si": turnos_ocupados = Turno.query.filter_by( centro_id=id_centro).filter_by(dia=fecha).filter_by( disponible=0).filter_by(borrado=0).all() turnos_disponibles = [ "09:00 - 09:30", "09:30 - 10:00", "10:00 - 10:30", "10:30 - 11:00", "11:00 - 11:30", "11:30 - 12:00", "12:00 - 12:30", "12:30 - 13:00", "13:00 - 13:30", "13:30 - 14:00", "14:00 - 14:30", "14:30 - 15:00", "15:00 - 15:30", "15:30 - 16:00" ] for turno_ocupado in turnos_ocupados: # Armar fecha_ocupada - Tuve que cambiar hora_ini y hora_fin a VARCHAR en la BD fecha_ocupada = turno_ocupado.hora_ini + " - " + turno_ocupado.hora_fin try: turnos_disponibles.remove(fecha_ocupada) except: pass return render_template( 'turnos_para_centro/crear_turno_con_fecha.html', centro=id_centro, fecha=fecha, turnos=turnos_disponibles) hora_ini = t['bloque_horario'][0:5] hora_fin = t['bloque_horario'][8:13] email = t['email'] telefono = t['telefono'] fecha = t['fecha'] nombre = t['nombre'] apellido = t['apellido'] borrado = 0 disponible = 0 nuevo_turno = Turno(email=email, telefono=telefono, hora_ini=hora_ini, hora_fin=hora_fin, dia=fecha, borrado=borrado, centro_id=id_centro, disponible=disponible, nombre=nombre, apellido=apellido) db.session.add(nuevo_turno) db.session.commit() return redirect( url_for('index_turno', id=id_centro, turnos=turnos_todos)) else: return render_template('turnos_para_centro/crear_turno.html', centro=centro, centros=centros, f=f)
def borrar_turno(id): permisos.validar_permisos('turno_delete') id_centro = Turno.query.filter_by(id=id).first().centro_id Turno.delete(id) turno = Turno.all() return redirect(url_for('index_turno', id=id_centro))