Ejemplo n.º 1
0
def todos_presentacion():
    datos = DatosSocio()
    socios = datos.todos()
    for socio in socios:
        tree.insert("",
                    tk.END,
                    text=socio.id,
                    values=(socio.nombre, socio.apellido, socio.dni))
    return socios
Ejemplo n.º 2
0
 def __init__(self):
     self.datos = DatosSocio()
Ejemplo n.º 3
0
class NegocioSocio(object):

    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        anterior
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar(id_socio)

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar_dni(dni_socio)

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        return self.datos.todos()

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        if (self.regla_1(socio) and self.regla_2(socio) and self.regla_3()):
            self.datos.alta(socio)
            return True
        else:
            return None

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        socio_deleted = self.buscar(id_socio)
        if socio_deleted is None:
            return False
        return self.datos.baja(id_socio)

    def modificacion(self, socio, id=-1):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """
        if self.regla_1(socio, id) and self.regla_2(socio) and (
                self.datos.modificacion(socio) is not None):
            return True
        return False

    def resetTabla(self):
        self.base.drop_all(self.engine)

    def regla_1(self, socio, id=-1):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        #tengo q comprobar si el buscar_dni funciona correctamente y dps si encuentra el socio_repe
        socio_repe = self.buscar_dni(socio.dni)
        if socio_repe == None:
            return True
        if socio_repe.id != id:
            #levanto excepcion
            raise DniRepetido('Error. Dni ya registrado')
        else:
            return True

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        if (len(socio.nombre) < self.MIN_CARACTERES
                or len(socio.nombre) > self.MAX_CARACTERES):
            raise LongitudInvalida(
                'ERROR. La longitud del nombre debe tener entre 3 y 15 caracteres.'
            )
        elif (len(socio.apellido) < self.MIN_CARACTERES
              or len(socio.apellido) > self.MAX_CARACTERES):
            raise LongitudInvalida(
                'ERROR. La longitud del apellido debe tener entre 3 y 15 caracteres.'
            )
        return True

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        if len(self.datos.todos()) > self.MAX_SOCIOS:
            #Excepción de maximo socios
            raise MaximoAlcanzado(
                'ERROR: Se excedio la cantidad maxima de socios')
        else:
            return True
Ejemplo n.º 4
0
class NegocioSocio(object):

    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        try:
            self.datos.buscar(id_socio)
        except:
            return None

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        try:
            self.datos.buscar_dni(dni_socio)
        except:
            return None

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        return self.datos.todos()

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        if not (self.regla_1(socio) or not self.regla_2(socio)
                or not self.regla_3()):
            return False
        else:
            self.datos.alta(socio)
            return True

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        if self.buscar(id_socio) is None:
            return False
        else:
            self.datos.baja(id_socio)
            return True

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """
        if not self.regla_2(socio):
            return False
        else:
            self.datos.modificacion(socio)
            return True

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        if self.datos.buscar_dni(socio.dni) is not None:
            raise DniRepetido("El Dni ya esxite")
        return True

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        if (len(socio.nombre < self.MIN_CARACTERES)
                and len(socio.nombre > self.MAX_CARACTERES)
                and len(socio.apellido < self.MIN_CARACTERES)
                and len(socio.apellido > self.MAX_CARACTERES)):
            raise LongitudInvalida(
                "El nombre y/o apellido del socio debe tener entre 3 y 15 caracteres"
            )
        return False

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        if (len(self.todos()) > self.MAX_SOCIOS):
            raise MaximoAlcanzado("Ha alcanzado el máximo de socios permitido")
        return False
