├── .gitignore ├── guest ├── __init__.py ├── migrations │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── 0002_guest.cpython-37.pyc │ │ ├── 0001_initial.cpython-37.pyc │ │ ├── 0003_auto_20181106_2124.cpython-37.pyc │ │ ├── 0004_auto_20181107_0936.cpython-37.pyc │ │ ├── 0005_auto_20181107_1125.cpython-37.pyc │ │ ├── 0006_auto_20181107_1319.cpython-37.pyc │ │ ├── 0007_auto_20181107_1334.cpython-37.pyc │ │ ├── 0008_auto_20181107_1404.cpython-37.pyc │ │ ├── 0009_auto_20181107_1413.cpython-37.pyc │ │ ├── 0010_auto_20181107_1421.cpython-37.pyc │ │ └── 0011_reservation_room_alloted.cpython-37.pyc │ ├── 0008_auto_20181107_1404.py │ ├── 0009_auto_20181107_1413.py │ ├── 0011_reservation_room_alloted.py │ ├── 0010_auto_20181107_1421.py │ ├── 0007_auto_20181107_1334.py │ ├── 0006_auto_20181107_1319.py │ ├── 0002_guest.py │ ├── 0004_auto_20181107_0936.py │ ├── 0003_auto_20181106_2124.py │ ├── 0005_auto_20181107_1125.py │ └── 0001_initial.py ├── tests.py ├── apps.py ├── __pycache__ │ ├── admin.cpython-37.pyc │ ├── forms.cpython-37.pyc │ ├── urls.cpython-37.pyc │ ├── utils.cpython-37.pyc │ ├── views.cpython-37.pyc │ ├── models.cpython-37.pyc │ └── __init__.cpython-37.pyc ├── templates │ └── guest │ │ ├── confirm.html │ │ ├── home.html │ │ ├── login.html │ │ ├── select.html │ │ ├── start.html │ │ ├── reg_form.html │ │ ├── edit.html │ │ ├── invoice.html │ │ ├── details.html │ │ ├── profile.html │ │ ├── bookings.html │ │ └── base.html ├── utils.py ├── admin.py ├── urls.py ├── forms.py ├── models.py └── views.py ├── hms ├── __init__.py ├── __pycache__ │ ├── urls.cpython-37.pyc │ ├── wsgi.cpython-37.pyc │ ├── __init__.cpython-37.pyc │ └── settings.cpython-37.pyc ├── wsgi.py ├── urls.py └── settings.py ├── selection ├── __init__.py ├── migrations │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-37.pyc │ │ ├── 0001_initial.cpython-37.pyc │ │ ├── 0003_student_no_dues.cpython-37.pyc │ │ └── 0002_auto_20180922_0049.cpython-37.pyc │ ├── 0003_student_no_dues.py │ ├── 0002_auto_20180922_0049.py │ └── 0001_initial.py ├── templates │ ├── BH5_Floor1.html │ ├── BH5_Floor2.html │ ├── BH5_Floor3.html │ ├── BH5_Floor5.html │ ├── BH5_GroundFloor.html │ ├── login.html │ ├── hostels_all.html │ ├── remove_due.html │ ├── add_due.html │ ├── select_room.html │ ├── repair_form.html │ ├── leave_form.html │ ├── home.html │ ├── reg_form.html │ ├── hostels.html │ ├── edit.html │ ├── student_leave.html │ ├── dues.html │ ├── base.html │ ├── present_leaves.html │ ├── empty_rooms.html │ ├── mess_rebate.html │ ├── bookings.html │ ├── profile.html │ ├── pending.html │ ├── guest_requests.html │ ├── warden.html │ ├── start.html │ └── BH5_Floor4.html ├── tests.py ├── urls.py ├── __pycache__ │ ├── admin.cpython-37.pyc │ ├── forms.cpython-37.pyc │ ├── models.cpython-37.pyc │ ├── views.cpython-37.pyc │ └── __init__.cpython-37.pyc ├── apps.py ├── admin.py ├── forms.py ├── models.py └── static │ └── selection │ └── style.css ├── HMS.png ├── db.sqlite3 ├── HMS -ERD.png ├── requirements.txt ├── README.md └── manage.py /.gitignore: -------------------------------------------------------------------------------- 1 | env/ -------------------------------------------------------------------------------- /guest/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /hms/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /guest/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/templates/BH5_Floor1.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/templates/BH5_Floor2.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/templates/BH5_Floor3.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/templates/BH5_Floor5.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /selection/templates/BH5_GroundFloor.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /HMS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/HMS.png -------------------------------------------------------------------------------- /guest/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/db.sqlite3 -------------------------------------------------------------------------------- /selection/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /HMS -ERD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/HMS -ERD.png -------------------------------------------------------------------------------- /guest/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class GuestConfig(AppConfig): 5 | name = 'guest' 6 | -------------------------------------------------------------------------------- /hms/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/hms/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /hms/__pycache__/wsgi.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/hms/__pycache__/wsgi.cpython-37.pyc -------------------------------------------------------------------------------- /guest/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /guest/__pycache__/forms.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/forms.cpython-37.pyc -------------------------------------------------------------------------------- /guest/__pycache__/urls.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/urls.cpython-37.pyc -------------------------------------------------------------------------------- /guest/__pycache__/utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/utils.cpython-37.pyc -------------------------------------------------------------------------------- /guest/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /selection/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | from django.urls import path 3 | from . import views 4 | 5 | urlpatterns = [ 6 | 7 | ] 8 | -------------------------------------------------------------------------------- /guest/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /hms/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/hms/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /hms/__pycache__/settings.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/hms/__pycache__/settings.cpython-37.pyc -------------------------------------------------------------------------------- /guest/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /selection/__pycache__/admin.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/__pycache__/admin.cpython-37.pyc -------------------------------------------------------------------------------- /selection/__pycache__/forms.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/__pycache__/forms.cpython-37.pyc -------------------------------------------------------------------------------- /selection/__pycache__/models.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/__pycache__/models.cpython-37.pyc -------------------------------------------------------------------------------- /selection/__pycache__/views.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/__pycache__/views.cpython-37.pyc -------------------------------------------------------------------------------- /selection/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /selection/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SelectionConfig(AppConfig): 5 | name = 'selection' 6 | verbose_name = 'Hostel' 7 | -------------------------------------------------------------------------------- /guest/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0002_guest.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0002_guest.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0001_initial.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0001_initial.cpython-37.pyc -------------------------------------------------------------------------------- /selection/migrations/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/migrations/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /selection/migrations/__pycache__/0001_initial.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/migrations/__pycache__/0001_initial.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0003_auto_20181106_2124.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0003_auto_20181106_2124.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0004_auto_20181107_0936.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0004_auto_20181107_0936.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0005_auto_20181107_1125.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0005_auto_20181107_1125.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0006_auto_20181107_1319.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0006_auto_20181107_1319.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0007_auto_20181107_1334.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0007_auto_20181107_1334.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0008_auto_20181107_1404.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0008_auto_20181107_1404.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0009_auto_20181107_1413.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0009_auto_20181107_1413.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0010_auto_20181107_1421.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0010_auto_20181107_1421.cpython-37.pyc -------------------------------------------------------------------------------- /selection/migrations/__pycache__/0003_student_no_dues.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/migrations/__pycache__/0003_student_no_dues.cpython-37.pyc -------------------------------------------------------------------------------- /guest/migrations/__pycache__/0011_reservation_room_alloted.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/guest/migrations/__pycache__/0011_reservation_room_alloted.cpython-37.pyc -------------------------------------------------------------------------------- /selection/migrations/__pycache__/0002_auto_20180922_0049.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vedavikas06/Hostel-Management-System/HEAD/selection/migrations/__pycache__/0002_auto_20180922_0049.cpython-37.pyc -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==2.1.2 2 | django-crispy-forms==1.7.2 3 | html5lib==1.0.1 4 | Pillow==5.3.0 5 | PyPDF2==1.26.0 6 | pytz==2018.7 7 | reportlab==3.5.9 8 | six==1.11.0 9 | webencodings==0.5.1 10 | xhtml2pdf==0.2.3 11 | -------------------------------------------------------------------------------- /guest/templates/guest/confirm.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 |

Guest Room Booking Request sent to warden for approval!!

