Skip to content

Commit 5678579

Browse files
authored
Merge pull request #26 from anujpatel03/hmweb-main
Added notification functionality
2 parents 85f74aa + 5516b6f commit 5678579

File tree

20 files changed

+809
-128
lines changed

20 files changed

+809
-128
lines changed

FusionIIIT/applications/department/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def faculty_view(request):
178178
upload_announcement=upload_announcement,
179179
department = department,
180180
ann_date=ann_date)
181-
# department_notif(usrnm, recipients , message)
181+
department_notif(usrnm, recipients , message)
182182

183183
context = browse_announcements()
184184
return render(request, 'department/dep_request.html', {"user_designation":user_info.user_type,
@@ -223,7 +223,7 @@ def staff_view(request):
223223
upload_announcement=upload_announcement,
224224
department = department,
225225
ann_date=ann_date)
226-
# department_notif(usrnm, recipients , message)
226+
department_notif(usrnm, recipients , message)
227227

228228
context = browse_announcements()
229229
return render(request, 'department/dep_request.html', {"user_designation":user_info.user_type,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.1.5 on 2024-03-15 21:00
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('globals', '0014_auto_20240312_1930'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='extrainfo',
15+
name='user_status',
16+
field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50),
17+
),
18+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.1.5 on 2024-03-15 21:57
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('globals', '0017_auto_20240314_2252'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='extrainfo',
15+
name='user_status',
16+
field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50),
17+
),
18+
]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Generated by Django 3.1.5 on 2024-03-15 21:53
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('globals', '0015_auto_20240315_2100'),
10+
('globals', '0018_merge_20240315_1500'),
11+
]
12+
13+
operations = [
14+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.1.5 on 2024-03-15 21:58
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('globals', '0019_merge_20240315_2153'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='extrainfo',
15+
name='user_status',
16+
field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50),
17+
),
18+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.1.5 on 2024-03-15 21:00
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('hostel_management', '0015_merge_20240220_1917'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='hostelleave',
15+
name='remark',
16+
field=models.TextField(blank=True, null=True),
17+
),
18+
]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Generated by Django 3.1.5 on 2024-03-15 21:53
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('hostel_management', '0018_hostelhistory'),
10+
('hostel_management', '0016_hostelleave_remark'),
11+
]
12+
13+
operations = [
14+
]

FusionIIIT/applications/hostel_management/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ class HostelLeave(models.Model):
257257
start_date = models.DateField(default=timezone.now)
258258
end_date = models.DateField()
259259
status = models.CharField(max_length=20, default='pending')
260+
remark = models.TextField(blank=True, null=True)
260261

261262

262263
def __str__(self):

FusionIIIT/applications/hostel_management/views.py

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from rest_framework.exceptions import APIException
2020

2121

22+
2223
from django.shortcuts import render, redirect
2324

2425
from .models import HostelLeave
@@ -34,6 +35,7 @@
3435
from rest_framework import status
3536

3637

38+
3739
from django.contrib.auth.decorators import login_required
3840
from django.contrib.auth.models import User
3941
# from .models import HostelStudentAttendance
@@ -73,6 +75,7 @@
7375
from django.shortcuts import get_object_or_404, redirect, render
7476
from django.db import transaction
7577
from .forms import HallForm
78+
from notification.views import hostel_notifications
7679

7780

7881
def is_superuser(user):
@@ -706,15 +709,27 @@ def create_hostel_leave(request):
706709
reason = data.get('reason')
707710
start_date = data.get('start_date', timezone.now())
708711
end_date = data.get('end_date')
712+
709713

710714
# Create HostelLeave object and save to the database
711715
leave = HostelLeave.objects.create(
712716
student_name=student_name,
713717
roll_num=roll_num,
714718
reason=reason,
715719
start_date=start_date,
716-
end_date=end_date
720+
end_date=end_date,
721+
717722
)
723+
caretakers = HallCaretaker.objects.all()
724+
sender = request.user
725+
type = "leave_request"
726+
for caretaker in caretakers:
727+
try:
728+
# Send notification
729+
hostel_notifications(sender, caretaker.staff.id.user, type)
730+
except Exception as e:
731+
# Handle notification sending error
732+
print(f"Error sending notification to caretaker {caretaker.staff.user.username}: {e}")
718733

719734
return JsonResponse({'message': 'HostelLeave created successfully'}, status=status.HTTP_201_CREATED)
720735

@@ -865,7 +880,6 @@ def post(self, request, *args, **kwargs):
865880

