diff --git a/Hotails/urls.py b/Hotails/urls.py index 21257e0..a233dc6 100644 --- a/Hotails/urls.py +++ b/Hotails/urls.py @@ -26,4 +26,6 @@ path('homepage/', views.homepage, name='homepage'), path('logout/', views.logout_view, name='logout'), path('about/', views.about, name='about'), + path('visit_daycare_home/', views.visit_daycare_home, name='visit_daycare_home'), + path('orders/', views.orders_view, name='orders'), ] diff --git a/daycare/forms.py b/daycare/forms.py new file mode 100644 index 0000000..52c76a5 --- /dev/null +++ b/daycare/forms.py @@ -0,0 +1,64 @@ +from django import forms +from .models import DayCare, Area +from django.db.models import Max, Min +from django.core.validators import validate_email + + +class DateInput(forms.DateInput): + input_type = 'date' + + +class BookForm(forms.Form): + dog_name = forms.CharField(required=True, label='Dog guest name', + widget=forms.TextInput(attrs={'class': 'form-control', + 'placeholder': 'Enter Dog Name', 'col': 80})) + email = forms.EmailField(required=True, label='Email', + widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'Enter Email'})) + start_date = forms.DateField(required=True, label=' Check-in date', + widget=forms.widgets.DateInput(attrs={'class': 'form-control', 'type': 'date'})) + end_date = forms.DateField(required=True, label=' Check-out date', + widget=forms.widgets.DateInput(attrs={'class': 'form-control', 'type': 'date'})) + requests = forms.CharField(required=False, label='Special requests', widget=forms.Textarea + (attrs={'placeholder': 'Please write your requests here. Special requests cannot be guaranteed – ' + 'but the property will do its best to meet your needs', 'rows': 7, 'cols': 80})) + agree_terms = forms.BooleanField(required=True, label='I agree with the terms', widget=forms.CheckboxInput) + + def clean(self): + cleaned_data = super().clean() + start_date = cleaned_data.get("start_date") + end_date = cleaned_data.get("end_date") + email = cleaned_data.get("email") + + if start_date and end_date: + if end_date < start_date: + self._errors['end_date'] = self.error_class(["End date should be greater!"]) + + return cleaned_data + + +class DayCareSearchForm(forms.Form): + min_price = DayCare.objects.all().aggregate(Min('price_per_day')).get('price_per_day__min') + max_price = DayCare.objects.all().aggregate(Max('price_per_day')).get('price_per_day__max') + start_date = forms.DateField(required=True, label=' Start date', + widget=forms.widgets.DateInput(attrs={'class': 'form-control', 'type': 'date'})) + end_date = forms.DateField(required=True, label=' End date', + widget=forms.widgets.DateInput(attrs={'class': 'form-control', 'type': 'date'})) + + area = forms.ChoiceField(required=False, label='Area', + choices=(Area.choices + [('', 'All'), ]), initial="") + city = forms.CharField(required=False, label='City') + name = forms.CharField(required=False, label='Day care name') + price_per_day = forms.ChoiceField(required=False, label='Max price', + choices=((str(x), x) for x in range(min_price, max_price + 11, 10)), + initial=str(max_price)) + + def clean(self): + cleaned_data = super().clean() + start_date = cleaned_data.get("start_date") + end_date = cleaned_data.get("end_date") + + if start_date and end_date: + if end_date < start_date: + self._errors['end_date'] = self.error_class(["End date should be greater!"]) + + return cleaned_data diff --git a/daycare/migrations/0006_alter_daycare_area.py b/daycare/migrations/0006_alter_daycare_area.py new file mode 100644 index 0000000..73bd90d --- /dev/null +++ b/daycare/migrations/0006_alter_daycare_area.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.3 on 2022-04-27 13:37 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('daycare', '0005_image_data_migration'), + ] + + operations = [ + migrations.AlterField( + model_name='daycare', + name='area', + field=models.CharField(blank=True, choices=[('N', 'NORTH'), ('S', 'SOUTH'), ('C', 'CENTER')], + max_length=20, validators=[django.core.validators.MaxLengthValidator]), + ), + ] diff --git a/daycare/models.py b/daycare/models.py index 2678d71..6911299 100644 --- a/daycare/models.py +++ b/daycare/models.py @@ -10,13 +10,19 @@ from django.core.exceptions import ObjectDoesNotExist +class Area(models.TextChoices): + North = 'N', 'NORTH' + South = 'S', 'SOUTH' + Center = 'C', 'CENTER' + + class DayCare(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, default=None, blank=True, null=False, editable=True) name = models.CharField(max_length=20, blank=True, unique=True, validators=[MaxLengthValidator]) description = models.TextField(blank=True, null=True) price_per_day = models.IntegerField(blank=False, null=False, default=0) capacity = models.IntegerField(null=False, blank=True) - area = models.CharField(max_length=20, blank=True, validators=[MaxLengthValidator]) + area = models.CharField(max_length=20, blank=True, validators=[MaxLengthValidator], choices=Area.choices) city = models.CharField(max_length=20, blank=True, validators=[MaxLengthValidator]) address = models.CharField(max_length=50, blank=True, validators=[MaxLengthValidator]) @@ -40,8 +46,7 @@ def create(email, username, password, name, description, price_per_day, capacity validate_max_length(address, 50, "address") validate_price(price_per_day) - new_daycare = DayCare(user=User.objects.create_user(email=email, username=username, password=password, - ), + new_daycare = DayCare(user=User.objects.create_user(email=email, username=username, password=password), name=name, description=description, price_per_day=price_per_day, capacity=capacity, area=area, city=city, address=address) @@ -50,6 +55,12 @@ def create(email, username, password, name, description, price_per_day, capacity return new_daycare + def get_daycare_primary_image_url(self): + daycare_images = Image.get_images_by_daycare_id(daycare_id=self.id) + if daycare_images is not None and daycare_images.first() is not None: + return daycare_images.first().url + return "../../static/images/daycare-default-profile-image.jpeg" + class Image(models.Model): url = models.CharField(max_length=1000) diff --git a/daycare/templates/daycare/daycare-homepage.html b/daycare/templates/daycare/daycare-homepage.html index 3f6a91b..b0db224 100644 --- a/daycare/templates/daycare/daycare-homepage.html +++ b/daycare/templates/daycare/daycare-homepage.html @@ -1,11 +1,12 @@ {% extends "main/base_template.html" %} - +{% load crispy_forms_tags %} {% block stylesheets %} +