def processUploadAttendance(request,course_code):
    redirect = checkIdentity(request, 'faculty')
    if redirect == "":
        if request.method == 'POST':
            form1 = read(request.POST, request.FILES)
            total = request.POST['date1']
            course = Course.objects.get(id= course_code)
            if form1.is_valid():
                newdoc = Document1(docfile = request.FILES['docfile'])
                newdoc.save()
                path = os.path.abspath(newdoc.docfile.url[1:])
                mark = np.genfromtxt(path, dtype='str', delimiter=',',unpack='True',skip_header=1)
                for i in range(250):
                    try:
                        # k = mark[1][i]
                        student = Student.objects.get(rollno=int(mark[1][i]))
                        studentInCourse = course.getStudents().filter(rollno=student.id)
                        if studentInCourse:
                            k = str(total).split('/')
                            l = k[2]+"-"+k[1]+'-'+k[0]
                            if mark[2][i][0] == 'P':
                                present = True
                            else:
                                present=False
                            save = AttendanceDaily.objects.create(rollno=student,coursecode=course,date=l,present=present)
                            save.save()
                    except:
                        continue
        return index(request)
    return HttpResponseRedirect(redirect)
def processUploadAttendance(request, course_code):
    redirect = checkIdentity(request, 'ta')
    if redirect == "":
        if request.method == 'POST':
            form1 = read(request.POST, request.FILES)
            total = request.POST['date1']
            course = Course.objects.get(id=course_code)
            if form1.is_valid():
                newdoc = Document1(docfile=request.FILES['docfile'])
                newdoc.save()
                path = os.path.abspath(newdoc.docfile.url[1:])
                mark = np.genfromtxt(path,
                                     dtype='str',
                                     delimiter=',',
                                     unpack='True',
                                     skip_header=1)
                for i in range(250):
                    try:
                        # k = mark[1][i]
                        student = Student.objects.get(rollno=int(mark[1][i]))
                        studentInCourse = course.getStudents().filter(
                            rollno=student.id)
                        if studentInCourse:
                            k = str(total).split('/')
                            l = k[2] + "-" + k[1] + '-' + k[0]
                            if mark[2][i][0] == 'P':
                                present = True
                            else:
                                present = False
                            save = AttendanceDaily.objects.create(
                                rollno=student,
                                coursecode=course,
                                date=l,
                                present=present)
                            save.save()
                    except:
                        continue
        return index(request)
    return HttpResponseRedirect(redirect)
def attendance(request, course_code):
    redirect = checkIdentity(request, 'faculty')
    if redirect == "":
        template = loader.get_template('faculty/_attendance.html')
        current = Faculty.objects.filter(username=request.session['username'])[0]
        course = Course.objects.filter(pk=course_code)[0]
        course_semester = course.semester_offered
        if course_semester[0] == "M":
            course_semester = "Monsoon"
        else:
            course_semester = "Spring"
        faculty = course.getFaculty().name
        if request.method == "POST":
            ListofStudents = course.getStudents()
            period = request.POST['periods']
            date = request.POST['date']
            period = AttendanceMonthly.objects.filter(id = int(period))
            if period:
                selectValue = period[0]
                attendance = []
                for student in ListofStudents:
                    l = student.id
                    k = student.rollno
                    total = AttendanceDaily.objects.filter(rollno=student.rollno, coursecode=course.id, present=True, date__range=(period[0].start_date, period[0].end_date))
                    attendance.append(total.count())
                    # return adf
                ListofStudents = zip(ListofStudents,attendance)
                total = period[0].classes_taken_place
                totalList = AttendanceMonthly.objects.filter(coursecode=course.id)
            else:
                selectValue = 0
                attendance = []
                for student in ListofStudents:
                    l = student.id
                    k = student.rollno
                    total = AttendanceDaily.objects.filter(rollno=student.rollno, coursecode=course.id, present=True)
                    attendance.append(total.count())
                    # return adf
                ListofStudents = zip(ListofStudents,attendance)
                total = AttendanceMonthly.objects.filter(coursecode=course.id).aggregate(Sum('classes_taken_place'))
                total = total['classes_taken_place__sum']
                totalList = AttendanceMonthly.objects.filter(coursecode=course.id)
            if date == '1990-01-01':
                DselectValue = 0
            else:
                DselectValue = date
            DtotalList = AttendanceDaily.objects.filter(coursecode=course.id).values_list('date', flat=True).distinct()
            DListofStudents = AttendanceDaily.objects.filter(coursecode=course.id,date=date)
            context = RequestContext(request, {'current': current, 'course': course, 'faculty': faculty,
             'course_semester': course_semester, 'ListofStudents': ListofStudents, 'total': total, 'totalList': totalList, 'DtotalList': DtotalList,'DListofStudents':DListofStudents, 'selectValue': selectValue,'DselectValue': DselectValue})
        else:
            selectValue = 0
            ListofStudents = course.getStudents()
            attendance = []
            for student in ListofStudents:
                l = student.id
                k = student.rollno
                total = AttendanceDaily.objects.filter(rollno=student.rollno, coursecode=course.id, present=True)
                attendance.append(total.count())
                # return adf
            ListofStudents = zip(ListofStudents,attendance)
            total = AttendanceMonthly.objects.filter(coursecode=course.id).aggregate(Sum('classes_taken_place'))
            totalList = AttendanceMonthly.objects.filter(coursecode=course.id)
            # return wers
            form1 = read()
            DtotalList = AttendanceDaily.objects.filter(coursecode=course.id).values_list('date', flat=True).distinct() #AttendanceDaily.objects.filter(coursecode=course.id).distinct('date')
            total = total['classes_taken_place__sum']
            context = RequestContext(request, {'current': current, 'course': course, 'faculty': faculty,
             'course_semester': course_semester, 'ListofStudents': ListofStudents, 'total': total, 'totalList': totalList,'DtotalList': DtotalList, 'selectValue':selectValue,'form1':form1})
        return HttpResponse(template.render(context))
    return HttpResponseRedirect(redirect)
