diff --git a/roofis2/core/urls.py b/roofis2/core/urls.py index 04b87fe..67217f3 100644 --- a/roofis2/core/urls.py +++ b/roofis2/core/urls.py @@ -20,7 +20,6 @@ from rest_framework.documentation import include_docs_urls from rest_framework.permissions import AllowAny from django.contrib.auth import views as auth_views - urlpatterns = [ path('admin/', admin.site.urls), path('', include('roomservice.urls')), @@ -28,9 +27,8 @@ urlpatterns = [ path('login/', auth_views.login, {'template_name': 'login.jinja'}, name='login'), path('logout/', auth_views.logout, name='logout'), - # APIs - # path('api/', include('respool.api.urls')), + path('api/', include('roomservice.api.urls')), # API Docs # path('api/docs/', include_docs_urls(title='Respool API Docs', public=True, diff --git a/roofis2/roomservice/api/__init__.py b/roofis2/roomservice/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/roofis2/roomservice/api/serializers.py b/roofis2/roomservice/api/serializers.py new file mode 100644 index 0000000..ca40138 --- /dev/null +++ b/roofis2/roomservice/api/serializers.py @@ -0,0 +1,20 @@ +from roomservice.models import Booking, Room +from rest_framework import serializers + + +class RoomSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Room + fields = ('id',) + + +class BookingSerializer(serializers.HyperlinkedModelSerializer): + room = RoomSerializer(many=False, read_only=True) + start_date = serializers.DateField(format='iso-8601') + end_date = serializers.DateField(format='iso-8601') + start_time = serializers.TimeField(format='iso-8601') + end_time = serializers.TimeField(format='iso-8601') + + class Meta: + model = Booking + fields = ('id', 'room', 'start_date', 'end_date', 'start_time', 'end_time') diff --git a/roofis2/roomservice/api/urls.py b/roofis2/roomservice/api/urls.py new file mode 100644 index 0000000..2a68b8a --- /dev/null +++ b/roofis2/roomservice/api/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +app_name = 'roomservice.api' +urlpatterns = [ + path('booking', views.ApiBooking.as_view(), name='api-booking'), +] \ No newline at end of file diff --git a/roofis2/roomservice/api/views.py b/roofis2/roomservice/api/views.py new file mode 100644 index 0000000..630bbe5 --- /dev/null +++ b/roofis2/roomservice/api/views.py @@ -0,0 +1,21 @@ +from __future__ import unicode_literals + +from roomservice.models import Booking +from roomservice.api.serializers import BookingSerializer + +from rest_framework import generics +from rest_framework.decorators import permission_classes +from rest_framework.permissions import IsAuthenticated, AllowAny + + +@permission_classes((AllowAny,)) +class ApiBooking(generics.ListAPIView): + serializer_class = BookingSerializer + + def get_queryset(self): + queryset = Booking.objects.all() + roomId = self.request.query_params.get('room_id') + + if roomId: + queryset = queryset.filter(room=roomId) + return queryset diff --git a/roofis2/roomservice/forms.py b/roofis2/roomservice/forms.py new file mode 100644 index 0000000..03f29d6 --- /dev/null +++ b/roofis2/roomservice/forms.py @@ -0,0 +1,9 @@ +from django.db import models +from .models import Favorite +from django.forms import ModelForm + + +class AuthorForm(ModelForm): + class Meta: + model = Favorite + fields = ['room', 'staff'] diff --git a/roofis2/roomservice/management/sample_data_creation/data_creator.py b/roofis2/roomservice/management/sample_data_creation/data_creator.py index 75f750f..4bb32b7 100644 --- a/roofis2/roomservice/management/sample_data_creation/data_creator.py +++ b/roofis2/roomservice/management/sample_data_creation/data_creator.py @@ -142,7 +142,7 @@ def create_num_equipment(): def create_access_point(): for i in range(1, 25): access_point, _ = AccessPoint.objects.get_or_create(mac_address=''.join( - random.choices(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'], k=12)), ) + random.choices(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'], k=12))) for i in range(1, random.randint(1, 4)): access_point.rooms.add(random.choice(Room.objects.all())) access_point.save() diff --git a/roofis2/roomservice/urls.py b/roofis2/roomservice/urls.py index ff68b43..78fd544 100644 --- a/roofis2/roomservice/urls.py +++ b/roofis2/roomservice/urls.py @@ -1,12 +1,14 @@ -from django.urls import path +from django.urls import path, include from . import views app_name = 'roomservice' urlpatterns = [ path('', views.favorites, name='home'), + path('favorite', views.add_favorites, name='add-fav'), + path('adminpage', views.admin, name='admin'), path('booking', views.booking, name='booking'), path('search', views.search, name='search'), path('location_search', views.location_based_search, name='location-based-search'), - path('filter_search', views.filter_search, name='filter-search'), -] + path('filter_search', views.filter_search, name='filter-search')] + diff --git a/roofis2/roomservice/views.py b/roofis2/roomservice/views.py index 415c16e..726fec1 100644 --- a/roofis2/roomservice/views.py +++ b/roofis2/roomservice/views.py @@ -1,5 +1,6 @@ -from roomservice.models import Room, Favorite -from django.shortcuts import render, redirect +from roomservice.models import Room, Favorite, Booking +import datetime +from django.shortcuts import render import logging logger = logging.getLogger(__name__) @@ -14,9 +15,47 @@ def search(request): def booking(request): room_id = request.POST["room"] room = Room.objects.get(id=room_id) - logger.info(room_id) - logger.info(room) - return render(request, 'booking.jinja', {"title": "rooF(i)S is love rooF(i)S is live!!", "room": room}) + startdate = datetime.date.today() + weekday = startdate.weekday() + logger.info(weekday) + enddate = startdate + datetime.timedelta(7) + multd = [] + bookings = Booking.objects.filter(room_id=room.id, start_date__gte=startdate, end_date__lte=enddate) + logger.info(bookings) + for booking in bookings: + logger.info(booking) + sdate = booking.start_date + logger.info(sdate) + edate = booking.end_date + logger.info(edate) + stime = booking.start_time.hour + logger.info(stime) + etime = booking.end_time.hour + 1 + logger.info(etime) + if edate != sdate: + break + else: + if weekday == 0: + day = "Monday" + elif weekday == 1: + day = "Tuesday" + elif weekday == 2: + day = "Wednesday" + elif weekday == 3: + day = "Thursday" + elif weekday == 4: + day = "Friday" + elif weekday == 5: + day = "Saturday" + elif weekday == 6: + day = "Sunday" + timediff = etime - stime + if timediff > 1: + while timediff > 1: + multd.append(day + (stime + timediff - 1).__str__() + "-" + (stime + timediff).__str__()) + timediff = timediff - 1 + logger.info(multd) + return render(request, 'booking.jinja', {"title": "rooF(i)S is love rooF(i)S is live!!", "multd": multd}) def admin(request): @@ -32,6 +71,13 @@ def favorites(request): {"title": "rooF(i)S is love rooF(i)S is live!!"}) +def add_favorites(request): + if request.method == 'POST': + pass + else: + return render(request, 'add_fav.jinja', {"title": "Add a new Favorite"}) + + def location_based_search(request): return render(request, 'favorites.jinja', {"title": "rooF(i)S is love rooF(i)S is live!!"}) diff --git a/roofis2/static/css/style.css b/roofis2/static/css/style.css index ca41812..76e5523 100644 --- a/roofis2/static/css/style.css +++ b/roofis2/static/css/style.css @@ -5,4 +5,10 @@ line-height: 3.5em; vertical-align: middle; padding-left: -1em; +} +td{ + background-color: lawngreen; +} +.booked{ + background-color: red; } \ No newline at end of file diff --git a/roofis2/templates/add_fav.jinja b/roofis2/templates/add_fav.jinja new file mode 100644 index 0000000..9ca4584 --- /dev/null +++ b/roofis2/templates/add_fav.jinja @@ -0,0 +1,15 @@ +{% extends 'base.jinja' %} +{% block content %} +
| Time | @@ -12,157 +18,147 @@Saturday | Sunday | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6:00 - 7:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 7:00 - 8:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 8:00 - 9:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 9:00 - 10:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 10:00 - 11:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 11:00 - 12:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 12:00 - 13:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 13:00 - 14:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 14:00 - 15:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 15:00 - 16:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 16:00 - 17:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 17:00 - 18:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 18:00 - 19:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + | |
| 19:00 - 20:00 | -- | - | - | - | - | - | - | |||||||
| 20:00 - 6:00 | -- | - | - | - | - | - | + | + | + | + | + | + | + |