9 |
10 | Book Again!
11 | Generate PDF 12 | 13 | -------------------------------------------------------------------------------- /hms/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for hms project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hms.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /guest/migrations/0008_auto_20181107_1404.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 14:04 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('guest', '0007_auto_20181107_1334'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='reservation', 15 | old_name='guest', 16 | new_name='person', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /guest/migrations/0009_auto_20181107_1413.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 14:13 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('guest', '0008_auto_20181107_1404'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='reservation', 15 | old_name='person', 16 | new_name='guest', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /selection/migrations/0003_student_no_dues.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.1 on 2018-09-22 22:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('selection', '0002_auto_20180922_0049'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='student', 15 | name='no_dues', 16 | field=models.BooleanField(default=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /guest/migrations/0011_reservation_room_alloted.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-08 07:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('guest', '0010_auto_20181107_1421'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='reservation', 15 | name='room_alloted', 16 | field=models.BooleanField(default=False), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /guest/migrations/0010_auto_20181107_1421.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 14:21 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('guest', '0009_auto_20181107_1413'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='room', 15 | name='id', 16 | field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /guest/templates/guest/home.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block content %} 4 | 5 | 6 |
7 |
8 | {% csrf_token %} 9 | {{ form.as_p }} 10 | 11 |
12 | 13 |
14 | 15 | {% endblock content %} 16 | 17 | 18 | 19 | 20 | {% block more_links %} 21 | My Bookings 22 | Logout 23 | 24 | {% endblock more_links %} 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /guest/utils.py: -------------------------------------------------------------------------------- 1 | # Takes a django template and returns a pdf . 2 | from io import BytesIO 3 | from django.http import HttpResponse 4 | from django.template.loader import get_template 5 | from xhtml2pdf import pisa 6 | 7 | 8 | def render_to_pdf(template_src, context_dict={}): 9 | template = get_template(template_src) 10 | html = template.render(context_dict) 11 | result = BytesIO() 12 | pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result) 13 | if not pdf.err: 14 | return HttpResponse(result.getvalue(), content_type='application/pdf') 15 | return None -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hostel Automation in Django 2 | 3 | ## [CHECK IT OUT FOR ALL THE SAMPLE PICS OF WEBSITE](https://drive.google.com/drive/folders/13tYDgCdM_eqoN8hPJ7ScRCtB9YSjO7D-?usp=sharing) 4 | 5 | ### Django version used here is [2.1.2](https://docs.djangoproject.com/en/2.1/intro/tutorial01/) 6 | 7 | ### Requirements (All the libraries and their versions used here) 8 | Django==2.1.2 9 | django-crispy-forms==1.7.2 10 | html5lib==1.0.1 11 | Pillow==5.3.0 12 | PyPDF2==1.26.0 13 | pytz==2018.7 14 | reportlab==3.5.9 15 | six==1.11.0 16 | webencodings==0.5.1 17 | xhtml2pdf==0.2.3 18 | -------------------------------------------------------------------------------- /guest/migrations/0007_auto_20181107_1334.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 13:34 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('guest', '0006_auto_20181107_1319'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='room', 16 | name='no', 17 | field=models.CharField(max_length=5, unique=True, validators=[django.core.validators.MinLengthValidator(2)]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hms.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError as exc: 10 | raise ImportError( 11 | "Couldn't import Django. Are you sure it's installed and " 12 | "available on your PYTHONPATH environment variable? Did you " 13 | "forget to activate a virtual environment?" 14 | ) from exc 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /selection/templates/login.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
Username

{{ form.username }}
8 |
Password

{{ form.password }}
9 | 10 |
11 |
12 | {% endblock content %} 13 | 14 | 15 | {% block more_links %} 16 | Login 17 | Register 18 | {% endblock more_links %} 19 | -------------------------------------------------------------------------------- /guest/templates/guest/login.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
Username

{{ form.username }}
8 |
Password

{{ form.password }}
9 | 10 |
11 |
12 | {% endblock content %} 13 | 14 | 15 | {% block more_links %} 16 | Login 17 | Register 18 | {% endblock more_links %} 19 | -------------------------------------------------------------------------------- /guest/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import * 3 | # Register your models here. 4 | 5 | 6 | @admin.register(Room) 7 | class RoomAdmin(admin.ModelAdmin): 8 | list_display = ['no', 'room_type', 'price'] 9 | 10 | 11 | @admin.register(Reservation) 12 | class ReservationAdmin(admin.ModelAdmin): 13 | list_display = ['booking_id', 'room', 'checkIn', 'checkOut','room_alloted','accept','reject'] 14 | 15 | 16 | @admin.register(Guest) 17 | class GuestAdmin(admin.ModelAdmin): 18 | list_display = ['guest_id', 'first_name', 'last_name','username'] 19 | 20 | def username(self, obj): 21 | return obj.user.username 22 | 23 | 24 | -------------------------------------------------------------------------------- /selection/migrations/0002_auto_20180922_0049.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.1 on 2018-09-21 19:19 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('selection', '0001_initial'), 11 | ] 12 | 13 | operations = [ 14 | migrations.RemoveField( 15 | model_name='hostel', 16 | name='warden', 17 | ), 18 | migrations.AddField( 19 | model_name='warden', 20 | name='hostel', 21 | field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='selection.Hostel'), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /selection/templates/hostels_all.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 |
6 | {% for hostel in hostels %} 7 | 8 | Hostel - {{hostel.name}} 9 | 10 | {% endfor %} 11 | 12 |
13 | 14 | {% endblock content %} 15 | 16 | 17 | {% block more_links %} 18 | 19 | 20 | 21 | Hostel System 22 | Guest Room Booking 23 | {% endblock more_links %} 24 | -------------------------------------------------------------------------------- /selection/templates/remove_due.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
{{ form.as_p }}
8 | 9 |
10 |
11 | {% endblock content %} 12 | 13 | 14 | {% block more_links %} 15 | 16 | Profile 17 | 18 | 19 | Dues 20 | 21 | 22 | Add Due 23 | 24 | 25 | Logout 26 | 27 | {% endblock more_links %} 28 | -------------------------------------------------------------------------------- /guest/templates/guest/select.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
{{ form.as_p }}
8 | 9 |
10 |
11 | 12 | {% endblock content %} 13 | 14 | 15 | {% block more_links %} 16 | Cancel Booking 17 | Logout 18 | 19 | 20 | 21 | 22 | 23 | 24 | {% endblock more_links %} -------------------------------------------------------------------------------- /guest/templates/guest/start.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% block content %} 14 | 15 |
16 | 17 | Register 18 | 19 | 20 | Login (Guests) 21 | 22 | 23 |
24 | 25 | {% endblock content %} 26 | 27 | 28 | {% block more_links %} 29 | 30 | 31 | {% endblock more_links %} 32 | -------------------------------------------------------------------------------- /selection/templates/add_due.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
{{ form.as_p }}
8 | 9 |
10 |
11 | {% endblock content %} 12 | 13 | 14 | {% block more_links %} 15 | 16 | Profile 17 | 18 | 19 | Dues 20 | 21 | 22 | 23 | 24 | 25 | Remove Due 26 | 27 | 28 | Logout 29 | 30 | {% endblock more_links %} 31 | -------------------------------------------------------------------------------- /guest/migrations/0006_auto_20181107_1319.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 13:19 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('guest', '0005_auto_20181107_1125'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='reservation', 16 | name='guest', 17 | field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='guest.Guest'), 18 | ), 19 | migrations.AlterField( 20 | model_name='reservation', 21 | name='room', 22 | field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='guest.Room'), 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /guest/migrations/0002_guest.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-06 21:14 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('guest', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Guest', 15 | fields=[ 16 | ('guest_id', models.AutoField(primary_key=True, serialize=False)), 17 | ('guestFirstName', models.CharField(max_length=255)), 18 | ('guestLastName', models.CharField(max_length=255)), 19 | ('phone', models.CharField(blank=True, max_length=12)), 20 | ('email', models.EmailField(blank=True, max_length=254, verbose_name='e-mail')), 21 | ('city', models.CharField(blank=True, max_length=20)), 22 | ], 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /guest/migrations/0004_auto_20181107_0936.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 09:36 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('guest', '0003_auto_20181106_2124'), 11 | ] 12 | 13 | operations = [ 14 | migrations.RenameField( 15 | model_name='guest', 16 | old_name='guestFirstName', 17 | new_name='first_name', 18 | ), 19 | migrations.RenameField( 20 | model_name='guest', 21 | old_name='guestLastName', 22 | new_name='last_name', 23 | ), 24 | migrations.AddField( 25 | model_name='guest', 26 | name='room', 27 | field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='guest.Room'), 28 | ), 29 | ] 30 | -------------------------------------------------------------------------------- /selection/templates/select_room.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | {% load crispy_forms_tags %} 3 | {% block content %} 4 | 5 |
6 |
7 | {% csrf_token %} 8 |
{{ form|crispy }}
9 | 10 |
11 |
12 | 13 | 14 | {% endblock content %} 15 | 16 | 17 | {% block more_links %} 18 | 19 | Profile 20 | 21 | 22 | Apply Leave 23 | 24 | 25 | Update Details 26 | 27 | 28 | Select a Room 29 | 30 | 31 | Logout 32 | 33 | {% endblock more_links %} -------------------------------------------------------------------------------- /selection/templates/repair_form.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends 'base.html' %} 3 | 4 | {% load crispy_forms_tags %} 5 | {% block content %} 6 |
7 |
8 | {% csrf_token %} 9 |
Room
{{ room.no }}
10 |
Hostel
{{ room.hostel.name }}
11 |
{{ form|crispy }}
12 | 13 | 14 |
15 |
16 | {% endblock content %} 17 | 18 | 19 | {% block more_links %} 20 | 21 | Profile 22 | 23 | 24 | Update Details 25 | 26 | 27 | Select a Room 28 | 29 | 30 | Logout 31 | 32 | {% endblock more_links %} -------------------------------------------------------------------------------- /guest/urls.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.urls import path 3 | from . import views as guest_view 4 | from django.conf.urls import include, url 5 | 6 | app_name = 'guest' 7 | urlpatterns = [ 8 | path('', guest_view.start, name='start'), 9 | path('register/', guest_view.register, name='register'), 10 | path('login/', guest_view.user_login, name='login'), 11 | path(r'login/home/', guest_view.home, name='home'), 12 | path(r'login/select//', guest_view.select, name='select'), 13 | # url(r'profile/^$', guest_view.profile, name='profile'), 14 | path(r'login/edit//', guest_view.edit, name='edit'), 15 | path(r'login/confirm//', guest_view.confirm, name='confirm'), 16 | path(r'login/cancel//', guest_view.cancel, name='cancel'), 17 | path(r'login/pdf//', guest_view.generate_pdf, name='pdf'), 18 | path(r'login/bookings/', guest_view.bookings, name='bookings'), 19 | path('logout/', guest_view.logout_view, name='logout'), 20 | ] -------------------------------------------------------------------------------- /selection/templates/leave_form.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends 'base.html' %} 3 | {% load crispy_forms_tags %} 4 | {% block content %} 5 |
6 |
7 | {% csrf_token %} 8 |
Leave Start date

{{ form.start_date }}
9 |
Leave End Date

{{ form.end_date }}
10 |
{{ form.reason|as_crispy_field }}
11 | 12 | 13 |
14 |
15 | {% endblock content %} 16 | 17 | 18 | {% block more_links %} 19 | 20 | Profile 21 | 22 | 23 | Update Details 24 | 25 | 26 | Select a Room 27 | 28 | 29 | Logout 30 | 31 | {% endblock more_links %} -------------------------------------------------------------------------------- /selection/templates/home.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% block content %} 14 | 15 | 29 | 30 | {% endblock content %} 31 | 32 | 33 | {% block more_links %} 34 | 35 | 36 | 37 | {% endblock more_links %} 38 | -------------------------------------------------------------------------------- /selection/templates/reg_form.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
Username

{{ form.username }}
8 | 9 | 10 |
Password

11 |
12 | {% if error1 %} 13 |

14 | Please enter password of atleast 8 characters or more. 15 |

16 | {% endif %} 17 |
18 | {{ form.password1 }} 19 |
20 | 21 | 22 | 23 |
Repeat Password

24 |
25 | {% if error2 %} 26 |

27 | Please enter confirm password (same as password) 28 |

29 | {% endif %} 30 |
31 | {{ form.password2 }}
32 | 33 | 34 |
35 |
36 | {% endblock content %} 37 | -------------------------------------------------------------------------------- /guest/templates/guest/reg_form.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block content %} 4 |
5 |
6 | {% csrf_token %} 7 |
Username

{{ form.username }}
8 | 9 | 10 |
Password

11 |
12 | {% if error1 %} 13 |

14 | Please enter password of atleast 8 characters or more. 15 |

16 | {% endif %} 17 |
18 | {{ form.password1 }} 19 |
20 | 21 | 22 | 23 |
Repeat Password

24 |
25 | {% if error2 %} 26 |

27 | Please enter confirm password (same as password) 28 |

29 | {% endif %} 30 |
31 | {{ form.password2 }}
32 | 33 | 34 |
35 |
36 | {% endblock content %} 37 | 38 | {% block more_links %} 39 | Login 40 | Register 41 | {% endblock more_links %} -------------------------------------------------------------------------------- /guest/templates/guest/edit.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block content %} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | {% csrf_token %} 18 |
First Name

{{ form.first_name }}
19 |
Last Name

{{ form.last_name }}
20 |
Phone Number

{{ form.phone }}
21 |
E-mail

{{ form.email }}
22 |
City

{{ form.city }}
23 | 24 |
25 |
26 | 27 | {% endblock content %} 28 | 29 | 30 | 31 | 32 | {% block more_links %} 33 | 34 | 35 | Cancel Booking 36 | Logout 37 | {% endblock more_links %} 38 | -------------------------------------------------------------------------------- /guest/migrations/0003_auto_20181106_2124.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-06 21:24 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('guest', '0002_guest'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='guest', 16 | name='guestFirstName', 17 | field=models.CharField(max_length=255, validators=[django.core.validators.MinLengthValidator(3)]), 18 | ), 19 | migrations.AlterField( 20 | model_name='guest', 21 | name='guestLastName', 22 | field=models.CharField(max_length=255, validators=[django.core.validators.MinLengthValidator(3)]), 23 | ), 24 | migrations.AlterField( 25 | model_name='guest', 26 | name='phone', 27 | field=models.CharField(blank=True, max_length=12, validators=[django.core.validators.MinLengthValidator(5)]), 28 | ), 29 | migrations.AlterField( 30 | model_name='room', 31 | name='no', 32 | field=models.CharField(max_length=5, validators=[django.core.validators.MinLengthValidator(2)]), 33 | ), 34 | ] 35 | -------------------------------------------------------------------------------- /guest/migrations/0005_auto_20181107_1125.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-07 11:25 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('guest', '0004_auto_20181107_0936'), 11 | ] 12 | 13 | operations = [ 14 | migrations.RenameField( 15 | model_name='reservation', 16 | old_name='CheckIn', 17 | new_name='checkIn', 18 | ), 19 | migrations.RenameField( 20 | model_name='reservation', 21 | old_name='CheckOut', 22 | new_name='checkOut', 23 | ), 24 | migrations.RemoveField( 25 | model_name='guest', 26 | name='room', 27 | ), 28 | migrations.AddField( 29 | model_name='reservation', 30 | name='guest', 31 | field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='guest.Guest'), 32 | ), 33 | migrations.AlterField( 34 | model_name='reservation', 35 | name='room', 36 | field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='guest.Room'), 37 | ), 38 | ] 39 | -------------------------------------------------------------------------------- /selection/templates/hostels.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 |
6 | 7 |
8 | 9 |
10 |
11 | Room Number 12 |
13 |
14 | Room Id 15 |
16 |
17 | Type 18 |
19 |
20 | Status 21 |
22 |
23 | {% for room in rooms %} 24 |
25 |
26 | {{ room.no }} 27 |
28 |
29 | {{ room.name }} 30 |
31 |
32 | {{ room.room_type }} 33 |
34 |
35 | {% if room.vacant %} vacant {% else %} occupied {% endif %} 36 |
37 |
38 | {% endfor %} 39 |
40 | 41 |
42 | {% endblock content %} 43 | -------------------------------------------------------------------------------- /selection/templates/edit.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends 'base.html' %} 3 | {% load crispy_forms_tags %} 4 | 5 | {% block content %} 6 | 7 |
8 |
9 | {% csrf_token %} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {{ form|crispy }} 19 | 20 |
21 | 22 |
23 | 24 | 25 | {% endblock content %} 26 | 27 | 28 | {% block more_links %} 29 | 30 | Profile 31 | 32 | 33 | Update Details 34 | 35 | 36 | Select a Room 37 | 38 | 39 | Apply Leave 40 | 41 | 42 | Logout 43 | 44 | {% endblock more_links %} -------------------------------------------------------------------------------- /guest/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-06 17:59 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | initial = True 10 | 11 | dependencies = [ 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='Reservation', 17 | fields=[ 18 | ('CheckIn', models.DateField()), 19 | ('CheckOut', models.DateField()), 20 | ('booking_id', models.AutoField(primary_key=True, serialize=False)), 21 | ], 22 | options={ 23 | 'verbose_name_plural': 'Reservation', 24 | }, 25 | ), 26 | migrations.CreateModel( 27 | name='Room', 28 | fields=[ 29 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 30 | ('no', models.CharField(max_length=5)), 31 | ('max_persons', models.IntegerField(default=10)), 32 | ('room_type', models.CharField(choices=[('S', 'Single Occupancy'), ('D', 'Double Occupancy')], default=None, max_length=1)), 33 | ('price', models.IntegerField(default=500)), 34 | ], 35 | ), 36 | migrations.AddField( 37 | model_name='reservation', 38 | name='room', 39 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guest.Room'), 40 | ), 41 | ] 42 | -------------------------------------------------------------------------------- /guest/forms.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.forms import UserCreationForm 2 | from django import forms 3 | import datetime 4 | from .models import * 5 | 6 | YEARS= [x for x in range(2018,2021)] 7 | 8 | 9 | class UserForm(UserCreationForm): 10 | password1 = forms.CharField(min_length=8, max_length=30, widget=forms.PasswordInput(render_value=False)) 11 | 12 | class Meta: 13 | model = User 14 | fields = ['username', 'password1', 'password2'] 15 | help_texts = { 16 | 'username': 'same as your roll no.', 17 | } 18 | 19 | # def clean_password(self): 20 | # password = self.cleaned_data.get('password1') 21 | # if len(password) < 8: 22 | # raise ValidationError('Password too short') 23 | # return super(UserCreationForm, self).clean_password1() 24 | 25 | 26 | class LoginForm(forms.Form): 27 | username = forms.CharField() 28 | password = forms.CharField(widget=forms.PasswordInput) 29 | 30 | 31 | class DateForm(forms.ModelForm): 32 | checkIn = forms.DateField(initial=datetime.date.today,widget=forms.SelectDateWidget(years=YEARS)) 33 | checkOut = forms.DateField(initial=datetime.date.today,widget=forms.SelectDateWidget(years=YEARS)) 34 | 35 | class Meta: 36 | model = Reservation 37 | fields = ['checkIn', 'checkOut', ] 38 | 39 | 40 | class RegistrationForm(forms.ModelForm): 41 | class Meta: 42 | model = Guest 43 | fields = [ 44 | 'first_name', 45 | 'last_name', 46 | 'phone', 47 | 'email', 48 | 'city', ] 49 | 50 | 51 | class SelectionForm(forms.ModelForm): 52 | class Meta: 53 | model = Reservation 54 | fields = ['room', ] 55 | -------------------------------------------------------------------------------- /selection/templates/student_leave.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | {% if leaves %} 5 |

Accepted Leave Requests of {{student.student_name}}({{student.enrollment_no}})

6 | 7 |
8 |
9 | 10 |
11 | 12 |
13 | Start Date 14 |
15 |
16 | End Date 17 |
18 |
19 | Reason 20 |
21 | 22 |
23 | {% for leave in leaves %} 24 |
25 |
26 | {{leave.start_date}} 27 |
28 |
29 | {{leave.end_date}} 30 |
31 |
32 | {{leave.reason}} 33 |
34 | 35 | 36 |
37 | {% endfor %} 38 | 39 | 40 | 41 |
42 | 43 |
44 | {% else %} 45 |

No Leave Requests of {{student.student_name}}({{student.enrollment_no}})

46 | {% endif %} 47 | 48 | {% endblock content %} 49 | 50 | 51 | {% block more_links %} 52 | 53 | Profile 54 | 55 | 56 | Leave requests 57 | 58 | 59 | Empty Rooms 60 | 61 | 62 | Present Leave 63 | 64 | 65 | Logout 66 | 67 | {% endblock more_links %} 68 | -------------------------------------------------------------------------------- /selection/templates/dues.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 |
6 | 7 | {% for student in students %} 8 | {% if not student.no_dues %} 9 |
10 | 11 |
12 |
13 | Student Name 14 |
15 |
16 | {{ student.student_name }} 17 |
18 |
19 | 20 |
21 |
22 | Enrollment Number 23 |
24 |
25 | {{ student.enrollment_no }} 26 |
27 |
28 | 29 |
30 |
31 | Course 32 |
33 |
34 | {{ student.course }} 35 |
36 |
37 |
38 | {% endif %} 39 | {% endfor %} 40 | 41 | 42 | Add a due 43 | 44 |
45 | {% endblock content %} 46 | 47 | 48 | {% block more_links %} 49 | 50 | Profile 51 | 52 | 53 | Empty Rooms 54 | 55 | 56 | 57 | 58 | 59 | Add Due 60 | 61 | 62 | Remove Due 63 | 64 | 65 | Logout 66 | 67 | {% endblock more_links %} 68 | -------------------------------------------------------------------------------- /guest/templates/guest/invoice.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Booking 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 | 24 | 27 | 30 | 31 | 32 | 35 | 38 | 39 | 40 | 43 | 46 | 47 | 48 | 51 | 54 | 55 | 56 | 59 | 63 | 64 | 65 | 68 | 72 | 73 | 74 | 75 | 78 | 82 | 83 | 84 | 85 | 86 | 87 |
16 | First Name 17 | 19 | {{ res.guest.first_name }} 20 |
25 | Last Name 26 | 28 | {{ res.guest.last_name}} 29 |
33 | Phone no 34 | 36 | {{ res.guest.phone }} 37 |
41 | E-Mail 42 | 44 | {{ res.guest.email }} 45 |
49 | city 50 | 52 | {{ res.guest.city }} 53 |
57 | Room No.. 58 | 60 | {{ res.room.no }} in Guest House 61 | 62 |
66 | CheckIn 67 | 69 | {{ res.checkIn }} 70 | 71 |
76 | CheckOut 77 | 79 | {{ res.checkOut }} 80 | 81 |
88 | 89 |
90 |
91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /selection/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% load static %} 16 | 17 | 18 | 19 | 20 | 21 | 63 | 64 |
65 | {% block content %} 66 | {% endblock content %} 67 | 68 |
69 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /selection/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import * 3 | 4 | 5 | @admin.register(Student) 6 | class StudentAdmin(admin.ModelAdmin): 7 | list_display = [ 8 | 'user', 9 | 'student_name', 10 | 'father_name', 11 | 'gender', 12 | 'enrollment_no', 13 | 'course', 14 | 'dob', 15 | 'room', 16 | 'room_allotted'] 17 | actions = ["delete_selected"] 18 | 19 | def delete_selected(self, request, queryset): 20 | for element in queryset: 21 | element.delete() 22 | 23 | delete_selected.short_description = "Delete selected elements" 24 | 25 | 26 | # class ElementAdmin(admin.ModelAdmin): 27 | # class Meta: 28 | # actions = ["delete_selected"] 29 | # 30 | # def delete_selected(self, request, queryset): 31 | # for element in queryset: 32 | # element.delete() 33 | # 34 | # delete_selected.short_description = "Delete selected elements" 35 | 36 | 37 | @admin.register(Room) 38 | class RoomAdmin(admin.ModelAdmin): 39 | list_display = ['no', 'name', 'room_type', 'vacant', 'hostel'] 40 | actions = ["delete_selected"] 41 | 42 | def delete_selected(self, request, queryset): 43 | for element in queryset: 44 | element.delete() 45 | 46 | delete_selected.short_description = "Delete selected elements" 47 | 48 | 49 | 50 | @admin.register(Hostel) 51 | class HostelAdmin(admin.ModelAdmin): 52 | list_display = ['name', 'gender'] 53 | 54 | 55 | @admin.register(Course) 56 | class CourseAdmin(admin.ModelAdmin): 57 | list_display = ['code', 'room_type'] 58 | 59 | 60 | @admin.register(User) 61 | class CourseAdmin(admin.ModelAdmin): 62 | list_display = ['is_warden','username'] 63 | 64 | 65 | @admin.register(Warden) 66 | class CourseAdmin(admin.ModelAdmin): 67 | list_display = ['name', 'username'] 68 | actions = ["delete_selected"] 69 | 70 | def username(self, obj): 71 | return obj.user.username 72 | 73 | def delete_selected(self, request, queryset): 74 | for element in queryset: 75 | element.delete() 76 | 77 | delete_selected.short_description = "Delete selected elements" 78 | 79 | 80 | @admin.register(Leave) 81 | class LeaveAdmin(admin.ModelAdmin): 82 | list_display = ['student','start_date','end_date','reason','accept','reject','confirm_time'] -------------------------------------------------------------------------------- /selection/templates/present_leaves.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | {% if not student %} 5 |

