Skip to content

Commit

Permalink
added feature for adding courses for acadadmin without providing the …
Browse files Browse the repository at this point in the history
…batch
  • Loading branch information
harshuln123 committed Jan 23, 2025
1 parent 16fd1a3 commit a8b2cb6
Show file tree
Hide file tree
Showing 5 changed files with 411 additions and 0 deletions.
2 changes: 2 additions & 0 deletions FusionIIIT/applications/academic_procedures/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
url(r'^acad_person/branch_change/$',
views.acad_branch_change, name='acad_branch_change'),
url(r'^stu/', views.academic_procedures_student),
url(r'^course_reg_receipt/', views.generate_course_registration_receipt, name='Course_reg_PDF1'),
url(r'^fac/', views.academic_procedures_faculty, name='faculty_procedures'),
url(r'^account/$', views.account),
url(r'^addThesis/$', views.add_thesis, name='add_thesis'),
Expand Down Expand Up @@ -65,6 +66,7 @@
url(r'^mdue/$', views.mdue),
url(r'^assis_stat/$', views.assis_stat),
url(r'^acad_person/allot_courses/' , views.allot_courses, name='allot_courses'),
url(r'^acad_person/allot_courses_after_add_and_drop/' , views.allot_courses_after_add_and_drop, name='allot_courses_after_add_and_drop'),

url(r'^acad_person/get_next_sem_courses/' , views.get_next_sem_courses , name = 'get_next_sem_courses'),

Expand Down
70 changes: 70 additions & 0 deletions FusionIIIT/applications/academic_procedures/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1743,6 +1743,54 @@ def allot_courses(request):
# return HttpResponse("Fail")


@login_required(login_url='/accounts/login')
def allot_courses_after_add_and_drop(request):
if user_check(request):
return HttpResponseRedirect('/academic-procedures/main')


try:
if request.method == 'POST' and request.FILES:
profiles=request.FILES['allotedCourses']
sem_no=int(request.POST['semester'])
working_year =int(request.POST['working_year'])
excel = xlrd.open_workbook(file_contents=profiles.read())
sheet=excel.sheet_by_index(0)
course_registrations=[]
for i in range(1,sheet.nrows):
roll_no = str(sheet.cell(i,0).value).split(".")[0]
course_slot_name = sheet.cell_value(i,1)
course_code = sheet.cell_value(i,2)
try:

user=User.objects.get(username=roll_no)
user_info = ExtraInfo.objects.get(user=user)
student = Student.objects.get(id=user_info)
batch=student.batch_id
sem_id=Semester.objects.get(curriculum=batch.curriculum,semester_no=sem_no)
course_slot=CourseSlot.objects.get(name=course_slot_name.strip(),semester=sem_id)
course = course_slot.courses.get(code=course_code.strip())
except Exception as e:
print('----------------------' , e)

courseregistration=course_registration(working_year=working_year,course_id=course,semester_id=sem_id,student_id=student,course_slot_id=course_slot)
course_registrations.append(courseregistration)


try:
course_registration.objects.bulk_create(course_registrations)
messages.success(request, 'Successfully uploaded!')
return HttpResponseRedirect('/academic-procedures/main')
# return HttpResponse("Success")
except Exception as e:
messages.error(request, 'Error: '+str(e))
return HttpResponseRedirect('/academic-procedures/main')
# return HttpResponse("Success")
except Exception as e:
messages.error(request, 'Error: Query does not match. Please check if all the data input is in the correct format.')
return HttpResponseRedirect('/academic-procedures/main')



@login_required
def user_check(request):
Expand Down Expand Up @@ -3266,6 +3314,28 @@ def generate_grade_sheet_pdf(request):
return response
return HttpResponse("PDF could not be generated")

@login_required(login_url='/accounts/login')
def generate_course_registration_receipt(request):

current_user = request.user
current_user = ExtraInfo.objects.all().filter(user=current_user).first()
current_user = Student.objects.all().filter(id = current_user.id).first()

