219 lines
9.3 KiB
Python
219 lines
9.3 KiB
Python
from django import forms
|
|
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordChangeForm
|
|
from django.contrib.auth.models import User
|
|
from .models import Order, Product, Review, UserProfile, ContactMessage, CustomOrder, OrderProgress
|
|
|
|
class OrderForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Order
|
|
fields = ['full_name', 'email', 'address', 'phone']
|
|
widgets = {
|
|
'full_name': forms.TextInput(attrs={'class': 'form-control'}),
|
|
'email': forms.EmailInput(attrs={'class': 'form-control'}),
|
|
'address': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
|
|
'phone': forms.TextInput(attrs={'class': 'form-control'}),
|
|
}
|
|
labels = {
|
|
'full_name': 'Vollständiger Name',
|
|
'email': 'E-Mail-Adresse',
|
|
'address': 'Lieferadresse',
|
|
'phone': 'Telefonnummer',
|
|
}
|
|
|
|
class CustomUserCreationForm(UserCreationForm):
|
|
email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={'class': 'form-control'}))
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = ['username', 'email', 'password1', 'password2']
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
for field in self.fields:
|
|
self.fields[field].widget.attrs['class'] = 'form-control'
|
|
self.fields['username'].label = 'Benutzername'
|
|
self.fields['password1'].label = 'Passwort'
|
|
self.fields['password2'].label = 'Passwort bestätigen'
|
|
|
|
class CustomAuthenticationForm(AuthenticationForm):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
for field in self.fields:
|
|
self.fields[field].widget.attrs['class'] = 'form-control'
|
|
self.fields['username'].label = 'Benutzername'
|
|
self.fields['password'].label = 'Passwort'
|
|
|
|
class ReviewForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Review
|
|
fields = ['rating', 'comment']
|
|
widgets = {
|
|
'rating': forms.Select(attrs={'class': 'form-control'}),
|
|
'comment': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
|
|
}
|
|
labels = {
|
|
'rating': 'Bewertung',
|
|
'comment': 'Kommentar',
|
|
}
|
|
|
|
class UserProfileForm(forms.ModelForm):
|
|
first_name = forms.CharField(max_length=30, required=False, label='Vorname')
|
|
last_name = forms.CharField(max_length=30, required=False, label='Nachname')
|
|
email = forms.EmailField(required=True, label='E-Mail-Adresse')
|
|
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = ['phone', 'address', 'default_shipping_address', 'newsletter']
|
|
labels = {
|
|
'phone': 'Telefonnummer',
|
|
'address': 'Adresse',
|
|
'default_shipping_address': 'Standard-Lieferadresse',
|
|
'newsletter': 'Newsletter abonnieren',
|
|
}
|
|
widgets = {
|
|
'address': forms.Textarea(attrs={'rows': 3}),
|
|
'default_shipping_address': forms.Textarea(attrs={'rows': 3}),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
if self.instance.user:
|
|
self.fields['first_name'].initial = self.instance.user.first_name
|
|
self.fields['last_name'].initial = self.instance.user.last_name
|
|
self.fields['email'].initial = self.instance.user.email
|
|
for field in self.fields:
|
|
self.fields[field].widget.attrs['class'] = 'form-control'
|
|
|
|
def save(self, commit=True):
|
|
profile = super().save(commit=False)
|
|
if commit:
|
|
user = profile.user
|
|
user.first_name = self.cleaned_data['first_name']
|
|
user.last_name = self.cleaned_data['last_name']
|
|
user.email = self.cleaned_data['email']
|
|
user.save()
|
|
profile.save()
|
|
return profile
|
|
|
|
class ContactForm(forms.ModelForm):
|
|
class Meta:
|
|
model = ContactMessage
|
|
fields = ['name', 'email', 'category', 'order_number', 'subject', 'message']
|
|
widgets = {
|
|
'name': forms.TextInput(attrs={'class': 'form-control'}),
|
|
'email': forms.EmailInput(attrs={'class': 'form-control'}),
|
|
'category': forms.Select(attrs={'class': 'form-control'}),
|
|
'order_number': forms.TextInput(attrs={'class': 'form-control'}),
|
|
'subject': forms.TextInput(attrs={'class': 'form-control'}),
|
|
'message': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
|
|
}
|
|
labels = {
|
|
'name': 'Name',
|
|
'email': 'E-Mail-Adresse',
|
|
'category': 'Kategorie',
|
|
'order_number': 'Bestellnummer (optional)',
|
|
'subject': 'Betreff',
|
|
'message': 'Ihre Nachricht',
|
|
}
|
|
|
|
def __init__(self, *args, user=None, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
if user and user.is_authenticated:
|
|
self.fields['name'].initial = user.get_full_name() or user.username
|
|
self.fields['email'].initial = user.email
|
|
|
|
class CustomOrderForm(forms.ModelForm):
|
|
class Meta:
|
|
model = CustomOrder
|
|
fields = [
|
|
'fursuit_type', 'style', 'character_name',
|
|
'character_description', 'reference_images',
|
|
'special_requests', 'measurements',
|
|
'color_preferences', 'budget_range',
|
|
'deadline_request'
|
|
]
|
|
widgets = {
|
|
'fursuit_type': forms.Select(attrs={'class': 'form-select'}),
|
|
'style': forms.Select(attrs={'class': 'form-select'}),
|
|
'character_name': forms.TextInput(attrs={'class': 'form-control'}),
|
|
'character_description': forms.Textarea(attrs={
|
|
'class': 'form-control',
|
|
'rows': 4,
|
|
'placeholder': 'Beschreiben Sie Ihren Character so detailliert wie möglich...'
|
|
}),
|
|
'special_requests': forms.Textarea(attrs={
|
|
'class': 'form-control',
|
|
'rows': 3,
|
|
'placeholder': 'Besondere Wünsche oder Anforderungen...'
|
|
}),
|
|
'measurements': forms.Textarea(attrs={
|
|
'class': 'form-control',
|
|
'rows': 4,
|
|
'placeholder': 'Bitte geben Sie alle relevanten Maße an (Kopfumfang, Körpergröße, etc.)'
|
|
}),
|
|
'color_preferences': forms.Textarea(attrs={
|
|
'class': 'form-control',
|
|
'rows': 3,
|
|
'placeholder': 'Beschreiben Sie die gewünschten Farben und Farbkombinationen...'
|
|
}),
|
|
'budget_range': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'z.B. 2000-3000€'
|
|
}),
|
|
'deadline_request': forms.DateInput(attrs={
|
|
'class': 'form-control',
|
|
'type': 'date'
|
|
}),
|
|
'reference_images': forms.FileInput(attrs={
|
|
'class': 'form-control',
|
|
'accept': 'image/*'
|
|
})
|
|
}
|
|
labels = {
|
|
'fursuit_type': 'Art des Fursuits',
|
|
'style': 'Gewünschter Stil',
|
|
'character_name': 'Name des Characters',
|
|
'character_description': 'Beschreibung des Characters',
|
|
'reference_images': 'Referenzbilder',
|
|
'special_requests': 'Besondere Wünsche',
|
|
'measurements': 'Maße',
|
|
'color_preferences': 'Farbwünsche',
|
|
'budget_range': 'Budget-Rahmen',
|
|
'deadline_request': 'Gewünschter Fertigstellungstermin'
|
|
}
|
|
help_texts = {
|
|
'character_description': 'Je detaillierter die Beschreibung, desto besser können wir Ihre Vision umsetzen.',
|
|
'reference_images': 'Laden Sie bis zu 5 Referenzbilder hoch (max. 5MB pro Bild)',
|
|
'measurements': 'Genaue Maße sind wichtig für eine perfekte Passform.',
|
|
'budget_range': 'Geben Sie einen Bereich an, in dem Sie sich preislich bewegen möchten.',
|
|
'deadline_request': 'Optional: Wenn Sie einen bestimmten Termin im Auge haben.'
|
|
}
|
|
|
|
class OrderProgressForm(forms.ModelForm):
|
|
class Meta:
|
|
model = OrderProgress
|
|
fields = ['stage', 'description', 'image', 'completed']
|
|
widgets = {
|
|
'stage': forms.Select(attrs={'class': 'form-select'}),
|
|
'description': forms.Textarea(attrs={
|
|
'class': 'form-control',
|
|
'rows': 3,
|
|
'placeholder': 'Beschreiben Sie den aktuellen Fortschritt...'
|
|
}),
|
|
'image': forms.FileInput(attrs={
|
|
'class': 'form-control',
|
|
'accept': 'image/*'
|
|
}),
|
|
'completed': forms.CheckboxInput(attrs={'class': 'form-check-input'})
|
|
}
|
|
labels = {
|
|
'stage': 'Arbeitsschritt',
|
|
'description': 'Beschreibung des Fortschritts',
|
|
'image': 'Foto des Fortschritts',
|
|
'completed': 'Abgeschlossen'
|
|
}
|
|
help_texts = {
|
|
'description': 'Beschreiben Sie detailliert, was in diesem Schritt gemacht wurde.',
|
|
'image': 'Fügen Sie ein Foto hinzu, um den Fortschritt zu dokumentieren.',
|
|
'completed': 'Markieren Sie diesen Schritt als abgeschlossen, wenn er fertig ist.'
|
|
} |