mirror of
https://github.com/rjNemo/villafleurie
synced 2026-06-12 13:26:47 +00:00
minor update of booking system
This commit is contained in:
parent
9507b80868
commit
8695c988a6
3 changed files with 91 additions and 45 deletions
10
README.md
10
README.md
|
|
@ -80,17 +80,19 @@ Le visiteur doit pouvoir :
|
||||||
|
|
||||||
- Page service : navette + location
|
- Page service : navette + location
|
||||||
- Gestion du calendrier
|
- Gestion du calendrier
|
||||||
..\_ Synchroniser avec Google calendar
|
..\_ Synchroniser avec Google calendar (qd Calendar mis à jour => update db et quand db mise à jour => update calendrier)
|
||||||
..\_ Afficher les disponibilités
|
..\_ Afficher les disponibilités (Présentation à la hauteur)
|
||||||
|
..\_ 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
|
||||||
- ajouter les témoignages depuis Booking, AirBnb, ajouter le lien
|
- ajouter les témoignages depuis Booking, AirBnb, ajouter le lien
|
||||||
- changer la couleur des liens hypertextes
|
- changer la couleur des liens hypertextes
|
||||||
- changer l'adresse de l'admin
|
- changer l'adresse de l'admin, personnaliser le back-end
|
||||||
- ajouter un diaporama en bas de page de location ?
|
- ajouter un diaporama en bas de page de location ?
|
||||||
- deploy on Heroku or somewhere else … don't care
|
- deploy on Heroku or somewhere else … don't care
|
||||||
- change placeholders for dates, add a date picker
|
- change placeholders for dates, add a date picker
|
||||||
- factoriser le code de réservation
|
- factoriser le code de réservation
|
||||||
- formulaire de réservation : les apparts sont hard codés rendre ça dynamique
|
- formulaire de réservation : les apparts sont hard codés rendre ça dynamique (use choicefields)
|
||||||
|
\_ nettoyer les statics files. Garder que les définitions utiles
|
||||||
|
|
||||||
## BUGS
|
## BUGS
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,13 @@
|
||||||
import sys
|
|
||||||
from googleapiclient import sample_tools
|
|
||||||
import datetime
|
import datetime
|
||||||
from rental.pricing import get_reservation_price
|
from rental.pricing import get_reservation_price
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from rental.models import Reservation, Place
|
from rental.models import Reservation, Place
|
||||||
|
import datetime
|
||||||
# from __future__ import print_function
|
from google.auth.transport.requests import Request
|
||||||
# from google.auth.transport.requests import Request
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
||||||
# from google_auth_oauthlib.flow import InstalledAppFlow
|
from googleapiclient.discovery import build
|
||||||
# from googleapiclient.discovery import build
|
import os.path
|
||||||
# import os.path
|
import pickle
|
||||||
# import pickle
|
|
||||||
# from oauth2client import client
|
|
||||||
|
|
||||||
|
|
||||||
def get_bookings(place):
|
def get_bookings(place):
|
||||||
|
|
@ -33,20 +29,38 @@ def check_availability(place, start_date, end_date):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def synchronize_calendars(argv):
|
def synchronize_calendars():
|
||||||
"""
|
"""
|
||||||
Simple command-line sample for the Calendar API.
|
Get a complete list of existing bookings in calendar
|
||||||
Command-line application that retrieves the list of calendars' events
|
Creates reservation if not in db, update if already in db
|
||||||
|
Delete from db reservation deleted from cal
|
||||||
"""
|
"""
|
||||||
service, _ = sample_tools.init(
|
creds = None
|
||||||
argv, 'calendar', 'v3', __doc__, __file__,
|
# If modifying these scopes, delete the file token.pickle.
|
||||||
scope='https://www.googleapis.com/auth/calendar.readonly')
|
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']
|
||||||
|
# The file token.pickle stores the user's access and refresh tokens, and is
|
||||||
|
# created automatically when the authorization flow completes for the first
|
||||||
|
# time.
|
||||||
|
if os.path.exists('token.pickle'):
|
||||||
|
with open('token.pickle', 'rb') as token:
|
||||||
|
creds = pickle.load(token)
|
||||||
|
# If there are no (valid) credentials available, let the user log in.
|
||||||
|
if not creds or not creds.valid:
|
||||||
|
if creds and creds.expired and creds.refresh_token:
|
||||||
|
creds.refresh(Request())
|
||||||
|
else:
|
||||||
|
flow = InstalledAppFlow.from_client_secrets_file(
|
||||||
|
'client_secrets.json', scopes=SCOPES, redirect_uri="http://localhost:8080/")
|
||||||
|
creds = flow.run_local_server()
|
||||||
|
# Save the credentials for the next run
|
||||||
|
with open('token.pickle', 'wb') as token:
|
||||||
|
pickle.dump(creds, token)
|
||||||
|
|
||||||
|
service = build('calendar', 'v3', credentials=creds)
|
||||||
calendars = {
|
calendars = {
|
||||||
'T2': "burik7aclvhc7vsboh06c179uo@group.calendar.google.com",
|
'T2': "burik7aclvhc7vsboh06c179uo@group.calendar.google.com",
|
||||||
'T3': "fu7h30p0gk4a2p4nvo7nsbgpok@group.calendar.google.com"
|
'T3': "fu7h30p0gk4a2p4nvo7nsbgpok@group.calendar.google.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
|
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
|
||||||
|
|
||||||
for calendar in calendars:
|
for calendar in calendars:
|
||||||
|
|
@ -57,33 +71,36 @@ def synchronize_calendars(argv):
|
||||||
singleEvents=True,
|
singleEvents=True,
|
||||||
orderBy='startTime').execute()
|
orderBy='startTime').execute()
|
||||||
events = events_result.get('items', [])
|
events = events_result.get('items', [])
|
||||||
reservation = {}
|
|
||||||
if not events:
|
if not events:
|
||||||
print('No upcoming events found.')
|
print('No upcoming events found.')
|
||||||
for index, event in enumerate(events):
|
else:
|
||||||
# start = event['start'].get('dateTime', event['start'].get('date'))
|
reservation = {}
|
||||||
# end = event['end'].get('dateTime', event['end'].get('date'))
|
for index, event in enumerate(events):
|
||||||
# print(start, end, event['summary'])
|
reservation[index] = {
|
||||||
reservation[index] = {
|
'place': calendar,
|
||||||
'place': calendar,
|
'guest': event['summary'],
|
||||||
'guest': event['summary'],
|
'start': event['start'].get('dateTime', event['start'].get('date')),
|
||||||
'start': event['start'].get('dateTime', event['start'].get('date')),
|
'end': event['end'].get('dateTime', event['end'].get('date'))
|
||||||
'end': event['end'].get('dateTime', event['end'].get('date'))
|
}
|
||||||
}
|
print(reservation[index])
|
||||||
print(reservation[index])
|
|
||||||
place = get_object_or_404(Place, name=calendar)
|
|
||||||
price = get_reservation_price(
|
|
||||||
place, reservation['start'], reservation['end'])
|
|
||||||
guest = Guest.objects.create(name=reservation['guest'])
|
|
||||||
|
|
||||||
Reservation.objects.create(
|
# if booking not in db -> create
|
||||||
place=place,
|
# if booking in db and modification_date_cal > update_date_db -> update
|
||||||
guest=guest,
|
|
||||||
start=start,
|
place = get_object_or_404(Place, name=calendar)
|
||||||
end=end,
|
price = get_reservation_price(
|
||||||
price=price
|
place, reservation['start'], reservation['end'])
|
||||||
)
|
# trouver si guest existe déjà, créer sinon
|
||||||
|
guest = Guest.objects.create(name=reservation['guest'])
|
||||||
|
|
||||||
|
Reservation.objects.create(
|
||||||
|
place=place,
|
||||||
|
guest=guest,
|
||||||
|
start=start,
|
||||||
|
end=end,
|
||||||
|
price=price
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
synchronize_calendars(sys.argv)
|
synchronize_calendars()
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,36 @@
|
||||||
asgiref==3.2.3
|
asgiref==3.2.3
|
||||||
|
astroid==2.3.3
|
||||||
|
autopep8==1.4.4
|
||||||
|
cachetools==3.1.1
|
||||||
|
certifi==2019.11.28
|
||||||
|
chardet==3.0.4
|
||||||
dj-database-url==0.5.0
|
dj-database-url==0.5.0
|
||||||
Django==3.0
|
Django==3.0
|
||||||
google-api-python-client==1.7.11
|
google-api-python-client==1.7.11
|
||||||
|
google-auth==1.7.2
|
||||||
|
google-auth-httplib2==0.0.3
|
||||||
|
google-auth-oauthlib==0.4.1
|
||||||
|
httplib2==0.14.0
|
||||||
|
idna==2.8
|
||||||
|
isort==4.3.21
|
||||||
|
lazy-object-proxy==1.4.3
|
||||||
|
mccabe==0.6.1
|
||||||
|
oauth2client==4.1.3
|
||||||
|
oauthlib==3.1.0
|
||||||
Pillow==6.2.1
|
Pillow==6.2.1
|
||||||
psycopg2==2.8.4
|
psycopg2==2.8.4
|
||||||
|
pyasn1==0.4.8
|
||||||
|
pyasn1-modules==0.2.7
|
||||||
|
pycodestyle==2.5.0
|
||||||
|
pylint==2.4.4
|
||||||
pytz==2019.3
|
pytz==2019.3
|
||||||
|
requests==2.22.0
|
||||||
|
requests-oauthlib==1.3.0
|
||||||
|
rsa==4.0
|
||||||
|
six==1.13.0
|
||||||
sqlparse==0.3.0
|
sqlparse==0.3.0
|
||||||
|
typed-ast==1.4.0
|
||||||
|
uritemplate==3.0.0
|
||||||
|
urllib3==1.25.7
|
||||||
whitenoise==4.1.4
|
whitenoise==4.1.4
|
||||||
|
wrapt==1.11.2
|
||||||
Loading…
Reference in a new issue