mirror of
https://github.com/StefBuwalda/cal_counter.git
synced 2025-10-30 03:10:00 +00:00
Add ability to remove food logs from daily log
Introduced a new route and backend logic to allow users to delete their own food log entries. Updated the daily_log.html template to display delete buttons for each log entry, improving user control over their daily food logs.
This commit is contained in:
@@ -4,11 +4,12 @@ from flask import (
|
||||
url_for,
|
||||
render_template,
|
||||
flash,
|
||||
abort,
|
||||
)
|
||||
from flask_login import current_user
|
||||
from application import db
|
||||
from forms import FoodItemForm
|
||||
from models import FoodItem
|
||||
from models import FoodItem, FoodLog
|
||||
from datetime import datetime, timezone
|
||||
|
||||
user_bp = Blueprint(
|
||||
@@ -78,7 +79,19 @@ def daily_log():
|
||||
logs = [[], [], [], []]
|
||||
for log in logs_today:
|
||||
logs[log.part_of_day].append(log)
|
||||
print(logs)
|
||||
return render_template(
|
||||
"daily_log.html", date=(today.strftime("%d/%m/%y")), logs=logs
|
||||
)
|
||||
|
||||
|
||||
@user_bp.route("/remove_log/<int:id>", methods=["POST"])
|
||||
def remove_log(id: int):
|
||||
log = db.session.get(FoodLog, id)
|
||||
# Check if log exists and if user owns log
|
||||
if log is None or log.user_id != current_user.id:
|
||||
abort(404)
|
||||
|
||||
# Delete log
|
||||
db.session.delete(log)
|
||||
db.session.commit()
|
||||
return redirect(url_for("user.daily_log"))
|
||||
|
||||
@@ -19,55 +19,154 @@ Food Nutritional Info
|
||||
|
||||
<div class="p-3 border rounded">
|
||||
<div class="text-center">
|
||||
<h2>Detailed Information</h2>
|
||||
<p>More content here...</p>
|
||||
<h2>Eaten today</h2>
|
||||
</div>
|
||||
<div class="p-3 mb-2 border rounded">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h4 class="mb-0">Breakfast</h4>
|
||||
<a href="{{url_for('add_meal.step1', meal_type=0)}}" class="btn btn-sm btn-primary">Add</a>
|
||||
<!-- Header row (centered vertically for consistency) -->
|
||||
<div class="row align-items-center mb-2">
|
||||
<div class="col">
|
||||
<h4 class="mb-0">Breakfast</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<h4 class="mb-0">Amount</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<a href="{{ url_for('add_meal.step1', meal_type=0) }}"
|
||||
class="btn btn-sm btn-primary px-3 py-1">Add</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Data rows -->
|
||||
<div>
|
||||
{% for log in logs[0] %}
|
||||
<p class="p-0 mb-0">{{log.food_item.name}} - {{"{:g}".format(log.amount)}}</p>
|
||||
<div class="row mb-2">
|
||||
<div class="col text-wrap">
|
||||
{{ log.food_item.name }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
{{ "{:g}".format(log.amount) }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
<form method="POST" action="{{url_for('user.remove_log', id=log.id)}}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger px-3 py-1"
|
||||
title="Delete">×</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="p-3 mb-2 border rounded">
|
||||
<!-- Header row (centered vertically for consistency) -->
|
||||
<div class="row align-items-center mb-2">
|
||||
<div class="col">
|
||||
<h4 class="mb-0">Lunch</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<h4 class="mb-0">Amount</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<a href="{{ url_for('add_meal.step1', meal_type=1) }}"
|
||||
class="btn btn-sm btn-primary px-3 py-1">Add</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Data rows -->
|
||||
<div>
|
||||
{% for log in logs[1] %}
|
||||
<div class="row mb-2">
|
||||
<div class="col text-wrap">
|
||||
{{ log.food_item.name }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
{{ "{:g}".format(log.amount) }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
<form method="POST" action="{{url_for('user.remove_log', id=log.id)}}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger px-3 py-1"
|
||||
title="Delete">×</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="p-3 mb-2 border rounded">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h4 class="mb-0">Lunch</h4>
|
||||
<a href="{{url_for('add_meal.step1', meal_type=1)}}" class="btn btn-sm btn-primary">Add</a>
|
||||
</div>
|
||||
<div>
|
||||
{% for log in logs[1] %}
|
||||
<p class="p-0 mb-0">{{log.food_item.name}} - {{"{:g}".format(log.amount)}}</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-3 mb-2 border rounded">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h4 class="mb-0">Dinner</h4>
|
||||
<a href="{{url_for('add_meal.step1', meal_type=2)}}" class="btn btn-sm btn-primary">Add</a>
|
||||
<!-- Header row (centered vertically for consistency) -->
|
||||
<div class="row align-items-center mb-2">
|
||||
<div class="col">
|
||||
<h4 class="mb-0">Dinner</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<h4 class="mb-0">Amount</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<a href="{{ url_for('add_meal.step1', meal_type=2) }}"
|
||||
class="btn btn-sm btn-primary px-3 py-1">Add</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Data rows -->
|
||||
<div>
|
||||
{% for log in logs[2] %}
|
||||
<p class="p-0 mb-0">{{log.food_item.name}} - {{"{:g}".format(log.amount)}}</p>
|
||||
<div class="row mb-2">
|
||||
<div class="col text-wrap">
|
||||
{{ log.food_item.name }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
{{ "{:g}".format(log.amount) }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
<form method="POST" action="{{url_for('user.remove_log', id=log.id)}}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger px-3 py-1"
|
||||
title="Delete">×</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="p-3 mb-2 border rounded">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<h4 class="mb-0">Snacks</h4>
|
||||
<a href="{{url_for('add_meal.step1', meal_type=3)}}" class="btn btn-sm btn-primary">Add</a>
|
||||
<!-- Header row (centered vertically for consistency) -->
|
||||
<div class="row align-items-center mb-2">
|
||||
<div class="col">
|
||||
<h4 class="mb-0">Snacks</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<h4 class="mb-0">Amount</h4>
|
||||
</div>
|
||||
<div class="col-auto text-end" style="min-width: 80px;">
|
||||
<a href="{{ url_for('add_meal.step1', meal_type=3) }}"
|
||||
class="btn btn-sm btn-primary px-3 py-1">Add</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Data rows -->
|
||||
<div>
|
||||
{% for log in logs[3] %}
|
||||
<p class="p-0 mb-0">{{log.food_item.name}} - {{"{:g}".format(log.amount)}}</p>
|
||||
<div class="row mb-2">
|
||||
<div class="col text-wrap">
|
||||
{{ log.food_item.name }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
{{ "{:g}".format(log.amount) }}
|
||||
</div>
|
||||
<div class="col-auto text-end align-self-start" style="min-width: 80px;">
|
||||
<form method="POST" action="{{url_for('user.remove_log', id=log.id)}}" class="d-inline">
|
||||
<button type="submit" class="btn btn-sm btn-danger px-3 py-1"
|
||||
title="Delete">×</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock%}
|
||||
{% endblock%}
|
||||
Reference in New Issue
Block a user