No Student on Leave

6 | {% else %} 7 |

Students on Leave

8 |
9 | 10 |
11 | 12 |
13 | 14 |
15 | Student Name 16 |
17 |
18 | Enrollment No 19 |
20 |
21 | Course 22 |
23 |
24 | Gender 25 |
26 | 27 |
28 | {% for stud in student %} 29 |
30 | 31 |
32 | 33 | {{ stud.student_name }} 34 | 35 |
36 |
37 | 38 | {{ stud.enrollment_no }} 39 | 40 |
41 |
42 | 43 | {{ stud.course.code }} 44 | 45 |
46 |
47 | 48 | {{ stud.gender }} 49 | 50 |
51 |
52 | {% endfor %} 53 |
54 |
55 | {% endif %} 56 | {% endblock content %} 57 | 58 | 59 | {% block more_links %} 60 | 61 | Profile 62 | 63 | 64 | Leave requests 65 | 66 | 67 | Empty Rooms 68 | 69 | 70 | Mess Rebate 71 | 72 | 73 | Guest Room Requests 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | Logout 86 | 87 | {% endblock more_links %} 88 | -------------------------------------------------------------------------------- /selection/templates/empty_rooms.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | {% if rooms %} 5 |

Empty Rooms

6 |
7 | 8 |
9 | 10 |
11 |
12 | Hostel 13 |
14 |
15 | Room No 16 |
17 |
18 | Type 19 |
20 |
21 | Status 22 |
23 | 24 |
25 | {% for room in rooms %} 26 |
27 |
28 | {{ room.hostel.name }} 29 |
30 |
31 | {{ room.no }} 32 |
33 |
34 | {{ room.room_type }} 35 |
36 |
37 | {% if room.vacant %} vacant {% else %} occupied {% endif %} 38 |
39 | 40 |
41 | {% endfor %} 42 |
43 |
44 | {% else %} 45 |

No Empty Rooms

