inital checkin
This commit is contained in:
139
users/views.py
Normal file
139
users/views.py
Normal file
@@ -0,0 +1,139 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.contrib.auth import login
|
||||
from .forms import CustomUserCreationForm, ProfileForm, AddressForm, PaymentMethodForm
|
||||
from django.views.generic import CreateView
|
||||
from django.urls import reverse_lazy
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib import messages
|
||||
from .models import User, Address, PaymentMethod
|
||||
from store.models import VaultItem, Set, Card
|
||||
|
||||
class RegisterView(CreateView):
|
||||
model = User
|
||||
form_class = CustomUserCreationForm
|
||||
template_name = 'users/register.html'
|
||||
success_url = reverse_lazy('home')
|
||||
|
||||
def form_valid(self, form):
|
||||
user = form.save()
|
||||
login(self.request, user)
|
||||
return redirect('home')
|
||||
|
||||
@login_required
|
||||
def profile_view(request):
|
||||
if request.method == 'POST':
|
||||
form = ProfileForm(request.POST, instance=request.user.profile)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'Profile updated successfully.')
|
||||
return redirect('users:profile')
|
||||
else:
|
||||
form = ProfileForm(instance=request.user.profile)
|
||||
|
||||
# Order filtering
|
||||
orders = request.user.orders.all().order_by('-created_at')
|
||||
date_query = request.GET.get('date')
|
||||
if date_query:
|
||||
orders = orders.filter(created_at__date=date_query)
|
||||
|
||||
addresses = request.user.addresses.all()
|
||||
payment_methods = request.user.payment_methods.all()
|
||||
|
||||
return render(request, 'users/profile.html', {
|
||||
'user': request.user,
|
||||
'form': form,
|
||||
'orders': orders,
|
||||
'date_query': date_query,
|
||||
'addresses': addresses,
|
||||
'payment_methods': payment_methods,
|
||||
})
|
||||
|
||||
@login_required
|
||||
def upgrade_account_view(request):
|
||||
if request.method == 'POST':
|
||||
# Mock payment processing would go here
|
||||
profile = request.user.profile
|
||||
profile.is_pro = True
|
||||
profile.save()
|
||||
messages.success(request, 'Account upgraded to Pro!')
|
||||
return redirect('users:profile')
|
||||
return redirect('users:profile')
|
||||
|
||||
@login_required
|
||||
def add_address_view(request):
|
||||
if request.method == 'POST':
|
||||
form = AddressForm(request.POST)
|
||||
if form.is_valid():
|
||||
address = form.save(commit=False)
|
||||
address.user = request.user
|
||||
if address.is_default:
|
||||
# Unset previous default
|
||||
Address.objects.filter(user=request.user, address_type=address.address_type, is_default=True).update(is_default=False)
|
||||
address.save()
|
||||
messages.success(request, 'Address added successfully.')
|
||||
return redirect('users:profile')
|
||||
else:
|
||||
form = AddressForm()
|
||||
return render(request, 'users/address_form.html', {'form': form})
|
||||
|
||||
@login_required
|
||||
def delete_address_view(request, pk):
|
||||
address = get_object_or_404(Address, pk=pk, user=request.user)
|
||||
if request.method == 'POST':
|
||||
address.delete()
|
||||
messages.success(request, 'Address deleted.')
|
||||
return redirect('users:profile')
|
||||
|
||||
@login_required
|
||||
def add_payment_method_view(request):
|
||||
if request.method == 'POST':
|
||||
form = PaymentMethodForm(request.POST)
|
||||
if form.is_valid():
|
||||
pm = form.save(commit=False)
|
||||
pm.user = request.user
|
||||
if pm.is_default:
|
||||
PaymentMethod.objects.filter(user=request.user, is_default=True).update(is_default=False)
|
||||
pm.save()
|
||||
messages.success(request, 'Payment method added successfully.')
|
||||
return redirect('users:profile')
|
||||
else:
|
||||
form = PaymentMethodForm()
|
||||
return render(request, 'users/payment_form.html', {'form': form})
|
||||
|
||||
@login_required
|
||||
def delete_payment_method_view(request, pk):
|
||||
pm = get_object_or_404(PaymentMethod, pk=pk, user=request.user)
|
||||
if request.method == 'POST':
|
||||
pm.delete()
|
||||
messages.success(request, 'Payment method deleted.')
|
||||
return redirect('users:profile')
|
||||
|
||||
@login_required
|
||||
def vault_view(request):
|
||||
vault_items = VaultItem.objects.filter(user=request.user).select_related('card', 'card__set').order_by('-added_at')
|
||||
|
||||
# Filtering
|
||||
set_id = request.GET.get('set')
|
||||
rarity = request.GET.get('rarity')
|
||||
|
||||
if set_id:
|
||||
vault_items = vault_items.filter(card__set_id=set_id)
|
||||
if rarity:
|
||||
vault_items = vault_items.filter(card__rarity=rarity)
|
||||
|
||||
total_cards = sum(item.quantity for item in vault_items)
|
||||
|
||||
# Get options for filters
|
||||
# We only want sets and rarities that are actually in the user's vault
|
||||
user_card_ids = VaultItem.objects.filter(user=request.user).values_list('card_id', flat=True)
|
||||
available_sets = Set.objects.filter(cards__id__in=user_card_ids).distinct()
|
||||
available_rarities = Card.objects.filter(id__in=user_card_ids).values_list('rarity', flat=True).distinct()
|
||||
|
||||
return render(request, 'users/vault.html', {
|
||||
'vault_items': vault_items,
|
||||
'total_cards': total_cards,
|
||||
'available_sets': available_sets,
|
||||
'available_rarities': available_rarities,
|
||||
'current_set': int(set_id) if set_id else None,
|
||||
'current_rarity': rarity
|
||||
})
|
||||
Reference in New Issue
Block a user