37123-vm/core/views.py
2025-12-22 19:49:31 +00:00

136 lines
4.5 KiB
Python

import os
import platform
import json
from django import get_version as django_version
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.utils import timezone
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.generic import TemplateView, FormView, CreateView
from django_pandas.io import read_frame
from django.contrib import messages
from .forms import MoodEntryForm, ContactForm, SignUpForm, DateRangeFilterForm
from .models import MoodEntry, Activity
from .mail import send_contact_message
class SignUpView(CreateView):
form_class = SignUpForm
success_url = reverse_lazy('login')
template_name = 'registration/signup.html'
class AboutView(TemplateView):
template_name = "core/about.html"
class ContactView(FormView):
template_name = "core/contact.html"
form_class = ContactForm
success_url = reverse_lazy('core:contact')
def form_valid(self, form):
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
# Send email
email_sent = send_contact_message(name, email, message)
if email_sent:
messages.success(self.request, 'Thank you for your message! We will get back to you shortly.')
else:
messages.error(self.request, 'Sorry, there was an error sending your message. Please try again later.')
return super().form_valid(form)
class PrivacyPolicyView(TemplateView):
template_name = "core/privacy_policy.html"
def home(request):
"""Render the home page with mood entries."""
context = {
'project_name': "PixelMinds",
}
if request.user.is_authenticated:
mood_entries = MoodEntry.objects.filter(user=request.user).order_by('-date_time')[:7]
context['mood_entries'] = mood_entries
activities = Activity.objects.all()
context['activities'] = activities
return render(request, "core/index.html", context)
@login_required
def dashboard(request):
mood_entries = MoodEntry.objects.filter(user=request.user).order_by('date_time')
form = DateRangeFilterForm(request.GET)
if form.is_valid():
start_date = form.cleaned_data.get('start_date')
end_date = form.cleaned_data.get('end_date')
if start_date:
mood_entries = mood_entries.filter(date_time__gte=start_date)
if end_date:
mood_entries = mood_entries.filter(date_time__lte=end_date)
df = read_frame(mood_entries, fieldnames=['date_time', 'mood_score'])
if not df.empty:
df['date_time'] = df['date_time'].dt.strftime('%Y-%m-%d')
chart_data = df.to_json(orient='records')
return render(request, 'core/dashboard.html', {'chart_data': chart_data, 'form': form})
@login_required
def create_mood_entry(request):
if request.method == 'POST':
form = MoodEntryForm(request.POST)
if form.is_valid():
mood_entry = form.save(commit=False)
mood_entry.user = request.user
# Assign color based on mood score
mood_score = form.cleaned_data['mood_score']
if mood_score == 1:
mood_entry.color_code = '#FF0000' # Red
elif mood_score == 2:
mood_entry.color_code = '#FFC107' # Amber
elif mood_score == 3:
mood_entry.color_code = '#FFFF00' # Yellow
elif mood_score == 4:
mood_entry.color_code = '#4CAF50' # Green
elif mood_score == 5:
mood_entry.color_code = '#2196F3' # Blue
mood_entry.save()
form.save_m2m() # Save the many-to-many relationships
return redirect('core:index')
else:
form = MoodEntryForm()
return render(request, 'core/mood_entry_form.html', {'form': form})
@login_required
def save_mood_entry(request):
if request.method == 'POST':
data = json.loads(request.body)
mood_score = data.get('mood_score')
activity_ids = data.get('activity_ids')
mood_entry = MoodEntry.objects.create(
user=request.user,
mood_score=mood_score
)
if activity_ids:
activities = Activity.objects.filter(id__in=activity_ids)
mood_entry.activities.set(activities)
return JsonResponse({'status': 'success'})
return JsonResponse({'status': 'error'}, status=400)