batch = current_user.batch_id
curr_id = batch.curriculum
curr_sem_id = Semester.objects.get(curriculum = curr_id, semester_no = current_user.curr_semester_no)
courses = course_registration.objects.filter(student_id = current_user, semester_id = curr_sem_id)
context = {
'current_courseregistrations': courses,
'semester_no': current_user.curr_semester_no,
'name': request.user.first_name + request.user.last_name,
'roll_no' : current_user.id_id,
'batch': batch.name+' '+str(batch.year),
'branch': curr_id.name.split(' ')[0]
}
return render(request, '../templates/academic_procedures/course_registration_receipt.html',
context
)

def get_spi(course_list,grade_list):
spi = 0.0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
{% load static %}
{% block allot_courses_after_add_and_drop %}

{% if messages %}
<ul class="messages">
{% for message in messages %}
<h2>
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
</h2>
{% endfor %}
</ul>
{% endif %}

<div class="ui pointing secondary menu">
<a class="active item" data-tab="allotment">
Allot Student Courses After Add and Drop
</a>
</div>



<div class="ui active tab segment" data-tab="allotment">

<form class="ui form" method="POST" action='/academic-procedures/acad_person/allot_courses_after_add_and_drop/'
enctype="multipart/form-data" id='allot_courses_form_after_add_and_drop'>
{% csrf_token %}
<div class="field">
<h4 class="ui blue header">Note : Provide the data in Excel Sheet in following format:</h4>
RollNo | CourseSlot Name | CourseCode
<h4 class="ui dividing header"><a href="../media/Administrator/academic_procedures/sample_courses_allotment.xls">Download</a>
the sample Excel, fill the data accordingly and then upload the same</h4>
</div>

<div class="field">
<label>Semester</label>
<select class="ui dropdown" required="true" name="semester">
<option value="NULL" class="sem">Select Semester</option>
<option value="1" class="sem">1</option>
<option value="2" class="sem">2</option>
<option value="3" class="sem">3</option>
<option value="4" class="sem">4</option>
<option value="5" class="sem">5</option>
<option value="6" class="sem">6</option>
<option value="7" class="sem">7</option>
<option value="8" class="sem">8</option>
</select>
</div>
<div class="field">
<label>Working Year</label>
<input type="number" id="working_year" name="working_year" required="true">

</div>

<div class="field">
<input type="file" name="allotedCourses" required
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" id="alloted_courses">
</div>

<div class="field">
<button class="ui primary button" type="submit"><i class="upload icon"></i> Upload</button>
</div>
</form>

</div>
{% endblock %}

{% block javascript %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript">

$(function() {
$("#allot_courses_form_after_add_and_drop").submit(function(event) {

event.preventDefault();
var friendForm = $(this);

var posting = $.post( friendForm.attr('action'), friendForm.serialize() );
// if success:
posting.done(function(data) {
alert('Posted');
window.location = "/academic-procedures/main/";
});
// if failure
posting.fail(function(data) {
alert('Queries does not match');
// window.location = "/academic-procedures/main/";
});
});
});

// $(document).ready(function () {
// $(document).on('submit','#allot_courses_form',function (event) {
// event.preventDefault();
// $.ajax({
// url: '/academic_procedures/acad_person/allot_courses/',
// type: 'POST',
// data: {
// allotedCourses: $('#alloted_courses').val(),
// batch: $('#batch').val(),
// semester: $('.sem').val(),
// csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
// },
// success: function (response) {
// console.log(response)
// console.log(data)
// if(response.result==='Success'){
// $( '#allot_courses_form' ).each(function(){
// this.reset();
// });
// }
// else{
// alert(response.message);
// }
// }
// });
// });
// });


</script>
{% endblock %}


{% comment %}
Display course slot codes, and their course as per batch and semester
{% endcomment %}
Loading

0 comments on commit a8b2cb6

Please sign in to comment.