def obtener_scripts_tag(self, p_data): """ Obtener los scripts que contiene un tag :param p_data: el identificador del tag :return: """ gestor_tag_script = GestorTagScript.GestorTagScript() id_tag = p_data[1]['id_tag'] resultado = gestor_tag_script.obtener_scripts_tag(id_tag) return resultado
def obtener_tags_usuario(self, p_data): """ Obtener los tags que posee un usuario. "Mis TAGS" :param p_data: El identificador del usuario :return: La lista de sus tags """ gestor_tag_script = GestorTagScript.GestorTagScript() id_usuario = p_data[1]['id_usuario'] resultado = gestor_tag_script.obtener_tags_usuario(id_usuario) return resultado
def obtener_scripts_disponibles(self, p_data): """ Obtener los scripts disponibles para un grupo :param p_data: El identificador del grupo :return: La lista de los scripts DISPONIBLES y No aplicados """ gestor_tag_script = GestorTagScript.GestorTagScript() id_grupo = p_data[1]['id_grupo'] resultado = gestor_tag_script.obtener_scripts_disponibles(id_grupo) return resultado
def obtener_tags(self, p_data): """ Obtener la lista de los tags aplicados en un grupo :param p_data: El identificador del grupo :return: La lista de los tags actualmente aplicados """ gestor_tag_script = GestorTagScript.GestorTagScript() id_grupo = p_data[1]['id_grupo'] resultado = gestor_tag_script.obtener_tags(id_grupo) return resultado
def crear_tag_usuario(self, p_data): """ Añade un nuevo Tag en el sistema :param p_data: Los datos necesarios para crear un TAG :return: True o False dependiendo del exito """ resultado = False gestor_tag_script = GestorTagScript.GestorTagScript() gestor_historial = GestorHistorial.GestorHistorial() nombre_tag = p_data[1]['nombre_tag'] id_usuario = p_data[1]['id_usuario'] descripcion = p_data[1]['descripcion'] lista_script = p_data[1]['lista_script'] resultado_creacion = gestor_tag_script.crear_tag_usuario( nombre_tag, id_usuario, descripcion, lista_script) if resultado_creacion is True: # Insertamos en el historial la creación del TAG resultado = gestor_historial.anadir_historia_gestion_tag( nombre_tag, id_usuario, True, 'Se ha creado un nuevo Tag') return resultado
def modificar_tag(self, p_data): """ Modifica los scripts contenidos en un TAg por otros nuevos y se reaplican/eliminan los actuales :param p_data: Contiene los siguientes elementos: -> Id_Usuario: El identificador del usuario actual. -> Nombre_Tag: El nuevo nombre del Tag. -> Owner: El identificador del nuevo usuario -> Descripción: Una nueva descripción del TAG -> lista_cambios: La lista de los cambios a realizar. :return: True o False dependiendo del resultado de la actualización """ gestor_tag_script = GestorTagScript.GestorTagScript() gestor_grupo = GestorGrupo.GestorGrupo() gestor_alumno = GestorAlumno.GestorAlumno() gestor_historial = GestorHistorial.GestorHistorial() id_usuario = p_data[1]['id_usuario'] id_tag = p_data[1]['id_tag'] nombre_tag = p_data[1]['nombre_tag'] owner = p_data[1]['owner'] descripcion = p_data[1]['descripcion'] lista_cambios = p_data[1]['lista_cambios'] script_no_aplicado = [] # Lo primero, actualizar los datos referentes al TAG. resultado = gestor_tag_script.modificar_tag(id_tag, nombre_tag, descripcion, owner) if resultado: # Se han cambiado los datos de forma correcta # Comprobamos si se ha cambiado el owner if id_usuario is not owner: # Se ha cambiado de owner, deshabilitamos el TAg en todos los grupos del user actual lista_grupo = gestor_grupo.obtener_grupos_tag(id_tag) for grupo in lista_grupo: if resultado: # Obtenemos la lista de alumnos del grupo actual lista_alumno = gestor_alumno.obtener_alumnos( grupo['IdGrupo']) for alumno in lista_alumno: # Eliminamos los scripts de este TAG exito = gestor_tag_script.eliminar_tag( id_tag, alumno['Dni'], id_usuario, grupo['IdGrupo']) if exito: # Actualizar el Historial actualizar_historial = gestor_historial.anadir_historial_tag( id_tag, alumno['Nombre'], alumno['Apellido'], id_usuario, grupo['IdGrupo'], False, 'Traspaso de Tag ' 'a otro usuario.') if actualizar_historial is not True: print "Historial mal actualizado" resultado = False break else: print "Tag mal eliminado" resultado = False break else: break eliminado_ok = gestor_tag_script.eliminar_tag_al_grupo( grupo['IdGrupo'], id_tag) print eliminado_ok # Si existen cambios en la lista, vamos a aplicarlos if len(lista_cambios) and resultado: resultado = gestor_tag_script.modificar_scripts_del_tag( id_tag, lista_cambios) #todo Opcionalmente, realizar un registro en el historial de cómo se ha donado un scrpt else: # El usuario es el mismo, debemos reestructurar los cambios # Vamos a comprobar si tenemos cambios en la lista if len(lista_cambios) != 0: # Hay cambios. Vamos a ver si afecta a algún grupo lista_grupo = gestor_grupo.obtener_grupos_tag(id_tag) if len(lista_grupo) != 0: for cambio in lista_cambios: if cambio['accion'] == 'borrar_script': # Tenemos que borrar el Script for grupo in lista_grupo: if resultado: lista_alumnos_grupo = gestor_alumno.obtener_alumnos( grupo['IdGrupo']) # Los grupos siempre tienene minnimo un alumno. Recorremos for alumno in lista_alumnos_grupo: exito = gestor_tag_script.modificar_scripts_alumnos_de_un_grupo \ (cambio['id_script'], alumno['Dni'], id_usuario, grupo['IdGrupo'], cambio['accion']) if exito: # Registro en Historial historial_ok = gestor_historial.anadir_historial_script \ (cambio['id_script'], alumno['Nombre'], alumno['Apellido'], id_usuario, grupo['IdGrupo'], False, "Modificar un Tag") if historial_ok is not True: resultado = False break else: resultado = False break else: break # Una vez procesados todos los Grupos se elimina la relación entre Tag y Scrip if resultado: resultado = gestor_tag_script.eliminar_scrit_al_tag( id_tag, cambio['id_script']) else: break else: # Tenemos que añadir el TAg # Vamos a comprobar si es posible añadir éste Script al Tag if gestor_grupo.tag_comptabile_grupo( lista_grupo, cambio['id_script']) is not True: # Tenemos luz verde. Recorremos cada Grupo compatible y adoptamos en caso de exitir # un script suelto. for grupo in lista_grupo: # Primero comprobamos si el script ya estaba aplicado en el Grupo existe_en_el_grupo = gestor_grupo.existe_script( grupo['IdGrupo'], cambio['id_script']) if existe_en_el_grupo: # El Script actual ya existe en el TAg. Eliminaamos la relación entre grupo y Script gestor_tag_script.eliminar_script_al_grupo( grupo['IdGrupo'], cambio['id_script']) # Se podría registrar la acción en el historial. Sólo opcional else: # El script actual no existe en el grupo. Lo aplicamos lista_alumnos_grupo = gestor_alumno.obtener_alumnos( grupo['IdGrupo']) # Los grupos siempre tienene minnimo un alumno. Recorremos for alumno in lista_alumnos_grupo: exito_a = gestor_tag_script.modificar_scripts_alumnos_de_un_grupo \ (cambio['id_script'], alumno['Dni'], id_usuario, grupo['IdGrupo'], cambio['accion']) if exito_a: # Registro en Historial historial_ok = gestor_historial.anadir_historial_script( cambio['id_script'], alumno['Nombre'], alumno['Apellido'], id_usuario, grupo['IdGrupo'], True, "Modificar un Tag") else: # Algo ha ocurrido y no ha ido bien. break # Una vez procesados todos los grupos se añade la relación entre Tag y Script resultado = gestor_tag_script.anadir_script_al_tag( id_tag, cambio['id_script']) if resultado is not True: print "Error a la hora de añadir el Script al Tag" break else: print "No se ha podido añadir un Script por colisión" script_no_aplicado.append( cambio['id_script']) else: # Los cambios no afectan a ningún Grupo. Sólo cambiamos la relación de los Scripts resultado = gestor_tag_script.modificar_scripts_del_tag( id_tag, lista_cambios) #todo optativamente podriamos registrar cambios return resultado, script_no_aplicado
def eliminar_tag_usuario(self, p_data): """ Elimina un Tag del usuario del sistema y se revocan de los alumnos afectados los scripts que hayan sido aplicados con anterioridad. :param p_data: Cotiene el identificador del TAG y del usuario :return: True o False dependiendo del éxito de la operación """ gestor_grupo = GestorGrupo.GestorGrupo() gesto_tag_script = GestorTagScript.GestorTagScript() gestor_alumno = GestorAlumno.GestorAlumno() gestor_historial = GestorHistorial.GestorHistorial() id_tag = p_data[1]['id_tag'] id_usuario = p_data[1]['id_usuario'] resultado = False actualibar_bd = False # obtenemos los grupso donde el tag está aplicado lista_grupo = gestor_grupo.obtener_grupos_tag(id_tag) if len(lista_grupo) != 0: # Afecta a grupos. Eliminamos la relación for grupo in lista_grupo: # Obtenemos la lista de alumnos del grupo actual lista_alumno = gestor_alumno.obtener_alumnos(grupo['IdGrupo']) for alumno in lista_alumno: # Eliminamos los scripts de este TAG exito = gesto_tag_script.eliminar_tag( id_tag, alumno['Dni'], id_usuario, grupo['IdGrupo']) if exito: # Actualizamos el Historial con el borrado actualizado = gestor_historial.anadir_historial_tag( id_tag, alumno['Nombre'], alumno['Apellido'], id_usuario, grupo['IdGrupo'], False, 'Tag eliminado por el usuario') if actualizado: actualibar_bd = True else: # No se ha actualizado bien la base de datos actualibar_bd = False break else: # Algo malo ha pasado actualibar_bd = False break if actualibar_bd: # ha ido bien, vamos a elininar el TAG datos_tag = gesto_tag_script.obtener_info_tag(id_tag) borrar_tag = gesto_tag_script.borrar_tag(id_tag) if borrar_tag: # Tag borrado OK. Insertamos en el historial resultado = gestor_historial.anadir_historia_gestion_tag( datos_tag[0]['NombreTag'], id_usuario, False, 'Se ha eliminado un Tag') else: # No afecta a ningún Grupo. Eliminamos directamente # Obtenemos primero los datos del Tag antes de borrarlo para el historial datos_tag = gesto_tag_script.obtener_info_tag(id_tag) # todo algo pasa al borrar el tag, reviasar borrar_tag = gesto_tag_script.borrar_tag(id_tag) if borrar_tag: # Tag borrado OK. Insertamos en el historial resultado = gestor_historial.anadir_historia_gestion_tag( datos_tag[0]['NombreTag'], id_usuario, False, 'Se ha eliminado un Tag') return resultado
def aplicar_cambios(self, p_data): """ Aplica los cambios a una serie de alumnos que pertenecen a un grupo Dichos cambios son la adición o no de scripts y tags. :param p_data: Contiene los siguientes elementos: -> id_usuario: El identificador del usuario -> id_grupo: El identificador del grupo -> lista_cambios_s: Una lista que contiene los cambios en los scripts que se realizarán -> lista_cambios_t: Una lista que contiene los cambios en los tags que se realizarán. -> lista_alumnos: La lista de los alumnos afectados :return: True -> Si todo se ha aplicado sin problemas False -> Si algo no ha ido bien """ resultado = False gesto_tag_script = GestorTagScript.GestorTagScript() gestor_historial = GestorHistorial.GestorHistorial() id_usuario = p_data[1]['id_usuario'] id_grupo = p_data[1]['id_grupo'] lista_cambios_s = p_data[1]['lista_cambios_s'] lista_cambios_t = p_data[1]['lista_cambios_t'] lista_alumnos = p_data[1]['lista_alumnos'] if lista_cambios_s or lista_cambios_t: # Vamos a procesar la lista de cambios de los TAgs for cambio_t in lista_cambios_t: if cambio_t['accion'] == 'anadir_tag': # Se le añade el tag actual a los alumnos aplicado_t = False for alumno in lista_alumnos: aplicado_t = gesto_tag_script.aplicar_tag( cambio_t['id_tag'], alumno['Dni'], id_usuario, id_grupo) if aplicado_t: historial_registrado_t = gestor_historial.anadir_historial_tag( cambio_t['id_tag'], alumno['Nombre'], alumno['Apellido'], id_usuario, id_grupo, True, 'Se ha añadido un Tag') if historial_registrado_t is not True: aplicado_t = False break if aplicado_t: # El tag se ha aplicado a todos los alumnos añado la relación entre grupo y tag grupo_aplicado_t = gesto_tag_script.anadir_tag_al_grupo( id_grupo, cambio_t['id_tag']) if grupo_aplicado_t: # Se ha resgistrado correctamente. resultado = True else: # Ha ocurrido un error serio. Paramos la ejecución. resultado = False break else: # Algo serio ha ocurrido a la hora de aplicar los tags. resultado = False break else: # Se elimina el tag actual a los alumnos eliminado_t = False for alumno in lista_alumnos: eliminado_t = gesto_tag_script.eliminar_tag( cambio_t['id_tag'], alumno['Dni'], id_usuario, id_grupo) if eliminado_t: historial_registrado_t = gestor_historial.anadir_historial_tag( cambio_t['id_tag'], alumno['Nombre'], alumno['Apellido'], id_usuario, id_grupo, False, 'Se ha eliminado un Tag') if historial_registrado_t is not True: eliminado_t = False break if eliminado_t: # El tag se ha aplicado a todos los alumnos añado la relación entre grupo y tag grupo_eliminado_t = gesto_tag_script.eliminar_tag_al_grupo( id_grupo, cambio_t['id_tag']) if grupo_eliminado_t: # Se ha eliminado correctamente resultado = True else: # Ha ocurrido un error serio. Paramos la ejecución. resultado = False break else: # Algo serio ha ocurrido a la hora de aplicar los tags. resultado = False break # Vamos a recorrer la lista de cambios de TAgs # Aplicando cada script 1 a 1 a cada alumno. for cambio_s in lista_cambios_s: # Vamos a recorrer cada alumno, aplicando o eliminando el script actual if cambio_s['accion'] == 'anadir_script': # Se le añade el script actual a los alumnos aplicado_s = False for alumno in lista_alumnos: aplicado_s = gesto_tag_script.aplicar_script( cambio_s['id_script'], alumno['Dni'], id_usuario, id_grupo) if aplicado_s: historial_registrado_s = gestor_historial.anadir_historial_script( cambio_s['id_script'], alumno['Nombre'], alumno['Apellido'], id_usuario, id_grupo, True, 'Se ha añadido un Script') if historial_registrado_s is not True: aplicado_s = False break else: # Algo no ha ido bien break if aplicado_s: # El script se ha aplicado a todos los alumnos añado la relación entre grupo y scriot grupo_aplicado_s = gesto_tag_script.anadir_script_al_grupo( id_grupo, cambio_s['id_script']) if grupo_aplicado_s: # Se ha resgistrado correctamente. Añadimos el historial resultado = True else: # Ha ocurrido un error serio. Paramos la ejecución. resultado = False break else: # Algo serio ha ocurrido a la hora de aplicar los scrips. resultado = False break else: # Se elimina el script actual a los alumnos eliminado_s = False for alumno in lista_alumnos: eliminado_s = gesto_tag_script.eliminar_script( cambio_s['id_script'], alumno['Dni'], id_usuario, id_grupo) if eliminado_s: historial_registrado_s = gestor_historial.anadir_historial_script( cambio_s['id_script'], alumno['Nombre'], alumno['Apellido'], id_usuario, id_grupo, False, 'Se ha borrado un Script') if historial_registrado_s is not True: # No se ha registrado bine el historial eliminado_s = False else: # algo no ha ido bien break if eliminado_s: # El script se ha aplicado a todos los alumnos añado la relación entre grupo y scriot grupo_eliminado_s = gesto_tag_script.eliminar_script_al_grupo( id_grupo, cambio_s['id_script']) if grupo_eliminado_s: # Se ha resgistrado correctamente. Añadimos el historial resultado = True else: # Ha ocurrido un error serio. Paramos la ejecución. resultado = False break else: # Algo serio ha ocurrido a la hora de aplicar los scrips. resultado = False break else: # No hay cambios que hacer de ningún tipo. Algo no ha ido bien print "He recibido las listas de cambios vacías. Algo no ha ido bien." return resultado
def borrar_grupo(self, p_data): """ Elimina un grupo seleccionado por el usuario Si algún alumno se queda huérfano(sin grupo alguno) sus datos serán eliminados del sistema. :param p_data: Contiene el identificador del usuario, del grupo y la lista de alumnos :return: True -> Si el grupo se ha borrado correctamente False -> Si algo ha sucedido durante el borrado del grupo """ gestor_alumno = GestorAlumno.GestorAlumno() gestor_grupo = GestorGrupo.GestorGrupo() gestor_tag_script = GestorTagScript.GestorTagScript() gestor_historial = GestorHistorial.GestorHistorial() id_usuario = p_data[1]['id_usuario'] id_grupo = p_data[1]['id_grupo'] lista_alumnos = p_data[1]['lista_alumnos'] # Obtenemos los scripts que tiene el grupo lista_scripts = gestor_tag_script.obtener_scripts(id_grupo) lista_tags = gestor_tag_script.obtener_tags(id_grupo) resultado = True # Por cada alumno, eliminamos el script for alumno in lista_alumnos: # Eliminamos el script for script in lista_scripts: elim_script = gestor_tag_script.eliminar_script( script['IdScript'], alumno['Dni'], id_usuario, id_grupo) if elim_script: # Se ha eliminado el tag del alumno actual, insertamos la acción en el historial gestor_historial.anadir_historial_script( script['IdScript'], alumno['Nombre'], alumno['Apellido'], id_usuario, id_grupo, False, 'Borrado de grupo') else: # Algo ha pasado, paramos resultado = False break # Eliminamos los TAGS for tag in lista_tags: elim_tag = gestor_tag_script.eliminar_tag( tag['IdTag'], alumno['Dni'], id_usuario, id_grupo) if elim_tag: # Se ha eliminado el tag del alumno actual, insertamos la acción en el historial gestor_historial.anadir_historial_tag( tag['IdTag'], alumno['Nombre'], alumno['Apellido'], id_usuario, id_grupo, False, 'Borrado de grupo') else: # Algo ha pasado, paramos resultado = False break # Éste time sleep ayuda a que el código se ejecute de manera correcta sin que los scripts de bash interfieran. time.sleep(0.1) # Por último eliminamos el grupo del sistema. if resultado: datos_grupo = gestor_grupo.obtener_un_grupo(id_grupo) resultado_borrar_grupo = gestor_grupo.borrar_grupo(id_grupo) if resultado_borrar_grupo: # Insertamos en el historial lo sucediddo resultado = gestor_historial.anadir_historial_grupo( id_usuario, datos_grupo[0]['NombreGrupo'], False, "Se ha eliminado un grupo.") # Comprobamos si algún alumno se ha quedado sin grupo y lo eliminamos del sistema for alumno2 in lista_alumnos: rdo = gestor_alumno.borrar_alumno(alumno2['Dni']) # todo sería conveniente hacer algo en caso de que ésto falle. else: # Algo ha pasado a la hora de borrar el grupo. resultado = False return resultado