Ejemplo n.º 5
0
class NegocioSocio(object):

    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):

        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar(id_socio)

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar_dni(dni_socio)

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        todos=self.datos.todos()
        return todos

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        try:
            if self.regla_1(socio) == True and self.regla_2(socio) == True and self.regla_3() == True:
                self.datos.alta(socio)
                return True
        except DniRepetido as e:
            return e
        except LongitudInvalida as e:
            return e
        except MaximoAlcanzado as e:
            return e

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        resultado=self.datos.baja(id_socio)
        return resultado

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """
        try:
            self.regla_2(socio)
            self.datos.modificacion(socio)
        except LongitudInvalida as e:
            return e
        return True

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        dni = self.datos.buscar_dni(socio.dni)
        if dni is not None:
            raise DniRepetido('Ya se encuentra un usuario con ese dni')
            return False
        return True

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        long_nombre = len(socio.nombre)
        long_apellido = len(socio.apellido)
        if long_nombre >= self.MIN_CARACTERES and long_nombre <= self.MAX_CARACTERES:
            if long_apellido >= self.MIN_CARACTERES and long_apellido <= self.MAX_CARACTERES:
                return True
            else:
                raise LongitudInvalida("Apellido debe tener entre "+str(self.MIN_CARACTERES)+" y "+ str(self.MAX_CARACTERES))
        else:
            raise LongitudInvalida("Nombre debe tener entre "+str(self.MIN_CARACTERES)+" y "+ str(self.MAX_CARACTERES))
        return False

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        todos = self.datos.todos()
        if len(todos) == self.MAX_SOCIOS:
            raise MaximoAlcanzado("Se ha alcanzado el máximo de socios")
            return False
        return True
Ejemplo n.º 6
0
class NegocioSocio(object):

    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar(id_socio)

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar_dni(dni_socio)

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        return self.datos.todos()

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        if (self.regla_1(socio) and self.regla_2(socio) and self.regla_3()):
            self.datos.alta(socio)
            return True
        else:
            return None

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        if self.buscar(id_socio) is not None:
            return True
        else:
            return False

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """

        if (self.regla_2(socio) == True
                and self.datos.modificacion(socio) is not None):
            return True
        else:
            return False

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        socio_repetido = self.buscar_dni(socio.dni)
        if socio_repetido == None:
            return True
        else:
            raise DniRepetido('DNI Repetido')

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        if (len(socio.nombre) < 3 or len(socio.nombre) > 15):
            raise LongitudInvalida(
                'Error en la longitud del nombre, debe tener entre 3 y 15 caracteres.'
            )
        elif (len(socio.apellido) < 3 or len(socio.apellido) > 15):
            raise LongitudInvalida(
                'Error en la longitud del apellido, debe tener entre 3 y 15 caracteres.'
            )
        else:
            return True

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        if len(self.datos.todos()) > 200:
            raise MaximoAlcanzado('Se ha alcanzado el maximo de socios')
        else:
            return True
Ejemplo n.º 7
0
class NegocioSocio(object):

    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar(id_socio)

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar_dni(dni_socio)

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        return self.datos.todos()

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        try:
            self.regla_1(socio)
        except DniRepetido as e:
            print(e.args)
            return False

        try:
            self.regla_2(socio)
        except LongitudInvalida as e:
            print(e.args)
            return False

        try:
            self.regla_3()
        except MaximoAlcanzado as e:
            print(e.args)
            return False

        soc = self.datos.alta(socio)
        if soc is not None:
            return True
        else:
            return False

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        return self.datos.baja(id_socio)

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """
        try:
            self.regla_2(socio)
        except LongitudInvalida as e:
            print(e.args)
            return False

        self.datos.modificacion(socio)
        return True

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        soc = self.datos.buscar_dni(socio.dni)
        if soc is not None:
            raise DniRepetido('DNI repetido')
            return False
        else:
            return True

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        if (len(socio.nombre) > self.MAX_CARACTERES
                or len(socio.nombre) < self.MIN_CARACTERES
                or len(socio.apellido) > self.MAX_CARACTERES
                or len(socio.apellido) < self.MIN_CARACTERES):
            raise LongitudInvalida('Longitud inválida')
            return False
        else:
            return True

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        cant = len(self.datos.todos())
        if cant >= self.MAX_SOCIOS:
            raise MaximoAlcanzado('Máximo alcanzado')
            return False
        else:
            return True
Ejemplo n.º 8
0
class NegocioSocio(object):
    MIN_CARACTERES_ABIERTO = 3
    MAX_CARACTERES_ABIERTO = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar(id_socio)

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar_dni(dni_socio)

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        return self.datos.todos()

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        try:
            if self.regla_1(socio) and self.regla_2(socio) and self.regla_3():
                self.datos.alta(socio)
                return True
        except Exception as ex:
            raise ex

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        return self.datos.baja(id_socio)

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se deben validar las reglas 1 y 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """
        try:
            if self.regla_1(socio) and self.regla_2(socio):
                self.datos.modificacion(socio)
            return True
        except Exception as ex:
            raise ex

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        enc = self.buscar_dni(socio.dni)
        if enc is None or enc.id == socio.id:
            return True
        raise DniRepetido()

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        errores = []
        if not self.MIN_CARACTERES_ABIERTO < len(
                socio.nombre) < self.MAX_CARACTERES_ABIERTO:
            errores.append(('nombre', (self.MIN_CARACTERES_ABIERTO + 1,
                                       self.MAX_CARACTERES_ABIERTO - 1)))
        if not self.MIN_CARACTERES_ABIERTO < len(
                socio.apellido) < self.MAX_CARACTERES_ABIERTO:
            errores.append(('apellido', (self.MIN_CARACTERES_ABIERTO + 1,
                                         self.MAX_CARACTERES_ABIERTO - 1)))
        if len(errores) == 0:
            return True
        else:
            raise LongitudInvalida(errores)

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        if len(self.datos.todos()) < self.MAX_SOCIOS:
            return True
        raise MaximoAlcanzado(self.MAX_SOCIOS)

    def validar_todo(self, socio):
        """
        Validar las 3 reglas de negocio
        Si no validan, levanta la excepcion correspondiente.
        Devuelve True si las validaciones son exitosas.
        :type socio: Socio
        :rtype: bool
        """
        errores = []
        for r in zip((self.regla_1, self.regla_2, self.regla_3),
                     (socio, socio, None)):
            try:
                regla, arg = r
                if arg is not None:
                    regla(arg)
                else:
                    regla()
            except Exception as ex:
                errores.append(ex)
        if len(errores) > 0:
            raise Exception(*errores)
        return True
