from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from decimal import Decimal from .models import ChatRoom, Event, Expense, ExpenseSplit, Membership, UserProfile class SignUpForm(UserCreationForm): email = forms.EmailField(required=True) first_name = forms.CharField(max_length=50, required=False) last_name = forms.CharField(max_length=50, required=False) class Meta: model = User fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2') class ChatRoomForm(forms.ModelForm): class Meta: model = ChatRoom fields = ('name', 'description') widgets = { 'name': forms.TextInput(attrs={'placeholder': 'Room name...', 'autocomplete': 'off'}), 'description': forms.Textarea(attrs={'placeholder': 'What is this room for?', 'rows': 3}), } class EventForm(forms.ModelForm): event_date = forms.DateTimeField( required=False, widget=forms.DateTimeInput(attrs={'type': 'datetime-local'}), input_formats=['%Y-%m-%dT%H:%M'], ) class Meta: model = Event fields = ('title', 'description', 'location', 'event_date') widgets = { 'title': forms.TextInput(attrs={'placeholder': 'Event title...'}), 'description': forms.Textarea(attrs={'rows': 3, 'placeholder': 'Details...'}), 'location': forms.TextInput(attrs={'placeholder': 'Location (optional)'}), } class ExpenseForm(forms.Form): description = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'placeholder': 'What was this for?'})) amount = forms.DecimalField(max_digits=10, decimal_places=2, min_value=Decimal('0.01'), widget=forms.NumberInput(attrs={'placeholder': '0.00', 'step': '0.01'})) paid_by = forms.ModelChoiceField(queryset=User.objects.none(), empty_label="Who paid?") split_type = forms.ChoiceField(choices=Expense.SPLIT_CHOICES, initial='equal', widget=forms.RadioSelect) participants = forms.ModelMultipleChoiceField( queryset=User.objects.none(), widget=forms.CheckboxSelectMultiple, required=True, ) def __init__(self, *args, room=None, **kwargs): super().__init__(*args, **kwargs) if room: members = User.objects.filter(memberships__room=room, memberships__is_active=True) self.fields['paid_by'].queryset = members self.fields['participants'].queryset = members self.fields['participants'].initial = members