diff --git a/.idea/Fusion.iml b/.idea/Fusion.iml index f42385afa..ddddb4a18 100644 --- a/.idea/Fusion.iml +++ b/.idea/Fusion.iml @@ -17,7 +17,7 @@ - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f37121ce..542dc8dc3 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@ - + diff --git a/FusionIIIT/applications/eis/models.py b/FusionIIIT/applications/eis/models.py index e55712ab9..5540b7b7f 100644 --- a/FusionIIIT/applications/eis/models.py +++ b/FusionIIIT/applications/eis/models.py @@ -13,8 +13,8 @@ class emp_visits(models.Model): place = models.CharField(max_length=500, default=" ") purpose = models.CharField(max_length=500, default=" ") v_date = models.DateField(null=True,blank=True) - start_date = models.DateField(null=True,blank=True) - end_date = models.DateField(null=True,blank=True) + start_date = models.DateField(null=False,blank=True) + end_date = models.DateField(null=False,blank=True) entry_date = models.DateField(null=True,blank=True, default=datetime.datetime.now) def __str__(self): @@ -29,8 +29,8 @@ class emp_techtransfer(models.Model): pf_no = models.IntegerField() details = models.CharField(max_length=500, default=" ") date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) - start_date = models.DateField(null=True,blank=True) - end_date = models.DateField(null=True,blank=True) + start_date = models.DateField(null=False,blank=True) + end_date = models.DateField(null=False,blank=True) class emp_session_chair(models.Model): @@ -46,8 +46,8 @@ class emp_session_chair(models.Model): for r in range(1, 13): MONTH_CHOICES.append((r, r)) a_month = models.IntegerField(('Month'), choices=MONTH_CHOICES, null=True, blank=True, default=1) - start_date = models.DateField(null=True, blank=True) - end_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + end_date = models.DateField(null=False, blank=True) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) remarks = models.CharField(default = " ", max_length=1000) @@ -71,8 +71,8 @@ class emp_research_projects(models.Model): ('Completed', 'Completed') ) status = models.CharField(max_length = 10, choices = STATUS_TYPE_CHOICES) - start_date = models.DateField(null=True, blank=True) - finish_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + finish_date = models.DateField(null=False, blank=True) date_submission = models.DateField(null=True, blank=True) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) @@ -103,8 +103,8 @@ class emp_research_papers(models.Model): is_sci = models.CharField(max_length=6, choices=IS_SCI_TYPE_CHOICES, null=True, blank=True) isbn_no = models.CharField(max_length=250, null=True, blank=True) doi = models.CharField(max_length=1000,null=True, blank=True) - start_date = models.DateField(null=True, blank=True) - end_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + end_date = models.DateField(null=False, blank=True) date_acceptance = models.DateField(null=True, blank=True) date_publication = models.DateField(null=True, blank=True) YEAR_CHOICES = [] @@ -178,8 +178,8 @@ class emp_patents(models.Model): MONTH_CHOICES.append((r, r)) a_month = models.IntegerField(('Month'), choices=MONTH_CHOICES, null=True, blank=True, default=1) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) - start_date = models.DateField(null=True,blank=True) - end_date = models.DateField(null=True,blank=True) + start_date = models.DateField(null=False,blank=True) + end_date = models.DateField(null=False,blank=True) def __str__(self): return 'PF No.: {} Status: {} Title: {}'.format(self.pf_no,self.status, self.title) @@ -202,8 +202,8 @@ class emp_mtechphd_thesis(models.Model): MONTH_CHOICES.append((r, r)) a_month = models.IntegerField(('Month'), choices=MONTH_CHOICES, null=True, blank=True, default=1) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) - start_date = models.DateField(null=True,blank=True) - end_date = models.DateField(null=True,blank=True) + start_date = models.DateField(null=False,blank=True) + end_date = models.DateField(null=False,blank=True) semester=models.IntegerField(default = 1, blank=True, null=True) STATUS_TYPE_CHOICES = ( ('Awarded', 'Awarded'), @@ -238,8 +238,8 @@ class emp_keynote_address(models.Model): for r in range(1, 13): MONTH_CHOICES.append((r, r)) a_month = models.IntegerField(('Month'), choices=MONTH_CHOICES, null=True, blank=True, default=1) - start_date = models.DateField(null=True, blank=True) - end_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + end_date = models.DateField(null=False, blank=True) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) def __str__(self): @@ -291,8 +291,8 @@ class emp_event_organized(models.Model): ('Co-Convener', 'Co-Convener'), ) role = models.CharField(max_length=11, choices=ROLE_TYPE_CHOICES) - start_date = models.DateField(null=True, blank=True) - end_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + end_date = models.DateField(null=False, blank=True) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) def __str__(self): @@ -306,8 +306,8 @@ class emp_consultancy_projects(models.Model): title = models.CharField(max_length=1000) client = models.CharField(max_length=1000) financial_outlay = models.IntegerField() - start_date = models.DateField(null=True, blank=True) - end_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + end_date = models.DateField(null=False, blank=True) duration = models.CharField(max_length=500, null=True, blank=True) date_entry = models.DateField(null=True, blank=True, default=datetime.datetime.now) STATUS_TYPE_CHOICES = ( @@ -334,8 +334,8 @@ class emp_confrence_organised(models.Model): for r in range(1, 13): MONTH_CHOICES.append((r, r)) a_month = models.IntegerField(('Month'), choices=MONTH_CHOICES, null=True, blank=True, default=1) - start_date = models.DateField(null=True, blank=True) - end_date = models.DateField(null=True, blank=True) + start_date = models.DateField(null=False, blank=True) + end_date = models.DateField(null=False, blank=True) date_entry = models.DateField(default=datetime.datetime.now, null=True, blank=True) ROLE1_TYPE_CHOICES = ( ('Advisary Committee', 'Advisary Committee'), diff --git a/FusionIIIT/applications/eis/views.py b/FusionIIIT/applications/eis/views.py index 2b50449a6..76a4532c2 100644 --- a/FusionIIIT/applications/eis/views.py +++ b/FusionIIIT/applications/eis/views.py @@ -582,6 +582,7 @@ def pg_insert(request): eis = emp_mtechphd_thesis() else: eis = get_object_or_404(emp_mtechphd_thesis, id=request.POST.get('pg_id')) + eis.user = request.user eis.pf_no = pf eis.title = request.POST.get('title') eis.s_year = request.POST.get('s_year') @@ -601,6 +602,7 @@ def phd_insert(request): eis = emp_mtechphd_thesis() else: eis = get_object_or_404(emp_mtechphd_thesis, id=request.POST.get('phd_id')) + eis.user = request.user eis.pf_no = pf eis.degree_type = 2 eis.title = request.POST.get('title') @@ -621,6 +623,7 @@ def fvisit_insert(request): eis = emp_visits() else: eis = get_object_or_404(emp_visits, id=request.POST.get('fvisit_id')) + eis.user = request.user eis.pf_no = pf eis.v_type = 2 eis.country = request.POST.get('country').upper() @@ -646,6 +649,7 @@ def ivisit_insert(request): eis = emp_visits() else: eis = get_object_or_404(emp_visits, id=request.POST.get('ivisit_id')) + eis.user = request.user eis.pf_no = pf eis.v_type = 1 eis.country = request.POST.get('country2') @@ -870,6 +874,7 @@ def conference_insert(request): user = get_object_or_404(ExtraInfo, user=request.user) pf = user.id eis = emp_research_papers() + eis.user = request.user eis.pf_no = pf eis.rtype = 'Conference' eis.authors = request.POST.get('authors3') @@ -1025,6 +1030,7 @@ def book_insert(request): user = get_object_or_404(ExtraInfo, user=request.user) pf = user.id eis = emp_published_books() + eis.user = request.user eis.pf_no = pf eis.p_type = request.POST.get('book_p_type') eis.title = request.POST.get('book_title') @@ -1051,6 +1057,7 @@ def consym_insert(request): user = get_object_or_404(ExtraInfo, user=request.user) pf = user.id eis = emp_confrence_organised() + eis.user = request.user eis.pf_no = pf eis.name = request.POST.get('conference_name') eis.venue = request.POST.get('conference_venue') @@ -1127,6 +1134,7 @@ def event_insert(request): else: eis = get_object_or_404(emp_event_organized, id=request.POST.get('event_id')) eis.pf_no = pf + eis.user = request.user eis.type = request.POST.get('event_type') if(eis.type == 'Any Other'): if(request.POST.get('myDIV')!= None or request.POST.get('myDIV') != ""): @@ -1186,6 +1194,7 @@ def award_insert(request): else: eis = get_object_or_404(emp_achievement, id=request.POST.get('ach_id')) eis.pf_no = pf + eis.user = request.user eis.a_type = request.POST.get('type') if(request.POST.get('a_day') != None and request.POST.get('a_day') != ""): eis.a_day = request.POST.get('a_day') @@ -1206,6 +1215,7 @@ def talk_insert(request): eis = emp_expert_lectures() else: eis = get_object_or_404(emp_expert_lectures, id=request.POST.get('lec_id')) + eis.user = request.user eis.pf_no = pf eis.l_type = request.POST.get('type') eis.place = request.POST.get('place') @@ -1229,6 +1239,7 @@ def chaired_insert(request): eis = emp_session_chair() else: eis = get_object_or_404(emp_session_chair, id=request.POST.get('ses_id')) + eis.user = request.user eis.pf_no = pf eis.event = request.POST.get('event') eis.name = request.POST.get('name') @@ -1253,6 +1264,7 @@ def keynote_insert(request): eis = emp_keynote_address() else: eis = get_object_or_404(emp_keynote_address, id=request.POST.get('keyid')) + eis.user = request.user eis.pf_no = pf eis.type = request.POST.get('type') eis.name = request.POST.get('name') @@ -1277,6 +1289,7 @@ def project_insert(request): eis = emp_research_projects() else: eis = get_object_or_404(emp_research_projects, id=request.POST.get('project_id')) + eis.user = request.user eis.pf_no = pf eis.pi = request.POST.get('pi') eis.co_pi = request.POST.get('co_pi') @@ -1312,13 +1325,16 @@ def project_insert(request): return redirect('/profile/?page4=1') def consult_insert(request): + print("=======================") user = get_object_or_404(ExtraInfo, user=request.user) pf = user.id - + print(">>>>>>>.",user,type(user)) + print(">>>>>>>",request.user,type(request.user)) if (request.POST.get('consultancy_id')==None or request.POST.get('consultancy_id')==""): eis = emp_consultancy_projects() else: eis = get_object_or_404(emp_consultancy_projects, id=request.POST.get('consultancy_id')) + eis.user = request.user eis.pf_no = pf eis.consultants = request.POST.get('consultants') eis.client = request.POST.get('client') @@ -1351,6 +1367,7 @@ def patent_insert(request): eis = emp_patents() else: eis = get_object_or_404(emp_patents, id=request.POST.get('patent_id')) + eis.user = request.user eis.pf_no = pf eis.p_no = request.POST.get('p_no') eis.earnings = request.POST.get('earnings') diff --git a/FusionIIIT/applications/establishment/models.py b/FusionIIIT/applications/establishment/models.py index edc08e481..ba919cc49 100644 --- a/FusionIIIT/applications/establishment/models.py +++ b/FusionIIIT/applications/establishment/models.py @@ -1,7 +1,9 @@ +from pickle import TRUE from django.db import models from django.contrib.auth.models import User from datetime import datetime from dateutil.relativedelta import relativedelta +from django.core.exceptions import ValidationError from applications.globals.models import ExtraInfo, HoldsDesignation, Designation class Constants: @@ -137,7 +139,7 @@ class Ltc_application(models.Model): applicant = models.ForeignKey(User, on_delete=models.CASCADE) pf_number = models.CharField(max_length=50, default='') basic_pay = models.IntegerField(blank=True) - leave_start = models.DateField() + leave_start = models.DateField(null=True) leave_end = models.DateField() family_departure_date = models.DateField() leave_nature = models.CharField(max_length=50, default='') @@ -259,8 +261,8 @@ class Appraisal(models.Model): publications = models.CharField(max_length=200, blank=True, null=True, default='') conferences_meeting_attended = models.CharField(max_length=200, blank=True, null=True, default='') conferences_meeting_organized = models.CharField(max_length=200, blank=True, null=True, default='') - admin_assign=models.CharField(max_length=20, blank=True, null=True, default='') - sevice_to_ins=models.CharField(max_length=20, blank=True, null=True, default='') + admin_assign=models.CharField(max_length=200, blank=True, null=True, default='') + sevice_to_ins=models.CharField(max_length=200, blank=True, null=True, default='') extra_info = models.CharField(max_length=200, blank=True, null=True, default='') faculty_comments= models.CharField(max_length=200, blank=True, null=True, default='') start_date = models.DateField(null=True,blank=True) diff --git a/FusionIIIT/applications/establishment/urls.py b/FusionIIIT/applications/establishment/urls.py index 3754c233b..d5b0cc456 100644 --- a/FusionIIIT/applications/establishment/urls.py +++ b/FusionIIIT/applications/establishment/urls.py @@ -5,9 +5,9 @@ urlpatterns = [ url(r'^$', views.establishment, name='establishment'), - url(r'^leave/', include('applications.leave.urls')), + # url(r'^leave/', include('applications.leave.urls')), url(r'cpda/', views.cpda, name='cpda'), url(r'ltc/', views.ltc, name='ltc'), url(r'appraisal/', views.appraisal, name='appraisal') - + ] \ No newline at end of file diff --git a/FusionIIIT/applications/establishment/views.py b/FusionIIIT/applications/establishment/views.py index 9b0cb9e01..e958b6ffd 100644 --- a/FusionIIIT/applications/establishment/views.py +++ b/FusionIIIT/applications/establishment/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render from django.contrib import messages from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User @@ -13,6 +13,7 @@ from .models import * from .forms import * import numpy as np +from django.http import HttpResponse, HttpResponseRedirect from dateutil.relativedelta import relativedelta def initial_checks(request): @@ -29,6 +30,7 @@ def is_admin(request): def is_eligible(request): return True + def is_hod(request): """ function to check if the user has designation "HOD". @@ -42,6 +44,30 @@ def is_hod(request): return True return False + +# def is_student(request): + """ + function to check if the user has designation "student". + """ + """ user_dsg = list(HoldsDesignation.objects.filter(user=request.user)) + if(len(user_dsg)==0): + return False + for i in range(len(user_dsg)): + designation = user_dsg[i].designation.name + if("student" in designation): + return True + return False """ + +def is_faculty(request): + user = get_object_or_404(ExtraInfo, user=request.user) + return user.user_type=='faculty' + + +def is_staff(request): + user = get_object_or_404(ExtraInfo, user=request.user) + return user.user_type=='staff' + + def is_registrar(request): """ function to check if the user has designation "Registrar". @@ -55,6 +81,7 @@ def is_registrar(request): return True return False + def is_director(request): """ function to check if the user has designation "Director". @@ -68,6 +95,7 @@ def is_director(request): return True return False + def is_cpda(dictx): """ function to check if the application is CPDA. @@ -97,20 +125,24 @@ def is_appraisal(dictx): return True return False + def handle_cpda_admin(request): """ Function handles the request of assigning/re-assigning reviewers of CPDA Application. """ if 'cpda_assign_form' in request.POST: - app_id = request.POST.get('app_id') - remarks = request.POST.get('remarks') - application = Cpda_application.objects.select_related('applicant').get(id=app_id) - application.tracking_info.current_reviewer_id+=1 - application.tracking_info.remarks_rev2 = remarks - application.tracking_info.review_status = 'under_review' - application.tracking_info.save() - # notify - messages.success(request, 'Applicaiton Verification successfull!') + try: + app_id = request.POST.get('app_id') + remarks = request.POST.get('remarks') + application = Cpda_application.objects.select_related('applicant').get(id=app_id) + application.tracking_info.current_reviewer_id+=1 + application.tracking_info.remarks_rev2 = remarks + application.tracking_info.review_status = 'under_review' + application.tracking_info.save() + # notify + messages.success(request, 'Applicaiton Verification successfull!') + except Exception as e: + messages.error(request,e) @@ -118,26 +150,35 @@ def handle_ltc_admin(request): """ Function handles the request of assigning/re-assigning reviewers of LTC Application. """ + if 'ltc_assign_form' in request.POST: - app_id = request.POST.get('app_id') - remarks = request.POST.get('remarks') - # assign the app to the reviewer - #finding Director - designation = Designation.objects.filter(name = 'Director') - holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) - dir_desig=designation[0] - director = holds_designation[0].user - # Getting reviewer designation - application = Ltc_application.objects.select_related('applicant').get(id=app_id) - application.tracking_info.reviewer_id = director - application.tracking_info.reviewer_desig = dir_desig - application.tracking_info.admin_remarks = remarks - application.tracking_info.review_status = 'under_review' - application.tracking_info.save() - application.save() - # add notif - messages.success(request, ' Review Submitted successfully!') - + try: + app_id = request.POST.get('app_id') + remarks = request.POST.get('remarks') + # assign the app to the reviewer + #finding Director + designation = Designation.objects.filter(name = 'Director') + holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) + dir_desig=designation[0] + director = holds_designation[0].user + # print(designation) + # print(holds_designation) + # print(dir_desig) + # print(director) + # Getting reviewer designation + application = Ltc_application.objects.select_related('applicant').get(id=app_id) + application.tracking_info.reviewer_id = director + application.tracking_info.reviewer_design = dir_desig + application.tracking_info.admin_remarks = remarks + application.tracking_info.review_status = 'under_review' + application.tracking_info.save() + application.save() + # print("application",application) + # print("application.tracking_info",application.tracking_info) + # add notif + messages.success(request, ' Review Submitted successfully!') + except Exception as e: + messages.error(request,e) # elif app_id: # # update the status of app @@ -158,480 +199,537 @@ def handle_ltc_admin(request): elif 'ltc_new_eligible_user' in request.POST: - username = request.POST.get('username') - - if not User.objects.filter(username=username).exists(): - messages.error(request, 'The given user does not exist') - return - - user_id = User.objects.get(username=username) - if Ltc_eligible_user.objects.filter(user=user_id).exists(): - messages.error(request, 'This user is already eligible for availing LTC') - return - - joining_date = request.POST.get('joining_date') - current_block_size = request.POST.get('current_block_size') - total_ltc_allowed = request.POST.get('total_ltc_allowed') - hometown_ltc_allowed = request.POST.get('hometown_ltc_allowed') - elsewhere_ltc_allowed = request.POST.get('elsewhere_ltc_allowed') - hometown_ltc_availed = request.POST.get('hometown_ltc_availed') - elsewhere_ltc_availed = request.POST.get('elsewhere_ltc_availed') - - eligible_user = Ltc_eligible_user.objects.create( - user = user_id, - date_of_joining = joining_date, - current_block_size = current_block_size, - total_ltc_allowed = total_ltc_allowed, - hometown_ltc_allowed = hometown_ltc_allowed, - elsewhere_ltc_allowed = elsewhere_ltc_allowed, - hometown_ltc_availed = hometown_ltc_availed, - elsewhere_ltc_availed = elsewhere_ltc_availed - ) - messages.success(request, 'New LTC eligible user succesfully created') + try: + username = request.POST.get('username') + + if not User.objects.filter(username=username).exists(): + messages.error(request, 'The given user does not exist') + return + + user_id = User.objects.get(username=username) + if Ltc_eligible_user.objects.filter(user=user_id).exists(): + messages.error(request, 'This user is already eligible for availing LTC') + return + + joining_date = request.POST.get('joining_date') + current_block_size = request.POST.get('current_block_size') + total_ltc_allowed = request.POST.get('total_ltc_allowed') + hometown_ltc_allowed = request.POST.get('hometown_ltc_allowed') + elsewhere_ltc_allowed = request.POST.get('elsewhere_ltc_allowed') + hometown_ltc_availed = request.POST.get('hometown_ltc_availed') + elsewhere_ltc_availed = request.POST.get('elsewhere_ltc_availed') + + eligible_user = Ltc_eligible_user.objects.create( + user = user_id, + date_of_joining = joining_date, + current_block_size = current_block_size, + total_ltc_allowed = total_ltc_allowed, + hometown_ltc_allowed = hometown_ltc_allowed, + elsewhere_ltc_allowed = elsewhere_ltc_allowed, + hometown_ltc_availed = hometown_ltc_availed, + elsewhere_ltc_availed = elsewhere_ltc_availed + ) + messages.success(request, 'New LTC eligible user succesfully created') + except Exception as e: + messages.error(request,e) elif 'ltc_edit_eligible_user' in request.POST: - username = request.POST.get('username') - if not User.objects.filter(username=username).exists(): - messages.error(request, 'The given user does not exist') - return - - user_id = User.objects.get(username=username) - joining_date = request.POST.get('joining_date') - current_block_size = request.POST.get('current_block_size') - total_ltc_allowed = request.POST.get('total_ltc_allowed') - hometown_ltc_allowed = request.POST.get('hometown_ltc_allowed') - elsewhere_ltc_allowed = request.POST.get('elsewhere_ltc_allowed') - hometown_ltc_availed = request.POST.get('hometown_ltc_availed') - elsewhere_ltc_availed = request.POST.get('elsewhere_ltc_availed') - - eligible_user = Ltc_eligible_user.objects.select_related('user').get(user=user_id) - eligible_user.date_of_joining = joining_date - eligible_user.current_block_size = current_block_size - eligible_user.total_ltc_allowed = total_ltc_allowed - eligible_user.hometown_ltc_allowed = hometown_ltc_allowed - eligible_user.elsewhere_ltc_allowed = elsewhere_ltc_allowed - eligible_user.hometown_ltc_availed = hometown_ltc_availed - eligible_user.elsewhere_ltc_availed = elsewhere_ltc_availed - eligible_user.save() - messages.success(request, 'Eligible LTC user details successfully updated.') + try: + username = request.POST.get('username') + if not User.objects.filter(username=username).exists(): + messages.error(request, 'The given user does not exist') + return + + user_id = User.objects.get(username=username) + joining_date = request.POST.get('joining_date') + current_block_size = request.POST.get('current_block_size') + total_ltc_allowed = request.POST.get('total_ltc_allowed') + hometown_ltc_allowed = request.POST.get('hometown_ltc_allowed') + elsewhere_ltc_allowed = request.POST.get('elsewhere_ltc_allowed') + hometown_ltc_availed = request.POST.get('hometown_ltc_availed') + elsewhere_ltc_availed = request.POST.get('elsewhere_ltc_availed') + + eligible_user = Ltc_eligible_user.objects.select_related('user').get(user=user_id) + eligible_user.date_of_joining = joining_date + eligible_user.current_block_size = current_block_size + eligible_user.total_ltc_allowed = total_ltc_allowed + eligible_user.hometown_ltc_allowed = hometown_ltc_allowed + eligible_user.elsewhere_ltc_allowed = elsewhere_ltc_allowed + eligible_user.hometown_ltc_availed = hometown_ltc_availed + eligible_user.elsewhere_ltc_availed = elsewhere_ltc_availed + eligible_user.save() + messages.success(request, 'Eligible LTC user details successfully updated.') + except Exception as e: + messages.error(request,e) elif 'ltc_delete_eligible_user' in request.POST: - username = request.POST.get('username') - if not User.objects.filter(username=username).exists(): - messages.error(request, 'The given user does not exist') - return - - user_id = User.objects.get(username=username) - if not Ltc_eligible_user.objects.select_related('user').filter(user=user_id).exists(): - messages.error(request, 'This user already isn\'t eligible for availing LTC') - return - - eligible_user = Ltc_eligible_user.objects.select_related('user').get(user=user_id) - eligible_user.delete() - messages.success(request, 'User successfully removed from eligible LTC users') + try: + username = request.POST.get('username') + if not User.objects.filter(username=username).exists(): + messages.error(request, 'The given user does not exist') + return + + user_id = User.objects.get(username=username) + if not Ltc_eligible_user.objects.select_related('user').filter(user=user_id).exists(): + messages.error(request, 'This user already isn\'t eligible for availing LTC') + return + + eligible_user = Ltc_eligible_user.objects.select_related('user').get(user=user_id) + eligible_user.delete() + messages.success(request, 'User successfully removed from eligible LTC users') + except Exception as e: + messages.error(request,e) def generate_cpda_hod_admin_lists(request): """ Function retrieves the admin information and related unreviewed,approved and archived CPDA applications. """ - # only requested and adjustment_pending - unreviewed_apps = (Cpda_application.objects - .select_related('applicant') - .exclude(status='rejected') - .exclude(status='finished') - .exclude(status='approved') - .order_by('-request_timestamp')) - pending_apps = [] - under_review_apps = [] - for app in unreviewed_apps: - if app.tracking_info.review_status == 'under_review': - under_review_apps.append(app) - else: - pending_apps.append(app) - - # combine assign_form object into unreviewed_app object respectively - for app in unreviewed_apps: - # if status is requested:to_assign/reviewed - if app.status == 'requested': - temp = Assign_Form(initial={'assign_status': 'requested','app_id': app.id}) - temp.fields["status"]._choices = [ - ('requested', 'Requested'), - ('approved', 'Approved'), - ('rejected', 'Rejected') - ] - temp.fields["assign_status"]._choices = [ - ('requested', 'Requested'), - ('approved', 'Approved'), - ('rejected', 'Rejected') - ] - temp.fields["accept_status"]._choices = [ - ('requested', 'Requested'), - ('approved', 'Approved'), - ('rejected', 'Rejected') - ] - - # if status is adjustments_pending:to_assign/reviewed - else: - temp = Assign_Form(initial={'assign_status': 'adjustments_pending', 'app_id': app.id}) - temp.fields["status"]._choices = [ - ('adjustments_pending', 'Adjustments Pending'), - ('approve', 'Approved') - ] - app.assign_form = temp - - # only approved - approved_apps = (Cpda_application.objects - .select_related('applicant') - .filter(status='approved') - .order_by('-request_timestamp')) - - # only rejected and finished - archived_apps = (Cpda_application.objects + try: + # only requested and adjustment_pending + unreviewed_apps = (Cpda_application.objects .select_related('applicant') + .exclude(status='rejected') + .exclude(status='finished') .exclude(status='approved') - .exclude(status='requested') - .exclude(status='adjustments_pending') .order_by('-request_timestamp')) + pending_apps = [] + under_review_apps = [] + for app in unreviewed_apps: + if app.tracking_info.review_status == 'under_review': + under_review_apps.append(app) + else: + pending_apps.append(app) + + # combine assign_form object into unreviewed_app object respectively + for app in unreviewed_apps: + # if status is requested:to_assign/reviewed + if app.status == 'requested': + temp = Assign_Form(initial={'assign_status': 'requested','app_id': app.id}) + temp.fields["status"]._choices = [ + ('requested', 'Requested'), + ('approved', 'Approved'), + ('rejected', 'Rejected') + ] + temp.fields["assign_status"]._choices = [ + ('requested', 'Requested'), + ('approved', 'Approved'), + ('rejected', 'Rejected') + ] + temp.fields["accept_status"]._choices = [ + ('requested', 'Requested'), + ('approved', 'Approved'), + ('rejected', 'Rejected') + ] + + # if status is adjustments_pending:to_assign/reviewed + else: + temp = Assign_Form(initial={'assign_status': 'adjustments_pending', 'app_id': app.id}) + temp.fields["status"]._choices = [ + ('adjustments_pending', 'Adjustments Pending'), + ('approve', 'Approved') + ] + app.assign_form = temp + + # only approved + approved_apps = (Cpda_application.objects + .select_related('applicant') + .filter(status='approved') + .order_by('-request_timestamp')) + + # only rejected and finished + archived_apps = (Cpda_application.objects + .select_related('applicant') + .exclude(status='approved') + .exclude(status='requested') + .exclude(status='adjustments_pending') + .order_by('-request_timestamp')) - reviewer_remarks={} - for app in pending_apps: - rev_list=[] - if(app.tracking_info.remarks_rev2 is None ): - break - remarks=app.tracking_info.remarks_rev2.split('#$*&') - desig=app.tracking_info.remarks_rev3.split('#$*&') - for i in range(len(remarks)): - if(remarks[i]!=''): - rev_list.append([desig[i],remarks[i]]) - reviewer_remarks[app.tracking_info.application]=rev_list - response = { - 'admin': True, - 'cpda_pending_apps': pending_apps, - 'cpda_under_review_apps': under_review_apps, - 'cpda_approved_apps': approved_apps, - 'cpda_archived_apps': archived_apps, - 'remarks_list':reviewer_remarks - } - return response + reviewer_remarks={} + for app in pending_apps: + rev_list=[] + if(app.tracking_info.remarks_rev2 is None ): + break + remarks=app.tracking_info.remarks_rev2.split('#$*&') + desig=app.tracking_info.remarks_rev3.split('#$*&') + for i in range(len(remarks)): + if(remarks[i]!=''): + rev_list.append([desig[i],remarks[i]]) + reviewer_remarks[app.tracking_info.application]=rev_list + response = { + 'admin': True, + 'cpda_pending_apps': pending_apps, + 'cpda_under_review_apps': under_review_apps, + 'cpda_approved_apps': approved_apps, + 'cpda_archived_apps': archived_apps, + 'remarks_list':reviewer_remarks + } + return response + except Exception as e: + messages.error(request,e) def generate_cpda_admin_lists(request): """ Function retrieves the admin information and related unreviewed,approved and archived CPDA applications. """ - to_review_apps = (Cpda_application.objects - .select_related('applicant') - .filter((Q(tracking_info__reviewer_id=request.user)&Q(tracking_info__current_reviewer_id=1)) - | (Q(tracking_info__reviewer_id2=request.user) & Q(tracking_info__current_reviewer_id=2)) - | (Q(tracking_info__reviewer_id3=request.user)&Q(tracking_info__current_reviewer_id=3))) - .exclude(status='rejected') - .exclude(status='finished') - .exclude(status='approved') - .filter(tracking_info__review_status='under_review') - .order_by('-request_timestamp')) - - reviewed_apps= (Cpda_application.objects.select_related('applicant') - .filter(Q(tracking_info__reviewer_id=request.user,tracking_info__current_reviewer_id__gte=2) | - Q(tracking_info__reviewer_id2=request.user,tracking_info__current_reviewer_id__gte=3) | - Q(tracking_info__reviewer_id3=request.user,tracking_info__current_reviewer_id__gte=4)) - .order_by('-request_timestamp')) + try: + to_review_apps = (Cpda_application.objects + .select_related('applicant') + .filter((Q(tracking_info__reviewer_id=request.user)&Q(tracking_info__current_reviewer_id=1)) + | (Q(tracking_info__reviewer_id2=request.user) & Q(tracking_info__current_reviewer_id=2)) + | (Q(tracking_info__reviewer_id3=request.user)&Q(tracking_info__current_reviewer_id=3))) + .exclude(status='rejected') + .exclude(status='finished') + .exclude(status='approved') + .filter(tracking_info__review_status='under_review') + .order_by('-request_timestamp')) - for app in to_review_apps: - app.reviewform = Review_Form(initial={'app_id': app.id}) - - + reviewed_apps= (Cpda_application.objects.select_related('applicant') + .filter(Q(tracking_info__reviewer_id=request.user,tracking_info__current_reviewer_id__gte=2) | + Q(tracking_info__reviewer_id2=request.user,tracking_info__current_reviewer_id__gte=3) | + Q(tracking_info__reviewer_id3=request.user,tracking_info__current_reviewer_id__gte=4)) + .order_by('-request_timestamp')) - bill_forms = {} - apps = Cpda_application.objects.select_related('applicant').filter(applicant=request.user).filter(status='approved') - for app in apps: - bill_forms[app.id] = Cpda_Bills_Form(initial={'app_id': app.id}) - - response = { - 'admin':True, - 'cpda_billforms': bill_forms, - 'cpda_to_review_apps': to_review_apps, - 'cpda_reviewed_apps': reviewed_apps, - } - return response + for app in to_review_apps: + app.reviewform = Review_Form(initial={'app_id': app.id}) + + + + bill_forms = {} + apps = Cpda_application.objects.select_related('applicant').filter(applicant=request.user).filter(status='approved') + for app in apps: + bill_forms[app.id] = Cpda_Bills_Form(initial={'app_id': app.id}) + + response = { + 'admin':True, + 'cpda_billforms': bill_forms, + 'cpda_to_review_apps': to_review_apps, + 'cpda_reviewed_apps': reviewed_apps, + } + return response + except Exception as e: + messages.error(request,e) def generate_ltc_admin_lists(request): """ Function retrieves the admin information and related unreviewed,approved and archived LTC applications. """ - # only requested and adjustment_pending - unreviewed_apps = (Ltc_application.objects - .select_related('applicant') - .filter(status='requested') - .order_by('-request_timestamp')) - pending_apps = [] - under_review_apps = [] - for app in unreviewed_apps: - if app.tracking_info.review_status == 'under_review': - under_review_apps.append(app) - else: - pending_apps.append(app) - - availed = (Ltc_availed.objects.filter(ltc__status='requested')) - to_avail = (Ltc_to_avail.objects.filter(ltc__status='requested')) - depend = (Dependent.objects.filter(ltc__status='requested')) - availed_pending = [] - to_avail_pending = [] - depend_pending = [] - availed_under_review = [] - to_avail_under_review = [] - depend_under_review = [] - - for app in availed: - if app.ltc.tracking_info.review_status == 'under_review': - availed_under_review.append(app) - else: - availed_pending.append(app) - - for app in to_avail: - if app.ltc.tracking_info.review_status == 'under_review': - to_avail_under_review.append(app) - else: - to_avail_pending.append(app) - - for app in depend: - if app.ltc.tracking_info.review_status == 'under_review': - depend_under_review.append(app) - else: - depend_pending.append(app) - - # combine assign_form object into unreviewed_app object respectively - for app in unreviewed_apps: - temp = Assign_Form(initial={'assign_status': 'requested','app_id': app.id}) - temp.fields["status"]._choices = [ - ('requested', 'Requested'), - ('approved', 'Approved'), - ('rejected', 'Rejected') - ] - temp.fields["assign_status"]._choices = [ - ('requested', 'Requested'), - ('approved', 'Approved'), - ('rejected', 'Rejected') - ] - temp.fields["accept_status"]._choices = [ - ('requested', 'Requested'), - ('approved', 'Approved'), - ('rejected', 'Rejected') - ] - app.assign_form = temp + try: + # only requested and adjustment_pending + unreviewed_apps = (Ltc_application.objects + .select_related('applicant') + .filter(status='requested') + .order_by('-request_timestamp')) + pending_apps = [] + under_review_apps = [] + for app in unreviewed_apps: + if app.tracking_info.review_status == 'under_review': + under_review_apps.append(app) + else: + pending_apps.append(app) + + availed = (Ltc_availed.objects.filter(ltc__status='requested')) + # availed_review = (Ltc_availed.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) + to_avail = (Ltc_to_avail.objects.filter(ltc__status='requested')) + # to_avail_review = (Ltc_to_avail.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) + depend = (Dependent.objects.filter(ltc__status='requested')) + # depend_review = (Dependent.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) + availed_pending = [] + to_avail_pending = [] + depend_pending = [] + availed_under_review = [] + to_avail_under_review = [] + depend_under_review = [] + # print("&&&&&&&&&&&&&&&&&&&&") + # print(availed) + # print(to_avail) + # print(depend) + # for i in availed: + # print(i.name, i.age, i.ltc.id) + # print("&&&&&&&&&&&&&&&&&&&&") + for app in availed: + # print('app',app) + # print('app.ltc',app.ltc) + # print('app.ltc.tracking_info',app.ltc.tracking_info) + if app.ltc.tracking_info.review_status == 'under_review': + availed_under_review.append(app) + else: + availed_pending.append(app) + for app in to_avail: + if app.ltc.tracking_info.review_status == 'under_review': + to_avail_under_review.append(app) + else: + to_avail_pending.append(app) - # approved and rejected - archived_apps = (Ltc_application.objects - .select_related('applicant') - .exclude(status='requested') - .order_by('-request_timestamp')) + for app in depend: + if app.ltc.tracking_info.review_status == 'under_review': + depend_under_review.append(app) + else: + depend_pending.append(app) - availed_archive = (Ltc_availed.objects.exclude(ltc__status='requested')) - to_avail_archive = (Ltc_to_avail.objects.exclude(ltc__status='requested')) - depend_archive = (Dependent.objects.exclude(ltc__status='requested')) - - current_eligible_users = Ltc_eligible_user.objects.select_related('user').order_by('user') - for user in current_eligible_users: - temp = Ltc_Eligible_Form(initial={ - 'username': user.user, - 'joining_date': user.date_of_joining, - 'current_block_size': user.current_block_size, - 'total_ltc_allowed': user.total_ltc_allowed, - 'hometown_ltc_allowed': user.hometown_ltc_allowed, - 'elsewhere_ltc_allowed': user.elsewhere_ltc_allowed, - 'hometown_ltc_availed': user.hometown_ltc_availed, - 'elsewhere_ltc_availed': user.elsewhere_ltc_availed - }) - # temp.fields['username'].widget.attrs['readonly'] = True - user.edit_form = temp - - new_ltc_eligible_user = Ltc_Eligible_Form() - reviewer_remarks={} - for app in pending_apps: - rev_list=[] - if(app.tracking_info.remarks is None): - break - remarks=app.tracking_info.remarks.split('#$*&') - desig=app.tracking_info.designations.split('#$*&') - for i in range(len(remarks)): - if(remarks[i]!=''): - rev_list.append([desig[i],remarks[i]]) - reviewer_remarks[app.tracking_info.application]=rev_list - - response = { - 'admin': True, - 'ltc_eligible_users': current_eligible_users, - 'ltc_new_eligible_user_form': new_ltc_eligible_user, - 'ltc_pending_apps': pending_apps, - 'ltc_under_review_apps': under_review_apps, - 'ltc_archived_apps': archived_apps, - 'ltc_availed_pending': availed_pending, - 'ltc_to_avail_pending': to_avail_pending, - 'dependent_pending': depend_pending, - 'ltc_availed_under_review': availed_under_review, - 'ltc_to_avail_under_review': to_avail_under_review, - 'dependent_under_review': depend_under_review, - 'ltc_availed_archive': availed_archive, - 'ltc_to_avail_archive': to_avail_archive, - 'dependent_archive': depend_archive, - 'remarks_list':reviewer_remarks - } - return response + # combine assign_form object into unreviewed_app object respectively + for app in unreviewed_apps: + temp = Assign_Form(initial={'assign_status': 'requested','app_id': app.id}) + temp.fields["status"]._choices = [ + ('requested', 'Requested'), + ('approved', 'Approved'), + ('rejected', 'Rejected') + ] + temp.fields["assign_status"]._choices = [ + ('requested', 'Requested'), + ('approved', 'Approved'), + ('rejected', 'Rejected') + ] + temp.fields["accept_status"]._choices = [ + ('requested', 'Requested'), + ('approved', 'Approved'), + ('rejected', 'Rejected') + ] + app.assign_form = temp + + # approved and rejected + archived_apps = (Ltc_application.objects + .select_related('applicant') + .exclude(status='requested') + .order_by('-request_timestamp')) + + availed_archive = (Ltc_availed.objects.exclude(ltc__status='requested')) + to_avail_archive = (Ltc_to_avail.objects.exclude(ltc__status='requested')) + depend_archive = (Dependent.objects.exclude(ltc__status='requested')) + + current_eligible_users = Ltc_eligible_user.objects.select_related('user').order_by('user') + for user in current_eligible_users: + temp = Ltc_Eligible_Form(initial={ + 'username': user.user, + 'joining_date': user.date_of_joining, + 'current_block_size': user.current_block_size, + 'total_ltc_allowed': user.total_ltc_allowed, + 'hometown_ltc_allowed': user.hometown_ltc_allowed, + 'elsewhere_ltc_allowed': user.elsewhere_ltc_allowed, + 'hometown_ltc_availed': user.hometown_ltc_availed, + 'elsewhere_ltc_availed': user.elsewhere_ltc_availed + }) + # temp.fields['username'].widget.attrs['readonly'] = True + user.edit_form = temp + + new_ltc_eligible_user = Ltc_Eligible_Form() + reviewer_remarks={} + for app in pending_apps: + rev_list=[] + if(app.tracking_info.remarks is None): + break + remarks=app.tracking_info.remarks.split('#$*&') + desig=app.tracking_info.designations.split('#$*&') + for i in range(len(remarks)): + if(remarks[i]!=''): + rev_list.append([desig[i],remarks[i]]) + reviewer_remarks[app.tracking_info.application]=rev_list + + response = { + 'admin': True, + 'ltc_eligible_users': current_eligible_users, + 'ltc_new_eligible_user_form': new_ltc_eligible_user, + 'ltc_pending_apps': pending_apps, + 'ltc_under_review_apps': under_review_apps, + 'ltc_archived_apps': archived_apps, + 'ltc_availed_pending': availed_pending, + 'ltc_to_avail_pending': to_avail_pending, + 'dependent_pending': depend_pending, + 'ltc_availed_under_review': availed_under_review, + 'ltc_to_avail_under_review': to_avail_under_review, + 'dependent_under_review': depend_under_review, + 'ltc_availed_archive': availed_archive, + 'ltc_to_avail_archive': to_avail_archive, + 'dependent_archive': depend_archive, + 'remarks_list':reviewer_remarks, + 'ltc_availed_review1': availed, + 'ltc_to_avail_review1': to_avail, + 'dependent_review1': depend, + } + return response + except Exception as e: + messages.error(request,e) def handle_cpda_eligible(request): """ Function handles cpda functionalities- CPDA request,adjustments,review and rejection of CPDA applications. """ + # print("-----------") if 'cpda_request' in request.POST: - - applicant = request.user - pf_number=1 - if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): - pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no - else: - messages.error(request,"Please fill EIS Forms first.") - return - purpose = request.POST.get('purpose') - advance = request.POST.get('advance') - status = 'requested' - timestamp = datetime.now() - application = Cpda_application.objects.create( - applicant=applicant, - pf_number=pf_number, - purpose=purpose, - requested_advance=advance, - request_timestamp=timestamp, - status=status - ) - # finding HOD according to department of eligible - user_info = ExtraInfo.objects.filter(user = applicant) - user_info = user_info[0] - designation = None - if(user_info.department.name == 'CSE'): - designation = Designation.objects.filter(name = 'CSE HOD') - elif(user_info.department.name == 'ECE'): - designation = Designation.objects.filter(name = 'HOD (ECE)') - elif(user_info.department.name == 'ME'): - designation = Designation.objects.filter(name = 'HOD (ME)') - elif(user_info.department.name == 'Design'): - designation = Designation.objects.filter(name = 'HOD (Design)') - else: - designation = Designation.objects.filter(name = 'HOD (NS)') - holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) - hod_desig=designation[0] - hod = holds_designation[0].user - - #finding HR Admin - hr_admin=Establishment_variables.objects.select_related('est_admin').first().est_admin - #finding Director - designation = Designation.objects.filter(name = 'Director') - holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) - dir_desig=designation[0] - director = holds_designation[0].user - - # next 3 lines are working magically, DON'T TOUCH THEM - track = Cpda_tracking.objects.create( - application = application, - review_status = 'under_review', - reviewer_id=hod, - reviewer_id2=hr_admin, - reviewer_id3=director, - current_reviewer_id=1, - remarks_rev1='Not reviewed yet', - remarks_rev2='Not reviewed yet', - remarks_rev3='Not reviewed yet', - reviewer_design=hod_desig, - reviewer_design3=dir_desig + try: + applicant = request.user + # pf_number=1 + # print(">>>>>>>>>>>",emp_consultancy_projects.objects.filter(user=request.user).first()) + if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): + pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no + else: + messages.error(request,"Please fill EIS Forms first.") + return + purpose = request.POST.get('purpose') + advance = request.POST.get('advance') + status = 'requested' + timestamp = datetime.now() + application = Cpda_application.objects.create( + applicant=applicant, + pf_number=pf_number, + purpose=purpose, + requested_advance=advance, + request_timestamp=timestamp, + status=status ) - - - - # add notif here - messages.success(request, 'Request sent successfully!') + # finding HOD according to department of eligible + user_info = ExtraInfo.objects.filter(user = applicant) + user_info = user_info[0] + designation = None + if(user_info.department.name == 'CSE'): + designation = Designation.objects.filter(name = 'CSE HOD') + elif(user_info.department.name == 'ECE'): + designation = Designation.objects.filter(name = 'HOD (ECE)') + elif(user_info.department.name == 'ME'): + designation = Designation.objects.filter(name = 'HOD (ME)') + elif(user_info.department.name == 'Design'): + designation = Designation.objects.filter(name = 'HOD (Design)') + else: + designation = Designation.objects.filter(name = 'HOD (NS)') + holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) + hod_desig=designation[0] + hod = holds_designation[0].user + + #finding HR Admin + hr_admin=Establishment_variables.objects.select_related('est_admin').first().est_admin + # print(hr_admin) + hr_admin_designation=Designation.objects.filter(name = 'hradmin') + hr_admin_design=hr_admin_designation[0] + #finding Director + designation = Designation.objects.filter(name = 'Director') + holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) + dir_desig=designation[0] + director = holds_designation[0].user + + # print("################") + # print(designation) + # print(holds_designation) + # print(dir_desig) + # print(director) + # print("################") + + # next 3 lines are working magically, DON'T TOUCH THEM + track = Cpda_tracking.objects.create( + application = application, + review_status = 'under_review', + reviewer_id=hod, + reviewer_id2=hr_admin, + reviewer_id3=director, + current_reviewer_id=1, + remarks_rev1='Not reviewed yet', + remarks_rev2='Not reviewed yet', + remarks_rev3='Not reviewed yet', + reviewer_design=hod_desig, + reviewer_design2=hr_admin_design, + reviewer_design3=dir_desig + ) + # add notif here + messages.success(request, 'Request sent successfully!') + except Exception as e: + messages.error(request,e) elif 'cpda_adjust' in request.POST: - # add multiple files - # get application object here DONE - app_id = request.POST.get('app_id') - # verify that app_id is not changed, ie untampered - application = Cpda_application.objects.get(id=app_id) - upload_file = request.FILES.get('bills') - adjustment_amount = request.POST.get('adjustment_amount') - bills_amount = request.POST.get('total_bills_amount') - - Cpda_bill.objects.create( - application_id = app_id, - bill = upload_file - ) - bills_attached = 1 - timestamp = datetime.now() - - application.bills_attached = bills_attached - application.total_bills_amount = bills_amount - application.adjustment_amount = adjustment_amount - application.adjustment_timestamp = timestamp - application.tracking_info.current_reviewer_id=1 - application.tracking_info.remarks_rev1="Not Reviewed yet" - application.tracking_info.remarks_rev2="Not Reviewed yet" - application.tracking_info.remarks_rev3="Not Reviewed yet" - application.status = 'adjustments_pending' - application.tracking_info.bill=upload_file - application.save() - - # get tracking info of a particular application - application.tracking_info.review_status = 'under_review' - application.tracking_info.save() - # add notif here - messages.success(request, 'Bills submitted successfully!') + try: + # add multiple files + # get application object here DONE + app_id = request.POST.get('app_id') + # verify that app_id is not changed, ie untampered + application = Cpda_application.objects.get(id=app_id) + upload_file = request.FILES.get('bills') + adjustment_amount = request.POST.get('adjustment_amount') + bills_amount = request.POST.get('total_bills_amount') + + Cpda_bill.objects.create( + application_id = app_id, + bill = upload_file + ) + bills_attached = 1 + timestamp = datetime.now() + + application.bills_attached = bills_attached + application.total_bills_amount = bills_amount + application.adjustment_amount = adjustment_amount + application.adjustment_timestamp = timestamp + application.tracking_info.current_reviewer_id=1 + application.tracking_info.remarks_rev1="Not Reviewed yet" + application.tracking_info.remarks_rev2="Not Reviewed yet" + application.tracking_info.remarks_rev3="Not Reviewed yet" + application.status = 'adjustments_pending' + application.tracking_info.bill=upload_file + application.save() + + # get tracking info of a particular application + application.tracking_info.review_status = 'under_review' + application.tracking_info.save() + # add notif here + messages.success(request, 'Bills submitted successfully!') + except Exception as e: + messages.error(request,e) elif 'cpda_review' in request.POST: - app_id = request.POST.get('app_id') - # verify that app_id is not changed, ie untampered - review_comment = request.POST.get('remarks') - application = Cpda_application.objects.get(id=app_id) - cpda_bal=CpdaBalance.objects.get(user=application.applicant) - - if(application.tracking_info.current_reviewer_id==1): - application.tracking_info.remarks_rev1 = review_comment - elif(application.tracking_info.current_reviewer_id==2): - application.tracking_info.remarks_rev2 = review_comment - else: - application.tracking_info.remarks_rev3 = review_comment - if(application.tracking_info.current_reviewer_id==3): - application.tracking_info.review_status = 'reviewed' - if(application.status=='adjustments_pending'): - application.status='finished' - if((application.total_bills_amount- application.requested_advance)>0): - cpda_bal.cpda_balance=cpda_bal.cpda_balance-(application.total_bills_amount-application.requested_advance) - else: - cpda_bal.cpda_balance=cpda_bal.cpda_balance+(application.total_bills_amount-application.requested_advance) + try: + app_id = request.POST.get('app_id') + # verify that app_id is not changed, ie untampered + review_comment = request.POST.get('remarks') + application = Cpda_application.objects.get(id=app_id) + cpda_bal=CpdaBalance.objects.get(user=application.applicant) + + if(application.tracking_info.current_reviewer_id==1): + application.tracking_info.remarks_rev1 = review_comment + elif(application.tracking_info.current_reviewer_id==2): + application.tracking_info.remarks_rev2 = review_comment else: - - cpda_bal.cpda_balance=cpda_bal.cpda_balance-application.requested_advance - application.status='approved' - application.tracking_info.current_reviewer_id +=1 - application.tracking_info.save() - application.save() - cpda_bal.save() - # add notif here - messages.success(request, 'Review submitted successfully!') + application.tracking_info.remarks_rev3 = review_comment + + # print('>>>>>>>>>>>>>>>>>application.tracking_info.current_reviewer_id',application.tracking_info.current_reviewer_id) + # print('>>>>>>>>>>>>>>>>>application.tracking_info.review_status',application.tracking_info.review_status) + if(application.tracking_info.current_reviewer_id==3): + application.tracking_info.review_status = 'reviewed' + if(application.status=='adjustments_pending'): + application.status='finished' + if((application.total_bills_amount- application.requested_advance)>0): + cpda_bal.cpda_balance=cpda_bal.cpda_balance-(application.total_bills_amount-application.requested_advance) + else: + cpda_bal.cpda_balance=cpda_bal.cpda_balance+(application.total_bills_amount-application.requested_advance) + else: + cpda_bal.cpda_balance=cpda_bal.cpda_balance-application.requested_advance + application.status='approved' + application.tracking_info.current_reviewer_id +=1 + # print('@@@@@@@@@@@@@@@application.tracking_info.current_reviewer_id',application.tracking_info.current_reviewer_id) + # print('@@@@@@@@@@@@@@@application.tracking_info.review_status',application.tracking_info.review_status) + application.tracking_info.save() + application.save() + cpda_bal.save() + # add notif here + messages.success(request, 'Review submitted successfully!') + except Exception as e: + messages.error(request,e) elif 'cpda_reject' in request.POST: - app_id = request.POST.get('app_id') - # verify that app_id is not changed, ie untampered - review_comment = request.POST.get('remarks') - application = Cpda_application.objects.get(id=app_id) - if(application.tracking_info.current_reviewer_id==1): - application.tracking_info.remarks_rev1 = review_comment +"(Rejected)" - elif(application.tracking_info.current_reviewer_id==2): - application.tracking_info.remarks_rev2 = review_comment +"(Rejected)" - else: - application.tracking_info.remarks_rev3 = review_comment +"(Rejected)" - application.tracking_info.review_status = 'reviewed' - application.tracking_info.save() - # add notif here - messages.success(request, 'Review submitted successfully!') + try: + app_id = request.POST.get('app_id') + # verify that app_id is not changed, ie untampered + review_comment = request.POST.get('remarks') + application = Cpda_application.objects.get(id=app_id) + if(application.tracking_info.current_reviewer_id==1): + application.tracking_info.remarks_rev1 = review_comment +"(Rejected)" + elif(application.tracking_info.current_reviewer_id==2): + application.tracking_info.remarks_rev2 = review_comment +"(Rejected)" + else: + application.tracking_info.remarks_rev3 = review_comment +"(Rejected)" + application.tracking_info.review_status = 'reviewed' + application.tracking_info.save() + # add notif here + messages.success(request, 'Review submitted successfully!') + except Exception as e: + messages.error(request,e) def handle_ltc_eligible(request): @@ -639,135 +737,138 @@ def handle_ltc_eligible(request): Function handles LTC functionalities- LTC request and review of LTC applications. """ if 'ltc_request' in request.POST: - applicant = request.user - pf_number=1 - if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): - pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no - else: - messages.error(request,"Please fill EIS Forms first.") - return - - basic_pay = request.POST.get('basic_pay') - leave_start = request.POST.get('leave_start') - leave_end = request.POST.get('leave_end') - family_departure_date = request.POST.get('family_departure_date') - leave_nature = request.POST.get('leave_nature') - purpose = request.POST.get('purpose') - leave_type = request.POST.get('leave_type') - address_during_leave = request.POST.get('address_during_leave') - phone_number = request.POST.get('phone_number') - travel_mode = request.POST.get('travel_mode') - - - requested_advance = request.POST.get('requested_advance') - - status = 'requested' - timestamp = datetime.now() - - eligible_ltc_user=Ltc_eligible_user.objects.get(user=applicant) - ret = relativedelta(datetime.today().date(), eligible_ltc_user.date_of_joining) - ret=ret.years + ret.months/12 + ret.days/365 - - - application = Ltc_application.objects.create( - # save all - applicant=applicant, - pf_number=pf_number, - basic_pay = basic_pay, - leave_start = leave_start, - leave_end = leave_end, - family_departure_date = family_departure_date, - leave_nature = leave_nature, - purpose = purpose, - is_hometown_or_elsewhere = leave_type, - address_during_leave = address_during_leave, - phone_number = phone_number, - travel_mode = travel_mode, - requested_advance = requested_advance, - request_timestamp=timestamp, - status=status - ) - # ltc_availed - count = 1 - while(1): - name = request.POST.get('Name1'+str(count)) - age = request.POST.get('Age1'+str(count)) - if(name == None): - break - ltc_availed = Ltc_availed.objects.create( - ltc = application, - name = name, - age = age - ) - - count += 1 - # ltc_to_avail - count = 1 - while(1): - name = request.POST.get('Name2'+str(count)) - age = request.POST.get('Age2'+str(count)) - if(name == None): - break - ltc_to_avail = Ltc_to_avail.objects.create( - ltc = application, - name = name, - age = age - ) - - count += 1 - - # Dependents - count = 1 - while(1): - name = request.POST.get('Name3'+str(count)) - age = request.POST.get('Age3'+str(count)) - depend = request.POST.get('Why fully dependent'+str(count)) - if(name == None): - break - dependent = Dependent.objects.create( - ltc = application, - name = name, - age = age, - depend = depend - ) + try: + applicant = request.user + pf_number=1 + if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): + pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no + else: + messages.error(request,"Please fill EIS Forms(Consultancy Project) first.") + return + + basic_pay = request.POST.get('basic_pay') + leave_start = request.POST.get('leave_start') + leave_end = request.POST.get('leave_end') + family_departure_date = request.POST.get('family_departure_date') + leave_nature = request.POST.get('leave_nature') + purpose = request.POST.get('purpose') + leave_type = request.POST.get('leave_type') + address_during_leave = request.POST.get('address_during_leave') + phone_number = request.POST.get('phone_number') + travel_mode = request.POST.get('travel_mode') + requested_advance = request.POST.get('requested_advance') + status = 'requested' + timestamp = datetime.now() + eligible_ltc_user=Ltc_eligible_user.objects.get(user=applicant) + ret = relativedelta(datetime.today().date(), eligible_ltc_user.date_of_joining) + ret=ret.years + ret.months/12 + ret.days/365 + application = Ltc_application.objects.create( + # save all + applicant=applicant, + pf_number=pf_number, + basic_pay = basic_pay, + leave_start = leave_start, + leave_end = leave_end, + family_departure_date = family_departure_date, + leave_nature = leave_nature, + purpose = purpose, + is_hometown_or_elsewhere = leave_type, + address_during_leave = address_during_leave, + phone_number = phone_number, + travel_mode = travel_mode, + requested_advance = requested_advance, + request_timestamp=timestamp, + status=status + ) + # ltc_availed + count = 1 + while(1): + name = request.POST.get('Name1'+str(count)) + age = request.POST.get('Age1'+str(count)) + if(name == None): + break + ltc_availed = Ltc_availed.objects.create( + ltc = application, + name = name, + age = age + ) + + count += 1 + # ltc_to_avail + count = 1 + while(1): + name = request.POST.get('Name2'+str(count)) + age = request.POST.get('Age2'+str(count)) + if(name == None): + break + ltc_to_avail = Ltc_to_avail.objects.create( + ltc = application, + name = name, + age = age + ) + + count += 1 + + # Dependents + count = 1 + while(1): + name = request.POST.get('Name3'+str(count)) + age = request.POST.get('Age3'+str(count)) + depend = request.POST.get('Why fully dependent'+str(count)) + if(name == None): + break + dependent = Dependent.objects.create( + ltc = application, + name = name, + age = age, + depend = depend + ) + + count += 1 + + # next 3 lines are working magically, DON'T TOUCH THEM + track = Ltc_tracking.objects.create( + application = application, + review_status = 'to_assign' + ) + # add notif here + messages.success(request, 'Request sent successfully!') - count += 1 + except Exception as e: + messages.error(request,e) - - # next 3 lines are working magically, DON'T TOUCH THEM - track = Ltc_tracking.objects.create( - application = application, - review_status = 'to_assign' - ) - # add notif here - messages.success(request, 'Request sent successfully!') - if 'ltc_review_approve' in request.POST: - app_id = request.POST.get('app_id') - # verify that app_id is not changed, ie untampered - review_comment = request.POST.get('remarks') - application = Ltc_application.objects.get(id=app_id) - application.status='approved' - application.tracking_info.remarks = review_comment - application.tracking_info.review_status = 'reviewed' - application.tracking_info.save() - application.save() - # add notif here - messages.success(request, 'Review submitted successfully!') + try: + app_id = request.POST.get('app_id') + # verify that app_id is not changed, ie untampered + review_comment = request.POST.get('remarks') + application = Ltc_application.objects.get(id=app_id) + application.status='approved' + application.tracking_info.remarks = review_comment + application.tracking_info.review_status = 'reviewed' + application.tracking_info.save() + application.save() + # add notif here + messages.success(request, 'Review submitted successfully!') + + except Exception as e: + messages.error(request,e) elif 'ltc_review_reject' in request.POST: - app_id = request.POST.get('app_id') - # verify that app_id is not changed, ie untampered - review_comment = request.POST.get('remarks') - application = Ltc_application.objects.get(id=app_id) - application.status='rejected' - application.tracking_info.remarks = review_comment - application.tracking_info.review_status = 'reviewed' - application.tracking_info.save() - application.save() - # add notif here - messages.success(request, 'Review submitted successfully!') - + try: + app_id = request.POST.get('app_id') + # verify that app_id is not changed, ie untampered + review_comment = request.POST.get('remarks') + application = Ltc_application.objects.get(id=app_id) + application.status='rejected' + application.tracking_info.remarks = review_comment + application.tracking_info.review_status = 'reviewed' + application.tracking_info.save() + application.save() + # add notif here + messages.success(request, 'Review submitted successfully!') + except Exception as e: + messages.error(request,e) def handle_appraisal(request): @@ -780,362 +881,389 @@ def handle_appraisal(request): # Condition to handle the Appraisal Request generated from # the faculty end by submitting a form. if 'appraisal_request' in request.POST: - applicant = request.user - # Query to find the designation of the user - user_dsg = list(HoldsDesignation.objects.filter(user=request.user)) - designation = user_dsg[0].designation - # Query to find the department/discipline of the user - user_dep = list(ExtraInfo.objects.filter(user=request.user)) - discipline = user_dep[0].department - # handling form data - knowledge_field = request.POST.get('specific_field_knowledge') - research_interest = request.POST.get('current_research_interest') - status = 'requested' - timestamp = datetime.now() - other_research_element = request.POST.get('other_research_element') - publications = request.POST.get('publications') - conferences_meeting_attended = request.POST.get('conferences_meeting_attended') - conferences_meeting_organized = request.POST.get('conferences_meeting_organized') - admin_assign = request.POST.get('admin_assign') - sevice_to_ins = request.POST.get('sevice_to_ins') - extra_info = request.POST.get('extra_info') - faculty_comments = request.POST.get('faculty_comments') - start_date = date.fromisoformat(request.POST.get('start_date')) - end_date = date.fromisoformat(request.POST.get('end_date')) - # Creating Appraisal Object - application = Appraisal.objects.create( - applicant = applicant, - designation = designation, - discipline = discipline, - knowledge_field = knowledge_field, - research_interest = research_interest, - status = status, - timestamp = timestamp, - other_research_element = other_research_element, - publications = publications, - conferences_meeting_attended = conferences_meeting_attended, - conferences_meeting_organized = conferences_meeting_organized, - admin_assign = admin_assign, - sevice_to_ins = sevice_to_ins, - extra_info = extra_info, - faculty_comments = faculty_comments, - start_date = start_date, - end_date = end_date - ) - # NewCoursesOffered - count = 1 - while(1): - course_name = request.POST.get('Course-Name1.1.2'+str(count)) - course_num = request.POST.get('Course Number1.1.2'+str(count)) - UGorPG = request.POST.get('UG/PG1.1.2'+str(count)) - tutorial_hrs_wk = request.POST.get('Tutorial (Hours/week)1.1.2'+str(count)) - year = request.POST.get('YEAR1.1.2'+str(count)) - semester = request.POST.get('Semester1.1.2'+str(count)) - if(semester == None): - break - new_course = NewCoursesOffered.objects.create( - appraisal = application, - course_name = course_name, - course_num = course_num, - ug_or_pg = UGorPG, - tutorial_hrs_wk = tutorial_hrs_wk, - year = year, - semester = semester - ) - - count += 1 - - - # NewCourseMaterial - count = 1 - while(1): - course_name = request.POST.get('Course-Name' + '1.1.3' + str(count)) - course_num = request.POST.get('Course Number' + '1.1.3' + str(count)) - ug_or_pg = request.POST.get('UG/PG' + '1.1.3' + str(count)) - activity_type = request.POST.get('Type of Activity' + '1.1.3' + str(count)) - availiability = request.POST.get('Web/Public' + '1.1.3' + str(count)) - if(course_num == None): - break - - new_courses_material = NewCourseMaterial.objects.create( - appraisal = application, - course_name = course_name, - course_num = course_num, - ug_or_pg = ug_or_pg, - activity_type = activity_type, - availiability = availiability + try: + applicant = request.user + # Query to find the designation of the user + user_dsg = list(HoldsDesignation.objects.filter(user=request.user)) + designation = user_dsg[0].designation + # Query to find the department/discipline of the user + user_dep = list(ExtraInfo.objects.filter(user=request.user)) + discipline = user_dep[0].department + # handling form data + knowledge_field = request.POST.get('specific_field_knowledge') + research_interest = request.POST.get('current_research_interest') + status = 'requested' + timestamp = datetime.now() + other_research_element = request.POST.get('other_research_element') + publications = request.POST.get('publications') + conferences_meeting_attended = request.POST.get('conferences_meeting_attended') + conferences_meeting_organized = request.POST.get('conferences_meeting_organized') + admin_assign = request.POST.get('admin_assign') + sevice_to_ins = request.POST.get('sevice_to_ins') + extra_info = request.POST.get('extra_info') + faculty_comments = request.POST.get('faculty_comments') + start_date = date.fromisoformat(request.POST.get('start_date')) + end_date = date.fromisoformat(request.POST.get('end_date')) + # Creating Appraisal Object + application = Appraisal.objects.create( + applicant = applicant, + designation = designation, + discipline = discipline, + knowledge_field = knowledge_field, + research_interest = research_interest, + status = status, + timestamp = timestamp, + other_research_element = other_research_element, + publications = publications, + conferences_meeting_attended = conferences_meeting_attended, + conferences_meeting_organized = conferences_meeting_organized, + admin_assign = admin_assign, + sevice_to_ins = sevice_to_ins, + extra_info = extra_info, + faculty_comments = faculty_comments, + start_date = start_date, + end_date = end_date ) - - count += 1 + # print(application) + # NewCoursesOffered + count = 1 + while(1): + course_name = request.POST.get('Course-Name1.1.2'+str(count)) + course_num = request.POST.get('Course Number1.1.2'+str(count)) + UGorPG = request.POST.get('UG/PG1.1.2'+str(count)) + tutorial_hrs_wk = request.POST.get('Tutorial (Hours/week)1.1.2'+str(count)) + year = request.POST.get('YEAR1.1.2'+str(count)) + semester = request.POST.get('Semester1.1.2'+str(count)) + if(semester == None): + break + new_course = NewCoursesOffered.objects.create( + appraisal = application, + course_name = course_name, + course_num = course_num, + ug_or_pg = UGorPG, + tutorial_hrs_wk = tutorial_hrs_wk, + year = year, + semester = semester + ) + + count += 1 + + + # NewCourseMaterial + count = 1 + while(1): + course_name = request.POST.get('Course-Name' + '1.1.3' + str(count)) + course_num = request.POST.get('Course Number' + '1.1.3' + str(count)) + ug_or_pg = request.POST.get('UG/PG' + '1.1.3' + str(count)) + activity_type = request.POST.get('Type of Activity' + '1.1.3' + str(count)) + availiability = request.POST.get('Web/Public' + '1.1.3' + str(count)) + if(course_num == None): + break + + new_courses_material = NewCourseMaterial.objects.create( + appraisal = application, + course_name = course_name, + course_num = course_num, + ug_or_pg = ug_or_pg, + activity_type = activity_type, + availiability = availiability + ) - # Finding the user with designation "HOD" of the department to which the applicant belongs. - user_info = ExtraInfo.objects.filter(user = applicant) - user_info = user_info[0] - designation = None - if(user_info.department.name == 'CSE'): - designation = Designation.objects.filter(name = 'CSE HOD') - elif(user_info.department.name == 'ECE'): - designation = Designation.objects.filter(name = 'HOD (ECE)') - elif(user_info.department.name == 'ME'): - designation = Designation.objects.filter(name = 'HOD (ME)') - elif(user_info.department.name == 'Design'): - designation = Designation.objects.filter(name = 'HOD (Design)') - else: - designation = Designation.objects.filter(name = 'HOD (NS)') - holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) - hod = holds_designation[0].user - # Finding the user with designation "Director" - designation = Designation.objects.filter(name = 'Director') - holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) - director = holds_designation[0].user - # Creating AppraisalRequest Object to track the application - appraisal_request = AppraisalRequest.objects.create( - appraisal = application, - hod = hod, - director = director - ) - messages.success(request, 'Appraisal Request sent successfully!') - return application + count += 1 + + # Finding the user with designation "HOD" of the department to which the applicant belongs. + user_info = ExtraInfo.objects.filter(user = applicant) + user_info = user_info[0] + designation = None + if(user_info.department.name == 'CSE'): + designation = Designation.objects.filter(name = 'CSE HOD') + elif(user_info.department.name == 'ECE'): + designation = Designation.objects.filter(name = 'HOD (ECE)') + elif(user_info.department.name == 'ME'): + designation = Designation.objects.filter(name = 'HOD (ME)') + elif(user_info.department.name == 'Design'): + designation = Designation.objects.filter(name = 'HOD (Design)') + else: + designation = Designation.objects.filter(name = 'HOD (NS)') + holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) + hod = holds_designation[0].user + # Finding the user with designation "Director" + designation = Designation.objects.filter(name = 'Director') + holds_designation = HoldsDesignation.objects.filter(designation = designation[0]) + director = holds_designation[0].user + # Creating AppraisalRequest Object to track the application + appraisal_request = AppraisalRequest.objects.create( + appraisal = application, + hod = hod, + director = director + ) + messages.success(request, 'Appraisal Request sent successfully!') + return application + except Exception as e: + messages.error(request,e) + # Condition to handle the Appraisal Review Request generated from # the HOD end by reviewing a application. if 'hod_appraisal_review' in request.POST: - app_id = int(request.POST.get('app_id')) - review_comment = request.POST.get('remarks_hod') - result = request.POST.get('result') - application = Appraisal.objects.get(id=app_id) - request_object = AppraisalRequest.objects.filter(appraisal = application) - appraisal_track = request_object[0] - appraisal_track.remark_hod = review_comment - appraisal_track.status_hod = result - appraisal_track.save() - messages.success(request, 'Review submitted successfully!') + try: + app_id = int(request.POST.get('app_id')) + review_comment = request.POST.get('remarks_hod') + result = request.POST.get('result') + application = Appraisal.objects.get(id=app_id) + request_object = AppraisalRequest.objects.filter(appraisal = application) + appraisal_track = request_object[0] + appraisal_track.remark_hod = review_comment + appraisal_track.status_hod = result + appraisal_track.save() + messages.success(request, 'Review submitted successfully!') + except Exception as e: + messages.error(request,e) + # Condition to handle the Appraisal Review Request generated from # the Director end by reviewing a application. if 'director_appraisal_review' in request.POST: - app_id = int(request.POST.get('app_id')) - review_comment = request.POST.get('remarks_director') - result = request.POST.get('result') - application = Appraisal.objects.select_related('applicant').get(id=app_id) - application.status = "Processed" - request_object = AppraisalRequest.objects.select_related('appraisal').filter(appraisal = application) - appraisal_track = request_object[0] - appraisal_track.remark_director = review_comment - appraisal_track.status_director = result - appraisal_track.save() - application.save() - + try: + app_id = int(request.POST.get('app_id')) + review_comment = request.POST.get('remarks_director') + result = request.POST.get('result') + application = Appraisal.objects.select_related('applicant').get(id=app_id) + application.status = "Processed" + request_object = AppraisalRequest.objects.select_related('appraisal').filter(appraisal = application) + appraisal_track = request_object[0] + appraisal_track.remark_director = review_comment + appraisal_track.status_director = result + appraisal_track.save() + application.save() + messages.success(request, 'Review submitted successfully!') + except Exception as e: + messages.error(request,e) + def generate_cpda_eligible_lists(request): """ Function retrieves the eligible user information and related unreviewed,approved and archived CPDA applications. """ - active_apps = (Cpda_application.objects - .select_related('applicant') - .filter(applicant=request.user) - .exclude(status='rejected') - .exclude(status='finished') - .order_by('-request_timestamp')) - - archive_apps = (Cpda_application.objects - .select_related('applicant') - .filter(applicant=request.user) - .exclude(status='requested') - .exclude(status='approved') - .exclude(status='adjustments_pending') - .order_by('-request_timestamp')) - - to_review_apps = (Cpda_application.objects - .select_related('applicant') - .filter((Q(tracking_info__reviewer_id=request.user)&Q(tracking_info__current_reviewer_id=1)) - | (Q(tracking_info__reviewer_id2=request.user) & Q(tracking_info__current_reviewer_id=2)) - | (Q(tracking_info__reviewer_id3=request.user)&Q(tracking_info__current_reviewer_id=3))) - .exclude(status='rejected') - .exclude(status='finished') - .exclude(status='approved') - .filter(tracking_info__review_status='under_review') - .order_by('-request_timestamp')) - reviewed_apps= (Cpda_application.objects.select_related('applicant') - .filter(Q(tracking_info__reviewer_id=request.user,tracking_info__current_reviewer_id__gte=2) | - Q(tracking_info__reviewer_id2=request.user,tracking_info__current_reviewer_id__gte=3) | - Q(tracking_info__reviewer_id3=request.user,tracking_info__current_reviewer_id__gte=4)) - .order_by('-request_timestamp')) - - for app in to_review_apps: - app.reviewform = Review_Form(initial={'app_id': app.id}) - - pf_number=1234 - if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): - pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no - - form = Cpda_Form(initial={'pf_number':pf_number}) - bill_forms = {} - apps = Cpda_application.objects.select_related('applicant').filter(applicant=request.user).filter(status='approved') - for app in apps: - bill_forms[app.id] = Cpda_Bills_Form(initial={'app_id': app.id}) - try: - cpda_balance=CpdaBalance.objects.get(user=request.user) - advance_avail=cpda_balance.cpda_balance - advance_taken=300000-advance_avail - except: - cpda_bal=CpdaBalance.objects.create(user=request.user) - advance_avail=300000 - advance_taken=0 - - today_date=date.today() - block_period=str(2019+int((np.ceil((today_date.year-2018)/3)-1))*3)+"-"+ str(2018+int(np.ceil((today_date.year-2018)/3))*3) - hod=is_hod(request) - #registrar=is_registrar(request) - director=is_director(request) - reviewer=False - if(hod or director): - reviewer=True - response = { - 'reviewer':reviewer, - 'cpda_form': form, - 'cpda_billforms': bill_forms, - 'cpda_active_apps': active_apps, - 'cpda_archive_apps': archive_apps, - 'cpda_to_review_apps': to_review_apps, - 'total_advance_by_user':advance_taken, - 'remaining_advance': advance_avail, - 'block_period': block_period, - 'cpda_reviewed_apps': reviewed_apps, - 'pf':pf_number - } - return response - - -def generate_ltc_eligible_lists(request): - """ - Function retrieves the eligible user information and related unreviewed,approved and archived LTC applications. - """ - ltc_info = {} - ltc_queryset = Ltc_eligible_user.objects.select_related('user').filter(user=request.user) - ltc_info['eligible'] = ltc_queryset.exists() - less_than_1_year=False - - if ltc_info['eligible']: - ltc_info['years_of_job'] = ltc_queryset.first().get_years_of_job() - ltc_info['total_ltc_remaining'] = ltc_queryset.first().total_ltc_remaining() - ltc_info['hometown_ltc_remaining'] = ltc_queryset.first().hometown_ltc_remaining() - ltc_info['elsewhere_ltc_remaining'] = ltc_queryset.first().elsewhere_ltc_remaining() - - - if(float(ltc_info['years_of_job'])<1): - ltc_info['eligible']=False - less_than_1_year=True - active_apps = (Ltc_application.objects + active_apps = (Cpda_application.objects .select_related('applicant') .filter(applicant=request.user) - .filter(status='requested') + .exclude(status='rejected') + .exclude(status='approved') + .exclude(status='finished') .order_by('-request_timestamp')) - archive_apps = (Ltc_application.objects + archive_apps = (Cpda_application.objects .select_related('applicant') .filter(applicant=request.user) .exclude(status='requested') + .exclude(status='adjustments_pending') + .order_by('-request_timestamp')) + + to_review_apps = (Cpda_application.objects + .select_related('applicant') + .filter((Q(tracking_info__reviewer_id=request.user)&Q(tracking_info__current_reviewer_id=1)) + | (Q(tracking_info__reviewer_id2=request.user) & Q(tracking_info__current_reviewer_id=2)) + | (Q(tracking_info__reviewer_id3=request.user)&Q(tracking_info__current_reviewer_id=3))) + .exclude(status='rejected') + .exclude(status='finished') + .exclude(status='approved') + .filter(tracking_info__review_status='under_review') .order_by('-request_timestamp')) + reviewed_apps= (Cpda_application.objects.select_related('applicant') + .filter(Q(tracking_info__reviewer_id=request.user,tracking_info__current_reviewer_id__gte=2) | + Q(tracking_info__reviewer_id2=request.user,tracking_info__current_reviewer_id__gte=3) | + Q(tracking_info__reviewer_id3=request.user,tracking_info__current_reviewer_id__gte=4)) + .order_by('-request_timestamp')) + + for app in to_review_apps: + app.reviewform = Review_Form(initial={'app_id': app.id}) - availed_active = (Ltc_availed.objects.filter(ltc__applicant=request.user).filter(ltc__status='requested')) - to_avail_active = (Ltc_to_avail.objects.filter(ltc__applicant=request.user).filter(ltc__status='requested')) - depend_active = (Dependent.objects.filter(ltc__applicant=request.user).filter(ltc__status='requested')) - availed_archived = (Ltc_availed.objects.filter(ltc__applicant=request.user).exclude(ltc__status='requested')) - to_avail_archived = (Ltc_to_avail.objects.filter(ltc__applicant=request.user).exclude(ltc__status='requested')) - depend_archived = (Dependent.objects.filter(ltc__applicant=request.user).exclude(ltc__status='requested')) pf_number=1234 if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no - form = Ltc_Form(initial={'pf_number':pf_number}) - pf_number=1234 - to_review_apps = (Ltc_application.objects - .filter(tracking_info__reviewer_id=request.user) - .filter(status='requested') - .filter(tracking_info__review_status='under_review') - .order_by('-request_timestamp')) + + form = Cpda_Form(initial={'pf_number':pf_number}) + bill_forms = {} + apps = Cpda_application.objects.select_related('applicant').filter(applicant=request.user).filter(status='approved') + for app in apps: + bill_forms[app.id] = Cpda_Bills_Form(initial={'app_id': app.id}) + + try: + cpda_balance=CpdaBalance.objects.get(user=request.user) + advance_avail=cpda_balance.cpda_balance + advance_taken=300000-advance_avail + except: + cpda_bal=CpdaBalance.objects.create(user=request.user) + advance_avail=300000 + advance_taken=0 + + today_date=date.today() + block_period=str(2019+int((np.ceil((today_date.year-2018)/3)-1))*3)+"-"+ str(2018+int(np.ceil((today_date.year-2018)/3))*3) + hod=is_hod(request) + #registrar=is_registrar(request) + director=is_director(request) + reviewer=False + if(hod or director): + reviewer=True + response = { + 'director':director, + 'reviewer':reviewer, + 'cpda_form': form, + 'cpda_billforms': bill_forms, + 'cpda_active_apps': active_apps, + 'cpda_archive_apps': archive_apps, + 'cpda_to_review_apps': to_review_apps, + 'total_advance_by_user':advance_taken, + 'remaining_advance': advance_avail, + 'block_period': block_period, + 'cpda_reviewed_apps': reviewed_apps, + 'pf':pf_number + } + return response + except Exception as e: + messages.error(request,e) - availed_review = (Ltc_availed.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) - to_avail_review = (Ltc_to_avail.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) - depend_review = (Dependent.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) - for app in to_review_apps: - app.reviewform = Review_Form(initial={'app_id': app.id}) - #if not present - - dir=is_director(request) - - response = { - 'director':dir, - 'ltc_info': ltc_info, - 'ltc_to_review_apps': to_review_apps, - 'ltc_availed_review': availed_review, - 'ltc_to_avail_review': to_avail_review, - 'dependent_review': depend_review, - 'lessthan1year': less_than_1_year, - 'pf':pf_number - } - - if ltc_info['eligible']: - response.update({ - 'ltc_form': form, - 'ltc_active_apps': active_apps, - 'ltc_archive_apps': archive_apps, - 'ltc_availed_active': availed_active, - 'ltc_to_avail_active': to_avail_active, - 'dependent_active': depend_active, - 'ltc_availed_archived': availed_archived, - 'ltc_to_avail_archived': to_avail_archived, - 'dependent_archived': depend_archived - }) - return response + +def generate_ltc_eligible_lists(request): + """ + Function retrieves the eligible user information and related unreviewed,approved and archived LTC applications. + """ + try: + ltc_info = {} + ltc_queryset = Ltc_eligible_user.objects.select_related('user').filter(user=request.user) + ltc_info['eligible'] = ltc_queryset.exists() + less_than_1_year=False + + if ltc_info['eligible']: + ltc_info['years_of_job'] = ltc_queryset.first().get_years_of_job() + ltc_info['total_ltc_remaining'] = ltc_queryset.first().total_ltc_remaining() + ltc_info['hometown_ltc_remaining'] = ltc_queryset.first().hometown_ltc_remaining() + ltc_info['elsewhere_ltc_remaining'] = ltc_queryset.first().elsewhere_ltc_remaining() + + + if(float(ltc_info['years_of_job'])<1): + ltc_info['eligible']=False + less_than_1_year=True + active_apps = (Ltc_application.objects + .select_related('applicant') + .filter(applicant=request.user) + .filter(status='requested') + .order_by('-request_timestamp')) + + archive_apps = (Ltc_application.objects + .select_related('applicant') + .filter(applicant=request.user) + .exclude(status='requested') + .order_by('-request_timestamp')) + + availed_active = (Ltc_availed.objects.filter(ltc__applicant=request.user).filter(ltc__status='requested')) + to_avail_active = (Ltc_to_avail.objects.filter(ltc__applicant=request.user).filter(ltc__status='requested')) + depend_active = (Dependent.objects.filter(ltc__applicant=request.user).filter(ltc__status='requested')) + availed_archived = (Ltc_availed.objects.filter(ltc__applicant=request.user).exclude(ltc__status='requested')) + to_avail_archived = (Ltc_to_avail.objects.filter(ltc__applicant=request.user).exclude(ltc__status='requested')) + depend_archived = (Dependent.objects.filter(ltc__applicant=request.user).exclude(ltc__status='requested')) + pf_number=1234 + if(emp_consultancy_projects.objects.filter(user=request.user).first() is not None): + pf_number = emp_consultancy_projects.objects.filter(user=request.user).first().pf_no + form = Ltc_Form(initial={'pf_number':pf_number}) + + pf_number=1234 + to_review_apps = (Ltc_application.objects + .filter(tracking_info__reviewer_id=request.user) + .filter(status='requested') + .filter(tracking_info__review_status='under_review') + .order_by('-request_timestamp')) + + availed_review = (Ltc_availed.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) + to_avail_review = (Ltc_to_avail.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) + depend_review = (Dependent.objects.filter(ltc__tracking_info__reviewer_id=request.user).filter(ltc__status='requested').filter(ltc__tracking_info__review_status='under_review')) + for app in to_review_apps: + app.reviewform = Review_Form(initial={'app_id': app.id}) + #if not present + + # print(availed_review) + + dir=is_director(request) + + response = { + 'director':dir, + 'ltc_info': ltc_info, + 'ltc_to_review_apps': to_review_apps, + 'ltc_availed_review': availed_review, + 'ltc_to_avail_review': to_avail_review, + 'dependent_review': depend_review, + 'lessthan1year': less_than_1_year, + 'pf':pf_number + } + + if ltc_info['eligible']: + response.update({ + 'ltc_form': form, + 'ltc_active_apps': active_apps, + 'ltc_archive_apps': archive_apps, + 'ltc_availed_active': availed_active, + 'ltc_to_avail_active': to_avail_active, + 'dependent_active': depend_active, + 'ltc_availed_archived': availed_archived, + 'ltc_to_avail_archived': to_avail_archived, + 'dependent_archived': depend_archived + }) + return response + except Exception as e: + messages.error(request,e) def generate_appraisal_lists(request): """ Generating JSON object to get data from the front-end. """ - response = {} - user_courses = [] - course_objects = Curriculum_Instructor.objects.all() - for course in course_objects: - if(course.instructor_id.user == request.user): - user_courses.append(course) - consultancy_projects = emp_consultancy_projects.objects.filter(user = request.user) - research_projects = emp_research_projects.objects.filter(user = request.user) - thesis = emp_mtechphd_thesis.objects.filter(user = request.user) - patents = emp_patents.objects.filter(user = request.user) - tech_transfer = emp_techtransfer.objects.filter(user = request.user) - publications = emp_published_books.objects.filter(user = request.user) - conferences = emp_confrence_organised.objects.filter(user = request.user) - achievments = emp_achievement.objects.filter(user = request.user) - events = emp_event_organized.objects.filter(user = request.user) - active_apps = (Appraisal.objects.select_related('applicant').filter(applicant=request.user).exclude(status='Processed').order_by('-timestamp')) - archive_apps = Appraisal.objects.select_related('applicant').filter(applicant=request.user).exclude(status='requested').order_by('-timestamp') - request_active = (AppraisalRequest.objects.select_related('appraisal').filter(appraisal__applicant=request.user).filter(appraisal__status='requested')) - request_archived = (AppraisalRequest.objects.select_related('appraisal').filter(appraisal__applicant=request.user).exclude(appraisal__status='requested')) - new_courses_offered = NewCoursesOffered.objects.filter(appraisal__applicant=request.user) - new_courses_material = NewCourseMaterial.objects.filter(appraisal__applicant=request.user) - response.update({ - 'user_courses': user_courses, - 'consultancy_projects': consultancy_projects, - 'research_projects': research_projects, - 'thesis': thesis, - 'patents': patents, - 'tech_transfer': tech_transfer, - 'publications': publications, - 'conferences': conferences, - 'achievments': achievments, - 'events': events, - 'appraisal_active_apps':active_apps, - 'appraisal_archive_apps':archive_apps, - 'appraisal_requests_active':request_active, - 'appraisal_requests_archived':request_archived, - 'new_courses_offered': new_courses_offered, - 'new_courses_material': new_courses_material, - 'start_date': False, - 'end_date': False - }) - return response + try: + response = {} + user_courses = [] + course_objects = Curriculum_Instructor.objects.all() + for course in course_objects: + if(course.instructor_id.user == request.user): + user_courses.append(course) + consultancy_projects = emp_consultancy_projects.objects.filter(user = request.user) + research_projects = emp_research_projects.objects.filter(user = request.user) + thesis = emp_mtechphd_thesis.objects.filter(user = request.user) + patents = emp_patents.objects.filter(user = request.user) + tech_transfer = emp_techtransfer.objects.filter(user = request.user) + publications = emp_published_books.objects.filter(user = request.user) + conferences = emp_confrence_organised.objects.filter(user = request.user) + achievments = emp_achievement.objects.filter(user = request.user) + events = emp_event_organized.objects.filter(user = request.user) + active_apps = (Appraisal.objects.select_related('applicant').filter(applicant=request.user).exclude(status='Processed').order_by('-timestamp')) + archive_apps = Appraisal.objects.select_related('applicant').filter(applicant=request.user).exclude(status='requested').order_by('-timestamp') + request_active = (AppraisalRequest.objects.select_related('appraisal').filter(appraisal__applicant=request.user).filter(appraisal__status='requested')) + request_archived = (AppraisalRequest.objects.select_related('appraisal').filter(appraisal__applicant=request.user).exclude(appraisal__status='requested')) + new_courses_offered = NewCoursesOffered.objects.filter(appraisal__applicant=request.user) + new_courses_material = NewCourseMaterial.objects.filter(appraisal__applicant=request.user) + # print('-----------', request_active[0].remark_hod, '----------------') + response.update({ + 'user_courses': user_courses, + 'consultancy_projects': consultancy_projects, + 'research_projects': research_projects, + 'thesis': thesis, + 'patents': patents, + 'tech_transfer': tech_transfer, + 'publications': publications, + 'conferences': conferences, + 'achievments': achievments, + 'events': events, + 'appraisal_active_apps':active_apps, + 'appraisal_archive_apps':archive_apps, + 'appraisal_requests_active':request_active, + 'appraisal_requests_archived':request_archived, + 'new_courses_offered': new_courses_offered, + 'new_courses_material': new_courses_material, + 'start_date': False, + 'end_date': False + }) + return response + except Exception as e: + messages.error(request,e) def generate_appraisal_lists_hod(request): @@ -1143,41 +1271,44 @@ def generate_appraisal_lists_hod(request): Generating JSON object to get data from the front-end for user with designation "HOD". """ - response = {} - review_apps_hod = AppraisalRequest.objects.select_related('appraisal').filter(hod = request.user).filter(status_hod = 'pending').order_by('-request_timestamp') - reviewed_apps_hod = AppraisalRequest.objects.select_related('appraisal').filter(hod = request.user).exclude(status_hod = 'pending').order_by('-request_timestamp') - course_objects_all = Curriculum_Instructor.objects.all() - consultancy_projects_all = emp_consultancy_projects.objects.all() - research_projects_all = emp_research_projects.objects.all() - thesis_all = emp_mtechphd_thesis.objects.all() - events_all = emp_event_organized.objects.all() - patents_all = emp_patents.objects.all() - tech_transfer_all = emp_techtransfer.objects.all() - publications_all = emp_published_books.objects.all() - conferences_all = emp_confrence_organised.objects.all() - achievments_all = emp_achievement.objects.all() - appraisal_all = Appraisal.objects.select_related('applicant').all() - new_courses_offered_all = NewCoursesOffered.objects.all() - new_courses_material_all = NewCourseMaterial.objects.all() - response.update({ - 'hod': True, - 'reviewed_apps_hod': reviewed_apps_hod, - 'course_objects_all': course_objects_all, - 'review_apps_hod': review_apps_hod, - 'thesis_all': thesis_all, - 'events_all': events_all, - 'patents_all': patents_all, - 'tech_transfer_all': tech_transfer_all, - 'publications_all': publications_all, - 'conferences_all': conferences_all, - 'achievments_all': achievments_all, - 'consultancy_projects_all': consultancy_projects_all, - 'research_projects_all': research_projects_all, - 'appraisal_all': appraisal_all, - 'new_courses_offered_all': new_courses_offered_all, - 'new_courses_material_all': new_courses_material_all - }) - return response + try: + response = {} + review_apps_hod = AppraisalRequest.objects.select_related('appraisal').filter(hod = request.user).filter(status_hod = 'pending').order_by('-request_timestamp') + reviewed_apps_hod = AppraisalRequest.objects.select_related('appraisal').filter(hod = request.user).exclude(status_hod = 'pending').order_by('-request_timestamp') + course_objects_all = Curriculum_Instructor.objects.all() + consultancy_projects_all = emp_consultancy_projects.objects.all() + research_projects_all = emp_research_projects.objects.all() + thesis_all = emp_mtechphd_thesis.objects.all() + events_all = emp_event_organized.objects.all() + patents_all = emp_patents.objects.all() + tech_transfer_all = emp_techtransfer.objects.all() + publications_all = emp_published_books.objects.all() + conferences_all = emp_confrence_organised.objects.all() + achievments_all = emp_achievement.objects.all() + appraisal_all = Appraisal.objects.select_related('applicant').all() + new_courses_offered_all = NewCoursesOffered.objects.all() + new_courses_material_all = NewCourseMaterial.objects.all() + response.update({ + 'hod': True, + 'reviewed_apps_hod': reviewed_apps_hod, + 'course_objects_all': course_objects_all, + 'review_apps_hod': review_apps_hod, + 'thesis_all': thesis_all, + 'events_all': events_all, + 'patents_all': patents_all, + 'tech_transfer_all': tech_transfer_all, + 'publications_all': publications_all, + 'conferences_all': conferences_all, + 'achievments_all': achievments_all, + 'consultancy_projects_all': consultancy_projects_all, + 'research_projects_all': research_projects_all, + 'appraisal_all': appraisal_all, + 'new_courses_offered_all': new_courses_offered_all, + 'new_courses_material_all': new_courses_material_all + }) + return response + except Exception as e: + messages.error(request,e) def generate_appraisal_lists_director(request): @@ -1185,157 +1316,207 @@ def generate_appraisal_lists_director(request): Generating JSON object to get data from the front-end for user with designation "Director". """ - response = {} - review_apps_director = AppraisalRequest.objects.select_related('appraisal').filter(director = request.user).filter(status_director = 'pending').exclude(status_hod = 'pending').order_by('-request_timestamp') - reviewed_apps_director = AppraisalRequest.objects.select_related('appraisal').filter(director = request.user).exclude(status_director = 'pending').order_by('-request_timestamp') - course_objects_all = Curriculum_Instructor.objects.all() - consultancy_projects_all = emp_consultancy_projects.objects.all() - research_projects_all = emp_research_projects.objects.all() - thesis_all = emp_mtechphd_thesis.objects.all() - events_all = emp_event_organized.objects.all() - patents_all = emp_patents.objects.all() - tech_transfer_all = emp_techtransfer.objects.all() - publications_all = emp_published_books.objects.all() - conferences_all = emp_confrence_organised.objects.all() - achievments_all = emp_achievement.objects.all() - appraisal_all = Appraisal.objects.select_related('applicant').all() - new_courses_offered_all = NewCoursesOffered.objects.all() - new_courses_material_all = NewCourseMaterial.objects.all() - response.update({ - 'director': True, - 'course_objects_all': course_objects_all, - 'review_apps_director': review_apps_director, - 'reviewed_apps_director': reviewed_apps_director, - 'thesis_all': thesis_all, - 'events_all': events_all, - 'patents_all': patents_all, - 'tech_transfer_all': tech_transfer_all, - 'publications_all': publications_all, - 'conferences_all': conferences_all, - 'achievments_all': achievments_all, - 'consultancy_projects_all': consultancy_projects_all, - 'research_projects_all': research_projects_all, - 'appraisal_all': appraisal_all, - 'new_courses_offered_all': new_courses_offered_all, - 'new_courses_material_all': new_courses_material_all - }) - return response + try: + response = {} + review_apps_director = AppraisalRequest.objects.select_related('appraisal').filter(director = request.user).filter(status_director = 'pending').exclude(status_hod = 'pending').order_by('-request_timestamp') + reviewed_apps_director = AppraisalRequest.objects.select_related('appraisal').filter(director = request.user).exclude(status_director = 'pending').order_by('-request_timestamp') + course_objects_all = Curriculum_Instructor.objects.all() + consultancy_projects_all = emp_consultancy_projects.objects.all() + research_projects_all = emp_research_projects.objects.all() + thesis_all = emp_mtechphd_thesis.objects.all() + events_all = emp_event_organized.objects.all() + patents_all = emp_patents.objects.all() + tech_transfer_all = emp_techtransfer.objects.all() + publications_all = emp_published_books.objects.all() + conferences_all = emp_confrence_organised.objects.all() + achievments_all = emp_achievement.objects.all() + appraisal_all = Appraisal.objects.select_related('applicant').all() + new_courses_offered_all = NewCoursesOffered.objects.all() + new_courses_material_all = NewCourseMaterial.objects.all() + response.update({ + 'director': True, + 'course_objects_all': course_objects_all, + 'review_apps_director': review_apps_director, + 'reviewed_apps_director': reviewed_apps_director, + 'thesis_all': thesis_all, + 'events_all': events_all, + 'patents_all': patents_all, + 'tech_transfer_all': tech_transfer_all, + 'publications_all': publications_all, + 'conferences_all': conferences_all, + 'achievments_all': achievments_all, + 'consultancy_projects_all': consultancy_projects_all, + 'research_projects_all': research_projects_all, + 'appraisal_all': appraisal_all, + 'new_courses_offered_all': new_courses_offered_all, + 'new_courses_material_all': new_courses_material_all + }) + return response + except Exception as e: + messages.error(request,e) def generate_appraisal_lists_admin(request): """ Generating JSON object to get data from the front-end for user with designation "Admin". """ - response = {} - appraisal_requests = AppraisalRequest.objects.exclude(status_director = 'pending').exclude(status_hod = 'pending') - course_objects_all = Curriculum_Instructor.objects.all() - consultancy_projects_all = emp_consultancy_projects.objects.all() - research_projects_all = emp_research_projects.objects.all() - thesis_all = emp_mtechphd_thesis.objects.all() - events_all = emp_event_organized.objects.all() - patents_all = emp_patents.objects.all() - tech_transfer_all = emp_techtransfer.objects.all() - publications_all = emp_published_books.objects.all() - conferences_all = emp_confrence_organised.objects.all() - achievments_all = emp_achievement.objects.all() - appraisal_all = Appraisal.objects.select_related('applicant').all() - new_courses_offered_all = NewCoursesOffered.objects.all() - new_courses_material_all = NewCourseMaterial.objects.all() - - response.update({ - 'admin': True, - 'course_objects_all': course_objects_all, - 'appraisal_requests': appraisal_requests, - 'thesis_all': thesis_all, - 'events_all': events_all, - 'patents_all': patents_all, - 'tech_transfer_all': tech_transfer_all, - 'publications_all': publications_all, - 'conferences_all': conferences_all, - 'achievments_all': achievments_all, - 'consultancy_projects_all': consultancy_projects_all, - 'research_projects_all': research_projects_all, - 'appraisal_all': appraisal_all, - 'new_courses_offered_all': new_courses_offered_all, - 'new_courses_material_all': new_courses_material_all - }) - return response + try: + response = {} + appraisal_requests = AppraisalRequest.objects.exclude(status_director = 'pending').exclude(status_hod = 'pending') + course_objects_all = Curriculum_Instructor.objects.all() + consultancy_projects_all = emp_consultancy_projects.objects.all() + research_projects_all = emp_research_projects.objects.all() + thesis_all = emp_mtechphd_thesis.objects.all() + events_all = emp_event_organized.objects.all() + patents_all = emp_patents.objects.all() + tech_transfer_all = emp_techtransfer.objects.all() + publications_all = emp_published_books.objects.all() + conferences_all = emp_confrence_organised.objects.all() + achievments_all = emp_achievement.objects.all() + appraisal_all = Appraisal.objects.select_related('applicant').all() + new_courses_offered_all = NewCoursesOffered.objects.all() + new_courses_material_all = NewCourseMaterial.objects.all() + + response.update({ + 'admin': True, + 'course_objects_all': course_objects_all, + 'appraisal_requests': appraisal_requests, + 'thesis_all': thesis_all, + 'events_all': events_all, + 'patents_all': patents_all, + 'tech_transfer_all': tech_transfer_all, + 'publications_all': publications_all, + 'conferences_all': conferences_all, + 'achievments_all': achievments_all, + 'consultancy_projects_all': consultancy_projects_all, + 'research_projects_all': research_projects_all, + 'appraisal_all': appraisal_all, + 'new_courses_offered_all': new_courses_offered_all, + 'new_courses_material_all': new_courses_material_all + }) + return response + except Exception as e: + messages.error(request,e) + def update_appraisal_lists(request): - start = request.POST.get('start_date') - start_date = date.fromisoformat(start) - end = request.POST.get('end_date') - end_date = date.fromisoformat(end) - - response = {} - achievments = emp_achievement.objects.filter(user = request.user) - achievments_date = [] - for obj in achievments: - if(start_date <= obj.achievment_date <= end_date): - achievments_date.append(obj) - consultancy_projects = emp_consultancy_projects.objects.filter(user = request.user) - consultancy_projects_date = [] - for obj in consultancy_projects: - if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): - consultancy_projects_date.append(obj) - research_projects = emp_research_projects.objects.filter(user = request.user) - research_projects_date = [] - for obj in research_projects: - if(start_date <= obj.start_date <= end_date - or start_date <= obj.finish_date <= end_date - or start_date <= obj.date_submission <= end_date): - research_projects_date.append(obj) - thesis = emp_mtechphd_thesis.objects.filter(user = request.user) - thesis_date = [] - for obj in thesis: - if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): - thesis_date.append(obj) - patents = emp_patents.objects.filter(user = request.user) - patents_date = [] - for obj in patents: - if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): - patents_date.append(obj) - tech_transfer = emp_techtransfer.objects.filter(user = request.user) - tech_transfer_date = [] - for obj in tech_transfer: - if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): - tech_transfer_date.append(obj) - publications = emp_published_books.objects.filter(user = request.user) - publications_date = [] - for obj in publications: - if(start_date <= obj.publication_date <= end_date): - publications_date.append(obj) - conferences = emp_confrence_organised.objects.filter(user = request.user) - conferences_date = [] - for obj in conferences: - if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): - conferences_date.append(obj) - - events = emp_event_organized.objects.filter(user = request.user) - events_date = [] - for obj in events: - if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): - events_date.append(obj) - response.update({ - 'achievments': achievments_date, - 'consultancy_projects': consultancy_projects_date, - 'research_projects': research_projects_date, - 'thesis': thesis_date, - 'patents': patents_date, - 'tech_transfer': tech_transfer_date, - 'publications': publications_date, - 'conferences': conferences_date, - 'events': events_date, - 'start_date': start, - 'end_date': end - }) - return response + try: + start = request.POST.get('start_date') + start_date = date.fromisoformat(start) + end = request.POST.get('end_date') + end_date = date.fromisoformat(end) + + response = {} + # print('Kaise ho jiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') + achievments = emp_achievement.objects.filter(user = request.user) + achievments_date = [] + for obj in achievments: + # print('obj1',obj) + if(obj.achievment_date is not None): + if(start_date <= obj.achievment_date <= end_date): + achievments_date.append(obj) + # print('achievments_date',achievments_date) + consultancy_projects = emp_consultancy_projects.objects.filter(user = request.user) + consultancy_projects_date = [] + for obj in consultancy_projects: + # print('obj2',obj) + if((obj.start_date is not None) and (obj.end_date is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): + consultancy_projects_date.append(obj) + # print('consultancy_projects_date',consultancy_projects_date) + research_projects = emp_research_projects.objects.filter(user = request.user) + research_projects_date = [] + for obj in research_projects: + if((obj.start_date is not None) and (obj.finish_date is not None) and (obj.date_submission is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.finish_date <= end_date or start_date <= obj.date_submission <= end_date): + research_projects_date.append(obj) + thesis = emp_mtechphd_thesis.objects.filter(user = request.user) + thesis_date = [] + for obj in thesis: + # print('onj3',obj) + if((obj.start_date is not None) and (obj.end_date is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): + thesis_date.append(obj) + # print('thesis_date',thesis_date) + # print('after') + patents = emp_patents.objects.filter(user = request.user) + patents_date = [] + # print('obj4') + for obj in patents: + # print('obj4',obj) + if((obj.start_date is not None) and (obj.end_date is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): + patents_date.append(obj) + # print('patents_date',patents_date) + tech_transfer = emp_techtransfer.objects.filter(user = request.user) + tech_transfer_date = [] + # print('obj5') + for obj in tech_transfer: + # print('obj5',obj) + if((obj.start_date is not None) and (obj.end_date is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): + tech_transfer_date.append(obj) + # print('tech_transfer_date',tech_transfer_date) + publications = emp_published_books.objects.filter(user = request.user) + publications_date = [] + # print('obj6') + for obj in publications: + # print('obj6',obj) + if(obj.publication_date is not None): + if(start_date <= obj.publication_date <= end_date): + publications_date.append(obj) + # print('publications_date',publications_date) + conferences = emp_confrence_organised.objects.filter(user = request.user) + conferences_date = [] + # print('obj7') + for obj in conferences: + # print('obj7',obj) + if((obj.start_date is not None) and (obj.end_date is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): + conferences_date.append(obj) + # print('conferences_date',conferences_date) + + events = emp_event_organized.objects.filter(user = request.user) + events_date = [] + # print('obj8') + for obj in events: + # print('obj8',obj) + if((obj.start_date is not None) and (obj.end_date is not None)): + if(start_date <= obj.start_date <= end_date or start_date <= obj.end_date <= end_date): + events_date.append(obj) + # print('events_date',events_date) + response.update({ + 'achievments': achievments_date, + 'consultancy_projects': consultancy_projects_date, + 'research_projects': research_projects_date, + 'thesis': thesis_date, + 'patents': patents_date, + 'tech_transfer': tech_transfer_date, + 'publications': publications_date, + 'conferences': conferences_date, + 'events': events_date, + 'start_date': start_date, + 'end_date': end_date + }) + # print('THE END!!!!!!!!!!!!!') + return response + except Exception as e: + messages.error(request,e) + @login_required(login_url='/accounts/login') def establishment(request): """ - Renders HR1 home page. + Renders ltc. """ - return render(request, 'establishment/hr1.html') + # print('faculty',is_faculty(request)) + # print('staff',is_staff(request)) + if(is_faculty(request)==False and is_staff==False): + return HttpResponseRedirect('/dashboard/') + + # if(is_student(request)==True): + # return HttpResponseRedirect('/dashboard/') + + return ltc(request) @login_required(login_url='/accounts/login') @@ -1343,13 +1524,21 @@ def cpda(request): """ Function handles generation and submission of CPDA form. """ - response = {} + + if(is_faculty(request)==False and is_director(request)==False): + # if(is_director(request)==False): + return HttpResponseRedirect('/dashboard/') + # if(is_student(request)==True): + # return HttpResponseRedirect('/dashboard/') + + response = {'director':False} # Check if establishment variables exist, if not create some fields or ask for them response.update(initial_checks(request)) # Submission of CPDA Form if is_admin(request) and request.method == "POST": handle_cpda_admin(request) + # print("<<<<<<<",is_eligible(request)) if is_eligible(request) and request.method == "POST": handle_cpda_eligible(request) @@ -1361,18 +1550,26 @@ def cpda(request): response.update(generate_cpda_eligible_lists(request)) response.update({'cpda':True,'ltc':False,'appraisal':False,'leave':False}) - + # print("request", request.user) + # print("response", response) return render(request, 'establishment/hr1_form.html', response) + @login_required(login_url='/accounts/login') def ltc(request): """ Function handles generation and submission of LTC form. """ - response = {} + + if(is_faculty(request)==False and is_staff==False): + return HttpResponseRedirect('/dashboard/') + + # if(is_student(request)==True): + # return HttpResponseRedirect('/dashboard/') + + response = {'director':False} # Check if establishment variables exist, if not create some fields or ask for them response.update(initial_checks(request)) - # Submission of LTC Form if is_admin(request) and request.method == "POST": handle_ltc_admin(request) @@ -1388,14 +1585,22 @@ def ltc(request): response.update(generate_ltc_eligible_lists(request)) response.update({'cpda':False,'ltc':True,'appraisal':False,'leave':False}) + # print(">>>>>",request.GET) + # print(">>>>>>>>>>",request.POST) + # print(">>>>>>>>>",response) return render(request, 'establishment/hr1_form.html', response) + @login_required(login_url='/accounts/login') def appraisal(request): """ Function handles generation and submission of Appraisal form. """ - response = {} + + if(is_faculty(request)==False and is_staff==False): + return HttpResponseRedirect('/dashboard/') + + response = {'director':False} # Check if establishment variables exist, if not create some fields or ask for them app = None response.update(initial_checks(request)) @@ -1415,5 +1620,5 @@ def appraisal(request): if is_admin(request): response.update(generate_appraisal_lists_admin(request)) response.update({'cpda':False,'ltc':False,'appraisal':True,'leave':False}) - + # print(response) return render(request, 'establishment/hr1_form.html', response) diff --git a/FusionIIIT/templates/dashboard/sidenavbar.html b/FusionIIIT/templates/dashboard/sidenavbar.html index bc0de85d3..6fb2dfa94 100644 --- a/FusionIIIT/templates/dashboard/sidenavbar.html +++ b/FusionIIIT/templates/dashboard/sidenavbar.html @@ -56,9 +56,11 @@

Gymkhana Module

IWD Module

- + {% if request.user.extrainfo.user_type == 'faculty' or request.user.extrainfo.user_type == 'staff' %} +

Establishment Module

+ {% endif %}

Library Module

diff --git a/FusionIIIT/templates/eisModulenew/conference.html b/FusionIIIT/templates/eisModulenew/conference.html index 6528096e5..c43c7799d 100644 --- a/FusionIIIT/templates/eisModulenew/conference.html +++ b/FusionIIIT/templates/eisModulenew/conference.html @@ -1,4 +1,4 @@ - {% load static %} +{% load static %} {% block conference %} {% endblock %} - - \ No newline at end of file + \ No newline at end of file diff --git a/FusionIIIT/templates/establishment/appraisal.html b/FusionIIIT/templates/establishment/appraisal.html index 56ec5b3ec..cf8f2bc02 100755 --- a/FusionIIIT/templates/establishment/appraisal.html +++ b/FusionIIIT/templates/establishment/appraisal.html @@ -1,3 +1,27 @@ +{% extends 'establishment/common.html' %} + +{% block sidetabmenu %} +{% comment %}The Tab-Menu starts here!{% endcomment %} + +{% comment %}The Tab-Menu ends here!{% endcomment %} +{% endblock %} + +{% block content %} {% load semanticui %} {% load static %} {% block appraisal %} @@ -29,16 +53,16 @@ {% if start_date %}
-
- - +
+ +
{% else %}
-
- - +
+ +
{% endif %} @@ -47,16 +71,16 @@ {% if end_date %}
-
- - +
+ +
{% else %}
-
- - +
+ +
{% endif %} @@ -68,11 +92,11 @@


-
+
{% if start_date %} -

Showing details from {{start_date}} to {{end_date}}

+

   Showing details from {{start_date}} to {{end_date}}

{% else %} -

       Showing All the details

+

          Showing All the details

{% endif %}


@@ -98,7 +122,7 @@

       Showing All the details

-

    1.   INSTRUCTION ELEMENT

+

1.  INSTRUCTION ELEMENT

@@ -159,7 +183,7 @@

1.3   New Course Material / Instructional Software Developed


-

    2.   RESEARCH ELEMENT

+

2.  RESEARCH ELEMENT

2.1   Thesis/Research Supervision

@@ -352,7 +376,7 @@

2.2   Sponsored Research and Consultancy Projects


-

    3.   ADMINISTRATION ASSIGNMENT

+

3.  ADMINISTRATION ASSIGNMENT


@@ -365,7 +389,7 @@

    3.   ADMINISTRATION ASSIGNMENT




-

    4.  SELF-APPRAISAL BY FACULTY

+

4. SELF-APPRAISAL BY FACULTY




@@ -395,18 +419,21 @@

    4.  SELF-APPRAISAL BY FACULTY

{% for app2 in appraisal_requests_active %} {% if app2.appraisal == app %} Application Id: {{app.id}}
- - {% if app2.remarks_hod %} + Hod Review: {{app2.remark_hod}} + +
- {% if app2.remarks_director %} - Director Review: Processed + Director Review: {{app2.remark_director}} +
{% endif %} {% endfor %} @@ -436,7 +463,7 @@

    4.  SELF-APPRAISAL BY FACULTY



-

    1.   INSTRUCTION ELEMENT

+

1.  INSTRUCTION ELEMENT

1.1   Courses Taught at UG/PG Level

@@ -504,7 +531,7 @@

1.3   New Course Material / Instructional Software Developed


-

    2.   RESEARCH ELEMENT

+

2.  RESEARCH ELEMENT

2.1   Thesis/Research Supervision

@@ -707,7 +734,7 @@

2.2   Sponsored Research and Consultancy Projects


-

    3.   ADMINISTRATION ASSIGNMENT

+

3.  ADMINISTRATION ASSIGNMENT


@@ -722,7 +749,7 @@

    3.   ADMINISTRATION ASSIGNMENT




- +

@@ -739,6 +766,9 @@

    3.   ADMINISTRATION ASSIGNMENT

+ {% empty %} + +
{% endfor %} @@ -760,9 +790,9 @@

    3.   ADMINISTRATION ASSIGNMENT

{% for app2 in appraisal_requests_archived %} {% if app2.appraisal == app %} Application Id: {{app.id}}
- Hod Review: Processed + Hod Review: {{app2.remark_hod}}
- Director Review: Processed + Director Review: {{app2.remark_director}}
{% endif %} {% endfor %} + {% empty %} + +
{% endfor %} @@ -1103,6 +1136,7 @@

    3.   ADMINISTRATION ASSIGNMENT

+{% endblock %} {% endblock %} @@ -1187,7 +1221,6 @@

    3.   ADMINISTRATION ASSIGNMENT

var courseTab = document.getElementById('CoursesInstructed'); courseTab.deleteRow(oButton.parentNode.parentNode.rowIndex); // button -> td -> tr. } - - + {% endblock %} diff --git a/FusionIIIT/templates/establishment/appraisal_admin.html b/FusionIIIT/templates/establishment/appraisal_admin.html index d71d4b33d..a7424ece0 100644 --- a/FusionIIIT/templates/establishment/appraisal_admin.html +++ b/FusionIIIT/templates/establishment/appraisal_admin.html @@ -1,23 +1,1438 @@ +{% extends 'establishment/common.html' %} + +{% block sidetabmenu %} +{% comment %}The Tab-Menu starts here!{% endcomment %} + +{% comment %}The Tab-Menu ends here!{% endcomment %} +{% endblock %} + +{% block content %} {% load semanticui %} {% load static %} {% block appraisal %} + + + + + +
+
+
+
+ {% csrf_token %} + +

+

+

+


+ +
+ +

1.  INSTRUCTION ELEMENT

+ + + + + + + +

1.1   Courses Taught at UG/PG Level

+
No Active Request
No Archive Avaliable
+ + + + + + {% for em in user_courses %} + + + + + + {% endfor %} +
SemesterCourse-NameCourse Number
{{em.curriculum_id.sem}}{{em.curriculum_id.course_id.course_name}}{{em.curriculum_id.course_code}}
+ + + + + +

1.2   New Courses/Laboratory experiments Introduced and Taught

+
+ + + + + + + + + +
Course-NameCourse NumberUG/PGYEARSemesterTutorial Hours/week
+

+ + + +

1.3   New Course Material / Instructional Software Developed

+
+ + + + + + + + +
Course-NameCourse NumberUG/PGType of ActivityWeb/Public
+

+ + + + + +
+

2.  RESEARCH ELEMENT

+ +

2.1   Thesis/Research Supervision

+ + + + + + + + + + {% for object in thesis %} + + + + + + + + {% endfor %} +
Name of Student (MTech/PhD)Title Of Thesis / Thesis TopicYearSemesterStatus(Completed / Submitted / In progress)
{{object.s_name}}{{object.title}}{{object.s_year}}{{object.semester}}{{object.status}}
+ + + +

2.2   Sponsored Research and Consultancy Projects

+ + + + + + + + + + + {% for object in consultancy_projects %} + + + + + + + + + {% endfor %} + {% for object in research_projects %} + + + + + + + + + {% endfor %} +
Title Of ProjectSponsoring Agency / OrganizationProject Funding (Rs.)Project DurationStatus(Completed / Submitted / In progress)Remarks
{{object.title}}{{object.client}}{{object.financial_outlay}}{{object.start_date}} to {{object.end_date}}{{object.status}}{{object.remarks}}
{{object.title}}{{object.funding_agency}}{{object.financial_outlay}}{{object.start_date}} to {{object.finish_date}}{{object.status}}{{object.remarks}}
+

+ + + + +
+ + {% for object in patents %} + + + + + + + + + + + + + + + + + {% endfor %} +
TypePatent
Project Number{{object.p_no}}
Title{{object.title}}
Status{{object.status}}
+
+ + + {% for object in tech_transfer %} + + + + + + + + + {% endfor %} +
TypeTechnology Transfer
Details{{object.details}}
+

+ + + + +
+ + {% for object in publications %} + + + + + + + + + + + + + + + + + + + + + {% endfor %} +
Publication Type{{object.p_type}}
Title{{object.title}}
Publisher{{object.publisher}}
Author(s){{object.authors}}
Publishing Year{{object.pyear}}
+ +

+ + +

+ + +
+ + + + + + + {% for object in conferences %} + + + + + + {% endfor %} +
NameVenueRole
{{object.name}}{{object.venue}}{{object.role1}}
+

+ + +
+ + + + + + + {% for object in achievments %} + + + + + {% endfor %} +
Award TypeDetails
{{object.a_type}}{{object.details}}
+
+ + + + + + + + + + + {% for object in events %} + + + + + + + + {% endfor %} +
TypeNameSponsoring AgencyVenueRole
{{object.type}}{{object.name}}{{object.sponsoring_agency}}{{object.venue}}{{object.role}}
+
+ +
+ +

3.  ADMINISTRATION ASSIGNMENT

+
+ + +

+ + +

+ + +

+
+ +

4. SELF-APPRAISAL BY FACULTY

+ +

+
+

+ + + +
+
+
+ + + +
+
+
+
+ {% for app in appraisal_active_apps %} +
+
+
Status : {{app.status}}
+
+ HOD Remarks: {{app.appraisal_tracking.remark_hod}} +
+
+ Director Remarks: {{app.appraisal_tracking.remark_director}} +
+
+ +
+
+
+ + {% empty %} + No Active Request +
+ {% endfor %} +
+
+
+
+ + + + +
+
+
+
+ {% for app in appraisal_archive_apps %} +
+
+
Status : {{app.status}}
+
+ HOD Remarks: {{app.appraisal_tracking.remark_hod}} +
+
+ Director Remarks: {{app.appraisal_tracking.remark_director}} +
+
+ +
+
+
+ + {% empty %} + No Archive Avaliable +
+ {% endfor %} +
+
+
+
+ + + + +
+
+
+
+ {% for app in review_apps_director %} +
+
+
Application ID : {{app.appraisal.id}}
+
+ Applicant: {{app.appraisal.applicant.username}} +
+
+ +
+
+
+ + {% empty %} + No Reviewed Application +
+ {% endfor %} +
+
+
+
+ + -
+
- {% for app in appraisal_requests %} + {% for app in reviewed_apps_director %} + {% for app2 in appraisal_all %} + {% if app.appraisal == app2 %}
-
Application ID : {{app.appraisal.id}}

+
Application ID : {{app.appraisal.id}}
- Applicant: {{app.appraisal.applicant.username}} + Applicant: {{app.appraisal.applicant.username}}
+ + +
+
+
+
-

    1.   INSTRUCTION ELEMENT

+ +
+
+
+
+ {% for app in appraisal_active_apps %} + +
+
+
Status : {{app.status}}

+ {% for app2 in appraisal_requests_active %} + {% if app2.appraisal == app %} + Application Id: {{app.id}}
+ + {% if app2.remarks_hod %} + Hod Review: Processed + {% else %} + Hod Review: Under Review + {% endif %} +
+ {% if app2.remarks_director %} + Director Review: Processed + {% else %} + Director Review: Under Review + {% endif %} +
+ {% endif %} + {% endfor %} +
+ +
+
+
+ -
+
+

- -
-
-
-
- {% for app in appraisal_active_apps %} - -
-
-
Status : {{app.status}}

- {% for app2 in appraisal_requests_active %} - {% if app2.appraisal == app %} - Application Id: {{app.id}}
- - {% if app2.remarks_hod %} - Hod Review: Processed - {% else %} - Hod Review: Under Review - {% endif %} -
- {% if app2.remarks_director %} - Director Review: Processed - {% else %} - Director Review: Under Review - {% endif %} -
- {% endif %} - {% endfor %} -
- -
-
- +
+
+ Cancel
- {% endfor %} +
+ {% empty %} + No Active Request +
+ {% endfor %}
+
@@ -738,1161 +817,1224 @@

    3.   ADMINISTRATION ASSIGNMENT

-
-
- {% for app in appraisal_archive_apps %} -
-
-
Status : {{app.status}}

- {% for app2 in appraisal_requests_archived %} - {% if app2.appraisal == app %} - Application Id: {{app.id}}
- Hod Review: Processed -
- Director Review: Processed -
-
- -
-
-
- - - - -
-
-
-
- {% for app in review_apps_hod %} -
-
-
Application ID : {{app.appraisal.id}}
-
- Applicant: {{app.appraisal.applicant.username}} -
-
- -
-
-
- - {% endfor %} -
-
-
-
+
+ {% empty %} + No Archive Available +
{% endfor %}
@@ -284,6 +314,7 @@ +{% endblock %} {% endblock %} {% block javascript %} @@ -296,4 +327,4 @@ w.close(); } -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/FusionIIIT/templates/establishment/cpda_admin.html b/FusionIIIT/templates/establishment/cpda_admin.html index 172a0df13..fb7604eda 100755 --- a/FusionIIIT/templates/establishment/cpda_admin.html +++ b/FusionIIIT/templates/establishment/cpda_admin.html @@ -1,3 +1,27 @@ +{% extends 'establishment/common.html' %} + +{% block sidetabmenu %} +{% comment %}The Tab-Menu starts here!{% endcomment %} + +{% comment %}The Tab-Menu ends here!{% endcomment %} +{% endblock %} + +{% block content %} {% load semanticui %} {% load static %} {% block cpda %} @@ -89,6 +113,9 @@
+ {% empty %} + No Pending Application +
{% endfor %}
@@ -154,7 +181,9 @@
- + {% empty %} + No Reviewed Application +
{% endfor %}
@@ -162,8 +191,10 @@ {% endblock %} +{% endblock %} + {% block javascript %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/FusionIIIT/templates/establishment/cpda_reviewer.html b/FusionIIIT/templates/establishment/cpda_reviewer.html index 1d7740c7f..33de97ce9 100644 --- a/FusionIIIT/templates/establishment/cpda_reviewer.html +++ b/FusionIIIT/templates/establishment/cpda_reviewer.html @@ -1,3 +1,27 @@ +{% extends 'establishment/common.html' %} + +{% block sidetabmenu %} +{% comment %}The Tab-Menu starts here!{% endcomment %} + +{% comment %}The Tab-Menu ends here!{% endcomment %} +{% endblock %} + +{% block content %} {% load semanticui %} {% load static %} {% block cpda %} @@ -50,7 +74,7 @@

Advance Limit : Rs 3 Lakh per 3 year block

- Max Eligible Amount : : {{remaining_advance}} + Max Eligible Amount : {{remaining_advance}}
@@ -158,6 +182,9 @@
+ {% empty %} + No Active Request +
{% endfor %} {% for app_id, billform in cpda_billforms.items %} @@ -282,6 +309,9 @@
+ {% empty %} + No Archive Available +
{% endfor %} @@ -381,6 +411,9 @@ + {% empty %} + No Application To Review +
{% endfor %} @@ -462,6 +495,9 @@ + {% empty %} + No Reviewed Application +
{% endfor %} @@ -469,6 +505,8 @@ {% endblock %} +{% endblock %} + {% block javascript %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/FusionIIIT/templates/establishment/ltc_admin.html b/FusionIIIT/templates/establishment/ltc_admin.html index be4007baa..b5d8a553a 100755 --- a/FusionIIIT/templates/establishment/ltc_admin.html +++ b/FusionIIIT/templates/establishment/ltc_admin.html @@ -1,3 +1,27 @@ +{% extends 'establishment/common.html' %} + +{% block sidetabmenu %} +{% comment %}The Tab-Menu starts here!{% endcomment %} + +{% comment %}The Tab-Menu ends here!{% endcomment %} +{% endblock %} + +{% block content %} {% load semanticui %} {% load static %} {% block ltc %} @@ -8,9 +32,9 @@ Under Review - + Archived @@ -19,17 +43,33 @@ + @@ -39,117 +79,130 @@
{% for app in ltc_pending_apps %} {% if app.tracking_info.review_status == 'to_assign' %} -
-
- Application id : {{app.id}}
-
Status : {{app.status|title}}
-
- Requested Advance : ₹ {{app.requested_advance}} -
-
Purpose : {{app.purpose}}
-
- -
+
+
+ Application id : {{app.id}}
+
Status : {{app.status|title}}
+
+ Requested Advance : ₹ {{app.requested_advance}} +
+
Purpose : {{app.purpose}}
+
+
+
- @@ -164,106 +217,118 @@
{% for app in ltc_under_review_apps %} -
-
- Application id : {{app.id}}
-
Status : {{app.status|title}}
-
- Requested Advance : ₹ {{app.requested_advance}} -
-
Purpose : {{app.purpose}}
-
- - -
+
+
+ Application id : {{app.id}}
+
Status : {{app.status|title}}
+
+ Requested Advance : ₹ {{app.requested_advance}}
-
+
Purpose : {{app.purpose}}
+
+ - + +
@@ -276,118 +341,127 @@
- {% for app in ltc_pending_apps %} + {% for app in ltc_availed_review %} {% if app.tracking_info.review_status == 'reviewed' %} -
-
- Application id : {{app.id}}
-
Status : {{app.status|title}}
-
- Requested Advance : ₹ {{app.requested_advance}} -
-
Purpose : {{app.purpose}}
-
- -
+
+
+ Application id : {{app.id}}
+
Status : {{app.status|title}}
+
+ Requested Advance : ₹ {{app.requested_advance}}
-
- -
- - @@ -396,105 +470,118 @@
{% for app in ltc_archived_apps %} -
-
- Application id : {{app.id}}
-
Status : {{app.status|title}}
-
- Requested Advance : ₹ {{app.requested_advance}} -
-
Purpose : {{app.purpose}}
-
Your Remarks : {{app.tracking_info.admin_remarks}}
-
- -
+
+
+ Application id : {{app.id}}
+
Status : {{app.status|title}}
+
+ Requested Advance : ₹ {{app.requested_advance}} +
+
Purpose : {{app.purpose}}
+
Your Remarks : {{app.tracking_info.admin_remarks}}
+
+
+
- @@ -566,87 +653,96 @@ {% for user_object in ltc_eligible_users %} -
-
-
- User : {{user_object.user}} -
- Date of joining : {{user_object.date_of_joining}} -
-
Current Block Size : {{user_object.current_block_size}} years
-
Total LTC Allowed in a Block : {{user_object.total_ltc_allowed}}
-
Hometown LTC already taken : {{user_object.hometown_ltc_availed}}/{{user_object.hometown_ltc_allowed}}
-
Elsewhere LTC already taken : {{user_object.elsewhere_ltc_availed}}/{{user_object.elsewhere_ltc_allowed}}
-
- -
+
+
+
+ User : {{user_object.user}} +
+ Date of joining : {{user_object.date_of_joining}} +
+
Current Block Size : {{user_object.current_block_size}} years
+
Total LTC Allowed in a Block : {{user_object.total_ltc_allowed}}
+
Hometown LTC already taken : + {{user_object.hometown_ltc_availed}}/{{user_object.hometown_ltc_allowed}}
+
Elsewhere LTC already taken : + {{user_object.elsewhere_ltc_availed}}/{{user_object.elsewhere_ltc_allowed}}
+
+
+
- @@ -654,8 +750,10 @@ {% endblock %} +{% endblock %} + {% block javascript %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index b06b17580..da704c688 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ beautifulsoup4==4.9.3 billiard==3.6.3.0 Brotli==1.0.9 bs4==0.0.1 -celery==5.0.5 +celery==5.2.3 certifi==2020.12.5 cffi==1.14.4 chardet==4.0.0 @@ -14,13 +14,13 @@ click==7.1.2 click-didyoumean==0.0.3 click-plugins==1.1.1 click-repl==0.1.6 -cryptography==3.3.1 +cryptography==36.0.2 defusedxml==0.6.0 Django==3.1.5 django-allauth==0.44.0 django-cleanup==5.1.0 django-cors-headers==3.7.0 -django-debug-toolbar==3.2 +django-debug-toolbar==3.2.4 django-extensions==3.1.1 django-filter==2.4.0 django-markdown-deux==1.0.5 @@ -35,14 +35,14 @@ future==0.18.2 html-text==0.5.2 html5lib==1.1 idna==2.10 -ipython==7.20.0 +ipython==8.2.0 ipython-genutils==0.2.0 jsonfield==3.1.0 jsonschema==3.2.0 kombu==5.0.2 -lxml==4.6.2 -markdown2==2.3.10 -numpy==1.19.5 +lxml==4.8.0 +markdown2==2.4.2 +numpy==1.22.3 oauthlib==3.1.0 openpyxl==3.0.7 Pillow==8.1.0 @@ -61,9 +61,9 @@ requests==2.25.1 requests-oauthlib==1.3.0 six==1.15.0 soupsieve==2.1 -sqlparse==0.4.1 +sqlparse==0.4.2 swapper==1.1.2.post1 -urllib3==1.26.2 +urllib3==1.26.8 vine==5.0.0 wcwidth==0.2.5 webencodings==0.5.1