Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions FusionIIIT/applications/iwdModuleV2/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class Meta:

def create(self, validated_data):
validated_data['engineerProcessed'] = 0
validated_data['iwdAdminApproval'] = 0
validated_data['directorApproval'] = 0
validated_data['deanProcessed'] = 0
validated_data['status'] = "Pending"
Expand All @@ -58,6 +59,11 @@ def create(self, validated_data):
validated_data['billSettled'] = 0
return super().create(validated_data)

class IWDAdminApprovedRequestsSerializer(serializers.ModelSerializer):
class Meta:
model = Requests
fields = ['id', 'name', 'area', 'description', 'requestCreatedBy']

class DirectorApprovedRequestsSerializer(serializers.ModelSerializer):
class Meta:
model = Requests
Expand Down
1 change: 1 addition & 0 deletions FusionIIIT/applications/iwdModuleV2/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
path('audit-document/', views.handle_audit_document, name='auditDocument'),
path('get-proposals/', views.get_proposals, name='getProposals'),
path('get-items/', views.get_items, name='getItems'),
path('handle-admin-approval/', views.handle_admin_approval, name='handleAdminApproval'),


# partially integrated on frontend
Expand Down
109 changes: 86 additions & 23 deletions FusionIIIT/applications/iwdModuleV2/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ def create_request(request):
formObject = serializer.save()
print(formObject.requestCreatedBy)
request_object = Requests.objects.get(pk=formObject.pk)
receiver_desg, receiver_user = data.get('designation').split('|')
receiver_desg = "Admin IWD"
receiver_user = "kunal"
# receiver_desg, receiver_user = data.get('designation').split('|')
try:
receiver_user_obj = User.objects.get(username=receiver_user)
except User.DoesNotExist:
Expand Down Expand Up @@ -239,26 +241,36 @@ def handle_engineer_process_requests(request):
"message": "File forwarded successfully",
}, status=status.HTTP_200_OK)


@api_view(['POST'])
@permission_classes([IsAuthenticated])
def handle_director_approval(request):

'''
This api is to approve or reject file based on director's action
'''

"""
Approve or reject a request by the director.
"""
data = request.data
fileid = data.get('fileid')
request_id = File.objects.get(id=fileid).src_object_id
action = data.get('action')

if not fileid or not action:
return Response({'error': 'File ID and action are required'}, status=status.HTTP_400_BAD_REQUEST)

try:
request_id = File.objects.get(id=fileid).src_object_id
except File.DoesNotExist:
return Response({'error': 'File not found'}, status=status.HTTP_404_NOT_FOUND)

request_instance = Requests.objects.filter(id=request_id, iwdAdminApproval=True).first()
if not request_instance:
return Response({'error': 'Request not approved by IWD Admin'}, status=status.HTTP_400_BAD_REQUEST)

proposal_instance = Proposal.objects.filter(request_id=request_id).first()
if not proposal_instance:
return Response({'error': 'No proposal exists for this request'}, status=status.HTTP_400_BAD_REQUEST)

remarks = data.get('remarks')
attachment = request.FILES.get('file')
receiver_desg, receiver_user = data.get('designation').split('|')

if not fileid:
return Response({'error': 'File ID not provided'}, status=status.HTTP_400_BAD_REQUEST)

forward_file(
file_id=fileid,
receiver=receiver_user,
Expand All @@ -269,17 +281,15 @@ def handle_director_approval(request):
)
receiver_user_obj = get_object_or_404(User, username=receiver_user)
iwd_notif(request.user, receiver_user_obj, "file_forward")
message = ""
print(data)
if data.get('action') == 'approve':
message = "Request_approved"
print(message)
Requests.objects.filter(id=request_id).update(directorApproval=1, status="Approved by the director")
else:
message = "Request_rejected"
Requests.objects.filter(id=request_id).update(directorApproval=-1, status="Rejected by the director")

return Response({'message': message})
if action == "approve":
Requests.objects.filter(id=request_id).update(directorApproval=1, status="Approved by Director")
return Response({'message': 'Request approved by Director'}, status=status.HTTP_200_OK)
elif action == "reject":
Requests.objects.filter(id=request_id).update(directorApproval=-1, status="Rejected by Director")
return Response({'message': 'Request rejected by Director'}, status=status.HTTP_200_OK)
else:
return Response({'error': 'Invalid action'}, status=status.HTTP_400_BAD_REQUEST)

