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
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.5 on 2024-03-15 21:00

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('globals', '0014_auto_20240312_1930'),
]

operations = [
migrations.AlterField(
model_name='extrainfo',
name='user_status',
field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 3.1.5 on 2024-03-15 21:53

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('globals', '0015_auto_20240315_2100'),
('globals', '0018_merge_20240315_1500'),
]

operations = [
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.5 on 2024-03-15 21:58

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('globals', '0019_merge_20240315_2153'),
]

operations = [
migrations.AlterField(
model_name='extrainfo',
name='user_status',
field=models.CharField(choices=[('PRESENT', 'PRESENT'), ('NEW', 'NEW')], default='PRESENT', max_length=50),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.5 on 2024-03-15 21:00

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('hostel_management', '0015_merge_20240220_1917'),
]

operations = [
migrations.AddField(
model_name='hostelleave',
name='remark',
field=models.TextField(blank=True, null=True),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 3.1.5 on 2024-03-15 21:53

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('hostel_management', '0018_hostelhistory'),
('hostel_management', '0016_hostelleave_remark'),
]

operations = [
]
1 change: 1 addition & 0 deletions FusionIIIT/applications/hostel_management/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ class HostelLeave(models.Model):
start_date = models.DateField(default=timezone.now)
end_date = models.DateField()
status = models.CharField(max_length=20, default='pending')
remark = models.TextField(blank=True, null=True)


def __str__(self):
Expand Down
7 changes: 5 additions & 2 deletions FusionIIIT/applications/hostel_management/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -706,14 +706,16 @@ def create_hostel_leave(request):
reason = data.get('reason')
start_date = data.get('start_date', timezone.now())
end_date = data.get('end_date')


# Create HostelLeave object and save to the database
leave = HostelLeave.objects.create(
student_name=student_name,
roll_num=roll_num,
reason=reason,
start_date=start_date,
end_date=end_date
end_date=end_date,

)

return JsonResponse({'message': 'HostelLeave created successfully'}, status=status.HTTP_201_CREATED)
Expand Down Expand Up @@ -1597,8 +1599,9 @@ def update_leave_status(request):
try:
leave = HostelLeave.objects.get(id=leave_id)
leave.status = status
leave.remark = request.POST.get('remark')
leave.save()
return JsonResponse({'status': status, 'message': 'Leave status updated successfully.'})
return JsonResponse({'status': status,'remarks':leave.remark,'message': 'Leave status updated successfully.'})
except HostelLeave.DoesNotExist:
return JsonResponse({'status': 'error', 'message': 'Leave not found.'}, status=404)
else:
Expand Down
109 changes: 71 additions & 38 deletions FusionIIIT/templates/hostelmanagement/all_leave_data.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{% block leave_requests %}
<h2 align="center">All Leave Requests</h2>
<div class="textLoader" style="max-height: 64vh; overflow-y: auto; overflow-x: auto;">
<h2 align="center">All Leave Requests</h2>
<div class="textLoader" style="max-height: 64vh; overflow-y: auto; overflow-x: auto;">
<table border="1" class="ui table">
<thead>
<tr>
Expand All @@ -11,70 +11,103 @@ <h2 align="center">All Leave Requests</h2>
<th>End Date</th>
<th>Status</th>
<th>Actions</th>
<th>Remark</th>
</tr>
</thead>
<tbody>
{% for leave in all_leaves %}
<!-- {% if leave.status != 'Rejected' %} -->
<tr>
<td>{{ leave.student_name }}</td>
<td>{{ leave.roll_num }}</td>
<td>{{ leave.reason }}</td>
<td>{{ leave.start_date }}</td>
<td>{{ leave.end_date }}</td>
<td>{{ leave.status }}</td>
<td class="flex-container">

<td class="">

<!-- {%if leave.status == 'pending' %} -->
<form class="status-form">

{% csrf_token %}
<input type="hidden" name="leave_id" value="{{ leave.id }}">
<input type="hidden" name="status" value="Approved">
{%if leave.status == 'pending' %}
<button type="button" class="ui status-update positive button mini">Approve</button>
{%endif%}
</form>
<form class="status-form">
{% csrf_token %}
<input type="hidden" name="leave_id" value="{{ leave.id }}">
<input type="hidden" name="status" value="Rejected">
<button type="button" style="margin-top: 10px;" class="ui status-update negative button tiny">Reject</button>
<textarea name="remark" placeholder="Enter Remark" style="display: none;" required></textarea>
<button type="button" style="margin-top: 10px;"
class="ui status-update negative button tiny reject-button">Reject</button>
</form>
<!-- {%else%}
<p>to be hidden</p>
{%endif%} -->


</td>
<td>{{leave.remark}}</td>
</tr>
<!-- {% endif %} -->
{% endfor %}
</tbody>
</table>
</div>
<style>
.flex-container{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
</style>
</div>
<style>
.flex-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
</style>

<script>
$(document).ready(function () {
$('.reject-button').click(function () {
// Show the remark field when Reject button is clicked
$(this).closest('form').find('textarea[name="remark"]').show();
});

$('.status-update').click(function () {
var form = $(this).closest('form');
var formData = form.serialize();
var status = form.find('input[name="status"]').val();
if (status === 'Rejected') {
var remark = form.find('textarea[name="remark"]').val().trim();
if (!remark) {
alert('Please enter a remark to reject the leave.');
return;
}
// Append remark to formData
formData += '&remark=' + encodeURIComponent(remark);
}

// Disable the buttons to prevent multiple submissions
form.find('button').prop('disabled', true);

<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> -->
<script>
$(document).ready(function () {
$('.status-update').click(function () {
var form = $(this).closest('form');
var formData = form.serialize();
$.ajax({
type: 'POST',
url: '/hostelmanagement/update_leave_status/',
data: formData,
success: function (response) {
// Update the status cell text
var statusCell = form.closest('tr').find('td:nth-child(6)');
statusCell.text(response.status);
// Show success message
alert('Leave status updated successfully.');
},
error: function (xhr, status, error) {
// Show error message
alert('Error occurred while updating status.');
}
});
$.ajax({
type: 'POST',
url: '/hostelmanagement/update_leave_status/',
data: formData,
success: function (response) {
// Update the status cell text
var statusCell = form.closest('tr').find('td:nth-child(6)');
statusCell.text(response.status);
// Show success message
alert('Leave status updated successfully.');
},
error: function (xhr, status, error) {
// Show error message
alert('Error occurred while updating status.');
// Re-enable the buttons in case of an error
form.find('button').prop('disabled', false);
}
});
});
</script>
});
</script>
{% endblock %}
Loading