2024-02-29 13:25:50 +05:30
|
|
|
from django import forms
|
2024-06-27 17:24:52 +05:30
|
|
|
from accounts.models import IAmPrincipal, IAmPrincipalExtendedData
|
2024-07-17 19:52:02 +05:30
|
|
|
from manage_events.models import AgeGroups, EventImage, EventMaster, Event, EventCategory, Venue
|
2024-03-15 15:57:09 +05:30
|
|
|
from django.core.exceptions import ValidationError
|
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
2024-02-29 13:25:50 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
class EventCategoryForm(forms.ModelForm):
|
|
|
|
|
# image = forms.ImageField()
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
model = EventCategory
|
|
|
|
|
fields = ["title", "image", "description", "video_url"]
|
|
|
|
|
widgets = {
|
|
|
|
|
"image": forms.FileInput(attrs={"class": "form-control-file"}),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class EventForm(forms.ModelForm):
|
2024-06-27 17:24:52 +05:30
|
|
|
principal = forms.ModelChoiceField(
|
|
|
|
|
queryset=IAmPrincipal.objects.select_related("extended_data").filter(
|
|
|
|
|
extended_data__is_onboarded=True,
|
|
|
|
|
extended_data__is_transferred=False
|
|
|
|
|
),
|
|
|
|
|
label="Non-transfer user list",
|
|
|
|
|
required=True
|
|
|
|
|
)
|
|
|
|
|
venue = forms.ModelChoiceField(
|
2024-07-02 15:37:50 +05:30
|
|
|
queryset=Venue.objects.none(),
|
2024-06-27 17:24:52 +05:30
|
|
|
label="venue",
|
|
|
|
|
required=True
|
|
|
|
|
)
|
2024-07-02 15:37:50 +05:30
|
|
|
image = forms.ImageField(label="Thumbnail")
|
|
|
|
|
event_images = forms.ImageField(label="Event Images")
|
2024-07-18 13:52:48 +05:30
|
|
|
age_group = forms.ChoiceField(
|
|
|
|
|
choices=[],
|
2024-07-17 19:52:02 +05:30
|
|
|
label="Age Group",
|
|
|
|
|
required=True
|
|
|
|
|
)
|
2024-07-02 15:37:50 +05:30
|
|
|
|
2024-02-29 13:25:50 +05:30
|
|
|
class Meta:
|
|
|
|
|
model = Event
|
|
|
|
|
fields = [
|
2024-06-27 17:24:52 +05:30
|
|
|
"principal",
|
2024-07-02 15:37:50 +05:30
|
|
|
"venue",
|
2024-02-29 13:25:50 +05:30
|
|
|
"title",
|
2024-03-15 15:57:09 +05:30
|
|
|
# "event_master",
|
2024-02-29 13:25:50 +05:30
|
|
|
"description",
|
|
|
|
|
"image",
|
2024-07-02 15:37:50 +05:30
|
|
|
"event_images",
|
|
|
|
|
# "status",
|
2024-02-29 13:25:50 +05:30
|
|
|
"start_date",
|
|
|
|
|
"end_date",
|
|
|
|
|
"from_time",
|
|
|
|
|
"to_time",
|
2024-02-29 22:00:21 +05:30
|
|
|
"category",
|
2024-02-29 13:25:50 +05:30
|
|
|
"venue_capacity",
|
2024-06-04 16:12:52 +05:30
|
|
|
# "video_url",
|
2024-02-29 13:25:50 +05:30
|
|
|
"entry_type",
|
|
|
|
|
"entry_fee",
|
|
|
|
|
"key_guest",
|
|
|
|
|
"age_group",
|
2024-06-27 17:24:52 +05:30
|
|
|
"coupon_code",
|
|
|
|
|
"coupon_description",
|
2024-04-08 18:49:26 +05:30
|
|
|
"tags",
|
2024-02-29 13:25:50 +05:30
|
|
|
"draft",
|
2024-04-16 14:57:19 +05:30
|
|
|
"active",
|
|
|
|
|
"deleted",
|
2024-02-29 13:25:50 +05:30
|
|
|
]
|
|
|
|
|
widgets = {
|
2024-07-02 15:37:50 +05:30
|
|
|
"description": forms.Textarea(attrs={"rows": 4}),
|
2024-02-29 13:25:50 +05:30
|
|
|
"start_date": forms.DateInput(
|
2024-07-02 15:37:50 +05:30
|
|
|
attrs={"type": "date"}
|
2024-02-29 13:25:50 +05:30
|
|
|
),
|
|
|
|
|
"end_date": forms.DateInput(
|
2024-07-02 15:37:50 +05:30
|
|
|
attrs={"type": "date"}
|
2024-02-29 13:25:50 +05:30
|
|
|
),
|
|
|
|
|
"from_time": forms.TimeInput(
|
2024-07-02 15:37:50 +05:30
|
|
|
attrs={"type": "time"}
|
2024-02-29 13:25:50 +05:30
|
|
|
),
|
2024-07-02 15:37:50 +05:30
|
|
|
"to_time": forms.TimeInput(attrs={"type": "time"}),
|
|
|
|
|
"key_guest": forms.Textarea(attrs={"rows": 3}),
|
|
|
|
|
"coupon_description": forms.Textarea(attrs={"rows": 3}),
|
2024-02-29 13:25:50 +05:30
|
|
|
}
|
|
|
|
|
|
2024-07-02 15:37:50 +05:30
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
|
|
|
|
|
instance = kwargs.get('instance')
|
|
|
|
|
principal_id = kwargs.pop('principal_id', None)
|
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
if instance:
|
|
|
|
|
event_images = EventImage.objects.filter(event=instance)
|
|
|
|
|
if event_images.exists():
|
|
|
|
|
self.fields['event_images'].initial = [image.image.url for image in event_images]
|
|
|
|
|
|
2024-07-17 19:52:02 +05:30
|
|
|
# Set the initial value for age_group if instance is provided
|
|
|
|
|
print(f"age group is {self.instance.age_group}")
|
2024-07-18 13:52:48 +05:30
|
|
|
age_groups = [(age_group.name, age_group.name) for age_group in AgeGroups.objects.filter(active=True)]
|
|
|
|
|
self.fields['age_group'].choices = age_groups
|
|
|
|
|
|
|
|
|
|
if self.instance:
|
|
|
|
|
self.fields['age_group'].initial = self.instance.age_group
|
2024-07-17 19:52:02 +05:30
|
|
|
|
2024-07-02 15:37:50 +05:30
|
|
|
if principal_id:
|
|
|
|
|
self.fields['venue'].queryset = Venue.objects.filter(principal_id=principal_id, active=True)
|
|
|
|
|
else:
|
|
|
|
|
self.fields['venue'].queryset = Venue.objects.none()
|
|
|
|
|
|
2024-03-15 15:57:09 +05:30
|
|
|
def clean(self):
|
|
|
|
|
cleaned_data = super().clean()
|
|
|
|
|
|
|
|
|
|
# Get the start and end dates from cleaned_data
|
|
|
|
|
start_date = cleaned_data.get("start_date")
|
|
|
|
|
end_date = cleaned_data.get("end_date")
|
|
|
|
|
# Get the from and to times from cleaned_data
|
|
|
|
|
from_time = cleaned_data.get("from_time")
|
|
|
|
|
to_time = cleaned_data.get("to_time")
|
|
|
|
|
|
2024-07-02 15:37:50 +05:30
|
|
|
# Validation 1: end_date should not be less than start_date
|
|
|
|
|
if start_date and end_date and end_date < start_date:
|
|
|
|
|
self.add_error("end_date", _("End date cannot be before the start date."))
|
|
|
|
|
|
|
|
|
|
if end_date == start_date:
|
|
|
|
|
if to_time and from_time and to_time <= from_time:
|
|
|
|
|
self.add_error("to_time", _("End time must be after the start time."))
|
2024-03-15 15:57:09 +05:30
|
|
|
|
|
|
|
|
return cleaned_data
|
|
|
|
|
|
2024-07-02 15:37:50 +05:30
|
|
|
class EventImageForm(forms.ModelForm):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = EventImage
|
|
|
|
|
fields = ['image']
|
2024-02-29 13:25:50 +05:30
|
|
|
|
|
|
|
|
class EventMasterForm(forms.ModelForm):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = EventMaster
|
|
|
|
|
fields = "__all__" # Includes all fields from the model
|
2024-03-15 15:57:09 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
class VenueForm(forms.ModelForm):
|
2024-06-27 17:24:52 +05:30
|
|
|
principal = forms.ModelChoiceField(
|
|
|
|
|
queryset=IAmPrincipal.objects.select_related("extended_data").filter(
|
|
|
|
|
extended_data__is_onboarded=True,
|
|
|
|
|
extended_data__is_transferred=False
|
|
|
|
|
),
|
|
|
|
|
label="Non-transfer user list",
|
|
|
|
|
required=True
|
|
|
|
|
)
|
2024-07-02 18:54:18 +05:30
|
|
|
image = forms.ImageField(required=True)
|
2024-12-20 19:43:44 +05:30
|
|
|
postcode = forms.CharField(required=True, max_length=10)
|
2024-07-02 18:54:18 +05:30
|
|
|
latitude = forms.DecimalField(
|
|
|
|
|
widget=forms.NumberInput()
|
|
|
|
|
)
|
|
|
|
|
longitude = forms.DecimalField(
|
|
|
|
|
widget=forms.NumberInput()
|
|
|
|
|
)
|
2024-06-27 17:24:52 +05:30
|
|
|
|
2024-03-15 15:57:09 +05:30
|
|
|
class Meta:
|
|
|
|
|
model = Venue
|
|
|
|
|
fields = [
|
2024-06-27 17:24:52 +05:30
|
|
|
"principal",
|
2024-03-15 15:57:09 +05:30
|
|
|
"title",
|
|
|
|
|
"address",
|
2024-12-20 19:43:44 +05:30
|
|
|
"postcode",
|
2024-03-15 15:57:09 +05:30
|
|
|
"image",
|
|
|
|
|
"latitude",
|
|
|
|
|
"longitude",
|
|
|
|
|
]
|
|
|
|
|
widgets = {
|
2024-07-02 15:37:50 +05:30
|
|
|
"description": forms.Textarea(attrs={"rows": 4}),
|
|
|
|
|
"address": forms.Textarea(attrs={"rows": 3}),
|
2024-03-15 15:57:09 +05:30
|
|
|
}
|