add entry manually

This commit is contained in:
2026-02-12 10:33:32 +01:00
parent ef9b54b4be
commit 0a18e08581
2 changed files with 156 additions and 1 deletions

47
app.py
View File

@@ -513,6 +513,12 @@ def logbook():
if not is_logged_in(): return redirect(url_for('login'))
user_id = get_user_id()
# Fetch activities for the manual entry dropdown
activities = list(db.activities.find({'user_id': user_id}))
# Ensure keys exist for template using them safely
for a in activities:
if 'subcategories' not in a: a['subcategories'] = []
# --- Statistics Logic ---
time_range = request.args.get('range', '24h')
now = datetime.now()
@@ -616,7 +622,46 @@ def logbook():
entry['duration_str'] = str(duration).split('.')[0]
entry['is_running'] = True
return render_template('logbook.html', log=log, chart_data=chart_data, current_range=time_range, total_time_display=total_time_display)
return render_template('logbook.html', log=log, chart_data=chart_data, current_range=time_range, total_time_display=total_time_display, activities=activities)
@app.route('/add_manual_entry', methods=['POST'])
def add_manual_entry():
if not is_logged_in(): return redirect(url_for('login'))
user_id = get_user_id()
activity_id = request.form['activity_id']
start_str = request.form['start_time']
end_str = request.form['end_time']
note = request.form.get('note', '')
# Check both inputs (one will be disabled in frontend, but check priority)
subcategory = request.form.get('subcategory_select')
if not subcategory:
subcategory = request.form.get('subcategory', '')
try:
start_time = datetime.strptime(start_str, '%Y-%m-%dT%H:%M')
end_time = datetime.strptime(end_str, '%Y-%m-%dT%H:%M') if end_str else datetime.now()
# Validation: End time cannot be before start time
if end_time < start_time:
flash('End time cannot be before start time')
return redirect(url_for('logbook'))
except ValueError:
flash('Invalid date format')
return redirect(url_for('logbook'))
db.time_entries.insert_one({
'user_id': user_id,
'activity_id': ObjectId(activity_id),
'start_time': start_time,
'end_time': end_time,
'note': note,
'subcategory': subcategory
})
return redirect(url_for('logbook'))
@app.route('/logbook/<entry_id>', methods=['GET', 'POST'])
def log_entry_detail(entry_id):