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)
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)
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." )
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)
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ä" )
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)