46 | {% endif %} 47 | 48 | {% endblock content %} 49 | 50 | 51 | {% block more_links %} 52 | 53 | Profile 54 | 55 | 56 | Leave requests 57 | 58 | 59 | Present Leave 60 | 61 | 62 | Mess Rebate 63 | 64 | 65 | Guest Room Requests 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | Logout 78 | 79 | {% endblock more_links %} 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /guest/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | # from django.contrib.auth.models import User 3 | from django.core.validators import MinLengthValidator 4 | from django.conf import settings 5 | from selection.models import User 6 | 7 | 8 | # Create your models here. 9 | 10 | class Room(models.Model): 11 | # room_id = models.AutoField(primary_key=True) 12 | room_choice = [('S', 'Single Occupancy'), ('D', 'Double Occupancy')] 13 | no = models.CharField(validators=[MinLengthValidator(2)],max_length=5,unique=True) 14 | max_persons = models.IntegerField(default=2) 15 | room_type = models.CharField(choices=room_choice, max_length=1, default=None) 16 | price = models.IntegerField(default=500) 17 | 18 | def __str__(self): 19 | return 'Room no: %s price: %s' %(str(self.no), str(self.price)) 20 | 21 | 22 | class Reservation(models.Model): 23 | room = models.ForeignKey('Room', default=None,null=True, on_delete=models.CASCADE) 24 | # user = models.ForeignKey(User, on_delete=models.CASCADE) 25 | checkIn = models.DateField() 26 | checkOut = models.DateField() 27 | booking_id = models.AutoField(primary_key=True) 28 | guest = models.ForeignKey('Guest', default=None, null=True, on_delete=models.CASCADE) 29 | room_alloted = models.BooleanField(default=False) 30 | accept = models.BooleanField(default=False) 31 | reject = models.BooleanField(default=False) 32 | 33 | class Meta: 34 | verbose_name_plural = 'Reservation' 35 | 36 | def __str__(self): 37 | return str(self.booking_id) 38 | 39 | 40 | class Guest(models.Model): 41 | user = models.OneToOneField(User, 42 | default=None, 43 | null=True, 44 | on_delete=models.CASCADE) 45 | guest_id = models.AutoField(primary_key=True) 46 | first_name = models.CharField(validators=[MinLengthValidator(3)],max_length=255,null=True) 47 | last_name = models.CharField(validators=[MinLengthValidator(3)],max_length=255,null=True) 48 | phone = models.CharField( 49 | validators=[MinLengthValidator(5)], 50 | max_length=12, 51 | null=True, 52 | ) 53 | email = models.EmailField( 54 | verbose_name='e-mail', 55 | null=True 56 | ) 57 | city = models.CharField( 58 | max_length=20,null=True) 59 | # room = models.OneToOneField( 60 | # 'Room', 61 | # blank=True, 62 | # on_delete=models.CASCADE, 63 | # null=True) 64 | # room_allotted = models.BooleanField(default=False) 65 | 66 | def __str__(self): 67 | return str(self.guest_id) 68 | 69 | 70 | -------------------------------------------------------------------------------- /selection/forms.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.forms import UserCreationForm 2 | from .models import * 3 | from django import forms 4 | from django.core.exceptions import ValidationError 5 | import datetime 6 | 7 | YEARS= [x for x in range(2018,2020)] 8 | 9 | class UserForm(UserCreationForm): 10 | password1 = forms.CharField(min_length=8, max_length=30, widget=forms.PasswordInput(render_value=False)) 11 | 12 | class Meta: 13 | model = User 14 | fields = ['username', 'password1', 'password2'] 15 | help_texts = { 16 | 'username': 'same as your roll no.', 17 | } 18 | 19 | # def clean_password(self): 20 | # password = self.cleaned_data.get('password1') 21 | # if len(password) < 8: 22 | # raise ValidationError('Password too short') 23 | # return super(UserCreationForm, self).clean_password1() 24 | 25 | 26 | class LoginForm(forms.Form): 27 | username = forms.CharField() 28 | password = forms.CharField(widget=forms.PasswordInput) 29 | 30 | 31 | class RegistrationForm(forms.ModelForm): 32 | 33 | class Meta: 34 | model = Student 35 | fields = [ 36 | 'student_name', 37 | 'father_name', 38 | 'enrollment_no', 39 | 'course', 40 | 'dob', 41 | 'gender'] 42 | 43 | 44 | class SelectionForm(forms.ModelForm): 45 | class Meta: 46 | model = Student 47 | fields = ['room'] 48 | 49 | 50 | class DuesForm(forms.Form): 51 | choice = forms.ModelChoiceField(queryset=Student.objects.all().filter(no_dues=True)) 52 | 53 | 54 | class NoDuesForm(forms.Form): 55 | choice = forms.ModelChoiceField(queryset=Student.objects.all().filter(no_dues=False)) 56 | 57 | 58 | class DateInput(forms.DateInput): 59 | input_type = 'date' 60 | 61 | 62 | class LeaveForm(forms.ModelForm): 63 | start_date = forms.DateField(initial=datetime.date.today, widget=forms.SelectDateWidget(years=YEARS)) 64 | end_date = forms.DateField(initial=datetime.date.today, widget=forms.SelectDateWidget(years=YEARS)) 65 | reason = forms.CharField(max_length=100, help_text='100 characters max.', 66 | widget=forms.TextInput(attrs={'placeholder': 'Enter Reason here'})) 67 | class Meta: 68 | model = Leave 69 | fields = [ 70 | 'start_date', 71 | 'end_date', 72 | 'reason'] 73 | class RepairForm(forms.ModelForm): 74 | class Meta: 75 | model = Room 76 | fields = ['repair'] 77 | 78 | 79 | class RebateForm(forms.Form): 80 | rebate = forms.DateField(initial=datetime.date.today, widget=forms.SelectDateWidget(years=YEARS)) 81 | -------------------------------------------------------------------------------- /hms/urls.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.urls import path 3 | from selection import views 4 | from django.conf.urls import include, url 5 | from django.conf import settings 6 | 7 | 8 | urlpatterns = [ 9 | path('admin/', admin.site.urls), 10 | # url(r'^', include(('selection.urls', 'selection'), namespace='selection')), 11 | url(r'^guest/', include('guest.urls', namespace='guest')), 12 | path('', views.start, name='start'), 13 | path('hms/', views.home, name='register'), 14 | path('reg_form/', views.register, name='reg_form'), 15 | path('login/', views.user_login, name='login'), 16 | path('student_profile/', views.student_profile, name='student_profile'), 17 | path('warden_login/', views.warden_login, name='warden_login'), 18 | path('warden_login/leave', views.leave_admin, name='leave_admin'), 19 | path('warden_login/student_leaves//', views.student_leaves, name='student_leaves'), 20 | path('warden_login/leave_confirm//', views.leave_confirm, name='leave_confirm'), 21 | path('warden_login/leave_reject//', views.leave_reject, name='leave_reject'), 22 | path('warden_login/empty/', views.empty_rooms, name='empty_rooms'), 23 | path('warden_login/present_leaves/', views.present_leaves, name='present_leaves'), 24 | path('warden_login/mess_rebate/', views.mess_rebate, name='mess_rebate'), 25 | path('warden_login/guest_requests/', views.guest_requests, name='guest_requests'), 26 | path('warden_login/bookings//', views.bookings, name='bookings'), 27 | path('warden_login/confirm//', views.guest_accept, name='guest_accept'), 28 | path('warden_login/cancel//', views.guest_reject, name='guest_reject'), 29 | path('warden_profile/', views.warden_profile, name='warden_profile'), 30 | path('warden_dues/', views.warden_dues, name='warden_dues'), 31 | path('warden_add_due/', views.warden_add_due, name='warden_add_due'), 32 | path('warden_remove_due/', views.warden_remove_due, name='warden_remove_due'), 33 | path('hostels/', views.hostels, name='hostel_all'), 34 | path('hostels//', views.hostel_detail_view, name='hostel'), 35 | path('login/edit/', views.edit, name='edit'), 36 | path('login/select/', views.select, name='select'), 37 | path('login/repair/', views.repair, name='repair'), 38 | path('logout/', views.logout_view, name='logout'), 39 | path('reg_form/login/edit/', views.edit, name='update'), 40 | path('BH5_GroundFloor/', views.BH5_GroundFloor, name='BH5_GroundFloor'), 41 | path('BH5_Floor1/', views.BH5_Floor1, name='BH5_Floor1'), 42 | path('BH5_Floor2/', views.BH5_Floor2, name='BH5_Floor2'), 43 | path('BH5_Floor3/', views.BH5_Floor3, name='BH5_Floor3'), 44 | path('BH5_Floor4/', views.BH5_Floor4, name='BH5_Floor4'), 45 | path('BH5_Floor5/', views.BH5_Floor5, name='BH5_Floor5'), 46 | path('BH5_Floor6/', views.BH5_Floor6, name='BH5_Floor6'), 47 | path('login/leave', views.user_leave, name='leave_status'), 48 | ] 49 | -------------------------------------------------------------------------------- /selection/templates/mess_rebate.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 |

Mess Rebate List of all Students(For this Month until yesterday)
5 | {% csrf_token %} 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {{ form.rebate }} 15 | 16 |
17 | 18 |
19 | 20 |

21 | 22 | 23 | 24 | {% if student %} 25 |
26 |
27 | 28 |
29 |
30 | Student Name 31 |
32 |
33 | Enrollment No 34 |
35 |
36 | Course 37 |
38 |
39 | Rebate Days 40 |
41 | 42 | 43 |
44 | {% for stud in student %} 45 |
46 |
47 | {{stud.student_name}} 48 |
49 |
50 | {{stud.enrollment_no}} 51 |
52 |
53 | {{stud.course.code}} 54 |
55 | 56 |
57 | {% for key,value in count_rebate.items %} 58 | {% if key == stud.enrollment_no %} 59 | {{ value }} 60 | {% endif %} 61 | {% endfor %} 62 |
63 | 64 | 65 | 66 |
67 | {% endfor %} 68 | 69 | 70 | 71 |
72 | 73 |
74 | {% endif %} 75 | 76 | {% endblock content %} 77 | 78 | 79 | {% block more_links %} 80 | 81 | Profile 82 | 83 | 84 | Leave requests 85 | 86 | 87 | Empty Rooms 88 | 89 | 90 | 91 | Present Leave 92 | 93 | 94 | Guest Room Requests 95 | 96 | 97 | Logout 98 | 99 | {% endblock more_links %} 100 | -------------------------------------------------------------------------------- /guest/templates/guest/details.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | {% block design %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | {% endblock design %} 20 | 21 | {% block content %} 22 | 23 | 24 | {% if count %} 25 | 26 |

Available No of rooms .. {{ count }}

27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
54 | 55 |
56 | 57 |
58 |
59 | Room No 60 |
61 |
62 | Price 63 |
64 |
65 | Max Persons 66 |
67 | 68 |
69 | {% for room in rooms %} 70 |
71 |
72 | {{room.no}} 73 |
74 |
75 | {{room.price}} 76 |
77 |
78 | {{room.max_persons}} 79 |
80 | 81 |
82 | {% endfor %} 83 |
84 |
85 | 86 | 87 | 88 |
89 | Select a Room 90 |
91 | 92 | {% else %} 93 |

No Rooms Available

94 | {% endif %} 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | {% endblock content %} 106 | 107 | 108 | 109 | 110 | {% block more_links %} 111 | 112 | 113 | Cancel Booking 114 | Logout 115 | 116 | {% endblock more_links %} 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /guest/templates/guest/profile.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block content %} 4 | 5 |
6 |
7 | 8 |
9 |
10 | First Name 11 |
12 |
13 | {{ res.guest.first_name }} 14 |
15 |
16 |
17 |
18 | Last Name 19 |
20 |
21 | {{ res.guest.last_name}} 22 |
23 |
24 |
25 |
26 | Phone no 27 |
28 |
29 | {{ res.guest.phone }} 30 |
31 |
32 |
33 |
34 | E-Mail 35 |
36 |
37 | {{ res.guest.email }} 38 |
39 |
40 |
41 |
42 | city 43 |
44 |
45 | {{ res.guest.city }} 46 |
47 |
48 |
49 |
50 | Room 51 |
52 |
53 | {{ res.room.no }} in Guest House 54 | 55 |
56 |
57 |
58 |
59 | Price (₹) 60 |
61 |
62 | {{res.room.price}} 63 |
64 |
65 |
66 |
67 | CheckIn 68 |
69 |
70 | {{ res.checkIn }} 71 | 72 |
73 |
74 | 75 |
76 |
77 | CheckOut 78 |
79 |
80 | {{ res.checkOut }} 81 | 82 |
83 |
84 |
85 |
86 | 87 | 88 |
91 | Confirm Booking 92 | 93 | Cancel Booking 94 | 95 | 96 |
97 | 98 | 99 | {% endblock content %} 100 | 101 | 102 | {% block more_links %} 103 | Logout 104 | {% endblock more_links %} -------------------------------------------------------------------------------- /hms/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for hms project. 3 | 4 | Generated by 'django-admin startproject' using Django 2.0.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.0/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/2.0/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = '_)q%hqdkn%*3*2$%#h87g3p)-kt-0oiw+wt5bxi6dr4gb&ge)h' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = ['127.0.0.1', '172.16.158.196'] 29 | 30 | AUTH_USER_MODEL = 'selection.User' 31 | 32 | # Application definition 33 | 34 | INSTALLED_APPS = [ 35 | 'guest', 36 | 'django.contrib.admin', 37 | 'django.contrib.auth', 38 | 'django.contrib.contenttypes', 39 | 'django.contrib.sessions', 40 | 'django.contrib.messages', 41 | 'django.contrib.staticfiles', 42 | 'selection', 43 | 'crispy_forms', 44 | 45 | ] 46 | CRISPY_TEMPLATE_PACK = 'bootstrap4' 47 | 48 | MIDDLEWARE = [ 49 | 'django.middleware.security.SecurityMiddleware', 50 | 'django.contrib.sessions.middleware.SessionMiddleware', 51 | 'django.middleware.common.CommonMiddleware', 52 | 'django.middleware.csrf.CsrfViewMiddleware', 53 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 54 | 'django.contrib.messages.middleware.MessageMiddleware', 55 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 56 | ] 57 | 58 | ROOT_URLCONF = 'hms.urls' 59 | 60 | TEMPLATES = [ 61 | { 62 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 63 | 'DIRS': [], 64 | 'APP_DIRS': True, 65 | 'OPTIONS': { 66 | 'context_processors': [ 67 | 'django.template.context_processors.debug', 68 | 'django.template.context_processors.request', 69 | 'django.contrib.auth.context_processors.auth', 70 | 'django.contrib.messages.context_processors.messages', 71 | ], 72 | }, 73 | }, 74 | ] 75 | 76 | WSGI_APPLICATION = 'hms.wsgi.application' 77 | 78 | 79 | # Database 80 | # https://docs.djangoproject.com/en/2.0/ref/settings/#databases 81 | 82 | DATABASES = { 83 | 'default': { 84 | 'ENGINE': 'django.db.backends.sqlite3', 85 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 86 | } 87 | } 88 | 89 | 90 | # Password validation 91 | # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators 92 | 93 | AUTH_PASSWORD_VALIDATORS = [ 94 | { 95 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 96 | }, 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 99 | }, 100 | { 101 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 102 | }, 103 | { 104 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 105 | }, 106 | ] 107 | 108 | 109 | # Internationalization 110 | # https://docs.djangoproject.com/en/2.0/topics/i18n/ 111 | 112 | LANGUAGE_CODE = 'en-us' 113 | 114 | TIME_ZONE = 'UTC' 115 | 116 | USE_I18N = True 117 | 118 | USE_L10N = True 119 | 120 | USE_TZ = True 121 | 122 | 123 | # Static files (CSS, JavaScript, Images) 124 | # https://docs.djangoproject.com/en/2.0/howto/static-files/ 125 | 126 | STATIC_URL = '/static/' 127 | 128 | -------------------------------------------------------------------------------- /selection/templates/bookings.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | 4 | {% block content %} 5 | 6 | 7 | 8 | {% if bookings.count == 0 %} 9 |

