123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653 |
- import sys
- import json
- sys.path.insert(1,'C:/Users/diego/Documents/companion_app/organizar/')
-
-
- from organizar import files3, proxSemFiles
-
-
- from rest_auth.registration.views import SocialLoginView
- from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
- from allauth.account.views import LogoutView
-
-
- from django.db import connection
-
- from django.http.response import JsonResponse
- from rest_framework.parsers import JSONParser
- from rest_framework import status
-
- from .models import Facultad, Curso, ProximoSemestre
- from .serializers import FacultadSerializer, CursoSerializer
- from rest_framework.decorators import api_view
-
- # clientID: 965339169610-8et02d4qpfk96vclngd0otths1rs8661.apps.googleusercontent.com
- # clientSecret: zeY8NoW6ORBHP8pDQLE2x_Z2
-
- # Create your views here.
-
- class GoogleLogin(SocialLoginView):
- adapter_class = GoogleOAuth2Adapter
-
-
- @api_view(['POST',])
- def insertarFacultades(request):
- faculties = [ 'Administración de Empresas', 'Administración de Empresas graduado', 'Arquitectura', 'Arquitectura Graduado', 'Asuntos Académicos',
- 'Ciencias Militares', 'Ciencias Naturales', 'Ciencias Naturales Graduado', 'Ciencias Sociales', 'Ciencias Sociales Graduado',
- 'Escuela de Comunicación', 'Escuela de Comunicación Graduada', 'Educación', 'Educación Continua (BEOF)', 'Educación Graduado',
- 'Escuela de Derecho', 'Escuela Graduada de Ciencias y Tecnologías de la Información', 'Estudios Generales', 'Humanidades',
- 'Humanidades Graduado', 'Planificación']
- if request.method == 'POST':
- for faculty in faculties:
- facultad_serializer = FacultadSerializer(data={'fname': faculty})
- if facultad_serializer.is_valid():
- facultad_serializer.save()
-
- return JsonResponse({"message": 'se crearon todas las facultades'}, status=status.HTTP_201_CREATED)
-
- @api_view(['POST',])
- def insertarTodosLosCursos(request):
- if request.method == 'POST':
- i = 1
- for file in files3:
- check = file['file'].split('.')
- path = "C:/Users/diego/Documents/companion_app/segundo_sem" if check[0][-1] == '2' else "C:/Users/diego/Documents/companion_app/primer_sem"
- with open(path + '/' + file['file']) as f:
- data = json.load(f)
- fac_id = file['num']
- for key in data:
- if key != 'Horario ':
- code = key
- name = data[key][0]
- creds = data[key][1]
- # si la clase es un laboratorio de 0 creditos
- if 'LAB' in key and (name == 'LABORATORIO' or name == 'LABORATORIO ' or name == 'TALLER' or name == 'TALLER ' or name == 'CONFERENCIA' or name == 'CONFERENCIA '):
- creds = 0
- try:
- curso = Curso.objects.get(code = code)
- except Curso.DoesNotExist:
- curso = None
-
- if curso == None:
- curso_serializer = CursoSerializer(data={'name': name, 'code': code, 'creditos': creds, 'fac_id': fac_id})
- if curso_serializer.is_valid():
- curso_serializer.save()
- else:
- print('ya se creo del lab', i)
- i += 1
- elif 'LAB' in key and (name != 'LABORATORIO' or name != 'LABORATORIO ' or name != 'TALLER' or name != 'TALLER ' or name != 'CONFERENCIA' or name != 'CONFERENCIA '):
- continue
-
- # todas las otras clases que no tengan _LAB en su codigo
- else:
- try:
- curso = Curso.objects.get(code = code)
- except Curso.DoesNotExist:
- curso = None
-
- if curso == None:
- curso_serializer = CursoSerializer(data={'name': name, 'code': code, 'creditos': creds, 'fac_id': fac_id})
- if curso_serializer.is_valid():
- curso_serializer.save()
- else:
- print('ya se creo', i)
- i += 1
- return JsonResponse({'message': 'se insertaron todos los cursos'}, status=status.HTTP_201_CREATED)
-
- @api_view(['POST',])
- def insertarTodosLosCursosProxSemestre(request):
- if request.method == 'POST':
- for file in proxSemFiles:
- path = "C:/Users/diego/Documents/companion_app/Miupi Parser"
- with open(path + '/' + file['file']) as f:
- data = json.load(f)
- fac_id = file["num"] # this id comes from the file organizar. If the course does not exist in table Curso, use this id
- for course in data:
- name = course["Nombre"]
- code = course["Curso"]
- creditos = int(course["Creditos"])
- section = course["Seccion"]
- prof = course["Profesor"]
- hours = course["Horario"]
- days = course["Dias"]
- rooms = course["Salones"]
-
-
- # seeing if course from json file already exists in table Curso
- cursor = connection.cursor()
- cursor.execute(f'SELECT id from "CompanionApp_curso" where code = \'{code}\'')
- course_id = cursor.fetchone()
-
- # if course does not exist in table Curso, create the course in table Course and create the course in table ProximoSemestre
- if course_id == None:
- print('hola')
- # create course
- cursor = connection.cursor()
- cursor.execute(f'INSERT INTO "CompanionApp_curso" (name, code, creditos, fac_id_id) VALUES (\'{name}\', \'{code}\', {creditos}, {fac_id})')
-
- # once created the course, fetch the course_id
- cursor = connection.cursor()
- cursor.execute(f'SELECT id from "CompanionApp_curso" where code = \'{code}\'')
- course_id = cursor.fetchone()
-
- # getting course_id from line 128 or 116
- course_id = course_id[0]
-
- # before inserting course, check if that course with section is already in the table ProximoSemestre
- cursor = connection.cursor()
- cursor.execute(f'Select id from "CompanionApp_proximosemestre" where code=\'{code}\' and section=\'{section}\'')
- prox_sem_id = cursor.fetchone() # id from table
-
- # if course with section does not exist, insert it in the table ProximoSemestre
- if prox_sem_id == None:
- cursor = connection.cursor()
- cursor.execute(f'INSERT INTO "CompanionApp_proximosemestre" (name, code, creditos, section, prof, hours, days, rooms, course_id_id) VALUES (\'{name}\', \'{code}\', {creditos}, \'{section}\', \'{prof}\', \'{hours}\', \'{days}\', \'{rooms}\', {course_id})')
-
- return JsonResponse({'message': 'se insertaron todos los cursos'}, status=status.HTTP_201_CREATED)
-
-
- @api_view(['PATCH',])
- def updateFaculty(request):
- if request.method == 'PATCH':
- # params from request
- fac_id = int(request.data['fac_id_id'])
- user_id = int(request.data['id'])
- print(type(fac_id))
- print('backend', fac_id)
-
- # update faculty
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set fac_id_id = {fac_id} where id = {user_id}')
- return JsonResponse({'list': 'updated'}, status=status.HTTP_201_CREATED)
-
-
- # find courses in our Curso table
- @api_view(['GET',])
- def findCourse(request):
- # alternative to .filter
- # cursor = connection.cursor()
- # cursor.execute(f'SELECT id, code from "CompanionApp_curso" where code LIKE \'{course_code}%\' LIMIT 10')
- # courses = cursor.fetchall()
- if request.method == 'GET':
- course_code = request.query_params['code'].upper()
- courses = Curso.objects.filter(code__contains=course_code)[:10]
- courses = list(courses.values())
- return JsonResponse({'list': courses}, status=status.HTTP_200_OK)
-
- # find courses in our ProximoSemestre table
- @api_view(['GET',])
- def selectCourseProxSemestre(request):
- if request.method == 'GET':
- course_code = request.query_params['code'].upper()
- courses = ProximoSemestre.objects.filter(code__contains=course_code)[:10]
- courses = list(courses.values())
- return JsonResponse({'list': courses}, status=status.HTTP_200_OK)
-
-
- @api_view(['POST'])
- def addTakenCourse(request):
- if request.method == 'POST':
- # request params
- user_id = int(request.data['user_id'])
- course_id = int(request.data['course_id'])
- grade = request.data['grade'].upper()
- year = int(request.data['year'])
- semester = int(request.data['semester'])
- repeating = False
-
-
- # set point of grade
- points = 0
- if grade == 'A':
- points = 4
- elif grade == 'B':
- points = 3
- elif grade == 'C':
- points = 2
- elif grade == 'D':
- points = 1
- elif grade == 'F':
- points = 0
- else:
- return JsonResponse({'msg': 'Insert A, B, C, D or F' }, status=status.HTTP_200_OK)
-
- # find course credits
- cursor = connection.cursor()
- cursor.execute(f'Select creditos from "CompanionApp_curso" where id = {course_id} ')
- course = cursor.fetchone()
- creditos = int(course[0])
-
- # check if student already took that class in the same year and semester he/she is trying to post
- cursor = connection.cursor()
- cursor.execute(f'select semestre, year, grade, course_id_id from "CompanionApp_matricula" where semestre = {semester} and year = {year} and course_id_id = {course_id} and user_id_id = {user_id}')
- check = cursor.fetchone()
- if check != None:
- check = list(check)
- if int(check[0]) == semester and int(check[1]) == year and check[3] == course_id:
- return JsonResponse({'msg': 'You already took the course that year and semester.' }, status=status.HTTP_200_OK)
- elif int(check[1]) != year:
- pass
- elif int(check[1] == year) and int(check[0]) != semester:
- pass
- # matricular al estudiante
- cursor = connection.cursor()
- cursor.execute(f'INSERT INTO "CompanionApp_matricula" (semestre, year, grade, user_id_id, course_id_id) VALUES ({semester}, {year}, \'{grade}\', {user_id}, {course_id})')
-
- # find credits taken
- cursor = connection.cursor()
- cursor.execute(f'Select credits_taken from "CompanionApp_user" where id={user_id}')
- credits_taken = cursor.fetchone()
- credits_taken = int(credits_taken[0])
-
- # find last credits_taken_score
- cursor = connection.cursor()
- cursor.execute(f'Select credits_taken_score from "CompanionApp_user" where id={user_id}')
- credits_taken_score = cursor.fetchone()
- credits_taken_score = int(credits_taken_score[0])
-
- # update credits taken
- credits_taken += creditos
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set credits_taken = {credits_taken} where id ={user_id}')
-
- # update credits_taken_score
- credits_taken_score = credits_taken_score + (creditos * points)
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set credits_taken_score = {credits_taken_score} where id ={user_id}')
-
-
- # set GPA and insert it in user
- credit_score = credits_taken * 4
- gpa = (credits_taken_score / credit_score) * 4.0
- gpa = float("{:.2f}".format(gpa))
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set gpa = {gpa} where id={user_id}')
- print('ya')
-
- return JsonResponse({'msg': 'Ok, you can see that course in your curriculum'}, status=status.HTTP_201_CREATED)
-
-
- @api_view(['GET'])
- def getUserId(request):
- if request.method == 'GET':
- authorization = request.META.get('HTTP_AUTHORIZATION')
- authorization = authorization.split()
- token = authorization[1]
- cursor = connection.cursor()
- cursor.execute(f'SELECT user_id from "authtoken_token" where key = \'{token}\'')
- user_id = cursor.fetchone()
- user_id = user_id[0]
- return JsonResponse({'user_id': user_id}, status=status.HTTP_200_OK)
-
-
- @api_view(['GET'])
- def getFacultyUser(request):
- if request.method == 'GET':
- print(request.query_params)
- user_id = request.query_params['id']
- user_id = int(user_id)
- cursor = connection.cursor()
- cursor.execute(f'select fname from "CompanionApp_facultad" where id in (select fac_id_id from "CompanionApp_user" where id={user_id})')
- facultyName = cursor.fetchone()
- return JsonResponse({'FacultyName': facultyName}, status=status.HTTP_200_OK)
-
-
- @api_view(['GET'])
- def getAllCoursesUserHasTaken(request):
- if request.method == 'GET':
- user_id = int(request.query_params['user_id'])
- cursor = connection.cursor()
- cursor.execute(f'SELECT c.name, c.code, c.creditos, m.user_id_id, m.year, m.semestre, m.grade, c.id FROM "CompanionApp_curso" c INNER JOIN "CompanionApp_matricula" m ON (c.id = m.course_id_id) where m.user_id_id = {user_id} and m.grade <> \'N%\' order by m.year ASC, m.semestre ASC')
- fetchCourses = cursor.fetchall()
- courses = []
- # convert courses to an array of objects
- for i in range(0, len(fetchCourses)):
- dic = {'name': fetchCourses[i][0], 'code': fetchCourses[i][1], 'creditos': fetchCourses[i][2], 'year': fetchCourses[i][4], 'semestre': fetchCourses[i][5], 'grade': fetchCourses[i][6], 'course_id': fetchCourses[i][7]}
- courses.append(dic)
-
- return JsonResponse({'list': courses}, status=status.HTTP_200_OK)
-
- @api_view(['GET'])
- def getAllCoursesBySemester(request):
- if request.method == 'GET':
- user_id = int(request.query_params['user_id'])
- year = int(request.query_params['year'])
- semestre = int(request.query_params['semestre'])
- cursor = connection.cursor()
- cursor.execute(f'SELECT c.name, c.code, c.creditos, m.user_id_id, m.year, m.semestre, m.grade, c.id FROM "CompanionApp_curso" c INNER JOIN "CompanionApp_matricula" m ON (c.id = m.course_id_id) where m.user_id_id = {user_id} and m.year = {year} and m.semestre = {semestre} and m.grade <> \'N%\' ')
- fetchCourses = cursor.fetchall()
- courses = []
-
- # convert courses to an array of objects
- for i in range(0, len(fetchCourses)):
- dic = {'name': fetchCourses[i][0], 'code': fetchCourses[i][1], 'creditos': fetchCourses[i][2], 'year': fetchCourses[i][4], 'semestre': fetchCourses[i][5], 'grade': fetchCourses[i][6], 'course_id': fetchCourses[i][7]}
- courses.append(dic)
-
- return JsonResponse({'list': courses}, status=status.HTTP_200_OK)
-
-
- @api_view(['POST',])
- def seeGPA(request):
- if request.method == 'POST':
- user_id = int(request.data['user_id'])
- cursor = connection.cursor()
- cursor.execute(f'SELECT gpa from "CompanionApp_user" where id={user_id}')
- GPA = cursor.fetchone()
- return JsonResponse({'gpa': GPA}, status = status.HTTP_200_OK)
-
- @api_view(['POST',])
- def matricularProxSemestre(request):
- if request.method == 'POST':
- # data from request
- user_id = int(request.data['user_id'])
- isSummer = request.data['isSummer']
- course_id = int(request.data['course_id'])
-
-
- # selecting current year and current semester of user from database
- cursor = connection.cursor()
- cursor.execute(f'Select current_year, current_semester from "CompanionApp_user" where id = {user_id} ')
- info = cursor.fetchone()
- current_year = info[0]
- current_semester = info[1]
-
- # determining next semester and next year
- if (current_semester == 2 and isSummer == 'false') or current_semester == 3:
- next_semester = 1
- next_year = current_year + 1
- elif (current_semester == 2 and isSummer == 'true'):
- next_semester = current_semester + 1 # 3
- next_year = current_year # stays the same
- elif current_semester == 1:
- next_semester = current_semester + 1 # 2
- next_year = current_year
-
- # selecting all attributes of course from course_id
- cursor = connection.cursor()
- cursor.execute(f'Select * from "CompanionApp_proximosemestre" where id = {course_id} ')
- info = cursor.fetchone()
- course_name = info[1]
- course_code = info[2]
- course_section = info[4]
- course_prof = info[5]
- course_hours = info[6]
- course_days = info[7]
- course_rooms = info[8]
- course_id = info[9] # course_id in "CompanionApp_curso"
- course_grade = 'N' # N de none, por ahora no hay nota
-
- # see if student already enrolled for the class
- cursor = connection.cursor()
- cursor.execute(f'Select id from "CompanionApp_matricula" where course_id_id={course_id} and section=\'{course_section}\' and prof=\'{course_prof}\' and horarios=\'{course_hours}\' and dias=\'{course_days}\' and salones=\'{course_rooms}\' and semestre={next_semester} and year={next_year} and user_id_id={user_id}')
- info = cursor.fetchone()
- print(info)
- if info != None:
- return JsonResponse({'msg': 'Ya estabas matriculado'}, status=status.HTTP_201_CREATED)
- else:
- # enroll student
- cursor = connection.cursor()
- cursor.execute(f'INSERT INTO "CompanionApp_matricula" (section, prof, semestre, year, grade, salones, horarios, dias, course_id_id, user_id_id) VALUES (\'{course_section}\',\'{course_prof}\', {next_semester}, {next_year}, \'{course_grade}\', \'{course_rooms}\', \'{course_hours}\', \'{course_days}\', {course_id}, {user_id})')
-
- return JsonResponse({'msg': 'te matriculaste a ' + course_code + '-' + course_section}, status=status.HTTP_201_CREATED)
-
-
- @api_view(['POST',])
- def getMyCurrentCourses(request):
- if request.method == 'POST':
- user_id = int(request.data['user_id'])
- current_courses = []
-
- # find current year of student
- cursor = connection.cursor()
- cursor.execute(f'select max(year) from "CompanionApp_matricula" where user_id_id={user_id}')
- current_year = cursor.fetchone()
-
- if current_year[0] == None:
- return JsonResponse({'msg': 'No tienes cursos'}, status = status.HTTP_200_OK)
-
- else:
- current_year = int(current_year[0])
-
-
- # find current semester of student, based on the current_year
- cursor = connection.cursor()
- cursor.execute(f'select max(semestre) from "CompanionApp_matricula" where year = {current_year} and user_id_id = {user_id}')
- current_semester = cursor.fetchone()
- current_semester = int(current_semester[0])
-
- # find current courses based on current_semester and current_year
- cursor = connection.cursor()
- cursor.execute(f'select c.id, c.name, c.code, m.year, m.semestre, m.section, m.prof, m.salones, m.horarios, m.dias from "CompanionApp_matricula" m INNER JOIN "CompanionApp_curso" c on c.id = m.course_id_id where m.year = {current_year} and m.semestre={current_semester} and m.user_id_id={user_id}')
- fetchCourses = cursor.fetchall()
-
- # convert courses array into dictionary
- for i in range(0, len(fetchCourses)):
- # if fetchCourses[i][2] == None, this means that the rest of the array will also be none.
- # The reason for this is that when users AddTakenCourses, they just add the course code
- if fetchCourses[i][5] == None:
- dic = {'id': fetchCourses[i][0], 'name': fetchCourses[i][1], 'code': fetchCourses[i][2], 'year': fetchCourses[i][3], 'semestre': fetchCourses[i][4]}
-
- # here we have all the elements because users enrolled from the courses in table ProximoSemestre
- else:
- dic = {'id': fetchCourses[i][0], 'name': fetchCourses[i][1], 'code': fetchCourses[i][2], 'year': fetchCourses[i][3], 'semestre': fetchCourses[i][4], 'section': fetchCourses[i][5], 'prof': fetchCourses[i][6], 'salones': fetchCourses[i][7], 'horarios': fetchCourses[i][8], 'dias': fetchCourses[i][9]}
-
- current_courses.append(dic)
-
-
-
-
- return JsonResponse({'list': current_courses}, status = status.HTTP_200_OK)
-
- @api_view(['PATCH',])
- def updateGradeAndGPA(request):
- if request.method == 'PATCH':
- new_grade = request.data['grade']
- course_id = int(request.data['course_id'])
- year = int(request.data['year'])
- semestre = int(request.data['semestre'])
- user_id = int(request.data['user_id'])
- current_points = 0 # to deal with current_grade
- new_points = 0 # to deal with new_grade
-
- # points of new_grade
- if new_grade == 'A':
- new_points = 4
- elif new_grade == 'B':
- new_points = 3
- elif new_grade == 'C':
- new_points = 2
- elif new_grade == 'D':
- new_points = 1
- elif new_grade == 'F':
- new_points = 0
-
- # get credits from the course
- cursor = connection.cursor()
- cursor.execute(f'select creditos from "CompanionApp_curso" where id={course_id}')
- creditos = cursor.fetchone()
- creditos = creditos[0]
-
- # select current grade
- cursor = connection.cursor()
- cursor.execute(f'select grade from "CompanionApp_matricula" where course_id_id={course_id} and user_id_id={user_id} and year={year} and semestre={semestre}')
- current_grade = cursor.fetchone()
- current_grade = current_grade[0]
- print(current_grade)
-
- # this means that the credits for this course had not been added to the column credits_taken from table "CompanionApp_curso"
- if current_grade == 'N':
- # get credits_taken. Then add the courses credits to credits_taken
- cursor = connection.cursor()
- cursor.execute(f'select credits_taken from "CompanionApp_user" where id={user_id}')
- credits_taken = cursor.fetchone()
- credits_taken = credits_taken[0]
- new_credits_taken = credits_taken + creditos
- print(new_credits_taken, 'New credits taken')
-
- # get credits_taken_score. Then multiply credits * new_points and add it to credits_taken_score
- cursor = connection.cursor()
- cursor.execute(f'select credits_taken_score from "CompanionApp_user" where id={user_id}')
- credits_taken_score = cursor.fetchone()
- credits_taken_score = credits_taken_score[0]
- new_credits_taken_score = credits_taken_score + (new_points * creditos)
- print(new_credits_taken_score, 'New credits taken score')
-
- # update gpa, credits_taken, credits_taken_score
- gpa = (new_credits_taken_score / new_credits_taken)
- gpa = float("{:.2f}".format(gpa))
- print(gpa, 'new gpa')
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set gpa = {gpa}, credits_taken = {new_credits_taken}, credits_taken_score={new_credits_taken_score} where id={user_id}')
-
- # update grade in table CompanionApp_matricula
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_matricula" set grade=\'{new_grade}\' where user_id_id={user_id} and semestre={semestre} and year={year} and course_id_id={course_id} ')
- return JsonResponse({'msg': 'Your GPA was updated to ' + str(gpa)}, status = status.HTTP_202_ACCEPTED)
-
- # else student already has a grade and wants to replace it
- else:
- if current_grade == 'A':
- current_points = 4
- elif current_grade == 'B':
- current_points = 3
- elif current_grade == 'C':
- current_points = 2
- elif current_grade == 'D':
- current_points = 1
- elif current_grade == 'F':
- current_points = 0
-
- # get credits_taken_score and credits_taken. Then substract (creditos * current_points) to credits_taken_score. Then add (creditos * new_points) to credits_taken_score
- cursor = connection.cursor()
- cursor.execute(f'select credits_taken_score, credits_taken from "CompanionApp_user" where id={user_id}')
- results = cursor.fetchone()
- credits_taken_score = results[0]
- credits_taken = results[1]
- new_credits_taken_score = credits_taken_score - (creditos * current_points)
- new_credits_taken_score = new_credits_taken_score + (creditos * new_points)
- print(new_credits_taken_score, 'new credits taken score')
- print(credits_taken, 'credits taken')
-
- # update gpa and credits_taken_score. credits_taken stays the same
- gpa = (new_credits_taken_score / credits_taken)
- gpa = float("{:.2f}".format(gpa))
- print(gpa, 'new gpa')
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set gpa = {gpa}, credits_taken_score={new_credits_taken_score} where id={user_id}')
-
- # update grade in table CompanionApp_matricula
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_matricula" set grade=\'{new_grade}\' where user_id_id={user_id} and semestre={semestre} and year={year} and course_id_id={course_id} ')
- return JsonResponse({'msg': 'Your GPA was updated to ' + str(gpa)}, status = status.HTTP_202_ACCEPTED)
-
- @api_view(['DELETE',])
- def deleteCourse(request):
- if request.method == 'DELETE':
- course_id = int(request.data['course_id'])
- year = int(request.data['year'])
- semestre = int(request.data['semestre'])
- user_id = int(request.data['user_id'])
-
- # get credits from the course
- cursor = connection.cursor()
- cursor.execute(f'select creditos from "CompanionApp_curso" where id={course_id}')
- creditos = cursor.fetchone()
- creditos = creditos[0]
- print(creditos)
-
- # select current grade
- cursor = connection.cursor()
- cursor.execute(f'select grade from "CompanionApp_matricula" where course_id_id={course_id} and user_id_id={user_id} and year={year} and semestre={semestre}')
- current_grade = cursor.fetchone()
- current_grade = current_grade[0]
- print(current_grade)
-
- if current_grade == 'N':
- # just delete course from table CompanionApp_matricula
- cursor = connection.cursor()
- cursor.execute(f'DELETE from "CompanionApp_matricula" where user_id_id={user_id} and course_id_id = {course_id} and year={year} and semestre={semestre}')
- return JsonResponse({'msg': 'SUCCESS' }, status = status.HTTP_202_ACCEPTED)
-
- else:
- # update credits_taken, credits_taken_score and gpa
- current_points = 0
- if current_grade == 'A':
- current_points = 4
- elif current_grade == 'B':
- current_points = 3
- elif current_grade == 'C':
- current_points = 2
- elif current_grade == 'D':
- current_points = 1
- elif current_grade == 'F':
- current_points = 0
-
- # get credits_taken_score and credits_taken. Then, substract (creditos * current_points) to credits_taken_score and substract creditos to credits_taken
- cursor = connection.cursor()
- cursor.execute(f'select credits_taken_score, credits_taken from "CompanionApp_user" where id={user_id}')
- results = cursor.fetchone()
- credits_taken_score = results[0]
- credits_taken = results[1]
-
- new_credits_taken_score = credits_taken_score - (current_points * creditos)
- new_credits_taken = credits_taken - creditos
- if new_credits_taken == 0:
- gpa = 0.00
- else:
- gpa = new_credits_taken_score / new_credits_taken
- gpa = float("{:.2f}".format(gpa))
- print(new_credits_taken, 'credits taken')
- print(new_credits_taken_score, 'credits taken score')
-
- # update gpa, credits_taken and credits_taken_score
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set gpa = {gpa}, credits_taken = {new_credits_taken}, credits_taken_score={new_credits_taken_score} where id={user_id}')
-
- # delete course from "CompanionApp_matricula"
- cursor = connection.cursor()
- cursor.execute(f'DELETE from "CompanionApp_matricula" where user_id_id={user_id} and course_id_id = {course_id} and year={year} and semestre={semestre}')
-
-
- return JsonResponse({'msg': 'SUCCESS' }, status = status.HTTP_202_ACCEPTED)
-
- @api_view(['PATCH',])
- def updateSemesterAndYear(request):
- if request.method == 'PATCH':
- user_id = int(request.data['user_id'])
- year = int(request.data['year'])
- semestre = int(request.data['semester'])
-
- # update semestre and year for user. This is for knowing which year and semester he/she is currently in
- cursor = connection.cursor()
- cursor.execute(f'UPDATE "CompanionApp_user" set current_year={year}, current_semester={semestre} where id={user_id}')
- return JsonResponse({'msg': 'SUCCESS' }, status = status.HTTP_202_ACCEPTED)
-
-
- @api_view(['POST',])
- def getSemesterAndYear(request):
- if request.method == 'POST':
- user_id = int(request.data['user_id'])
-
- cursor = connection.cursor()
- cursor.execute(f'select current_year, current_semester from "CompanionApp_user" where id={user_id}')
- info = cursor.fetchone()
- year = info[0]
- semestre = info[1]
- return JsonResponse({'msg': {'year': year, 'semestre': semestre} }, status = status.HTTP_202_ACCEPTED)
-
-
- @api_view(['POST',])
- def logout(request):
- request.user.auth_token.delete()
- return JsonResponse({"success": "Successfully logged out."}, status=status.HTTP_200_OK)
-
-
- @api_view(['GET', 'POST'])
- def hello_world(request):
- # if request.user.is_authenticated:
- if request.method == 'GET':
- return JsonResponse({'msg': request.user.email}, status = status.HTTP_200_OK)
- return JsonResponse({'msg': 'no'})
-
-
- # delete course and update credits_takenv
|