diff options
Diffstat (limited to 'nutrinoweb/controllers/eating.py')
-rw-r--r-- | nutrinoweb/controllers/eating.py | 278 |
1 files changed, 166 insertions, 112 deletions
diff --git a/nutrinoweb/controllers/eating.py b/nutrinoweb/controllers/eating.py index b8a9b31..a950852 100644 --- a/nutrinoweb/controllers/eating.py +++ b/nutrinoweb/controllers/eating.py @@ -12,15 +12,17 @@ import Avatar from flask import redirect, url_for -IM_PATH = ['../static/images/journal/jauge-energie.png'] - @app.route('/eating', methods=['GET', 'POST']) def eating(): - database_manager.init_db('nutrition') - database_manager.load_inputfilenutrition() + #database_manager.init_db('nutrition') + #database_manager.load_inputfilenutrition() + #database_manager.init_db3() + + #init entries = database_manager.entries() - IM_PATH = None + _aliments = database_manager.aliments() path = '../../static/images/journal/backgroundeating.png' + pathi = '../../static/images/journal/default.png' _entry = None _result = None _text = 'Hi, how can I help you?' @@ -28,60 +30,148 @@ def eating(): _visibilitybutton = 'hidden' _visibilitytextbox2 = 'hidden' _link = 'hidden' - _scenario = 'rack' - content = [ ] - position = [70, 0] + #4 different scenarios: fruits, meatcounter, rack and fridge + _scenario = None + name = None + progressbar = [ ] + tablealiment = None + + i = Avatar.Character(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, None) + i.load_status() + + #prepare position for the sun + position = i.Position + positionX = position[0] + positionY = position[1] + + #calculate time + daytime = "am" + hours = int(round(i.Time//60)) + 8 + minutes = int((i.Time % 60)) + if (minutes == 0): + minutes = "00" + else: + minutes = str(minutes) + if (hours > 11): + daytime = "pm" + if (hours > 12): + hours = hours - 12 + time = str(hours) + ":" + minutes + " " + daytime + + #Sun should not move, so start- and endposition have the same coordinates + positionSun = { + 'positionX': positionX, + 'positionstartX': positionX, + 'positionY': positionY, + 'positionstartY': positionY, + 'timeString': time + } + # POST if request.method == 'POST': - _aliments = database_manager.aliments() if 'send' in request.form: + #collect information about the scenario, the backgroundimage and the text in the bubble _scenario = request.form['send'] path = '../../static/images/journal/background' + _scenario + '.png' - _text = 'What are you searching for?' + _text = 'Hi, how can I help you? What are you searching for?' _visibilitytextbox = 'visible' + + #gives all aliments who should appears in the stand + tablealiment = database_manager.return_tablealiments(_scenario) + elif 'cooking' in request.form: + + #this part calculates the progress for each aliment the user has choosen for aliment in _aliments: - _result = calculateDimension(aliment, entries) - pathi = '../../static/images/journal/aliments/' + aliment['title'] + '.png' - cont = { + if aliment['title'] != "": + waterstart = i.Water + energiestart = i.Energie + vitaminestart = i.Vit_total + constructionstart = i.Construction + calculateDimension(aliment, entries, i) + pathi = '../../static/images/journal/aliments/' + aliment['title'] + '.png' + + #contents for main.html + contents = { + 'title': _(aliment['title']), + 'water': calculateHeight(i.Water), + 'energie': calculateHeight(i.Energie), + 'vitamine': calculateHeight(i.Vit_total), + 'construction': calculateHeight(i.Construction), + 'waterstart': calculateHeight(waterstart), + 'energiestart': calculateHeight(energiestart), + 'vitaminestart': calculateHeight(vitaminestart), + 'constructionstart': calculateHeight(constructionstart), + 'pathimg': pathi, + } + progressbar.append(contents) + + else: + #contents for main.html + contents = { 'title': _(aliment['title']), - 'image': IM_PATH, - 'water': _result[0], - 'energie': _result[1], - 'vitamine': _result[2], - 'construction': _result[3], - 'waterstart': _result[4], - 'energiestart': _result[5], - 'vitaminestart': _result[6], - 'constructionstart': _result[7], + 'water': calculateHeight(i.Water), + 'energie': calculateHeight(i.Energie), + 'vitamine': calculateHeight(i.Vit_total), + 'construction': calculateHeight(i.Construction), + 'waterstart': calculateHeight(i.Water), + 'energiestart': calculateHeight(i.Energie), + 'vitaminestart': calculateHeight(i.Vit_total), + 'constructionstart': calculateHeight(i.Construction), 'pathimg': pathi, } - content.append(cont) - _content = { 'content': content, 'position': position} + progressbar.append(contents) + + #log aliments + database_manager.write_log(_aliments, 'a') + + #save status + i.save_status() + + _content = { 'progressbar': progressbar, 'positionSun': positionSun } # render result return render('nutrinoweb/main.html', **_content) + elif 'askforaliment' in request.form: _scenario = request.form['info1'] - path = '../../static/images/journal/background' + _scenario + '.png' - _entry = database_manager.show_entry('nutrition') + path = '../../static/images/journal/background' + request.form['info1'] + '.png' + tablealiment = database_manager.return_tablealiments(_scenario) + name = request.form['title'] + _entry = database_manager.show_entry('nutrition', name) if (_entry != None): if _entry[23] == _scenario or _entry[23] == None: _text = 'How much do you want?' _visibilitytextbox2 = 'visible' else: _text = 'Sorry, I do not have ' + request.form['title'] + '. Maybe you should ask somewhere else!' + _visibilitytextbox = 'visible' else: _text = 'Sorry, I do not have ' + request.form['title'] + '. Do you want something else?' _visibilitytextbox = 'visible' _link = 'visible' + + elif 'standaliment' in request.form: + _scenario = request.form['info1'] + path = '../../static/images/journal/background' + _scenario + '.png' + tablealiment = database_manager.return_tablealiments(_scenario) + name = request.form['standaliment'] + _entry = database_manager.show_entry('nutrition', name) + if (_entry != None): + _text = 'How much do you want?' + _visibilitytextbox2 = 'visible' + else: + pass + elif 'orderaliment' in request.form: - _scenario = request.form['info3'] + _scenario = request.form['info1'] path = '../../static/images/journal/background' + _scenario + '.png' + tablealiment = database_manager.return_tablealiments(_scenario) _text = 'What else do you want?' _visibilitytextbox = 'visible' pathtoimage = '../static/images/journal/aliments/' + request.form['info2'] + '.png' database_manager.add_entry_tolist(request.form['info2'], pathtoimage, request.form['quantity'], request.form['unit']) _aliments = database_manager.aliments() + else: pass # GET @@ -91,7 +181,10 @@ def eating(): database_manager.init_db3() _aliments = database_manager.aliments() - # + #save status + i.save_status() + + #content for eating.html _content = { 'title': _('What do you want to eat?'), 'entries': entries, @@ -104,114 +197,75 @@ def eating(): 'visibilitybutton': _visibilitybutton, 'aliments': _aliments, 'scenario': _scenario, - 'linkvisiblity': _link + 'linkvisiblity': _link, + 'tablealiment': tablealiment, + 'name': name, } # render result return render('nutrinoweb/eating.html', **_content) - -def calculateDimension(result, entries): +def calculateDimension(result, entries, i): water = None energie = None vitamine = None construction = None vitstart = None - instance = Avatar.Character() - eng = instance.load_status() + factor = 1 if result != None and entries != None: - eng = instance.load_status() for entry in entries: if result['title'].upper() in entry['title']: - factor = result['quantity'] / 100.0 + #calculate the factor (in the database every value based on 100ml/g) + #serving means a dish of something, each value is determined in the database, f.e. a applepiece has about 50g + if result['unit'] == 'serving': + fac = result['quantity'] * float(entry['serving']) + factor = fac / 100.0 + else: + factor = result['quantity'] / 100.0 + + #calculate the value in ml/g multiplie with the statusvalue + #part water - _water = controllValue(((factor*calculateWater(float(entry['water']))) / 2) + float(eng['water'])) - water = calculateHeight(_water) + i.Water = controllValue(((factor*calculateWater(float(entry['water']))) / 2) + i.Water) - #part energie - _energie = controllValue((factor*calculateEnergie(float(entry['energie']))) + float(eng['energie'])) - energie = calculateHeight(_energie) + #part energie + i.Energie = controllValue((factor*calculateEnergie(float(entry['energie']))) + i.Energie) #part vitamine - _vitamine = calculateVitamine(factor, entry, eng) - vitamine = calculateHeight(_vitamine[0]) + i.Vit_total = calculateVitamine(factor, entry, i) #part construction - _construction = controllValue((factor*calculateConstruction(float(entry['protein']))) + float(eng['construction'])) - construction = calculateHeight(_construction) - - status = { - "water": _water, - "energie": _energie, - "calcium": _vitamine[1], - "iron" : _vitamine[2], - "magnesium": _vitamine[3], - "phosphorus": _vitamine[4], - "potassium": _vitamine[5], - "sodium": _vitamine[6], - "zinc": _vitamine[7], - "copper": _vitamine[8], - "vit_c": _vitamine[9], - "thiamin": _vitamine[10], - "riboflavin": _vitamine[11], - "niacin": _vitamine[12], - "panto_acid": _vitamine[13], - "vit_b6": _vitamine[14], - "folate_tot": _vitamine[15], - "vit_b12": _vitamine[16], - "vit_a": _vitamine[17], - "vit_e": _vitamine[18], - "vit_d": _vitamine[19], - "vit_total": _vitamine[0], - "construction": _construction - } - - instance.save_status(status) + i.Construction = controllValue((factor*calculateConstruction(float(entry['protein']))) + i.Construction) + else: pass - else: - #part water - water = 100.0 - float(eng['water']) - - #part energie - energie = 100.0 - float(eng['energie']) - - #part vitamine - vitamine = 100.0 - float(eng['vit_total']) - - #part construction - construction = 100.0 - float(eng['construction']) - - _result = [water, energie, vitamine, construction, calculateHeight(float(eng['water'])), calculateHeight(float(eng['energie'])), calculateHeight(float(eng['vit_total'])), calculateHeight(float(eng['construction']))] - return _result def calculateEnergie(energie): height = energie/4.0 return height -def calculateVitamine(f, entry, status): - calcium = controllValue(float(status['calcium']) + (f*(float(entry['calcium']) / 9.0))) - iron = controllValue(float(status['iron']) + (f*(float(entry['iron']) / 0.125))) - magnesium = controllValue(float(status['magnesium']) + (f*(float(entry['magnesium']) / 2.1))) - phosphorus = controllValue(float(status['phosphorus']) + (f*(float(entry['phosphorus']) / 10))) - potassium = controllValue(float(status['potassium']) + (f*(float(entry['potassium']) / 15.5))) - sodium = controllValue(float(status['sodium']) + (f*(float(entry['sodium']) / 4.85))) - zinc = controllValue(float(status['zinc']) + (f*(float(entry['zinc']) / 0.08))) - copper = controllValue(float(status['copper']) + (f*(float(entry['copper']) / 0.0115))) - vit_c = controllValue(float(status['vit_c']) + (f*(float(entry['vit_c']) / 0.85))) - thiamin = controllValue(float(status['thiamin']) + (f*(float(entry['thiamin']) / 0.012))) - riboflavin = controllValue(float(status['riboflavin']) + (f*(float(entry['riboflavin']) / 0.011))) - niacin = controllValue(float(status['niacin']) + (f*(float(entry['niacin']) / 0.13))) - panto_acid = controllValue(float(status['panto_acid']) + (f*(float(entry['panto_acid']) / 0.05))) - vit_b6 = controllValue(float(status['vit_b6']) + (f*(float(entry['vit_b6']) / 0.0085))) - folate_tot = controllValue(float(status['folate_tot']) + (f*(float(entry['folate_tot']) / 3.5))) - vit_b12 = controllValue(float(status['vit_b12']) + (f*(float(entry['vit_b12']) / 0.019))) - vit_a = controllValue(float(status['vit_a']) + (f*(float(entry['vit_a']) / 0.11))) - vit_e = controllValue(float(status['vit_e']) + (f*(float(entry['vit_e']) / 0.05))) - vit_d = controllValue(float(status['vit_d']) + (f*(float(entry['vit_d']) / 0.315))) - - height = (calcium + iron + magnesium + phosphorus + potassium + sodium + zinc + copper + vit_c + thiamin + riboflavin + niacin + panto_acid + vit_b6 + folate_tot + vit_b12 + vit_a + vit_e + vit_d)/19.0 - height = [height, calcium, iron, magnesium, phosphorus, potassium, sodium, zinc, copper, vit_c, thiamin, riboflavin, niacin, panto_acid, vit_b6, folate_tot, vit_b12, vit_a, vit_e, vit_d] +def calculateVitamine(f, entry, i): + i.Calcium = controllValue(i.Calcium + (f*(float(entry['calcium']) / 9.0))) + i.Iron = controllValue(i.Iron + (f*(float(entry['iron']) / 0.125))) + i.Magnesium = controllValue(i.Magnesium + (f*(float(entry['magnesium']) / 2.1))) + i.Phosphorus = controllValue(i.Phosphorus + (f*(float(entry['phosphorus']) / 10))) + i.Potassium = controllValue(i.Potassium + (f*(float(entry['potassium']) / 15.5))) + i.Sodium = controllValue(i.Sodium + (f*(float(entry['sodium']) / 4.85))) + i.Zinc = controllValue(i.Zinc + (f*(float(entry['zinc']) / 0.08))) + i.Copper = controllValue(i.Copper + (f*(float(entry['copper']) / 0.0115))) + i.Vit_c = controllValue(i.Vit_c + (f*(float(entry['vit_c']) / 0.85))) + i.Thiamin = controllValue(i.Thiamin + (f*(float(entry['thiamin']) / 0.012))) + i.Riboflavin = controllValue(i.Riboflavin + (f*(float(entry['riboflavin']) / 0.011))) + i.Niacin = controllValue(i.Niacin + (f*(float(entry['niacin']) / 0.13))) + i.Panto_acid = controllValue(i.Panto_acid + (f*(float(entry['panto_acid']) / 0.05))) + i.Vit_b6 = controllValue(i.Vit_b6 + (f*(float(entry['vit_b6']) / 0.0085))) + i.Folate_tot = controllValue(i.Folate_tot + (f*(float(entry['folate_tot']) / 3.5))) + i.Vit_b12 = controllValue(i.Vit_b12 + (f*(float(entry['vit_b12']) / 0.019))) + i.Vit_a = controllValue(i.Vit_a + (f*(float(entry['vit_a']) / 0.11))) + i.Vit_e = controllValue(i.Vit_e + (f*(float(entry['vit_e']) / 0.05))) + i.Vit_d = controllValue(i.Vit_d + (f*(float(entry['vit_d']) / 0.315))) + + height = (i.Calcium + i.Iron + i.Magnesium + i.Phosphorus + i.Potassium + i.Sodium + i.Zinc + i.Copper + i.Vit_c + i.Thiamin + i.Riboflavin + i.Niacin + i.Panto_acid + i.Vit_b6 + i.Folate_tot + i.Vit_b12 + i.Vit_a + i.Vit_e + i.Vit_d) / 19.0 return height def controllValue(value): @@ -221,11 +275,11 @@ def controllValue(value): def calculateWater(water): - height = water/17.5 + height = water/1.5 return height def calculateConstruction(construction): - height = construction/0.215 #daily value 0.9g/kg weight, a child of 35kg needs 21.5g + height = construction/0.252 #daily value 0.9g/kg weight, a child of 35kg needs 21.5g return height def calculateHeight(height): |