Beispiel #1
0
def exercise(id):

    error = utils.errormessage(request.args.get('error'))

    if not users.loggedin():

        return redirect('/')

    exercise = contents.exercise(id)
    userid = exercise[1]
    comments = contents.comments(id)

    if not (exercise == None):

        if (users.userid() == userid or (users.userlevel() > 1)):

            return render_template("exercise.html",
                                   exercise=exercise,
                                   comments=comments,
                                   id=id,
                                   error=error)

        abort(403)

    abort(404)
Beispiel #2
0
def index():

    error = utils.errormessage(request.args.get('error'))

    if not users.loggedin():

        return render_template("login.html", error=error)

    exercises = ''

    if not (users.userlevel() > 1):

        exercises = contents.usersExercises(users.userid())
        return render_template("index.html",
                               exercises=exercises,
                               username=users.username(),
                               exercisetypes=contents.exercisetypes(),
                               error=error)

    else:

        exercises = contents.allExercises()
        return render_template("indexadmin.html",
                               exercises=exercises,
                               username=users.username(),
                               exercisetypes=contents.exercisetypes(),
                               error=error)
Beispiel #3
0
def sendingredient():
    if users.loggedin() == False:
        return render_template(
            "index.html",
            error="Tämä ominaisuus on vain kirjautuneille käyttäjille")
    if users.csrf() != request.form["csrf_token"]:
        abort(403)

    ingredient = request.form["ingredient"]
    price = request.form["price"]
    amount = request.form["amount"]
    unit = request.form["unitradio"]
    #sql

    try:
        sql = "INSERT INTO ingredients (ingredient, price, amount, measureunit_id) VALUES (:ingredient, :price, :amount, :unit) RETURNING id"
        result = db.session.execute(
            sql, {
                "ingredient": ingredient,
                "price": price,
                "amount": amount,
                "unit": unit
            })
        ingredientid = result.fetchone()[0]

        sql = "SELECT id FROM filter"
        result = db.session.execute(sql)

        filters = request.form.getlist("filtercheck")

        if (len(filters)) > 0:
            sql = "INSERT INTO filter_ingredient (filter_id, ingredient_id)  VALUES "
            for id in filters:
                sql += "("
                sql += str(int(id))
                sql += ", :ingredientid)"
            sql = sql.replace(")(", "), (")
            db.session.execute(sql, {"ingredientid": ingredientid})

        db.session.commit()
        return redirect("/listingredients")
    except:
        return render_template(
            "index.html",
            error=
            "Tapahtui virhe. Huomaathan, että ainesosaa ei saa olla ennestään tietokannassa ja sen hinnan on oltava yli 0."
        )
Beispiel #4
0
def userslist():

    error = utils.errormessage(request.args.get('error'))

    if not (users.loggedin() and (users.userlevel() > 1)):

        abort(403)

    allusers = users.users()
    alluserlevels = users.userlevels()

    if users.userlevel() == 2:

        return render_template("users.html", users=allusers)

    elif users.userlevel() == 3:

        return render_template("usersadmin.html",
                               users=allusers,
                               userlevels=alluserlevels,
                               error=error)
Beispiel #5
0
def sendrecipe():
    if users.loggedin() == False:
        return render_template(
            "index.html",
            error="Tämä ominaisuus on vain kirjautuneille käyttäjille")

    if users.csrf() != request.form["csrf_token"]:
        abort(403)

    try:
        ic = request.form["count"]
        ingredientcount = int(ic)
        name = request.form["name"]

        sql = "INSERT INTO recipes (name) VALUES (:name) RETURNING id; "
        result = db.session.execute(sql, {"name": name})
        recipe_id = result.fetchone()[0]
        sql = "INSERT INTO recipes_ingredients (recipe_id, ingredient_id, count) VALUES "

        for x in range(ingredientcount):
            i = str(x + 1)
            id = str(int(request.form["hiddenId" + i]))
            count = str(int(request.form["hiddenCount" + i]))
            sql += (" (" + ":recipe_id, " + id + ", " + count + ")")
            if (x < (ingredientcount - 1)):
                sql += ","

        db.session.execute(sql, {"recipe_id": recipe_id})
        db.session.commit()
        return render_template("index.html", message="Ostoslista tallennettu")
    except:
        return render_template(
            "index.html",
            error=
            "Tapahtui virhe. Annathan ostoslistalle nimen, ja sellaisen, joka ei ole ennestään käytössä"
        )