@api_view(['POST'])
@permission_classes([IsAuthenticated])
Expand Down Expand Up @@ -596,6 +606,7 @@ def requests_status(request):
'description': request_object.description,
'requestCreatedBy': request_object.requestCreatedBy,
'file_id': file_obj.id,
'processed_by_admin': request_object.iwdAdminApproval,
'processed_by_director': request_object.directorApproval,
'work_order': request_object.issuedWorkOrder,
'work_completed': request_object.workCompleted,
Expand Down Expand Up @@ -1191,10 +1202,18 @@ def handle_settle_bill_requests(request):
@permission_classes([IsAuthenticated])
def create_proposal(request):
data = request.data.copy()
request_id = data.get('id')

# Check if the request is approved by the IWD Admin
request_instance = Requests.objects.filter(id=request_id, iwdAdminApproval=True).first()
if not request_instance:
return Response({'error': 'Request not approved by IWD Admin'}, status=status.HTTP_400_BAD_REQUEST)

data["created_by"] = str(request.user)
data["request"] = data.get('id')
print(data)
receiver_desg, receiver_user = data.get('designation').split('|')
receiver_user = "bhartenduks"
# receiver_desg, receiver_user = data.get('designation').split('|')
serializer = ProposalSerializer(data=data)
if serializer.is_valid():
print(serializer)
Expand Down Expand Up @@ -1228,4 +1247,48 @@ def get_items(request):
return Response(serializer.data, status=status.HTTP_200_OK)
except Proposal.DoesNotExist:
print("1trq3t3\n\n\n\n\n12q")
return Response({'error': 'Proposal not found'}, status=status.HTTP_404_NOT_FOUND)
return Response({'error': 'Proposal not found'}, status=status.HTTP_404_NOT_FOUND)

@api_view(['POST'])
@permission_classes([IsAuthenticated])
def handle_admin_approval(request):
"""
Approve or reject a request by the IWD Admin.
"""
data = request.data
action = data.get('action')

fileid = data.get('fileid')
request_id = File.objects.get(id=fileid).src_object_id

remarks = data.get('remarks')
attachment = request.FILES.get('file')
receiver_desg, receiver_user = data.get('designation').split('|')

if not fileid:
return Response({'error': 'File ID not provided'}, status=status.HTTP_400_BAD_REQUEST)

forward_file(
file_id=fileid,
receiver=receiver_user,
receiver_designation=receiver_desg,
file_extra_JSON={"message": "Request forwarded."},
remarks=remarks,
file_attachment=attachment,
)
receiver_user_obj = get_object_or_404(User, username=receiver_user)
iwd_notif(request.user, receiver_user_obj, "file_forward")
message = ""
print(data)

if not request_id or not action:
return Response({'error': 'Request ID and action are required'}, status=status.HTTP_400_BAD_REQUEST)

if action == "approve":
Requests.objects.filter(id=request_id).update(iwdAdminApproval=1, status="Approved by IWD Admin")
return Response({'message': 'Request approved by IWD Admin'}, status=status.HTTP_200_OK)
elif action == "reject":
Requests.objects.filter(id=request_id).update(iwdAdminApproval=-1, status="Rejected by IWD Admin")
return Response({'message': 'Request rejected by IWD Admin'}, status=status.HTTP_200_OK)
else:
return Response({'error': 'Invalid action'}, status=status.HTTP_400_BAD_REQUEST)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.5 on 2025-03-28 18:56

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('iwdModuleV2', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='requests',
name='iwdAdminApproval',
field=models.IntegerField(default=0),
),
]
1 change: 1 addition & 0 deletions FusionIIIT/applications/iwdModuleV2/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ class Requests(models.Model):
area = models.CharField(max_length=200)
requestCreatedBy = models.CharField(max_length=200)
engineerProcessed = models.IntegerField(default=0)
iwdAdminApproval = models.IntegerField(default=0)
directorApproval = models.IntegerField(default=0)
deanProcessed = models.IntegerField(default=0)
status = models.CharField(max_length=200)
Expand Down