class NegocioSocio(object):

    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        try:
            socio = self.datos.buscar(id_socio)
            return (socio)
        except Exception as e:
            return None

    def buscar_dni(self, dni_socio):
        try:
            socio = self.datos.buscarDni(dni_socio)
            return socio
        except Exception as e:
            return None
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """
        socios = self.datos.todos()
        return socios

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        self.regla_1(socio)
        self.regla_2(socio)
        self.regla_3()
        validacion = self.datos.alta(socio)
        if (validacion == False):
            return False
        else:
            return True

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """
        try:
            return self.datos.baja(id_socio)
        except Exception as e:
            raise e

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True si la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """
        try:
            self.regla_2(socio)
            validacion = self.datos.modificacion(socio)
            if (validacion):
                return True
            else:
                return False
        except Exception as e:
            raise e

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        if (self.buscar_dni(socio.dni)):
            raise DniRepetido("Ya existe un Socio con el mismo DNI.")
        else:
            return True

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """
        if (len(socio.nombre) > self.MIN_CARACTERES & len(socio.nombre) <
                self.MAX_CARACTERES):
            if (len(socio.apellido) > self.MIN_CARACTERES & len(socio.apellido)
                    < self.MAX_CARACTERES):
                return True
            else:
                raise LongitudInvalida('Longitud Invalida: campo "Apellido"')
        else:
            raise LongitudInvalida('Longitud Invalida: campo "Nombre"')

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """
        socios = self.todos()
        if (len(socios) < self.MAX_SOCIOS):
            return True
        else:
            raise MaximoAlcanzado('Cantidad máxima de socios alcanzada.')
Ejemplo n.º 10
0
class NegocioSocio(object):
    MIN_CARACTERES = 3
    MAX_CARACTERES = 15
    MAX_SOCIOS = 200

    def __init__(self):
        self.datos = DatosSocio()

    def buscar(self, id_socio):
        """
        Devuelve la instancia del socio, dado su id.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar(id_socio)

    def buscar_dni(self, dni_socio):
        """
        Devuelve la instancia del socio, dado su dni.
        Devuelve None si no encuentra nada.
        :rtype: Socio
        """
        return self.datos.buscar_dni(dni_socio)

    def todos(self):
        """
        Devuelve listado de todos los socios.
        :rtype: list
        """

        return self.datos.todos()

    def alta(self, socio):
        """
        Da de alta un socio.
        Se deben validar las 3 reglas de negocio primero.
        Si no validan, levantar la excepcion correspondiente.
        Devuelve True si el alta fue exitoso.
        :type socio: Socio
        :rtype: bool
        """
        try:
            if self.regla_1(socio) and self.regla_2(socio) and self.regla_3():
                self.datos.alta(socio)
                return True
        except Exception as ex:
            raise ex

    def baja(self, id_socio):
        """
        Borra el socio especificado por el id.
        Devuelve True si el borrado fue exitoso.
        :rtype: bool
        """

        return self.datos.baja(id_socio)

    def modificacion(self, socio):
        """
        Modifica un socio.
        Se debe validar la regla 2 primero.
        Si no valida, levantar la excepcion correspondiente.
        Devuelve True spassi la modificacion fue exitosa.
        :type socio: Socio
        :rtype: bool
        """

        try:
            if self.regla_2(socio):
                modificoSocio = self.datos.modificacion(socio)
                if modificoSocio:
                    return True
                else:
                    return False
        except Exception as ex:
            raise ex

    def regla_1(self, socio):
        """
        Validar que el DNI del socio es unico (que ya no este usado).
        :type socio: Socio
        :raise: DniRepetido
        :return: bool
        """
        s = self.datos.buscar_dni(socio.dni)
        if not s:
            return True
        raise DniRepetido('El DNI no se puede repetir.')

    def regla_2(self, socio):
        """
        Validar que el nombre y el apellido del socio cuenten con mas de 3 caracteres pero menos de 15.
        :type socio: Socio
        :raise: LongitudInvalida
        :return: bool
        """

        if self.MIN_CARACTERES > len(socio.nombre) or len(
                socio.nombre) > self.MAX_CARACTERES:
            raise LongitudInvalida(
                "El nombre no coincide con los parametros de Longitud previstos"
            )
        if self.MIN_CARACTERES > len(socio.apellido) and len(
                socio.apellido) > self.MAX_CARACTERES:
            raise LongitudInvalida(
                "El apellido no coincide con los parametros de Longitud previstos"
            )
        return True

    def regla_3(self):
        """
        Validar que no se esta excediendo la cantidad maxima de socios.
        :raise: MaximoAlcanzado
        :return: bool
        """

        if len(self.datos.todos()) < self.MAX_SOCIOS:
            return True
        raise MaximoAlcanzado("Se ha alcanzado la cantidad maxima de socios.")