1 from django.shortcuts import render
2 from django.contrib.auth import login, authenticate
3 from django.contrib.auth.decorators import login_required
4 from django.shortcuts import render, redirect, get_object_or_404
5 from .models import User, Passenger, Flight, Security, Staff
6 import datetime
7 import pdfkit
8 from django.http import HttpResponse
9 from django.template import loader
10
11 # Create your views here.
12
13
14 def login_security(request):
15 if request.method == "POST":
16 username = request.POST['username']
17 password = request.POST['password']
18 user = authenticate(username=username, password=password)
19 if user is not None:
20 if user.is_active:
21 if user.user_type == 2:
22 login(request, user)
23 return redirect('security_clearing') #, pk=user.security.id)
24 else:
25 return render(request, 'security_login.html', {'error_message': 'Invalid security staff credentials'})
26 else:
27 return render(request, 'security_login.html', {'error_message': 'Your account has been disabled'})
28 else:
29 return render(request, 'security_login.html', {'error_message': 'Invalid login'})
30 return render(request, 'security_login.html')
31
32
33 def login_staff(request):
34 if request.method == "POST":
35 username = request.POST['username']
36 password = request.POST['password']
37 user = authenticate(username=username, password=password)
38 if user is not None:
39 if user.is_active:
40 if user.user_type == 1:
41 login(request, user)
42 return redirect('staff_home', flight_no=user.staff.flight_no.flight_no)
43 else:
44 return render(request, 'staff_login.html', {'error_message': 'Invalid flight staff credentials'})
45 else:
46 return render(request, 'staff_login.html', {'error_message': 'Your account has been disabled'})
47 else:
48 return render(request, 'staff_login.html', {'error_message': 'Invalid login'})
49 return render(request, 'staff_login.html')
50
51
52 def home(request):
53 return render(request, 'home.html')
54
55
56 def airport_mgmt(request):
57 return render(request, 'airport_mgmt.html')
58
59
60 def clear_security(request):
61 data = Passenger.objects.all()
62 return render(request, 'security_clearing.html', {'passengers': data})
63
64
65 def clear_for_security(request, pk):
66 passenger = get_object_or_404(Passenger, pk=pk)
67 passenger.cleared_security_status = request.user.security.id
68 passenger.save()
69
70 return redirect('security_clearing')
71
72
73 def staff_home(request, flight_no):
74 # staff = get_object_or_404(Staff, pk=pk)
75 data = Passenger.objects.filter(flight_no=flight_no)
76 return render(request, 'staff_home.html', {'passengers': data, 'flight_no': flight_no})
77
78
79 def view_flights(request):
80 data = Flight.objects.all()
81 return render(request, 'view_flights.html', {'flights': data})
82
83
84 def self_check_in(request, pk):
85 passenger = get_object_or_404(Passenger, pk=pk)
86 passenger.checked_in_status = True
87 passenger.save()
88 return redirect('passenger_home', pk=passenger.pk)
89
90
91 def search_by_source(request):
92 if request.method == "POST":
93 source = request.POST['source']
94 if source:
95 data = Flight.objects.filter(source=source)
96 return render(request, 'view_flights.html', {'flights': data})
97 else:
98 return redirect('view_flights')
99 else:
100 return redirect('view_flights')
101
102
103 def search_by_destination(request):
104 if request.method == "POST":
105 destination = request.POST['destination']
106 if destination:
107 data = Flight.objects.filter(destination=destination)
108 return render(request, 'view_flights.html', {'flights': data})
109 else:
110 return redirect('view_flights')
111 else:
112 return redirect('view_flights')
113
114
115 def view_available_flights(request):
116 if request.method == "POST":
117 source = request.POST['source']
118 destination = request.POST['destination']
119 if source and destination:
120 flights = Flight.objects.filter(source=source, destination=destination)
121 if flights:
122 return render(request, 'home.html', {'flights': flights})
123 else:
124 return render(request, 'home.html', {'error_message_flight': "No flights found"})
125 else:
126 return redirect('home')
127 else:
128 return redirect('home')
129
130
131 def book_flight(request, pk):
132 if request.method == "POST":
133 flight = Flight.objects.get(flight_no=pk)
134 first_name = request.POST['first_name']
135 last_name = request.POST['last_name']
136 nationality = request.POST['nationality']
137 gender = request.POST['gender']
138 dob = request.POST['dob']
139 pnr = str(flight.flight_no) + str(flight.destination)
140 passenger = Passenger(pnr=pnr, first_name=first_name, last_name=last_name, nationality=nationality,
141 flight_no=flight, gender=gender, dob=dob)
142 passenger.save()
143 passenger.pnr = str(flight.flight_no) + str(flight.destination_code) + str(passenger.pk)
144 passenger.save()
145 flight.no_of_seats -= 1
146 flight.save()
147 return redirect('passenger_home', pk=passenger.pk)
148 else:
149 return render(request, 'book_flight.html', {'flight_no': pk})
150
151
152 def passenger_home(request, pk):
153 passenger = Passenger.objects.get(pk=pk)
154 return render(request, 'passenger_home.html', {'passenger': passenger})
155
156
157 def view_booking(request):
158 if request.method == "POST": # view existing booking
159 pnr = request.POST['pnr']
160 try:
161 passenger = Passenger.objects.get(pnr=pnr)
162 except Passenger.DoesNotExist:
163 passenger = None
164 if passenger:
165 passenger = get_object_or_404(Passenger, pnr=pnr)
166 return render(request, 'passenger_home.html', {'passenger': passenger})
167 else:
168 return render(request, 'home.html', {'error_message_booking': 'No booking found'})
169
170
171 def create_pdf(request, pk):
172 passenger = get_object_or_404(Passenger, pk=pk)
173 html = loader.render_to_string('passenger_home.html', {'passenger': passenger})
174 output = pdfkit.from_string(html, output_path=False)
175 response = HttpResponse(content_type="application/pdf")
176 response.write(output)
177 return response
178
179
180 def staff_check_in(request, pk):
181 passenger = get_object_or_404(Passenger, pk=pk)
182 passenger.checked_in_status = True
183 passenger.save()
184 return redirect('staff_home', flight_no=passenger.flight_no.flight_no)
185
186
187 def delete_passengers(request, flight_no):
188 flight = Flight.objects.get(flight_no=flight_no)
189 passenger = Passenger.objects.filter(flight_no=flight)
190 passenger.delete()
191 return redirect('staff_home', flight_no=flight.flight_no)
192
193
194 def generate_report(request, flight_no):
195 passengers = Passenger.objects.filter(flight_no=flight_no)
196 html = loader.render_to_string('staff_home.html', {'passengers': passengers, 'flight_no': flight_no})
197 output = pdfkit.from_string(html, output_path=False)
198 response = HttpResponse(content_type="application/pdf")
199 response.write(output)
200 return response