167 lines
5.3 KiB
Python
167 lines
5.3 KiB
Python
import os
|
|
from datetime import date, timedelta
|
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.contrib.auth.forms import UserCreationForm
|
|
from django.contrib.auth import login
|
|
from django.db.models import Q
|
|
from .models import Item, Outfit, DailySchedule, Category, Folder
|
|
from .forms import ItemForm
|
|
|
|
def signup(request):
|
|
if request.method == 'POST':
|
|
form = UserCreationForm(request.POST)
|
|
if form.is_valid():
|
|
user = form.save()
|
|
login(request, user)
|
|
return redirect('home')
|
|
else:
|
|
form = UserCreationForm()
|
|
return render(request, 'registration/signup.html', {'form': form})
|
|
|
|
def get_weekly_schedule(user):
|
|
today = date.today()
|
|
start_of_week = today - timedelta(days=today.weekday())
|
|
days = []
|
|
for i in range(7):
|
|
day_date = start_of_week + timedelta(days=i)
|
|
schedule, _ = DailySchedule.objects.get_or_create(user=user, date=day_date)
|
|
days.append({
|
|
'date': day_date,
|
|
'day_name': day_date.strftime('%A'),
|
|
'schedule': schedule
|
|
})
|
|
return days
|
|
|
|
@login_required
|
|
def home(request):
|
|
"""Render the landing screen with the weekly planner grid."""
|
|
weekly_days = get_weekly_schedule(request.user)
|
|
total_items = Item.objects.filter(user=request.user).count()
|
|
|
|
month = date.today().month
|
|
if month in [12, 1, 2]:
|
|
season = "Winter"
|
|
elif month in [3, 4, 5]:
|
|
season = "Spring"
|
|
elif month in [6, 7, 8]:
|
|
season = "Summer"
|
|
else:
|
|
season = "Autumn"
|
|
|
|
context = {
|
|
"weekly_days": weekly_days,
|
|
"total_items": total_items,
|
|
"current_season": season,
|
|
"project_name": "New Style",
|
|
}
|
|
return render(request, "core/index.html", context)
|
|
|
|
@login_required
|
|
def new_fit(request):
|
|
"""View to create a new outfit on a model."""
|
|
items = Item.objects.filter(user=request.user)
|
|
categories = Category.objects.all()
|
|
context = {
|
|
"title": "New Fit",
|
|
"items": items,
|
|
"categories": categories,
|
|
"total_items": items.count(),
|
|
}
|
|
return render(request, "core/new_fit.html", context)
|
|
|
|
@login_required
|
|
def outfits(request):
|
|
"""View all saved outfits and folders."""
|
|
outfits = Outfit.objects.filter(user=request.user, folder__isnull=True)
|
|
folders = Folder.objects.filter(user=request.user)
|
|
context = {
|
|
"outfits": outfits,
|
|
"folders": folders,
|
|
"title": "Outfits",
|
|
"total_items": Item.objects.filter(user=request.user).count(),
|
|
}
|
|
return render(request, "core/outfits.html", context)
|
|
|
|
@login_required
|
|
def wardrobe(request):
|
|
"""Render the wardrobe items."""
|
|
items = Item.objects.filter(user=request.user, item_type='wardrobe')
|
|
categories = Category.objects.all()
|
|
form = ItemForm(initial={'item_type': 'wardrobe'})
|
|
context = {
|
|
"items": items,
|
|
"categories": categories,
|
|
"title": "Wardrobe",
|
|
"total_items": Item.objects.filter(user=request.user).count(),
|
|
"form": form,
|
|
}
|
|
return render(request, "core/wardrobe.html", context)
|
|
|
|
@login_required
|
|
def accessories(request):
|
|
"""Render the accessories items."""
|
|
items = Item.objects.filter(user=request.user, item_type='accessory')
|
|
categories = Category.objects.all()
|
|
form = ItemForm(initial={'item_type': 'accessory'})
|
|
context = {
|
|
"items": items,
|
|
"categories": categories,
|
|
"title": "Accessories",
|
|
"total_items": Item.objects.filter(user=request.user).count(),
|
|
"form": form,
|
|
}
|
|
return render(request, "core/wardrobe.html", context)
|
|
|
|
@login_required
|
|
def add_item(request):
|
|
"""Handle item creation."""
|
|
if request.method == 'POST':
|
|
form = ItemForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
item = form.save(commit=False)
|
|
item.user = request.user
|
|
item.save()
|
|
if item.item_type == 'accessory':
|
|
return redirect('accessories')
|
|
return redirect('wardrobe')
|
|
return redirect('wardrobe')
|
|
|
|
@login_required
|
|
def delete_item(request, pk):
|
|
item = get_object_or_404(Item, pk=pk, user=request.user)
|
|
item.delete()
|
|
return redirect(request.META.get('HTTP_REFERER', 'wardrobe'))
|
|
|
|
@login_required
|
|
def save_outfit(request):
|
|
if request.method == 'POST':
|
|
name = request.POST.get('name', 'Untitled Outfit')
|
|
item_ids = request.POST.getlist('items')
|
|
outfit = Outfit.objects.create(user=request.user, name=name)
|
|
if item_ids:
|
|
outfit.items.add(*item_ids)
|
|
return redirect('outfits')
|
|
return redirect('new_fit')
|
|
|
|
@login_required
|
|
def schedule_outfit(request):
|
|
if request.method == 'POST':
|
|
day_date = request.POST.get('date')
|
|
outfit_id = request.POST.get('outfit_id')
|
|
schedule = get_object_or_404(DailySchedule, user=request.user, date=day_date)
|
|
if outfit_id:
|
|
outfit = get_object_or_404(Outfit, pk=outfit_id, user=request.user)
|
|
schedule.outfit = outfit
|
|
else:
|
|
schedule.outfit = None
|
|
schedule.save()
|
|
return redirect('home')
|
|
|
|
@login_required
|
|
def create_folder(request):
|
|
if request.method == 'POST':
|
|
name = request.POST.get('name')
|
|
if name:
|
|
Folder.objects.create(user=request.user, name=name)
|
|
return redirect('outfits') |