Example #1
0
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)
Example #2
0
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
Example #4
0
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
Example #6
0
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
Example #7
0
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)
Example #8
0
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))