Umbau auf 7 reihen

This commit is contained in:
jafreli
2025-07-19 00:40:43 +02:00
parent 84c026ca9b
commit f551dfe00c
4 changed files with 185 additions and 32 deletions

80
app.py
View File

@@ -18,6 +18,32 @@ def get_last_30_days():
dates.append(date.strftime('%Y-%m-%d'))
return dates[::-1] # Reverse to have oldest first
# Helper function to get dates organized by weekday for more weeks to fill the width
def get_weekly_dates():
today = datetime.now()
# Find the most recent Monday (start of current week)
days_since_monday = today.weekday() # Monday = 0, Sunday = 6
current_monday = today - timedelta(days=days_since_monday)
weekly_data = {}
weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
# Use more weeks to fill the available width (about 15-20 weeks)
num_weeks = 18 # This should provide good coverage without being too much
for weekday_idx in range(7): # 0 = Monday, 6 = Sunday
weekly_data[weekdays[weekday_idx]] = []
for week_offset in range(num_weeks):
date = current_monday + timedelta(days=weekday_idx - (week_offset * 7))
if date <= today: # Only include dates up to today
weekly_data[weekdays[weekday_idx]].append(date.strftime('%Y-%m-%d'))
# Reverse each weekday list to show oldest first (left to right)
for weekday in weekly_data:
weekly_data[weekday] = weekly_data[weekday][::-1]
return weekly_data
@app.route('/')
def index():
return render_template('index.html')
@@ -26,7 +52,7 @@ def index():
def get_habits():
raw_habits = db.all()
formatted_habits = []
last_30_days = get_last_30_days()
weekly_dates = get_weekly_dates()
for habit_doc in raw_habits:
# Handle migration from old format (list) to new format (dict)
@@ -48,17 +74,21 @@ def get_habits():
'daily_target': habit_doc.get('daily_target', 1)
}
completion_history = {}
for date_str in last_30_days:
completed_count = completed_dates.get(date_str, 0)
target_count = current_habit_data['daily_target']
completion_history[date_str] = {
'completed': completed_count,
'target': target_count,
'is_complete': completed_count >= target_count
}
# Create weekly completion history
weekly_completion = {}
for weekday, dates in weekly_dates.items():
weekly_completion[weekday] = []
for date_str in dates:
completed_count = completed_dates.get(date_str, 0)
target_count = current_habit_data['daily_target']
weekly_completion[weekday].append({
'date': date_str,
'completed': completed_count,
'target': target_count,
'is_complete': completed_count >= target_count
})
current_habit_data['completion_history'] = completion_history
current_habit_data['weekly_completion'] = weekly_completion
formatted_habits.append(current_habit_data)
return jsonify(formatted_habits)
@@ -160,6 +190,34 @@ def update_habit(habit_id):
db.update(update_data, doc_ids=[habit_id])
return jsonify({'message': f'Habit {habit_id} updated', **update_data})
@app.route('/habits/<int:habit_id>/reset', methods=['POST'])
def reset_habit(habit_id):
date_to_reset = request.json.get('date', get_current_date())
habit = db.get(doc_id=habit_id)
if not habit:
return jsonify({'error': 'Habit not found'}), 404
# Handle migration from old format (list) to new format (dict)
completed_dates = habit.get('completed_dates', {})
if isinstance(completed_dates, list):
new_completed_dates = {}
for date in completed_dates:
new_completed_dates[date] = 1
completed_dates = new_completed_dates
# Reset completion count for the date to 0
if date_to_reset in completed_dates:
del completed_dates[date_to_reset]
db.update({'completed_dates': completed_dates}, doc_ids=[habit_id])
return jsonify({
'message': f'Habit {habit_id} reset for {date_to_reset}',
'completed_dates': completed_dates,
'current_count': 0
})
@app.route('/habits/<int:habit_id>', methods=['DELETE'])
def delete_habit(habit_id):
habit = db.get(doc_id=habit_id)