def create(self, request): """ POST Asignar un TFG a uno o varios alumnos :param request: :return: {status: True/False, data:{serializer del tfg asignado y de los alumnos} """ try: params = utils.get_params(request) if params.get('delete'): return Tfg_asigViewSet().delete(request) self.logger.info('INICIO WS - TFGASIGVIEW POST del usuario: %s con parametros: %s' % (request.user.email if hasattr(request.user, 'email') else request.user.username, params)) if request.user.has_perm('tfgs.tfg_asig.change') or request.user.is_admin: alumno_2 = None alumno_3 = None tfg = Tfg.objects.get(titulo=params.get('tfg')) # Si es profesor if Profesor.objects.filter(email=request.user.email).exists() and request.user.email != tfg.tutor.\ email: raise NameError("El profesor no es tutor del Tfg") alumno_1 = utils.get_or_create_alumno(params.get('alumno_1')) if 'alumno_2' in params: alumno_2 = utils.get_or_create_alumno(params.get('alumno_2')) if 'alumno_3' in params: alumno_3 = utils.get_or_create_alumno(params.get('alumno_3')) serializer = self.serializer_class(data=dict(tfg=tfg.id, alumno_1=alumno_1.id, alumno_2=alumno_2, alumno_3=alumno_3)) if serializer.is_valid(): resul = serializer.create(serializer.validated_data) if resul['status']: resul = utils.to_dict(resul) resul_status = status.HTTP_200_OK else: resul = dict(message=resul['message']) resul_status = status.HTTP_400_BAD_REQUEST else: resul = dict(message=serializer.errors) resul_status = status.HTTP_400_BAD_REQUEST else: resul = dict(message="Sin privilegios") resul_status = status.HTTP_400_BAD_REQUEST self.logger.info('FIN WS - TFGASIGVIEW POST del usuario: %s con resultado: %s' % (request.user.email if hasattr(request.user, 'email') else request.user.username, resul)) return Response(resul, status=resul_status) except NameError as e: self.logger.error('FIN WS - TFGASIGVIEW POST: %s' % e.message) return Response(dict(message=e.message), status=status.HTTP_400_BAD_REQUEST) except Exception as e: resul = dict(status=False, message="Error en la llamada") self.logger.critical('FIN WS - TFGASIGVIEW POST: %s %s' % (resul, e)) return Response(resul, status=status.HTTP_400_BAD_REQUEST)
def update(self, tfg_asig, validated_data): try: # comprobando alumno_1 if 'alumno_1' in validated_data.keys(): alumno_1 = utils.get_or_create_alumno( validated_data.get('alumno_1')) tfg_asig.alumno_1 = alumno_1 # comprobando alumno_2 if 'alumno_2' in validated_data.keys(): alumno_2 = utils.get_or_create_alumno( validated_data.get('alumno_2')) tfg_asig.alumno_2 = alumno_2 # comprobando alumno_3 if 'alumno_3' in validated_data.keys(): alumno_3 = utils.get_or_create_alumno( validated_data.get('alumno_3')) tfg_asig.alumno_3 = alumno_3 # comprobando convocatoria if 'convocatoria' in validated_data.keys(): try: res_subtipo = SubTipo_Evento.objects.get(codigo='SOL_EVAL') except: raise NameError("El Tipo no existe") try: res_tipo = Tipo_Evento.objects.get( codigo=validated_data.get('convocatoria')) res_convocatoria = Convocatoria.objects.get( titulacion=tfg_asig.tfg.titulacion, subtipo=res_subtipo, tipo=res_tipo, anio=validated_data.get('anio')) except: raise NameError("La convocatoria no existe") if not utils.check_convocatoria(res_convocatoria, res_subtipo): raise NameError("Fuera de plazo") else: tfg_asig.convocatoria = res_convocatoria tfg_asig.save() return dict(status=True, data=Tfg_Asig.objects.get(tfg=tfg_asig.tfg)) except NameError as e: return dict(status=False, message=e.message)
def update(self, tfg_asig, validated_data): try: # comprobando alumno_1 if 'alumno_1' in validated_data.keys(): alumno_1 = utils.get_or_create_alumno(validated_data.get('alumno_1')) tfg_asig.alumno_1 = alumno_1 # comprobando alumno_2 if 'alumno_2' in validated_data.keys(): alumno_2 = utils.get_or_create_alumno(validated_data.get('alumno_2')) tfg_asig.alumno_2 = alumno_2 # comprobando alumno_3 if 'alumno_3' in validated_data.keys(): alumno_3 = utils.get_or_create_alumno(validated_data.get('alumno_3')) tfg_asig.alumno_3 = alumno_3 # comprobando convocatoria if 'convocatoria' in validated_data.keys(): try: res_subtipo = SubTipo_Evento.objects.get(codigo='SOL_EVAL') except: raise NameError("El Tipo no existe") try: res_tipo = Tipo_Evento.objects.get(codigo=validated_data.get('convocatoria')) res_convocatoria = Convocatoria.objects.get(titulacion=tfg_asig.tfg.titulacion, subtipo=res_subtipo, tipo=res_tipo, anio=validated_data.get('anio')) except: raise NameError("La convocatoria no existe") if not utils.check_convocatoria(res_convocatoria, res_subtipo): raise NameError("Fuera de plazo") else: tfg_asig.convocatoria = res_convocatoria tfg_asig.save() return dict(status=True, data=Tfg_Asig.objects.get(tfg=tfg_asig.tfg)) except NameError as e: return dict(status=False, message=e.message)