866881
# Retrieve the previous caretaker for the hall, if any
867882
prev_hall_caretaker = HallCaretaker.objects.filter(hall=hall).first()
868-
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
869883
# print(prev_hall_caretaker.staff.id)
870884
# Delete any previous assignments of the caretaker in HallCaretaker table
871885
HallCaretaker.objects.filter(staff=caretaker_staff).delete()
@@ -1018,7 +1032,6 @@ def post(self, request, *args, **kwargs):
10181032
# Assign the new warden to the hall in Hallwarden table
10191033
hall_warden = HallWarden.objects.create(hall=hall, faculty=warden)
10201034

1021-
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
10221035
#current caretker
10231036
current_caretaker =HallCaretaker.objects.filter(hall=hall).first()
10241037
print(current_caretaker)
@@ -1541,6 +1554,14 @@ def request_guest_room(request):
15411554
arrival_date=arrival_date, arrival_time=arrival_time, departure_date=departure_date, departure_time=departure_time, nationality=nationality)
15421555
newBooking.save()
15431556
messages.success(request, "Room request submitted successfully!")
1557+
1558+
1559+
# Get the caretaker for the selected hall
1560+
hall_caretaker = HallCaretaker.objects.get(hall=hall)
1561+
caretaker = hall_caretaker.staff.id.user
1562+
# Send notification to caretaker
1563+
hostel_notifications(sender=request.user, recipient=caretaker, type='guestRoom_request')
1564+
15441565
return HttpResponseRedirect(reverse("hostelmanagement:hostel_view"))
15451566
else:
15461567
messages.error(request, "Something went wrong")
@@ -1576,13 +1597,19 @@ def update_guest_room(request):
15761597
guest_room_request.save()
15771598
messages.success(request, "Request accepted successfully!")
15781599

1600+
hostel_notifications(sender=request.user,recipient=guest_room_request.intender,type='guestRoom_accept')
1601+
1602+
15791603
elif 'reject_request' in request.POST:
15801604
guest_room_request = GuestRoomBooking.objects.get(
15811605
pk=request.POST['reject_request'])
15821606
guest_room_request.status = 'Rejected'
15831607
guest_room_request.save()
15841608

15851609
messages.success(request, "Request rejected successfully!")
1610+
1611+
hostel_notifications(sender=request.user,recipient=guest_room_request.intender,type='guestRoom_reject')
1612+
15861613
else:
15871614
messages.error(request, "Invalid request!")
15881615
return HttpResponseRedirect(reverse("hostelmanagement:hostel_view"))
@@ -1597,8 +1624,18 @@ def update_leave_status(request):
15971624
try:
15981625
leave = HostelLeave.objects.get(id=leave_id)
15991626
leave.status = status
1627+
leave.remark = request.POST.get('remark')
16001628
leave.save()
1601-
return JsonResponse({'status': status, 'message': 'Leave status updated successfully.'})
1629+
1630+
# Send notification to the student
1631+
sender = request.user # Assuming request.user is the caretaker
1632+
1633+
student_id = leave.roll_num # Assuming student is a foreign key field in HostelLeave model
1634+
recipient = User.objects.get(username=student_id)
1635+
type = "leave_accept" if status == "Approved" else "leave_reject"
1636+
hostel_notifications(sender, recipient, type)
1637+
1638+
return JsonResponse({'status': status,'remarks':leave.remark,'message': 'Leave status updated successfully.'})
16021639
except HostelLeave.DoesNotExist:
16031640
return JsonResponse({'status': 'error', 'message': 'Leave not found.'}, status=404)
16041641
else:
@@ -1663,6 +1700,17 @@ def post(self, request):
16631700
reason=reason,
16641701
hall_id=hall_id
16651702
)
1703+
# Sending notification to the student about the imposed fine
1704+
1705+
1706+
1707+
recipient = User.objects.get(username=student_id)
1708+
1709+
sender = request.user
1710+
1711+
type = "fine_imposed"
1712+
hostel_notifications(sender, recipient, type)
1713+
16661714
return HttpResponse({'message': 'Fine imposed successfully.'}, status=status.HTTP_201_CREATED)
16671715
except Exception as e:
16681716
return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from rest_framework import serializers
2+
from notifications.models import Notification
3+
class NotificationSerializer(serializers.ModelSerializer):
4+
class Meta:
5+
model = Notification
6+
fields = '__all__'

0 commit comments

Comments
 (0)