No Bookings Done!!

11 | {% else %} 12 |

ALL Successful Bookings of {{guest.first_name}} {{guest.last_name}} ({{guest.user.username}})

14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 |
62 | 63 |
64 | 65 |
66 |
67 | ID 68 |
69 |
70 | Room No 71 |
72 |
73 | CheckIn 74 |
75 |
76 | CheckOut 77 |
78 |
79 | Status 80 |
81 | 82 |
83 | {% for booking in bookings %} 84 |
85 |
86 | {{forloop.counter}} 87 |
88 |
89 | {{booking.room.no}} 90 |
91 |
92 | {{booking.checkIn}} 93 |
94 |
95 | {{booking.checkOut}} 96 |
97 |
98 | 99 | {% if booking.accept %} 100 | Accepted 101 | {% elif booking.reject %} 102 | Rejected 103 | {% else %} 104 | Pending 105 | {% endif %} 106 | 107 |
108 | 109 | 110 | 111 |
112 | {% endfor %} 113 |
114 | 115 |
116 |
117 | {% endif %} 118 | 119 | {% endblock content %} 120 | 121 | 122 | 123 | 124 | {% block more_links %} 125 | 126 | Leave requests 127 | 128 | 129 | Empty Rooms 130 | 131 | 132 | Present Leave 133 | 134 | 135 | Mess Rebate 136 | 137 | 138 | Guest Room Requests 139 | 140 | 141 | Logout 142 | 143 | {% endblock more_links %} 144 | 145 | -------------------------------------------------------------------------------- /selection/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import AbstractUser 3 | import datetime 4 | 5 | class User(AbstractUser): 6 | is_warden = models.BooleanField(default=False) 7 | 8 | 9 | class Student(models.Model): 10 | user = models.OneToOneField( 11 | User, 12 | default=None, 13 | null=True, 14 | on_delete=models.CASCADE) 15 | gender_choices = [('N','None'),('M', 'Male'), ('F', 'Female')] 16 | student_name = models.CharField(max_length=200, null=True) 17 | father_name = models.CharField(max_length=200, null=True) 18 | enrollment_no = models.CharField(max_length=10, unique=True, null=True) 19 | course = models.ForeignKey( 20 | 'Course', 21 | null=True, 22 | default=None, 23 | on_delete=models.CASCADE) 24 | dob = models.DateField( 25 | max_length=10, 26 | help_text="format : YYYY-MM-DD", 27 | null=True) 28 | gender = models.CharField( 29 | choices=gender_choices, 30 | max_length=1, 31 | default='N',null=True) 32 | room = models.OneToOneField( 33 | 'Room', 34 | blank=True, 35 | on_delete= models.SET_NULL, 36 | null=True) 37 | room_allotted = models.BooleanField(default=False) 38 | no_dues = models.BooleanField(default=True) 39 | 40 | def __str__(self): 41 | return str(self.enrollment_no) 42 | 43 | def delete(self, *args, **kwargs): 44 | room_del = Room.objects.filter(student__room=self.room) 45 | print('pppppppppppppppppppppppppppppppppppppppp') 46 | for s in room_del: 47 | s.vacant = True 48 | s.save() 49 | print('***********') 50 | super(Student, self).delete(*args, **kwargs) 51 | 52 | 53 | class Room(models.Model): 54 | room_choice = [('S', 'Single Occupancy'), ('D', 'Double Occupancy'), ('P', 'Reserved for Research Scholars'),('B', 'Both Single and Double Occupancy')] 55 | no = models.CharField(max_length=5) 56 | name = models.CharField(max_length=10) 57 | room_type = models.CharField(choices=room_choice, max_length=1, default=None) 58 | vacant = models.BooleanField(default=False) 59 | hostel = models.ForeignKey('Hostel', on_delete=models.CASCADE) 60 | repair = models.CharField(max_length=100, blank=True) 61 | 62 | 63 | def __str__(self): 64 | return '%s %s' %(self.name, self.hostel) 65 | 66 | def delete(self, *args, **kwargs): 67 | stud = Student.objects.filter(room=self) 68 | print('pppppppppppppppppppppppppppppppppppppppp') 69 | for s in stud: 70 | s.room_allotted = False 71 | s.save() 72 | print('***********') 73 | super(Room, self).delete(*args, **kwargs) 74 | 75 | 76 | class Hostel(models.Model): 77 | name = models.CharField(max_length=5) 78 | gender_choices = [('M', 'Male'), ('F', 'Female')] 79 | gender = models.CharField( 80 | choices=gender_choices, 81 | max_length=1, 82 | default=None, 83 | null=True) 84 | course = models.ManyToManyField('Course', default=None, blank=True) 85 | caretaker = models.CharField(max_length=100, blank=True) 86 | 87 | 88 | def __str__(self): 89 | return self.name 90 | 91 | 92 | class Course(models.Model): 93 | # if a student has enrollment number iit2017001 then the course code is iit2017 94 | code = models.CharField(max_length=100, default=None) 95 | room_choice = [('S', 'Single Occupancy'), ('D', 'Double Occupancy'), ('P', 'Reserved for Research Scholars'), ('B', 'Both Single and Double Occupancy')] 96 | room_type = models.CharField(choices=room_choice, max_length=1, default='D') 97 | 98 | def __str__(self): 99 | return self.code 100 | 101 | 102 | class Warden(models.Model): 103 | user = models.OneToOneField( 104 | User, 105 | default=None, 106 | null=True, 107 | on_delete=models.CASCADE) 108 | name = models.CharField(max_length=200, null=True) 109 | hostel = models.ForeignKey('Hostel',default=None,null=True, 110 | on_delete=models.CASCADE) 111 | 112 | def __str__(self): 113 | return self.name 114 | 115 | def save(self, *args, **kwargs): 116 | if self.user.is_warden is False: # Set default reference 117 | self.user.is_warden = True 118 | self.user.save() 119 | super(Warden, self).save(*args, **kwargs) 120 | 121 | def delete(self, *args, **kwargs): 122 | self.user.is_warden = False 123 | self.user.save() 124 | print('pppppppppppppppppppppppppppppppppppppppp') 125 | 126 | super(Warden, self).delete(*args, **kwargs) 127 | 128 | 129 | class Leave(models.Model): 130 | student = models.ForeignKey('Student', on_delete=models.CASCADE) 131 | start_date = models.DateField() 132 | end_date = models.DateField() 133 | reason = models.CharField(max_length=100,blank = False) 134 | accept = models.BooleanField(default=False) 135 | reject = models.BooleanField(default=False) 136 | confirm_time = models.DateTimeField(auto_now_add=True) 137 | -------------------------------------------------------------------------------- /guest/templates/guest/bookings.html: -------------------------------------------------------------------------------- 1 | {% extends 'guest/base.html' %} 2 | 3 | {% block design %} 4 | 5 | .s_book{ 6 | 7 | padding: 30px; 8 | text-align: center; color: red ; 9 | 10 | 11 | } 12 | 13 | table.test td.test { 14 | background-color: lime; 15 | margin: 12px 12px 12px 12px; 16 | padding: 12px 12px 12px 12px; 17 | } 18 | table.test { 19 | border-collapse: separate; 20 | border-spacing: 10px; 21 | *border-collapse: expression('separate', cellSpacing = '10px'); 22 | } 23 | 24 | {% endblock design %} 25 | {% block content %} 26 | 27 | 28 | 29 | {% if bookings.count == 0 %} 30 |

No Bookings Done!!

31 | {% else %} 32 |

ALL Successful Bookings of {{guest.first_name}} {{guest.last_name}} ({{guest.user.username}})

33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
81 | 82 |
83 | 84 |
85 |
86 | ID 87 |
88 |
89 | Room No 90 |
91 |
92 | CheckIn 93 |
94 |
95 | CheckOut 96 |
97 |
98 | Status 99 |
100 |
101 | Cancel 102 |
103 |
104 | {% for booking in bookings %} 105 |
106 |
107 | {{forloop.counter}} 108 |
109 |
110 | {{booking.room.no}} 111 |
112 |
113 | {{booking.checkIn}} 114 |
115 |
116 | {{booking.checkOut}} 117 |
118 |
119 | 120 | {% if booking.accept %} 121 | Accepted 122 | {% elif booking.reject %} 123 | Rejected 124 | {% else %} 125 | Pending 126 | {% endif %} 127 | 128 |
129 | 130 |
131 | {% if booking.accept %} 132 | Cancel Booking 133 | {% elif booking.reject %} 134 | Already Rejected 135 | {% else %} 136 | Cancel Booking 137 | {% endif %} 138 |
139 | 140 |
141 | {% endfor %} 142 |
143 | 144 |
145 |
146 | {% endif %} 147 | 148 | {% endblock content %} 149 | 150 | 151 | 152 | 153 | {% block more_links %} 154 | Book A Room! 155 | Logout 156 | {% endblock more_links %} 157 | 158 | -------------------------------------------------------------------------------- /selection/templates/profile.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 |
6 |
7 | 8 |
9 |
10 | Name 11 |
12 |
13 | {{ student.student_name }} 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 | Enrollment Number 27 |
28 |
29 | {{ student.enrollment_no }} 30 |
31 |
32 |
33 |
34 | Course 35 |
36 |
37 | {{ student.course.code }} 38 |
39 |
40 |
41 |
42 | Date of birth (yyyy-mm-dd) 43 |
44 |
45 | {{ student.dob }} 46 |
47 |
48 |
49 |
50 | Gender 51 |
52 |
53 | {{ student.gender }} 54 |
55 |
56 |
57 |
58 | Room 59 |
60 |
61 | {% if student.room_allotted %} {{ student.room }} 62 | {% else %} Not Allotted 63 | {% endif %} 64 |
65 |
66 |
67 |
68 | Dues 69 |
70 |
71 | {% if student.no_dues %}
No Dues
72 | {% else %}
Unpaid Dues
73 | {% endif %} 74 |
75 |
76 |
77 | {% if student.room_allotted %} 78 | 79 | Update your Room 80 | 81 | {% else %} 82 | 83 | Select a Room 84 | 85 | {% endif %} 86 |
87 | 88 |

Previous Leave Requests