Beispiel #6
0
def generaterecipepost():
    if users.loggedin() == False:
        return render_template(
            "index.html",
            error="Tämä ominaisuus on vain kirjautuneille käyttäjille")
    if users.csrf() != request.form["csrf_token"]:
        abort(403)
    try:
        budget = float(request.form["budget"])
    except:
        return render_template(
            "index.html",
            error="Anna budjetti numeroina, desimaalierottimena piste")
    if (budget <= 0):
        return render_template("index.html",
                               error="Noin halvalla et ikävä kyllä voi päästä")

    max_ingredient_amount = int(math.sqrt(random.random() * 80) + 1)
    #result = db.session.execute("SELECT COUNT(*) FROM ingredients")
    #count = result.fetchone()[0]
    strjoin = ""
    strwhere = ""

    filters = request.form.getlist("filtercheck")

    if (len(filters)) > 0:
        strwhere = "WHERE 1 = 1 "
        for id in filters:
            filterid = str(int(id))
            alias = "al" + filterid
            strjoin += "	INNER JOIN filter_ingredient " + alias + " ON " + alias + ".ingredient_id = ingredients.id "
            strwhere += "AND " + alias + ".filter_id = " + filterid + " "

    strj = "	INNER JOIN filter_ingredient a1 ON a1.ingredient_id = ingredients.id "

    stringsql = \
        "SELECT *, ROW_NUMBER() OVER (ORDER by id) as htmlid " + \
        "FROM  ( " + \
        " SELECT DISTINCT 1 + trunc(random() *  " + \
        "   (select COUNT(*) from ingredients " + \
        strjoin + \
        strwhere + \
        "	) " + \
        " )::integer AS id " + \
        " FROM   generate_series(1, :max_ingredient_amount) g " + \
        " ) r " + \
        " JOIN    " + \
        "( " + \
        "select ROW_NUMBER () OVER (ORDER BY id) as id, ingredient, id as originalid, price from ingredients " + \
        strjoin + \
        strwhere + \
        ") validfoods " + \
        "USING (id) " \
        "ORDER BY id; "

    recipe = db.session.execute(
        stringsql, {"max_ingredient_amount": max_ingredient_amount})

    weights = []
    weightsum = 0

    rowcount = recipe.rowcount

    for r in range(rowcount):
        weight = random.randint(1, 10)
        weights.append(weight)
        weightsum += weight

    modifier = 1 / (weightsum * 1.0 / budget)

    totalprice = 0
    cheapestindex = 0
    cheapestprice = 0
    weighedrecipe = []

    currentindex = 0
    for food in recipe:
        if food[3] < cheapestprice or cheapestprice == 0:
            cheapestprice = food[3]
            cheapestindex = currentindex

        individualbudget = modifier * weights[currentindex]
        count = int(individualbudget / float(food[3]))
        totalprice += count * food[3]
        weighedrecipe.append(
            [food[0], food[1], food[2], food[3], count, food[4]])
        #test += (str(food[0]) + " " + str(food[1]) + " " + str(food[2]) + " " + str(food[3]) + " " + str(count) + "\n")

        currentindex = currentindex + 1

    #moneyleft = budget - totalprice
    #if cheapestprice > 0:
    #morestuffamount = weighedrecipe[cheapestindex]
    #TODO add more stuff to the list to better utilize budget
    if len(weighedrecipe) == 0:
        return redirect(
            "index.html",
            error="Ostoslistaa ei voitu muodostaa. Yritä höllentää kriteerejäsi"
        )
    return render_template("showrecipe.html",
                           items=weighedrecipe,
                           totalprice=totalprice,
                           count=rowcount)