def attendance(request, course_code):
    redirect = checkIdentity(request, 'ta')
    if redirect == "":
        template = loader.get_template('ta/_attendance.html')
        current = TA.objects.filter(username=request.session['username'])[0]
        course = Course.objects.filter(pk=course_code)[0]
        course_semester = course.semester_offered
        if course_semester[0] == "M":
            course_semester = "Monsoon"
        else:
            course_semester = "Spring"
        faculty = course.getFaculty().name
        if request.method == "POST":
            ListofStudents = course.getStudents()
            period = request.POST['periods']
            period = AttendanceMonthly.objects.filter(id=int(period))
            if period:
                selectValue = period[0]
                attendance = []
                for student in ListofStudents:
                    l = student.id
                    k = student.rollno
                    total = AttendanceDaily.objects.filter(
                        rollno=student.rollno,
                        coursecode=course.id,
                        present=True,
                        date__range=(period[0].start_date, period[0].end_date))
                    attendance.append(total.count())
                    # return adf
                ListofStudents = zip(ListofStudents, attendance)
                total = period[0].classes_taken_place
                totalList = AttendanceMonthly.objects.filter(
                    coursecode=course.id)
            else:
                selectValue = 0
                attendance = []
                for student in ListofStudents:
                    l = student.id
                    k = student.rollno
                    total = AttendanceDaily.objects.filter(
                        rollno=student.rollno,
                        coursecode=course.id,
                        present=True)
                    attendance.append(total.count())
                    # return adf
                ListofStudents = zip(ListofStudents, attendance)
                total = AttendanceMonthly.objects.filter(
                    coursecode=course.id).aggregate(Sum('classes_taken_place'))
                totalList = AttendanceMonthly.objects.filter(
                    coursecode=course.id)
                # return wers
                total = total['classes_taken_place__sum']
            context = RequestContext(
                request, {
                    'current': current,
                    'course': course,
                    'faculty': faculty,
                    'course_semester': course_semester,
                    'ListofStudents': ListofStudents,
                    'total': total,
                    'totalList': totalList,
                    'selectValue': selectValue
                })
        else:
            selectValue = 0
            ListofStudents = course.getStudents()
            attendance = []
            for student in ListofStudents:
                l = student.id
                k = student.rollno
                total = AttendanceDaily.objects.filter(rollno=student.rollno,
                                                       coursecode=course.id,
                                                       present=True)
                attendance.append(total.count())
                # return adf
            ListofStudents = zip(ListofStudents, attendance)
            total = AttendanceMonthly.objects.filter(
                coursecode=course.id).aggregate(Sum('classes_taken_place'))
            totalList = AttendanceMonthly.objects.filter(coursecode=course.id)
            # return wers
            form1 = read()
            total = total['classes_taken_place__sum']
            context = RequestContext(
                request, {
                    'current': current,
                    'course': course,
                    'faculty': faculty,
                    'course_semester': course_semester,
                    'ListofStudents': ListofStudents,
                    'total': total,
                    'totalList': totalList,
                    'selectValue': selectValue,
                    'form1': form1
                })
        return HttpResponse(template.render(context))
    return HttpResponseRedirect(redirect)