89 | {% if leaves %} 90 |
91 |
92 | 93 |
94 |
95 | Start Date 96 |
97 |
98 | End Date 99 |
100 |
101 | Reason 102 |
103 |
104 | Accepted/Rejected 105 |
106 | 107 | 108 |
109 | {% for leave in leaves %} 110 |
111 |
112 | {{leave.start_date}} 113 |
114 |
115 | {{leave.end_date}} 116 |
117 |
118 | {{leave.reason}} 119 |
120 | 121 |
122 | {% if leave.accept %} ✔ {% elif leave.reject %} ✘ {% else %} - {% endif %} 123 |
124 | 125 | 126 |
127 | {% endfor %} 128 | 129 | 130 | 131 |
132 | 133 |
134 | {% endif %} 135 | 136 | 137 | {% endblock content %} 138 | 139 | 140 | {% block more_links %} 141 | 142 | Update Details 143 | 144 | {% if student.room_allotted %} 145 | 146 | Update Room 147 | 148 | {% else %} 149 | 150 | Select a Room 151 | 152 | {% endif %} 153 | 154 | 155 | Room Maintenance 156 | 157 | 158 | 159 | 160 | 161 | Apply Leave 162 | 163 | 164 | Logout 165 | 166 | {% endblock more_links %} -------------------------------------------------------------------------------- /selection/templates/pending.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | {% if not leaves %} 5 |

No Pending Requests

6 | {% else %} 7 |

Pending Requests

8 |
9 | 10 |
11 | 12 |
13 |
14 | Student Name 15 |
16 |
17 | Room No (Hostel) 18 |
19 |
20 | Start Date 21 |
22 |
23 | End Date 24 |
25 |
26 | Reason 27 |
28 |
29 | Accept 30 |
31 |
32 | Reject 33 |
34 |
35 | {% for leave in leaves %} 36 |
37 | 40 |
41 | {{ leave.student.room.no }} in {{ leave.student.room.hostel.name}} 42 |
43 |
44 | {{ leave.start_date }} 45 |
46 |
47 | {{ leave.end_date }} 48 |
49 |
50 | {{ leave.reason }} 51 |
52 |
53 | Grant 54 |
55 |
56 | Reject 57 |
58 | 59 | 60 |
61 | {% endfor %} 62 |
63 |
64 | {% endif %} 65 | 66 |

67 | 68 | 69 | {% if accepted %} 70 |

Accepted Leave Requests

71 | 72 |
73 |
74 | 75 |
76 |
77 | Student Name 78 |
79 |
80 | Enrollment No 81 |
82 |
83 | Course 84 |
85 |
86 | Start Date 87 |
88 |
89 | End Date 90 |
91 |
92 | Reason 93 |
94 | 95 |
96 | {% for leave in accepted %} 97 |
98 | 101 |
102 | {{leave.student.enrollment_no}} 103 |
104 |
105 | {{leave.student.course.code}} 106 |
107 | 108 |
109 | {{leave.start_date}} 110 |
111 |
112 | {{leave.end_date}} 113 |
114 |
115 | {{leave.reason}} 116 |
117 | 118 | 119 |
120 | {% endfor %} 121 | 122 | 123 | 124 |
125 | 126 |
127 | {% endif %} 128 | 129 | {% endblock content %} 130 | 131 | 132 | {% block more_links %} 133 | 134 | Profile 135 | 136 | 137 | Empty Rooms 138 | 139 | 140 | Present Leave 141 | 142 | 143 | Mess Rebate 144 | 145 | 146 | Guest Room Requests 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | Logout 159 | 160 | {% endblock more_links %} 161 | -------------------------------------------------------------------------------- /selection/templates/guest_requests.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | {% if not requests %} 5 |

No Pending Requests

6 | {% else %} 7 |

Pending Requests

8 |
9 | 10 |
11 | 12 | 13 |
14 |
15 | ID 16 |
17 |
18 | Guest Name 19 |
20 |
21 | Room No 22 |
23 |
24 | CheckIn 25 |
26 |
27 | CheckOut 28 |
29 | 30 |
31 | Accept 32 |
33 |
34 | Reject 35 |
36 |
37 | {% for booking in requests %} 38 |
39 | 40 |
41 | {{forloop.counter}} 42 |
43 | 46 |
47 | {{booking.room.no}} 48 |
49 |
50 | {{booking.checkIn}} 51 |
52 |
53 | {{booking.checkOut}} 54 |
55 |
56 | Grant 57 |
58 |
59 | Reject 60 |
61 | 62 | 63 |
64 | {% endfor %} 65 |
66 |
67 | {% endif %} 68 | 69 |
70 | 71 | 72 | {% if accepted %} 73 |

Accepted Guest Room Requests

74 | 75 |
76 |
77 | 78 |
79 |
80 | ID 81 |
82 |
83 | Guest Name 84 |
85 |
86 | Room No 87 |
88 |
89 | CheckIn 90 |
91 |
92 | CheckOut 93 |
94 | 95 |
96 | status 97 |
98 |
99 | {% for booking in accepted %} 100 |
101 | 102 |
103 | {{forloop.counter}} 104 |
105 | 108 |
109 | {{booking.room.no}} 110 |
111 |
112 | {{booking.checkIn}} 113 |
114 |
115 | {{booking.checkOut}} 116 |
117 |
118 | {% if booking.accept %} Accepted {% else %} Rejected {% endif %} 119 |
120 | 121 | 122 |
123 | {% endfor %} 124 | 125 | 126 | 127 |
128 | 129 |
130 | {% else %} 131 |

No Accepted Guest Room Requests

132 | 133 | {% endif %} 134 | 135 | {% endblock content %} 136 | 137 | 138 | {% block more_links %} 139 | 140 | Profile 141 | 142 | 143 | Empty Rooms 144 | 145 | 146 | Present Leave 147 | 148 | 149 | Mess Rebate 150 | 151 | 152 | 153 | Logout 154 | 155 | {% endblock more_links %} 156 | -------------------------------------------------------------------------------- /selection/templates/warden.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block content %} 4 | 5 |
6 | 7 |
8 | 9 |
10 |
11 | Hostel 12 |
13 |
14 | Room No 15 |
16 |
17 | Type 18 |
19 |
20 | Status 21 |
22 |
23 | Student Name 24 |
25 |
26 | Enrollment No 27 |
28 |
29 | Course 30 |
31 |
32 | Gender 33 |
34 |
35 | Maintenance 36 |
37 | 38 |
39 | {% for room in rooms %} 40 |
41 |
42 | {{ room.hostel.name }} 43 |
44 |
45 | {{ room.no }} 46 |
47 |
48 | {{ room.room_type }} 49 |
50 |
51 | {% if room.vacant %} vacant {% else %} occupied {% endif %} 52 |
53 |
54 | {% if room.vacant %} 55 | - 56 | {% else %} 57 | {{ room.student.student_name }} 58 | {% endif %} 59 |
60 |
61 | {% if room.vacant %} 62 | - 63 | {% else %} 64 | {{ room.student.enrollment_no }} 65 | {% endif %} 66 |
67 |
68 | {% if room.vacant %} 69 | - 70 | {% else %} 71 | {{ room.student.course.code }} 72 | {% endif %} 73 |
74 |
75 | {% if room.vacant %} 76 | - 77 | {% else %} 78 | {{ room.student.gender }} 79 | {% endif %} 80 |
81 |
82 | {% if room.repair %} 83 | {{ room.repair }} 84 | {% else %} 85 | - 86 | {% endif %} 87 |
88 |
89 | {% endfor %} 90 |
91 |
92 | {% endblock content %} 93 | 94 | 95 | {% block more_links %} 96 | 97 | Leave requests 98 | 99 | 100 | Empty Rooms 101 | 102 | 103 | Present Leave 104 | 105 | 106 | Mess Rebate 107 | 108 | 109 | Guest Room Requests 110 | 111 | 112 | Dues 113 | 114 | 115 | Add Due 116 | 117 | 118 | Remove Due 119 | 120 | 121 | Logout 122 | 123 | {% endblock more_links %} 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /selection/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.1 on 2018-09-21 15:11 2 | 3 | from django.conf import settings 4 | import django.contrib.auth.models 5 | import django.contrib.auth.validators 6 | from django.db import migrations, models 7 | import django.db.models.deletion 8 | import django.utils.timezone 9 | 10 | 11 | class Migration(migrations.Migration): 12 | 13 | initial = True 14 | 15 | dependencies = [ 16 | ('auth', '0009_alter_user_last_name_max_length'), 17 | ] 18 | 19 | operations = [ 20 | migrations.CreateModel( 21 | name='User', 22 | fields=[ 23 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 24 | ('password', models.CharField(max_length=128, verbose_name='password')), 25 | ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), 26 | ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), 27 | ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), 28 | ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), 29 | ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), 30 | ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), 31 | ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), 32 | ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), 33 | ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), 34 | ('is_warden', models.BooleanField(default=False)), 35 | ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), 36 | ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), 37 | ], 38 | options={ 39 | 'verbose_name': 'user', 40 | 'verbose_name_plural': 'users', 41 | 'abstract': False, 42 | }, 43 | managers=[ 44 | ('objects', django.contrib.auth.models.UserManager()), 45 | ], 46 | ), 47 | migrations.CreateModel( 48 | name='Course', 49 | fields=[ 50 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 51 | ('code', models.CharField(default=None, max_length=100)), 52 | ('room_type', models.CharField(choices=[('S', 'Single Occupancy'), ('D', 'Double Occupancy'), ('P', 'Reserved for Research Scholars'), ('B', 'Both Single and Double Occupancy')], default='D', max_length=1)), 53 | ], 54 | ), 55 | migrations.CreateModel( 56 | name='Hostel', 57 | fields=[ 58 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 59 | ('name', models.CharField(max_length=5)), 60 | ('gender', models.CharField(choices=[('M', 'Male'), ('F', 'Female')], default=None, max_length=1, null=True)), 61 | ('warden', models.CharField(blank=True, max_length=100)), 62 | ('caretaker', models.CharField(blank=True, max_length=100)), 63 | ('course', models.ManyToManyField(blank=True, default=None, to='selection.Course')), 64 | ], 65 | ), 66 | migrations.CreateModel( 67 | name='Room', 68 | fields=[ 69 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 70 | ('no', models.CharField(max_length=5)), 71 | ('name', models.CharField(max_length=10)), 72 | ('room_type', models.CharField(choices=[('S', 'Single Occupancy'), ('D', 'Double Occupancy'), ('P', 'Reserved for Research Scholars'), ('B', 'Both Single and Double Occupancy')], default=None, max_length=1)), 73 | ('vacant', models.BooleanField(default=False)), 74 | ('hostel', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='selection.Hostel')), 75 | ], 76 | ), 77 | migrations.CreateModel( 78 | name='Student', 79 | fields=[ 80 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 81 | ('student_name', models.CharField(max_length=200, null=True)), 82 | ('father_name', models.CharField(max_length=200, null=True)), 83 | ('enrollment_no', models.CharField(max_length=10, null=True, unique=True)), 84 | ('dob', models.DateField(help_text='format : YYYY-MM-DD', max_length=10, null=True)), 85 | ('gender', models.CharField(choices=[('M', 'Male'), ('F', 'Female')], default=None, max_length=1, null=True)), 86 | ('room_allotted', models.BooleanField(default=False)), 87 | ('course', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='selection.Course')), 88 | ('room', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='selection.Room')), 89 | ('user', models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), 90 | ], 91 | ), 92 | migrations.CreateModel( 93 | name='Warden', 94 | fields=[ 95 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 96 | ('name', models.CharField(max_length=200, null=True)), 97 | ('user', models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), 98 | ], 99 | ), 100 | ] 101 | -------------------------------------------------------------------------------- /guest/views.py: -------------------------------------------------------------------------------- 1 | from django.db.transaction import commit 2 | from django.shortcuts import render, redirect 3 | from django.http import HttpResponse 4 | from .forms import * 5 | import datetime 6 | from .models import Room,Reservation,Guest 7 | from django.contrib.auth import authenticate, login, logout 8 | from django.contrib.auth.decorators import login_required 9 | from django.template.loader import get_template 10 | from .utils import render_to_pdf 11 | from django.core.exceptions import ObjectDoesNotExist 12 | 13 | # Create your views here. 14 | 15 | 16 | def start(request): 17 | return render(request, 'guest/start.html') 18 | 19 | 20 | def register(request): 21 | if request.method == 'POST': 22 | form = UserForm(request.POST) 23 | # error1, error2 = False, False 24 | print(form.is_valid()) 25 | if form.is_valid(): 26 | new_user = form.save(commit=False) 27 | new_user.save() 28 | Guest.objects.create(user=new_user) 29 | cd = form.cleaned_data 30 | print(str(cd)) 31 | user = authenticate( 32 | request, 33 | username=cd['username'], 34 | password=cd['password1']) 35 | 36 | if user is not None: 37 | if user.is_active: 38 | login(request, user) 39 | return redirect('guest:home') 40 | else: 41 | 42 | return HttpResponse('Disabled account') 43 | else: 44 | 45 | return HttpResponse('Invalid Login') 46 | else: 47 | form = UserForm() 48 | args = {'form': form} 49 | return render(request, 'reg_form.html', args) 50 | # elif len(form.data['password1']) <= 8 or len(form.data['password2']) <= 8: 51 | # if len(form.data['password1']) <= 8: 52 | # error1 = True 53 | # if len(form.data['password2']) <= 8: 54 | # error2 = True 55 | # return render(request, 'reg_form.html', {'form': form, 'error1': error1, 'error2': error2}) 56 | 57 | else: 58 | 59 | form = UserForm() 60 | args = {'form': form} 61 | return render(request, 'guest/reg_form.html', args) 62 | 63 | 64 | def user_login(request): 65 | if request.method == 'POST': 66 | form = LoginForm(request.POST) 67 | if form.is_valid(): 68 | cd = form.cleaned_data 69 | user = authenticate( 70 | request, 71 | username=cd['username'], 72 | password=cd['password']) 73 | if user is not None: 74 | if user.is_active: 75 | login(request, user) 76 | return redirect('guest:home') 77 | else: 78 | return HttpResponse('Disabled account') 79 | else: 80 | return HttpResponse('Invalid Login') 81 | else: 82 | form = LoginForm() 83 | return render(request, 'guest/login.html', {'form': form}) 84 | 85 | @login_required 86 | def home(request): 87 | print(request.method) 88 | if request.method == "POST": 89 | form = DateForm(request.POST) 90 | # response = HttpResponse() # Created a HttpResponse 91 | # response['Cache-Control'] = 'no-cache' # Set Cache-Control Header 92 | if form.is_valid(): 93 | start_date = form.cleaned_data['checkIn'] 94 | 95 | end_date = form.cleaned_data['checkOut'] 96 | print(start_date, end_date) 97 | delta = end_date - start_date 98 | if delta.days > 0 and (start_date-datetime.date.today()).days >= 0: 99 | cnt = 0 100 | x = Room.objects.none() 101 | print(Room.objects.all()) 102 | for room in Room.objects.all(): 103 | RoomsBooked = Reservation.objects.filter(room=room,room_alloted=True,accept=True).\ 104 | filter(checkIn__lte=end_date,checkOut__gte=start_date) 105 | print(RoomsBooked) 106 | count = RoomsBooked.count() 107 | count = int(count) 108 | if count == 0: 109 | cnt += 1 110 | x = x | Room.objects.filter(pk = room.pk) 111 | print(cnt) 112 | print(x) 113 | res = form.save(commit=False) 114 | if cnt > 0: 115 | 116 | res.save() 117 | request.session['booking_id'] = res.booking_id 118 | # form.save(form.save(commit=False)) 119 | # form = SelectionForm(instance=request.reservation) 120 | # form.fields["room"].queryset = x 121 | args = {'rooms': x, 'count': cnt, 'res': res} 122 | return render(request, 'guest/details.html', args) 123 | else: 124 | return HttpResponse("

