No Description

views.py 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. import sys
  2. import json
  3. sys.path.insert(1,'C:/Users/diego/Documents/companion_app_gh/organizar/')
  4. from organizar import files3
  5. from rest_auth.registration.views import SocialLoginView
  6. from allauth.socialaccount.providers.google.views import GoogleOAuth2Adapter
  7. from django.db import connection
  8. from django.http.response import JsonResponse
  9. from rest_framework.parsers import JSONParser
  10. from rest_framework import status
  11. from .models import Facultad, Curso
  12. from .serializers import FacultadSerializer, CursoSerializer
  13. from rest_framework.decorators import api_view
  14. # clientID: 965339169610-8et02d4qpfk96vclngd0otths1rs8661.apps.googleusercontent.com
  15. # clientSecret: zeY8NoW6ORBHP8pDQLE2x_Z2
  16. # Create your views here.
  17. class GoogleLogin(SocialLoginView):
  18. adapter_class = GoogleOAuth2Adapter
  19. @api_view(['POST',])
  20. def insertarFacultades(request):
  21. faculties = [ 'Administración de Empresas', 'Administración de Empresas graduado', 'Arquitectura', 'Arquitectura Graduado', 'Asuntos Académicos',
  22. 'Ciencias Militares', 'Ciencias Naturales', 'Ciencias Naturales Graduado', 'Ciencias Sociales', 'Ciencias Sociales Graduado',
  23. 'Escuela de Comunicación', 'Escuela de Comunicación Graduada', 'Educación', 'Educación Continua (BEOF)', 'Educación Graduado',
  24. 'Escuela de Derecho', 'Escuela Graduada de Ciencias y Tecnologías de la Información', 'Estudios Generales', 'Humanidades',
  25. 'Humanidades Graduado', 'Planificación']
  26. if request.method == 'POST':
  27. for faculty in faculties:
  28. facultad_serializer = FacultadSerializer(data={'fname': faculty})
  29. if facultad_serializer.is_valid():
  30. facultad_serializer.save()
  31. return JsonResponse({"message": 'se crearon todas las facultades'}, status=status.HTTP_201_CREATED)
  32. @api_view(['POST',])
  33. def insertarTodosLosCursos(request):
  34. if request.method == 'POST':
  35. i = 1
  36. for file in files3:
  37. check = file['file'].split('.')
  38. path = "C:/Users/diego/Documents/companion_app_gh/segundo_sem" if check[0][-1] == '2' else "C:/Users/diego/Documents/companion_app_gh/primer_sem"
  39. with open(path + '/' + file['file']) as f:
  40. data = json.load(f)
  41. fac_id = file['num']
  42. for key in data:
  43. if key != 'Horario ':
  44. code = key
  45. name = data[key][0]
  46. creds = data[key][1]
  47. try:
  48. curso = Curso.objects.get(code = code)
  49. except Curso.DoesNotExist:
  50. curso = None
  51. if curso == None:
  52. curso_serializer = CursoSerializer(data={'name': name, 'code': code, 'creditos': creds, 'fac_id': fac_id})
  53. if curso_serializer.is_valid():
  54. curso_serializer.save()
  55. else:
  56. print('ya se creo', i)
  57. i += 1
  58. return JsonResponse({'message': 'se insertaron todos los cursos'}, status=status.HTTP_201_CREATED)
  59. @api_view(['PATCH',])
  60. def updateFaculty(request):
  61. if request.method == 'PATCH':
  62. # params from request
  63. fac_id = int(request.data['fac_id_id'])
  64. user_id = int(request.data['id'])
  65. print(type(fac_id))
  66. print('backend', fac_id)
  67. # update faculty
  68. cursor = connection.cursor()
  69. cursor.execute(f'UPDATE "CompanionApp_user" set fac_id_id = {fac_id} where id = {user_id}')
  70. return JsonResponse({'list': 'updated'}, status=status.HTTP_201_CREATED)
  71. # find courses in our Curso table
  72. @api_view(['GET',])
  73. def findCourse(request):
  74. # alternative to .filter
  75. # cursor = connection.cursor()
  76. # cursor.execute(f'SELECT id, code from "CompanionApp_curso" where code LIKE \'{course_code}%\' LIMIT 10')
  77. # courses = cursor.fetchall()
  78. if request.method == 'GET':
  79. course_code = request.query_params['code'].upper()
  80. courses = Curso.objects.filter(code__contains=course_code)[:10]
  81. courses = list(courses.values())
  82. return JsonResponse({'list': courses}, status=status.HTTP_200_OK)
  83. @api_view(['POST'])
  84. def addTakenCourse(request):
  85. if request.method == 'POST':
  86. # request params
  87. user_id = int(request.data['user_id'])
  88. course_code = request.data['code'].upper()
  89. grade = request.data['grade'].upper()
  90. year = int(request.data['year'])
  91. semester = int(request.data['semester'])
  92. fecha = request.data['fecha']
  93. repeating = False
  94. print(type(grade))
  95. # set point of grade
  96. points = 0
  97. if grade == 'A':
  98. points = 4
  99. elif grade == 'B':
  100. points = 3
  101. elif grade == 'C':
  102. points = 2
  103. elif grade == 'D':
  104. points = 1
  105. elif grade == 'F':
  106. points = 0
  107. else:
  108. return JsonResponse({'msg': 'Insert A, B, C, D or F' }, status=status.HTTP_406_NOT_ACCEPTABLE)
  109. # find course id and credits
  110. cursor = connection.cursor()
  111. cursor.execute(f'Select id, creditos from "CompanionApp_curso" where code =\'{course_code}\' ')
  112. course = cursor.fetchone()
  113. course_id = int(course[0])
  114. creditos = int(course[1])
  115. # check if student already took that class in the same year and semester he/she is trying to post
  116. cursor = connection.cursor()
  117. 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}')
  118. check = cursor.fetchone()
  119. check = list(check)
  120. print(check)
  121. if int(check[0]) == semester and int(check[1]) == year and check[3] == course_id:
  122. return JsonResponse({'msg': 'You already took the course that year and semester.' }, status=status.HTTP_406_NOT_ACCEPTABLE)
  123. elif int(check[1]) != year:
  124. pass
  125. elif int(check[1] == year) and int(check[0]) != semester:
  126. pass
  127. # matricular al estudiante
  128. cursor = connection.cursor()
  129. cursor.execute(f'INSERT INTO "CompanionApp_matricula" (semestre, year, fecha, grade, user_id_id, course_id_id) VALUES ({semester}, {year}, \'{fecha}\', \'{grade}\', {user_id}, {course_id})')
  130. # find credits taken
  131. cursor = connection.cursor()
  132. cursor.execute(f'Select credits_taken from "CompanionApp_user" where id={user_id}')
  133. credits_taken = cursor.fetchone()
  134. credits_taken = int(credits_taken[0])
  135. credits_taken += creditos
  136. # update credits taken
  137. cursor = connection.cursor()
  138. cursor.execute(f'UPDATE "CompanionApp_user" set credits_taken = {credits_taken} where id ={user_id}')
  139. credit_score = credits_taken * 4
  140. credits_taken_score = credits_taken * points
  141. # set GPA and insert it in user
  142. gpa = (credits_taken_score / credit_score) * 4.0
  143. gpa = float("{:.2f}".format(gpa))
  144. cursor = connection.cursor()
  145. cursor.execute(f'UPDATE "CompanionApp_user" set gpa = {gpa} where id={user_id}')
  146. return JsonResponse({'list': 'se matriculo al estudiante'}, status=status.HTTP_201_CREATED)
  147. @api_view(['GET'])
  148. def getUserId(request):
  149. if request.method == 'GET':
  150. authorization = request.META.get('HTTP_AUTHORIZATION')
  151. authorization = authorization.split()
  152. token = authorization[1]
  153. cursor = connection.cursor()
  154. cursor.execute(f'SELECT user_id from "authtoken_token" where key = \'{token}\'')
  155. user_id = cursor.fetchone()
  156. user_id = user_id[0]
  157. return JsonResponse({'user_id': user_id}, status=status.HTTP_200_OK)
  158. @api_view(['GET'])
  159. def getFacultyUser(request):
  160. if request.method == 'GET':
  161. print(request.query_params)
  162. user_id = request.query_params['id']
  163. user_id = int(user_id)
  164. cursor = connection.cursor()
  165. cursor.execute(f'select fname from "CompanionApp_facultad" where id in (select fac_id_id from "CompanionApp_user" where id={user_id})')
  166. facultyName = cursor.fetchone()
  167. return JsonResponse({'FacultyName': facultyName}, status=status.HTTP_200_OK)
  168. @api_view(['GET', 'POST'])
  169. def hello_world(request):
  170. # if request.user.is_authenticated:
  171. if request.method == 'GET':
  172. return JsonResponse({'msg': request.user.email}, status = status.HTTP_200_OK)
  173. return JsonResponse({'msg': 'no'})