Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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
Esempio n. 8
0
    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
Esempio n. 9
0
    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