No Rooms



" 125 | " Book Again! ") 126 | else: 127 | 128 | return HttpResponse("

Invalid request



" 129 | " Book Again! ") 130 | else: 131 | form = DateForm() 132 | print(request.method) 133 | return render(request, 'guest/home.html', {'form': form}) 134 | 135 | else: 136 | form = DateForm() 137 | print(request.method) 138 | return render(request, 'guest/home.html', {'form': form}) 139 | 140 | @login_required 141 | def edit(request, res_id): 142 | if request.method == 'POST': 143 | 144 | 145 | try: 146 | form = RegistrationForm(request.POST,instance=request.user.guest) 147 | except Guest.DoesNotExist: 148 | form = RegistrationForm(request.POST) 149 | 150 | # form = RegistrationForm(request.POST,instance=request.user.guest) 151 | res = Reservation.objects.get(pk=res_id) 152 | if form.is_valid(): 153 | if (not res.room_alloted) and (request.session['room']): 154 | 155 | room = Room.objects.get(no=request.session['room']) 156 | res.room = room 157 | del request.session['room'] 158 | 159 | 160 | try: 161 | res.guest = request.user.guest 162 | res.save() 163 | form.save(commit=True) 164 | except Guest.DoesNotExist: 165 | guest = form.save(commit=False) 166 | guest.user = request.user 167 | guest.save() 168 | res.guest = guest 169 | 170 | res.save() 171 | 172 | # res.guest = request.user.guest 173 | # res.save() 174 | 175 | return render(request, 'guest/profile.html', {'res': res}) 176 | 177 | else: 178 | return HttpResponse("

Invalid Request

") 179 | else: 180 | res.delete() 181 | return HttpResponse("

Wrong Credentials



" 182 | " Book Again! ") 183 | 184 | else: 185 | 186 | try: 187 | form = RegistrationForm(instance=request.user.guest) 188 | except Guest.DoesNotExist: 189 | form = RegistrationForm(request.POST) 190 | 191 | # form = RegistrationForm(instance=request.user.guest) 192 | return render(request, 'guest/edit.html', {'form': form,'res':res_id}) 193 | 194 | 195 | @login_required 196 | def select(request, res_id): 197 | 198 | if request.method == 'POST': 199 | form = SelectionForm(request.POST, instance=Reservation.objects.get(pk=res_id)) 200 | if form.is_valid(): 201 | res_now = form.save(commit=False) 202 | # res_now.save() 203 | request.session['room'] = res_now.room.no 204 | # kwargs = {"room": res_now.room} 205 | return redirect('guest:edit', res_id =res_id) 206 | else: 207 | print('res_id',res_id) 208 | res = Reservation.objects.get(pk=res_id) 209 | form = SelectionForm(instance=res) 210 | start_date = res.checkIn 211 | end_date = res.checkOut 212 | x = Room.objects.none() 213 | print(Room.objects.all()) 214 | cnt = 0 215 | for room in Room.objects.all(): 216 | RoomsBooked = Reservation.objects.filter(room=room,room_alloted=True,accept=True).\ 217 | filter(checkIn__lte=end_date, checkOut__gte=start_date) 218 | print(RoomsBooked.values()) 219 | count = RoomsBooked.count() 220 | count = int(count) 221 | if count == 0: 222 | cnt += 1 223 | x = x | Room.objects.filter(pk=room.pk) 224 | if res.room: 225 | x = x | Room.objects.filter(pk=res.room.pk) 226 | cnt = cnt +1 227 | print(cnt) 228 | print(x) 229 | form.fields["room"].queryset = x 230 | return render(request, 'guest/select.html', {'form': form,'res':res}) 231 | 232 | 233 | @login_required 234 | def bookings(request): 235 | try: 236 | guest = request.user.guest 237 | print(guest.first_name) 238 | except ObjectDoesNotExist: 239 | guest = Guest.objects.none() 240 | 241 | if guest: 242 | all_bookings = Reservation.objects.none() 243 | all_bookings = all_bookings | Reservation.objects.filter(guest=guest,room_alloted = True,accept=True) 244 | all_bookings = all_bookings | Reservation.objects.filter(guest=guest, room_alloted=True, reject=True) 245 | all_bookings = all_bookings | Reservation.objects.filter(guest=guest, room_alloted=True, accept=False,reject=False) 246 | print(all_bookings.count) 247 | return render(request,'guest/bookings.html',{"bookings":all_bookings,"guest":guest}) 248 | elif request.user: 249 | 250 | return render(request, 'guest/bookings.html',{"bookings":Reservation.objects.none(),"guest":guest}) 251 | 252 | 253 | @login_required 254 | def confirm(request,res_id): 255 | res = Reservation.objects.get(pk=res_id) 256 | 257 | res.room_alloted = True 258 | res.save() 259 | return render(request,'guest/confirm.html',{"res_id":res_id} ) 260 | 261 | 262 | @login_required 263 | def generate_pdf(request,res_id): 264 | booking = Reservation.objects.get(pk = res_id) 265 | data = { 266 | 'res': booking 267 | } 268 | pdf = render_to_pdf('guest/invoice.html', data) 269 | if pdf is None: 270 | booking.guest.delete() 271 | booking.delete() 272 | return HttpResponse("

Error While Loading!!
Try Again

") 273 | return HttpResponse(pdf, content_type='application/pdf') 274 | 275 | @login_required 276 | def cancel(request,res_id): 277 | booking = Reservation.objects.get(pk=res_id) 278 | booking.delete() 279 | 280 | return HttpResponse('

Booking Cancelled


