Services page done. Switched timezone
|
|
@ -46,6 +46,7 @@ Le visiteur doit pouvoir :
|
||||||
|
|
||||||
5. Page contact
|
5. Page contact
|
||||||
6. Page légale
|
6. Page légale
|
||||||
|
7. Page services
|
||||||
|
|
||||||
### Données
|
### Données
|
||||||
|
|
||||||
|
|
@ -78,10 +79,8 @@ Le visiteur doit pouvoir :
|
||||||
|
|
||||||
## TO DO
|
## TO DO
|
||||||
|
|
||||||
- Page service : navette + location
|
|
||||||
- Gestion du calendrier
|
- Gestion du calendrier
|
||||||
..\_ Synchroniser avec Google calendar (qd Calendar mis à jour => update db et quand db mise à jour => update calendrier)
|
..\_ Synchroniser avec Google calendar (qd Calendar mis à jour => update db et quand db mise à jour => update calendrier) service worker ?
|
||||||
..\_ Afficher les disponibilités (Présentation à la hauteur)
|
|
||||||
..\_ Ajouter un date picker dans le formulaire de réservation
|
..\_ Ajouter un date picker dans le formulaire de réservation
|
||||||
- Envoyer devis réservation par mail et notification aux hôtes
|
- Envoyer devis réservation par mail et notification aux hôtes
|
||||||
- Ajout page/module de paiement
|
- Ajout page/module de paiement
|
||||||
|
|
@ -97,6 +96,9 @@ Le visiteur doit pouvoir :
|
||||||
- Mixpanel et Google Analytics
|
- Mixpanel et Google Analytics
|
||||||
- Récrire les mentions légales
|
- Récrire les mentions légales
|
||||||
- configure nginx server to serve media files
|
- configure nginx server to serve media files
|
||||||
|
- Centrer Bouton "Reserver" page location
|
||||||
|
- Ajouter un titre "Disponibilités" au dessus du calendrier
|
||||||
|
- page réservation : égayer avec des petites photos …
|
||||||
|
|
||||||
## BUGS
|
## BUGS
|
||||||
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 525 KiB After Width: | Height: | Size: 525 KiB |
|
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 767 KiB After Width: | Height: | Size: 767 KiB |
|
Before Width: | Height: | Size: 272 KiB After Width: | Height: | Size: 272 KiB |
|
Before Width: | Height: | Size: 538 KiB After Width: | Height: | Size: 538 KiB |
|
Before Width: | Height: | Size: 334 KiB After Width: | Height: | Size: 334 KiB |
|
Before Width: | Height: | Size: 454 KiB After Width: | Height: | Size: 454 KiB |
|
Before Width: | Height: | Size: 4 MiB After Width: | Height: | Size: 4 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.6 MiB |
|
|
@ -1,6 +1,5 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from .models import Reservation, Place, Guest
|
from .models import Reservation, Place, Guest
|
||||||
# from _field.modelfields import Field
|
|
||||||
|
|
||||||
|
|
||||||
class ReservationForm(forms.Form):
|
class ReservationForm(forms.Form):
|
||||||
|
|
@ -10,12 +9,16 @@ class ReservationForm(forms.Form):
|
||||||
max_length=100,
|
max_length=100,
|
||||||
min_length=4,
|
min_length=4,
|
||||||
widget=forms.TextInput(attrs={
|
widget=forms.TextInput(attrs={
|
||||||
'class': 'form-control form-control-lg form-control-a', 'placeholder': 'Nom *'}),
|
'class': 'form-control form-control-lg form-control-a',
|
||||||
|
'placeholder': 'Nom *'
|
||||||
|
}),
|
||||||
required=True)
|
required=True)
|
||||||
email = forms.EmailField(
|
email = forms.EmailField(
|
||||||
label='',
|
label='',
|
||||||
widget=forms.EmailInput(attrs={
|
widget=forms.EmailInput(attrs={
|
||||||
'class': 'form-control form-control-lg form-control-a', 'placeholder': 'Email *'}),
|
'class': 'form-control form-control-lg form-control-a',
|
||||||
|
'placeholder': 'Email *'
|
||||||
|
}),
|
||||||
required=True
|
required=True
|
||||||
)
|
)
|
||||||
phone = forms.CharField(
|
phone = forms.CharField(
|
||||||
|
|
@ -23,7 +26,9 @@ class ReservationForm(forms.Form):
|
||||||
max_length=30,
|
max_length=30,
|
||||||
min_length=4,
|
min_length=4,
|
||||||
widget=forms.TextInput(attrs={
|
widget=forms.TextInput(attrs={
|
||||||
'class': 'form-control form-control-lg form-control-a', 'placeholder': 'Téléphone *'}),
|
'class': 'form-control form-control-lg form-control-a',
|
||||||
|
'placeholder': 'Téléphone *'
|
||||||
|
}),
|
||||||
required=True)
|
required=True)
|
||||||
place = forms.ChoiceField(
|
place = forms.ChoiceField(
|
||||||
label='',
|
label='',
|
||||||
|
|
@ -36,7 +41,11 @@ class ReservationForm(forms.Form):
|
||||||
# max_length=100,
|
# max_length=100,
|
||||||
min_length=4,
|
min_length=4,
|
||||||
widget=forms.Textarea(attrs={
|
widget=forms.Textarea(attrs={
|
||||||
'class': 'form-control', 'cols': '45', 'rows': '8', 'placeholder': 'Message *'}),
|
'class': 'form-control',
|
||||||
|
'cols': '45',
|
||||||
|
'rows': '8',
|
||||||
|
'placeholder': 'Message *'
|
||||||
|
}),
|
||||||
required=True)
|
required=True)
|
||||||
start = forms.DateField(
|
start = forms.DateField(
|
||||||
label='',
|
label='',
|
||||||
|
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
Fully working PHP/AJAX contact form is available in the pro version.
|
|
||||||
You can buy it from: https://bootstrapmade.com/real-estate-agency-bootstrap-template/
|
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
/*!
|
|
||||||
* Bootstrap v4.1.3 (https://getbootstrap.com/)
|
|
||||||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
|
|
||||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
|
||||||
*/
|
|
||||||
(function (global, factory) {
|
(function (global, factory) {
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
|
||||||
typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
|
typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'reservation' %}">Réservation</a>
|
<a class="nav-link" href="{% url 'services' %}">Services</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="{% url 'about' %}">À propos</a>
|
<a class="nav-link" href="{% url 'about' %}">À propos</a>
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<a class="btn btn-b" href="{% url 'rental:list_place' %}">
|
<a class="btn btn-b" href="{% url 'reservation' %}">
|
||||||
Réserver
|
Réserver
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -27,9 +27,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<!--/ Intro Single End /-->
|
|
||||||
|
|
||||||
<!--/ Contact Star /-->
|
|
||||||
<section class="contact">
|
<section class="contact">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
<p style="text-align: center;"><strong>Un système de réservation en ligne sera bientôt mis en place. Patience !</strong></p>
|
<p style="text-align: center;"><strong>Un système de réservation en ligne sera bientôt mis en place. Patience !</strong></p>
|
||||||
<p style="text-align: justify;">Bien entendu, il est possible de réserver votre séjour à VillaFleurie via diverses plateformes de réservations en ligne :</p>
|
<p style="text-align: justify;">Bien entendu, il est possible de réserver votre séjour à VillaFleurie via diverses plateformes de réservations en ligne :</p>
|
||||||
<ul style="text-align: justify;">
|
<ul style="text-align: justify;">
|
||||||
<li><a href="http://www.booking.com/hotel/gp/villafleurie.html" target="_blank" rel="noopener">Booking.com</a></li>
|
<li><a href="https://www.booking.com/hotel/gp/villafleurie.html" target="_blank" rel="noopener">Booking.com</a></li>
|
||||||
<li>AirBnB : <a href="https://www.airbnb.fr/rooms/11583356" target="_blank" rel="noopener">T2</a> et <a href="https://www.airbnb.fr/rooms/12584994?preview_for_ml=true" target="_blank" rel="noopener">T3</a></li>
|
<li>AirBnB : <a href="https://www.airbnb.fr/rooms/11583356" target="_blank" rel="noopener">T2</a> et <a href="https://www.airbnb.fr/rooms/12584994?preview_for_ml=true" target="_blank" rel="noopener">T3</a></li>
|
||||||
<li>TripAdvisor : <a href="https://www.tripadvisor.fr/VacationRentalReview-g644387-d9744507-Location_T2_calme_dans_le_bourg-Le_Gosier_Grande_Terre_Island_Guadeloupe.html" target="_blank" rel="noopener">T2</a> et <a href="https://www.tripadvisor.fr/VacationRentalReview-g644387-d9751497-Location_T3_calme_dans_le_bourg-Le_Gosier_Grande_Terre_Island_Guadeloupe.html" target="_blank" rel="noopener">T3</a>.</li>
|
<li>TripAdvisor : <a href="https://www.tripadvisor.fr/VacationRentalReview-g644387-d9744507-Location_T2_calme_dans_le_bourg-Le_Gosier_Grande_Terre_Island_Guadeloupe.html" target="_blank" rel="noopener">T2</a> et <a href="https://www.tripadvisor.fr/VacationRentalReview-g644387-d9751497-Location_T3_calme_dans_le_bourg-Le_Gosier_Grande_Terre_Island_Guadeloupe.html" target="_blank" rel="noopener">T3</a>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
@ -51,6 +51,7 @@
|
||||||
<div class="col-md-12 col-lg-6">
|
<div class="col-md-12 col-lg-6">
|
||||||
<div class="property-contact">
|
<div class="property-contact">
|
||||||
<h4 class="title-agent">Formulaire de réservation</h4>
|
<h4 class="title-agent">Formulaire de réservation</h4>
|
||||||
|
<p style="text-align: justify;">Les champs marqués d'un * sont obligatoires.</p>
|
||||||
<form class="form-a" method='post'>
|
<form class="form-a" method='post'>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 mb-1">
|
<div class="col-md-12 mb-1">
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,95 @@
|
||||||
{% extends 'rental/base.html' %}
|
{% extends 'rental/base.html' %} {% load static %} {%block content%}
|
||||||
{% load static %}
|
|
||||||
|
|
||||||
|
<section class="intro-single">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 col-lg-8">
|
||||||
|
<div class="title-single-box">
|
||||||
|
<h1 class="title-single">Découvrez la ville du Gosier</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-12 col-lg-4">
|
||||||
|
<nav
|
||||||
|
aria-label="breadcrumb"
|
||||||
|
class="breadcrumb-box d-flex justify-content-lg-end"
|
||||||
|
>
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li class="breadcrumb-item">
|
||||||
|
<a href="{% url 'rental:index' %}">Accueil</a>
|
||||||
|
</li>
|
||||||
|
<li class="breadcrumb-item active" aria-current="page">
|
||||||
|
Services
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<h2>La ville du Gosier</h2>
|
<section class="contact">
|
||||||
<p style="text-align: justify;">Vous avez accès aux <strong>plages de sable fin</strong> du bourg et de la Pointe de la Verdure. L’embarcadère pour le romantique <strong>Îlet du Gosier</strong> avec son <strong>phare</strong> est à deux pas.<br />La plage de <strong>la Datcha</strong>, éclairée toute la nuit invite à la <strong>baignade nocturne</strong>.<br />Plusieurs <strong>bars de plage</strong> proposent de la <strong>musique</strong> « live » et des <strong>plats savoureux</strong>. Le <strong>Casino du Gosier</strong> offre des tables et machines à sous, ainsi qu’un restaurant et un <strong>programme d’animations</strong>.</p>
|
<div class="container">
|
||||||
<p style="text-align: justify;"><strong>Idéalement situé</strong> les commerces, boulangeries avec bistrot-café le matin, la Poste, plusieurs banques, pharmacies, marché aux fruits et légumes (tous les vendredis dès 15h), hôtels, bars, restaurants créole et français, coiffeur, esthéticienne sont à deux pas.</p>
|
<div class="row">
|
||||||
<p style="text-align: justify;">La situation de notre établissement vous donne la possibilité, si vous le souhaitez, de passer un <strong>séjour sans véhicule</strong>.</p>
|
<div class="col-sm-12">
|
||||||
<h2>Aux alentours</h2>
|
<div class="entry-content">
|
||||||
<p style="text-align: justify;">Le Gosier étant au milieu des 2 ailes de notre papillon, vous avez un <strong>large choix d’excursions</strong>, d'événements ludiques, sportifs et éducatifs.<br />Puisque certaines de ces activités nécessitent l’utilisation d’un véhicule, nous vous offrons la possibilité d’en louer un.<br />Toutefois, les <strong>arrêts de bus</strong> dans les deux directions sont situés au bout de la rue à <strong>moins de 2 minutes à pied</strong>.</p>
|
<p style="text-align: justify;">
|
||||||
<p style="text-align: justify;">Vos hôtes connaissent leur Île sur le bout des doigts. Ils se feront donc un plaisir de vous <strong>conseiller sur des sorties</strong> diurnes et nocturnes, des excursions, des randonnées, <strong>des musées</strong>, des plans "sports", les <strong>meilleures plages de l’Archipel</strong>, …</p>
|
Vous avez accès aux <strong>plages de sable fin</strong> du bourg et
|
||||||
<p style="text-align: justify;">Pour plus de tranquillité, <strong>si vous le souhaitez</strong>, nous vous <strong>accueillerons à l’aéroport </strong>(20 €)<strong> ou au port maritime</strong> (15 €).</p>
|
de la Pointe de la Verdure. L’embarcadère pour le romantique
|
||||||
<p style="text-align: justify;">Nous parlons créole, français et anglais.</p>
|
<strong>Îlet du Gosier</strong> avec son <strong>phare</strong> est
|
||||||
|
à deux pas.<br />La plage de <strong>la Datcha</strong>, éclairée
|
||||||
|
toute la nuit invite à la
|
||||||
|
<strong>baignade nocturne</strong>.<br />Plusieurs
|
||||||
|
<strong>bars de plage</strong> proposent de la
|
||||||
|
<strong>musique</strong> « live » et des
|
||||||
|
<strong>plats savoureux</strong>. Le
|
||||||
|
<strong>Casino du Gosier</strong> offre des tables et machines à
|
||||||
|
sous, ainsi qu’un restaurant et un
|
||||||
|
<strong>programme d’animations</strong>.
|
||||||
|
</p>
|
||||||
|
<p style="text-align: justify;">
|
||||||
|
<strong>Idéalement situé</strong> les commerces, boulangeries avec
|
||||||
|
bistrot-café le matin, la Poste, plusieurs banques, pharmacies,
|
||||||
|
marché aux fruits et légumes (tous les vendredis dès 15h), hôtels,
|
||||||
|
bars, restaurants créole et français, coiffeur, esthéticienne sont à
|
||||||
|
deux pas.
|
||||||
|
</p>
|
||||||
|
<p style="text-align: justify;">
|
||||||
|
La situation de notre établissement vous donne la possibilité, si
|
||||||
|
vous le souhaitez, de passer un
|
||||||
|
<strong>séjour sans véhicule</strong>.
|
||||||
|
</p>
|
||||||
|
<h2>Aux alentours</h2>
|
||||||
|
<p style="text-align: justify;">
|
||||||
|
Le Gosier étant au milieu des 2 ailes de notre papillon, vous avez
|
||||||
|
un
|
||||||
|
<strong>large choix d’excursions</strong>, d'événements ludiques,
|
||||||
|
sportifs et éducatifs.<br />Puisque certaines de ces activités
|
||||||
|
nécessitent l’utilisation d’un véhicule, nous vous offrons la
|
||||||
|
possibilité d’en louer un.<br />Toutefois, les
|
||||||
|
<strong>arrêts de bus</strong> dans les deux directions sont situés
|
||||||
|
au bout de la rue à <strong>moins de 2 minutes à pied</strong>.
|
||||||
|
</p>
|
||||||
|
<p style="text-align: justify;">
|
||||||
|
Vos hôtes connaissent leur Île sur le bout des doigts. Ils se feront
|
||||||
|
donc un plaisir de vous
|
||||||
|
<strong>conseiller sur des sorties</strong> diurnes et nocturnes,
|
||||||
|
des excursions, des randonnées, <strong>des musées</strong>, des
|
||||||
|
plans "sports", les
|
||||||
|
<strong>meilleures plages de l’Archipel</strong>, …
|
||||||
|
</p>
|
||||||
|
<p style="text-align: justify;">
|
||||||
|
Pour plus de tranquillité, <strong>si vous le souhaitez</strong>,
|
||||||
|
nous vous <strong>accueillerons à l’aéroport </strong>(20 €)<strong>
|
||||||
|
ou au port maritime</strong
|
||||||
|
>
|
||||||
|
(15 €).
|
||||||
|
</p>
|
||||||
|
<p style="text-align: justify;">
|
||||||
|
Nous parlons créole, français et anglais.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock%}
|
||||||
|
|
|
||||||
|
|
@ -171,6 +171,10 @@ class Partners(TemplateView):
|
||||||
template_name = 'rental/partners.html'
|
template_name = 'rental/partners.html'
|
||||||
|
|
||||||
|
|
||||||
|
class Services(TemplateView):
|
||||||
|
template_name = 'rental/service.html'
|
||||||
|
|
||||||
|
|
||||||
def handler404(request, exception):
|
def handler404(request, exception):
|
||||||
return render(request, 'rental/404.html', status=404)
|
return render(request, 'rental/404.html', status=404)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@
|
||||||
"model": "rental.image",
|
"model": "rental.image",
|
||||||
"pk": 1,
|
"pk": 1,
|
||||||
"fields": {
|
"fields": {
|
||||||
"img": "img/villafleurie_t2_salon_1_wl81yXI.jpg",
|
"img": "img/villafleurie_t2_salon_1.jpg",
|
||||||
"alt": "villafleurie T2 salon"
|
"alt": "villafleurie T2 salon"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -147,7 +147,7 @@
|
||||||
"model": "rental.image",
|
"model": "rental.image",
|
||||||
"pk": 3,
|
"pk": 3,
|
||||||
"fields": {
|
"fields": {
|
||||||
"img": "img/villafleurie_t2_sallle_de_bain.jpg",
|
"img": "img/villafleurie_t2_salle_de_bain.jpg",
|
||||||
"alt": "villafleurie T2 sallle de bain"
|
"alt": "villafleurie T2 sallle de bain"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import dj_database_url
|
# import dj_database_url
|
||||||
import os
|
import os
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
|
||||||
SECRET_KEY = os.environ.get('SECRET_KEY')
|
SECRET_KEY = os.environ.get('SECRET_KEY')
|
||||||
|
SECRET_KEY = 'q00_4wqdc^n=7)p2lm)!gy&fms8md_b4#1aqysllvqq==2c9!$'
|
||||||
|
|
||||||
if os.environ.get('ENV') == 'PRODUCTION':
|
if os.environ.get('ENV') == 'PRODUCTION':
|
||||||
DEBUG = False
|
DEBUG = False
|
||||||
|
|
@ -119,7 +120,7 @@ AUTH_PASSWORD_VALIDATORS = [
|
||||||
]
|
]
|
||||||
|
|
||||||
LANGUAGE_CODE = 'fr'
|
LANGUAGE_CODE = 'fr'
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'America/Guadeloupe'
|
||||||
USE_I18N = True
|
USE_I18N = True
|
||||||
USE_L10N = True
|
USE_L10N = True
|
||||||
USE_TZ = True
|
USE_TZ = True
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ urlpatterns = [
|
||||||
path('reservation/', views.reservation, name='reservation'),
|
path('reservation/', views.reservation, name='reservation'),
|
||||||
path('legal/', views.Legal.as_view(), name='legal'),
|
path('legal/', views.Legal.as_view(), name='legal'),
|
||||||
path('partenaires/', views.Partners.as_view(), name='partners'),
|
path('partenaires/', views.Partners.as_view(), name='partners'),
|
||||||
|
path('services/', views.Services.as_view(), name='services'),
|
||||||
path('', include('rental.urls', namespace='rental')),
|
path('', include('rental.urls', namespace='rental')),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||