mirror of
https://github.com/rjNemo/villafleurie
synced 2026-06-06 02:16: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
|
||||
- Gestion du calendrier
|
||||
..\_ Synchroniser avec Google calendar
|
||||
..\_ Afficher les disponibilités
|
||||
..\_ Synchroniser avec Google calendar (qd Calendar mis à jour => update db et quand db mise à jour => update calendrier)
|
||||
..\_ 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
|
||||
- Ajout page/module de paiement
|
||||
- ajouter les témoignages depuis Booking, AirBnb, ajouter le lien
|
||||
- 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 ?
|
||||
- deploy on Heroku or somewhere else … don't care
|
||||
- change placeholders for dates, add a date picker
|
||||
- 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
|
||||
|
|
|
|||
|
|
@ -1,17 +1,13 @@
|
|||
import sys
|
||||
from googleapiclient import sample_tools
|
||||
import datetime
|
||||
from rental.pricing import get_reservation_price
|
||||
from django.shortcuts import get_object_or_404
|
||||
from rental.models import Reservation, Place
|
||||
|
||||
# from __future__ import print_function
|
||||
# from google.auth.transport.requests import Request
|
||||
# from google_auth_oauthlib.flow import InstalledAppFlow
|
||||
# from googleapiclient.discovery import build
|
||||
# import os.path
|
||||
# import pickle
|
||||
# from oauth2client import client
|
||||
import datetime
|
||||
from google.auth.transport.requests import Request
|
||||
from google_auth_oauthlib.flow import InstalledAppFlow
|
||||
from googleapiclient.discovery import build
|
||||
import os.path
|
||||
import pickle
|
||||
|
||||
|
||||
def get_bookings(place):
|
||||
|
|
@ -33,20 +29,38 @@ def check_availability(place, start_date, end_date):
|
|||
return True
|
||||
|
||||
|
||||
def synchronize_calendars(argv):
|
||||
def synchronize_calendars():
|
||||
"""
|
||||
Simple command-line sample for the Calendar API.
|
||||
Command-line application that retrieves the list of calendars' events
|
||||
Get a complete list of existing bookings in calendar
|
||||
Creates reservation if not in db, update if already in db
|
||||
Delete from db reservation deleted from cal
|
||||
"""
|
||||
service, _ = sample_tools.init(
|
||||
argv, 'calendar', 'v3', __doc__, __file__,
|
||||
scope='https://www.googleapis.com/auth/calendar.readonly')
|
||||
creds = None
|
||||
# If modifying these scopes, delete the file token.pickle.
|
||||
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 = {
|
||||
'T2': "burik7aclvhc7vsboh06c179uo@group.calendar.google.com",
|
||||
'T3': "fu7h30p0gk4a2p4nvo7nsbgpok@group.calendar.google.com"
|
||||
}
|
||||
|
||||
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
|
||||
|
||||
for calendar in calendars:
|
||||
|
|
@ -57,33 +71,36 @@ def synchronize_calendars(argv):
|
|||
singleEvents=True,
|
||||
orderBy='startTime').execute()
|
||||
events = events_result.get('items', [])
|
||||
reservation = {}
|
||||
if not events:
|
||||
print('No upcoming events found.')
|
||||
for index, event in enumerate(events):
|
||||
# start = event['start'].get('dateTime', event['start'].get('date'))
|
||||
# end = event['end'].get('dateTime', event['end'].get('date'))
|
||||
# print(start, end, event['summary'])
|
||||
reservation[index] = {
|
||||
'place': calendar,
|
||||
'guest': event['summary'],
|
||||
'start': event['start'].get('dateTime', event['start'].get('date')),
|
||||
'end': event['end'].get('dateTime', event['end'].get('date'))
|
||||
}
|
||||
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'])
|
||||
else:
|
||||
reservation = {}
|
||||
for index, event in enumerate(events):
|
||||
reservation[index] = {
|
||||
'place': calendar,
|
||||
'guest': event['summary'],
|
||||
'start': event['start'].get('dateTime', event['start'].get('date')),
|
||||
'end': event['end'].get('dateTime', event['end'].get('date'))
|
||||
}
|
||||
print(reservation[index])
|
||||
|
||||
Reservation.objects.create(
|
||||
place=place,
|
||||
guest=guest,
|
||||
start=start,
|
||||
end=end,
|
||||
price=price
|
||||
)
|
||||
# if booking not in db -> create
|
||||
# if booking in db and modification_date_cal > update_date_db -> update
|
||||
|
||||
place = get_object_or_404(Place, name=calendar)
|
||||
price = get_reservation_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__':
|
||||
synchronize_calendars(sys.argv)
|
||||
synchronize_calendars()
|
||||
|
|
|
|||
|
|
@ -1,9 +1,36 @@
|
|||
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
|
||||
Django==3.0
|
||||
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
|
||||
psycopg2==2.8.4
|
||||
pyasn1==0.4.8
|
||||
pyasn1-modules==0.2.7
|
||||
pycodestyle==2.5.0
|
||||
pylint==2.4.4
|
||||
pytz==2019.3
|
||||
requests==2.22.0
|
||||
requests-oauthlib==1.3.0
|
||||
rsa==4.0
|
||||
six==1.13.0
|
||||
sqlparse==0.3.0
|
||||
typed-ast==1.4.0
|
||||
uritemplate==3.0.0
|
||||
urllib3==1.25.7
|
||||
whitenoise==4.1.4
|
||||
wrapt==1.11.2
|
||||
Loading…
Reference in a new issue