Book Again! ') 281 | 282 | 283 | def logout_view(request): 284 | logout(request) 285 | return redirect('/guest') 286 | -------------------------------------------------------------------------------- /selection/templates/start.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 550 | 551 | 552 | 553 | 554 | 574 | 575 |
576 | 585 | 586 |
587 | 588 | 589 | 590 |
591 | 594 |
595 | 596 | 597 | 598 | -------------------------------------------------------------------------------- /selection/static/selection/style.css: -------------------------------------------------------------------------------- 1 | /*.wrap { 2 | background: white url("images/bg-01.jpg") no-repeat; 3 | 4 | 5 | }*/ 6 | @import url(https://fonts.googleapis.com/css?family=Inconsolata:700); 7 | 8 | body { 9 | font-family: 'Inconsolata', sans-serif; 10 | font-style: normal; 11 | font-weight: 200; 12 | margin: 0px; 13 | background: linear-gradient(#c8daea, #dae7f1); 14 | 15 | 16 | 17 | } 18 | 19 | 20 | a { 21 | text-decoration: none; 22 | 23 | } 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | .wrap { 41 | 42 | margin: auto; 43 | margin-top: 5%; 44 | width: 40%; 45 | background: ; 46 | color: black; 47 | padding: 15px; 48 | text-align: center; 49 | border: 2px white solid; 50 | border-radius: 3px; 51 | 52 | } 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | .wrap1{ 67 | margin: auto; 68 | margin-top: 5%; 69 | width: 50%; 70 | background: ; 71 | color: black; 72 | padding: 15px; 73 | text-align: center; 74 | border: 2px white solid; 75 | border-radius: 3px; 76 | } 77 | 78 | .button-custom { 79 | white-space: nowrap; 80 | text-align: center; 81 | -webkit-transition: all 300ms cubic-bezier(0.1590, 0.500, 0.150, 1.360); 82 | -moz-transition: all 300ms cubic-bezier(0.1590, 0.500, 0.150, 1.360); 83 | -ms-transition: all 300ms cubic-bezier(0.1590, 0.500, 0.150, 1.360); 84 | -o-transition: all 300ms cubic-bezier(0.1590, 0.500, 0.150, 1.360); 85 | transition: all 300ms cubic-bezier(0.1590, 0.500, 0.150, 1.360); 86 | display: block; 87 | margin: 20px auto; 88 | max-width: 250px; 89 | border-radius: 4px; 90 | padding: 10px 35px; 91 | border: none; 92 | color: black; 93 | background-color: white; 94 | box-shadow: steelblue 0 0px 0px 2px inset; 95 | font-family: 'Inconsolata', sans-serif; 96 | font-style: normal; 97 | font-size: 1.3em; 98 | } 99 | 100 | .button-custom:hover { 101 | color: white; 102 | box-shadow: steelblue 0 80px 0px 2px inset; 103 | border: none; 104 | } 105 | 106 | * { 107 | box-sizing: border-box; 108 | } 109 | 110 | .nav { 111 | 112 | width: 100%; 113 | background-color: steelblue; 114 | position: relative; 115 | z-index: 1; 116 | } 117 | 118 | .nav > .nav-header { 119 | display: inline; 120 | width:100%; 121 | background-color: darkslateblue; 122 | } 123 | 124 | .nav > .nav-header > .nav-title { 125 | width: 100%; 126 | height: 45px; 127 | text-align: center; 128 | display: inline-block; 129 | font-size: 22px; 130 | 131 | padding: 10px 10px 10px 10px; 132 | 133 | width:100%; 134 | 135 | } 136 | 137 | .nav > .nav-btn { 138 | display: none; 139 | } 140 | 141 | .nav > .nav-links { 142 | display: inline; 143 | float: right; 144 | font-size: 18px; 145 | width:100%; 146 | background-color: steelblue; 147 | 148 | margin:auto; 149 | } 150 | 151 | .nav > .nav-links > a { 152 | display: inline-block; 153 | padding: 13px 10px 13px 10px; 154 | text-decoration: none; 155 | color: #fff; 156 | } 157 | 158 | .nav > .nav-links > a:hover { 159 | background-color: lightsteelblue; 160 | } 161 | 162 | .nav > #nav-check { 163 | display: none; 164 | } 165 | 166 | .nav-title > a { 167 | text-decoration:none; 168 | color: white; 169 | } 170 | 171 | .nav-title > a:active, .nav-title > a:hover, .nav-title > a:focus { 172 | text-decoration:none; 173 | color: white; 174 | } 175 | 176 | 177 | @media screen and (max-width:700px) { 178 | .nav > .nav-btn { 179 | display: inline-block; 180 | position: absolute; 181 | right: 0px; 182 | top: 0px; 183 | } 184 | .nav > .nav-btn > label { 185 | display: inline-block; 186 | width: 50px; 187 | height: 50px; 188 | padding: 13px; 189 | background-color: lightsteelblue; 190 | } 191 | .nav > .nav-btn > label:hover { 192 | background-color: lightsteelblue; 193 | } 194 | .nav > .nav-btn > label > span { 195 | display: block; 196 | width: 25px; 197 | height: 10px; 198 | border-top: 2px solid #eee; 199 | } 200 | .nav > .nav-links { 201 | position: absolute; 202 | display: block; 203 | width: 100%; 204 | background-color: lightsteelblue; 205 | height: 0px; 206 | transition: all 0.15s ease-in; 207 | overflow-y: hidden; 208 | top: 50px; 209 | left: 0px; 210 | } 211 | .nav > .nav-links > a { 212 | display: block; 213 | width: 100%; 214 | } 215 | .nav > #nav-check:not(:checked) + .nav-links { 216 | height: 0px; 217 | } 218 | .nav > #nav-check:checked + .nav-links { 219 | height: calc(100vh - 50px); 220 | overflow-y: auto; 221 | } 222 | } 223 | 224 | .fields { 225 | padding: 10px; 226 | margin: 10px; 227 | color: black; 228 | font-family: serif; 229 | } 230 | 231 | input { 232 | border: none; 233 | border-bottom: 3px solid black; 234 | text-align: center; 235 | font-family: serif; 236 | font-size: 1em; 237 | background-color: rgba(0,0,0,0); 238 | } 239 | 240 | input:focus { 241 | border-bottom: 4px solid steelblue; 242 | background-color: rgba(0,0,0,0); 243 | } 244 | 245 | textarea:focus, input:focus{ 246 | outline: none; 247 | } 248 | #seat { 249 | height: 25px; 250 | width: 25px; 251 | border: 1px solid gray; 252 | cursor:pointer; 253 | border-radius:5px; 254 | display: inline-block; 255 | font-size: 12.5px; 256 | font-family:Times, serif; 257 | text-align: center; 258 | padding:2px; 259 | } 260 | #seatS { 261 | height: 25px; 262 | width: 25px; 263 | border: 1px solid gray; 264 | cursor:pointer; 265 | border-radius:50%; 266 | display: inline-block; 267 | font-size: 12.5px; 268 | font-family:Times, serif; 269 | text-align: center; 270 | padding:2px; 271 | 272 | } 273 | #seat1 { 274 | height: 20px; 275 | width: 20px; 276 | border: 1px solid gray; 277 | cursor:pointer; 278 | background-color: steelblue; 279 | border-radius:5px; 280 | font-size: 10.5px; 281 | font-family:Times, serif; 282 | padding:3.5px; 283 | } 284 | #seat2 { 285 | height: 20px; 286 | width: 20px; 287 | border: 1px solid gray; 288 | cursor:pointer; 289 | background-color: #b8c6dd; 290 | border-radius:5px; 291 | display: inline-block; 292 | font-size: 10.5px; 293 | font-family:Times, serif; 294 | padding:3.5px; 295 | } 296 | #seat3 { 297 | height: 20px; 298 | width: 20px; 299 | border: 1px solid gray; 300 | cursor:pointer; 301 | background-color: #eff5f7; 302 | border-radius:5px; 303 | display: inline-block; 304 | font-size: 10.5px; 305 | font-family:Times, serif; 306 | padding:3.5px; 307 | } 308 | #seat1S { 309 | height: 21px; 310 | width: 21px; 311 | border: 1px solid gray; 312 | cursor:pointer; 313 | border-radius:50%; 314 | background-color: #b8c6dd; 315 | display: inline-block; 316 | font-size: 10.5px; 317 | font-family:Times, serif; 318 | padding:3.5px; 319 | 320 | } 321 | #seat2S { 322 | height: 21px; 323 | width: 21px; 324 | border: 1px solid gray; 325 | cursor:pointer; 326 | border-radius:50%; 327 | background-color: #eff5f7; 328 | display: inline-block; 329 | font-size: 10.5px; 330 | font-family:Times, serif; 331 | padding:3.5px; 332 | } 333 | #walk{ 334 | padding:0px; 335 | 336 | } 337 | #driver{ 338 | background-color:gray; 339 | height: 20px; 340 | border-radius: 50%; 341 | } 342 | #bathroom{ 343 | height: 30px; 344 | width: 30px; 345 | border: 1px solid gray; 346 | cursor:pointer; 347 | background-color:#4fb6c6; 348 | margin:2px; 349 | text-align:center; 350 | padding:4px; 351 | font-family:Georgia, serif; 352 | } 353 | #block{ 354 | height: 20px; 355 | width: 50px; 356 | border: 1px solid gray; 357 | border-radius:4px; 358 | cursor:pointer; 359 | background-color:#e2dd8a; 360 | margin:2px; 361 | text-align:center; 362 | font-family:Georgia, serif; 363 | } 364 | .table1{ 365 | opacity=0.2; 366 | background-color:#b8c6dd; 367 | background-size: 100% 800px; 368 | border-radius:5%; 369 | margin-left:20px; 370 | margin-right:20px; 371 | } 372 | 373 | .menu{ 374 | height:410px; 375 | width:100%; 376 | padding:20px; 377 | border-radius:8px; 378 | 379 | } 380 | .row{ 381 | margin-top:20px; 382 | } 383 | .grid{ 384 | height:500px; 385 | width:100%; 386 | 387 | } 388 | /* Dropdown container - needed to position the dropdown content */ 389 | .dropdown { 390 | float: right; 391 | 392 | padding-right:20px; 393 | 394 | display :inline-block; 395 | position:relative; 396 | } 397 | 398 | /* Style the dropdown button to fit inside the topnav */ 399 | .dropdown .dropbtn { 400 | font-size: 22px; 401 | border: none; 402 | outline: none; 403 | color: white; 404 | padding: 14px 16px; 405 | background-color: inherit; 406 | font-family: inherit; 407 | margin: 0; 408 | 409 | cursor: pointer; 410 | } 411 | 412 | /* Style the dropdown content (hidden by default) */ 413 | .dropdown-content { 414 | display: none; 415 | position: absolute; 416 | background-color: #f9f9f9; 417 | min-width: 160px; 418 | box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 419 | z-index: 1; 420 | } 421 | 422 | /* Style the links inside the dropdown */ 423 | .dropdown-content a { 424 | float: justify; 425 | color: steelblue; 426 | padding: 12px 16px; 427 | text-decoration: none; 428 | display: block; 429 | text-align: left; 430 | } 431 | 432 | /* Add a dark background on topnav links and the dropdown button on hover */ 433 | .topnav a:hover, .dropdown:hover .dropbtn { 434 | background-color: steelblue; 435 | color: white; 436 | } 437 | 438 | /* Add a grey background to dropdown links on hover */ 439 | .dropdown-content a:hover { 440 | background-color: #deeff4; 441 | color: #638acc; 442 | } 443 | 444 | /* Show the dropdown menu when the user moves the mouse over the dropdown button */ 445 | .dropdown:hover .dropdown-content { 446 | display: block; 447 | } 448 | 449 | .wrapper { 450 | margin: 0 auto; 451 | padding: 40px; 452 | max-width: 800px; 453 | } 454 | 455 | .table { 456 | margin: 0 0 40px 0; 457 | width: 100%; 458 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); 459 | display: table; 460 | } 461 | @media screen and (max-width: 580px) { 462 | .table { 463 | display: block; 464 | } 465 | } 466 | 467 | .row { 468 | display: table-row; 469 | background: #f6f6f6; 470 | } 471 | 472 | .row:nth-of-type(odd) { 473 | background: #e9e9e9; 474 | } 475 | 476 | .row.header { 477 | font-weight: 900; 478 | color: #ffffff; 479 | background: #2980b9; 480 | } 481 | 482 | @media screen and (max-width: 580px) { 483 | .row { 484 | padding: 14px 0 7px; 485 | display: block; 486 | } 487 | .row.header { 488 | padding: 0; 489 | height: 6px; 490 | } 491 | .row.header .cell { 492 | display: none; 493 | } 494 | .row .cell { 495 | margin-bottom: 10px; 496 | } 497 | .row .cell:before { 498 | margin-bottom: 3px; 499 | content: attr(data-title); 500 | min-width: 98px; 501 | font-size: 10px; 502 | line-height: 10px; 503 | font-weight: bold; 504 | text-transform: uppercase; 505 | color: #969696; 506 | display: block; 507 | } 508 | } 509 | 510 | .cell { 511 | white-space: nowrap; 512 | padding: 6px 12px; 513 | display: table-cell; 514 | 515 | 516 | } 517 | 518 | @media screen and (max-width: 580px) { 519 | .cell { 520 | padding: 2px 16px; 521 | display: block; 522 | } 523 | } 524 | 525 | 526 | .overlay { 527 | position: fixed; 528 | top: 0; 529 | bottom: 0; 530 | left: 0; 531 | right: 0; 532 | background: rgba(0, 0, 0, 0.7); 533 | transition: opacity 500ms; 534 | visibility: hidden; 535 | opacity: 0; 536 | } 537 | 538 | .overlay:target { 539 | visibility: visible; 540 | opacity: 1; 541 | } 542 | 543 | .popup { 544 | margin: 70px auto; 545 | padding: 20px; 546 | background: #fff; 547 | border-radius: 5px; 548 | width: 30%; 549 | position: relative; 550 | transition: all 5s ease-in-out; 551 | } 552 | 553 | .popup h2 { 554 | margin-top: 0; 555 | color: #333; 556 | font-family: Tahoma, Arial, sans-serif; 557 | } 558 | .popup .close { 559 | position: absolute; 560 | top: 20px; 561 | right: 30px; 562 | transition: all 200ms; 563 | font-size: 30px; 564 | font-weight: bold; 565 | text-decoration: none; 566 | color: #333; 567 | } 568 | .popup .close:hover { 569 | color: steelblue; 570 | } 571 | .popup .content { 572 | max-height: 30%; 573 | overflow: auto; 574 | text-decoration: none; 575 | } 576 | 577 | @media screen and (max-width: 700px){ 578 | .box{ 579 | width: 70%; 580 | } 581 | .popup{ 582 | width: 70%; 583 | } 584 | } 585 | footer { 586 | position:fixed; 587 | 588 | width: 100%; 589 | text-align: center; 590 | clear: both; 591 | 592 | } 593 | .copyright{ 594 | bottom: 0px; 595 | width: 100%; 596 | padding:15px; 597 | text-align: center; 598 | 599 | 600 | } 601 | 602 | -------------------------------------------------------------------------------- /guest/templates/guest/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 571 | 572 | 573 | 574 | 575 | 595 | 596 |
597 | {% block content %} 598 | {% endblock content %} 599 |
600 | 601 | 602 | 603 | 606 | 607 | 608 | 609 | 610 | 611 | -------------------------------------------------------------------------------- /selection/templates/BH5_Floor4.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends 'base.html' %} 3 | {% block content %} 4 | 62 |
63 |
64 |
65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 |
Mess
B
B
14
13
12
11
06
04
02
B
10
09
07
05
03
01
B
08
Gate
384 |
385 |
386 | 432 |
433 |
434 | 435 | 436 |
437 | 494 | 499 | {% endblock content %} 500 | 501 | --------------------------------------------------------------------------------