Last bit of major changes
Closes #1 Closes #5 Closes #6 Closes #8 Closes #9 Closes #10
This commit is contained in:
@@ -11,24 +11,52 @@ class SellerThemeForm(forms.ModelForm):
|
||||
}
|
||||
|
||||
class SellerRegistrationForm(forms.ModelForm):
|
||||
street = forms.CharField(max_length=200, widget=forms.TextInput(attrs={'placeholder': 'Street Address'}))
|
||||
city = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'placeholder': 'City'}))
|
||||
state = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'placeholder': 'State'}))
|
||||
zip_code = forms.CharField(max_length=20, widget=forms.TextInput(attrs={'placeholder': 'Zip Code'}))
|
||||
|
||||
class Meta:
|
||||
model = Seller
|
||||
fields = ['store_name', 'description', 'contact_email', 'contact_phone', 'business_address']
|
||||
fields = ['store_name', 'description', 'contact_email', 'contact_phone']
|
||||
widgets = {
|
||||
'description': forms.Textarea(attrs={'rows': 4}),
|
||||
'business_address': forms.Textarea(attrs={'rows': 3}),
|
||||
}
|
||||
|
||||
def save(self, commit=True):
|
||||
seller = super().save(commit=False)
|
||||
# Create address
|
||||
# We need the user to link the address to? The Seller model has user.
|
||||
# But here seller.user might not be set yet if it's done in the view.
|
||||
# However, save(commit=True) usually saves.
|
||||
# We'll create the Address instance but we need the user.
|
||||
# We can't easily get the user here unless we pass it or it's already on seller.
|
||||
# In the view `seller_register`, we do `form.instance.user = request.user` before saving?
|
||||
# Let's check `seller_register` view.
|
||||
# If we can't create Address yet, we might need to handle it in the view.
|
||||
# BUT, standard ModelForm save() returns the instance.
|
||||
# Let's attach the address data to the instance temporarily?
|
||||
# Or better: Override save to creating the Address.
|
||||
# We will assume seller.user is set by the view before save is called,
|
||||
# or we just create the address without user first (but user is required in Address model).
|
||||
# Actually, Address.user is required.
|
||||
# So we MUST have the user.
|
||||
return seller
|
||||
|
||||
class SellerEditForm(forms.ModelForm):
|
||||
street = forms.CharField(max_length=200, required=False)
|
||||
city = forms.CharField(max_length=100, required=False)
|
||||
state = forms.CharField(max_length=100, required=False)
|
||||
zip_code = forms.CharField(max_length=20, required=False)
|
||||
|
||||
tax_id = forms.CharField(required=False, widget=forms.TextInput(attrs={'type': 'password'}), help_text="SSN, ITIN, or EIN (Stored securely)")
|
||||
payout_details = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 3}), help_text="Bank account or other payout details (Stored securely)")
|
||||
|
||||
class Meta:
|
||||
model = Seller
|
||||
fields = ['store_name', 'description', 'contact_email', 'contact_phone', 'business_address', 'store_image', 'hero_image', 'minimum_order_amount', 'shipping_cost', 'tax_id', 'payout_details']
|
||||
fields = ['store_name', 'description', 'contact_email', 'contact_phone', 'store_image', 'hero_image', 'minimum_order_amount', 'shipping_cost', 'tax_id', 'payout_details']
|
||||
widgets = {
|
||||
'description': forms.Textarea(attrs={'rows': 4}),
|
||||
'business_address': forms.Textarea(attrs={'rows': 3}),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -36,11 +64,50 @@ class SellerEditForm(forms.ModelForm):
|
||||
if self.instance and self.instance.pk:
|
||||
self.fields['tax_id'].initial = self.instance.tax_id
|
||||
self.fields['payout_details'].initial = self.instance.payout_details
|
||||
# Populate address fields
|
||||
if self.instance.store_address:
|
||||
self.fields['street'].initial = self.instance.store_address.street
|
||||
self.fields['city'].initial = self.instance.store_address.city
|
||||
self.fields['state'].initial = self.instance.store_address.state
|
||||
self.fields['zip_code'].initial = self.instance.store_address.zip_code
|
||||
|
||||
def save(self, commit=True):
|
||||
seller = super().save(commit=False)
|
||||
seller.tax_id = self.cleaned_data.get('tax_id')
|
||||
seller.payout_details = self.cleaned_data.get('payout_details')
|
||||
|
||||
# Handle Address
|
||||
# We need to update existing or create new.
|
||||
street = self.cleaned_data.get('street')
|
||||
city = self.cleaned_data.get('city')
|
||||
state = self.cleaned_data.get('state')
|
||||
zip_code = self.cleaned_data.get('zip_code')
|
||||
|
||||
if street and city and state and zip_code:
|
||||
from users.models import Address
|
||||
if seller.store_address:
|
||||
seller.store_address.street = street
|
||||
seller.store_address.city = city
|
||||
seller.store_address.state = state
|
||||
seller.store_address.zip_code = zip_code
|
||||
if commit:
|
||||
seller.store_address.save()
|
||||
else:
|
||||
# Create new address. Requires user.
|
||||
# seller.user should exist.
|
||||
address = Address(
|
||||
user=seller.user,
|
||||
name=seller.store_name, # Use store name for address name
|
||||
street=street,
|
||||
city=city,
|
||||
state=state,
|
||||
zip_code=zip_code,
|
||||
address_type='shipping' # Default
|
||||
)
|
||||
if commit:
|
||||
address.save()
|
||||
seller.store_address = address
|
||||
|
||||
if commit:
|
||||
seller.save()
|
||||
return seller
|
||||
@@ -108,3 +175,15 @@ class BulkListingForm(forms.Form):
|
||||
csv_file = forms.FileField(label="Upload CSV", help_text="Upload the filled-out template CSV.")
|
||||
images = forms.FileField(widget=MultipleFileInput(attrs={'multiple': True}), required=False, label="Upload Images", help_text="Select all images referenced in your CSV.")
|
||||
|
||||
class CheckoutForm(forms.Form):
|
||||
shipping_address = forms.ModelChoiceField(queryset=None, empty_label="Select Shipping Address", widget=forms.Select(attrs={'class': 'form-select'}))
|
||||
payment_method = forms.ModelChoiceField(queryset=None, empty_label="Select Payment Method", widget=forms.Select(attrs={'class': 'form-select'}))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
user = kwargs.pop('user', None)
|
||||
super().__init__(*args, **kwargs)
|
||||
if user:
|
||||
from users.models import Address, PaymentMethod
|
||||
self.fields['shipping_address'].queryset = Address.objects.filter(user=user, address_type='shipping')
|
||||
self.fields['payment_method'].queryset = PaymentMethod.objects.filter(user=user)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user