예제 #1
0
class UsuarioModel(bd.Model):
    __tablename__ = "t_usuario"
    # https://docs.sqlalchemy.org/en/13/core/metadata.html#sqlalchemy.schema.Column
    # https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/
    # https://docs.sqlalchemy.org/en/13/core/type_basics.html
    id = bd.Column("usu_id", bd.Integer, primary_key=True)
    nombre = bd.Column("usu_nom", bd.String(45))
    apellido = bd.Column("usu_ape", bd.String(45))
    tipo = bd.Column("usu_tipo", bd.Integer)
    hashe = bd.Column("usu_hash", bd.Text, nullable=True)
    salt = bd.Column("usu_salt", bd.Text, nullable=True)
    direccion = bd.Column("usu_dir", bd.Text)
    correo = bd.Column("usu_email", bd.String(45))
    telefono = bd.Column("usu_fono", bd.String(25))
    # RELACIONES
    registro = bd.relationship('RegistroModel', lazy="dynamic")
    turno = bd.relationship('TurnoModel', lazy="dynamic")

    # usuario.horario
    # select * from usuario inner join horario on usuario.usu_id=horario.usu_id
    def __init__(self,
                 nombre,
                 apellido,
                 tipo,
                 direccion,
                 correo,
                 telefono,
                 password=None):
        self.nombre = nombre
        self.apellido = apellido
        self.tipo = tipo
        self.direccion = direccion
        self.correo = correo
        self.telefono = telefono
        if password:
            # encriptacion de mi contraseña
            password_convertida = bytes(password, 'utf-8')
            salt = bcrypt.gensalt()
            hashed = bcrypt.hashpw(password_convertida, salt)
            salt = salt.decode('utf-8')
            hashed = hashed.decode('utf-8')
            self.hashe = hashed
            self.salt = salt

    # metodo para sobreescribir la forma en que se devuelve un objeto, es exclusivo de las clases y la POO, es un metodo magico
    def __str__(self):
        return '{}, {}, {}'.format(self.nombre, self.apellido, self.correo)

    def retornar_usuario(self):
        return {
            'nombre_completo': self.nombre + ' ' + self.apellido,
            'correo': self.correo,
            'telefono': self.telefono
        }

    def guardar_bd(self):
        # cada vez que nosotros creamos una instancia para crear un nuevo usuario, lo mejor es mandar toda la instacion a almacenar a la base de datos para no tener problemas con referencias a ese objeto
        # cuando creo mi sesion estoy insertando mi nuevo usuario, pero no lo estoy guardando, si hay algo mal o algo incorrecto, no lo guardara en la base de datos hasta hacer commit, caso contrario si no hay error pero no lo queremos guardar en la bd podemos hacer un rollback para 'retroceder en el tiempo' y asi no guardar ese registro, a esto se le llama TRANSACTION o TRANSACT-SQL
        bd.session.add(self)
        bd.session.commit()
예제 #2
0
class UsuarioModel(bd.Model):
    __tablename__ = 't_usuario'
    usu_id = bd.Column(bd.Integer, primary_key=True)
    usu_nom = bd.Column(bd.String(45))
    usu_ape = bd.Column(bd.String(45))
    usu_titulos = bd.Column(bd.Text)
    # relationship => no crean relaciones en la bd, pero sirven para devolver las relaciones de una manera mas facil sin la necesidad de usar filtros y tambien las relaciones inversas
    contactos = bd.relationship('ContactoModel', backref='usuarioContacto')
    redes_sociales = bd.relationship('RedSocialModel',
                                     backref='usuarioRedSocial')
    proyectos = bd.relationship('ProyectoModel', backref='usuarioProyecto')
예제 #3
0
class CabeceraDocumentoModel(bd.Model):
    __tablename__="t_cabecera_doc"
    id = bd.Column("cd_id", bd.Integer, primary_key=True)
    fecha = bd.Column("cd_fech", bd.Date)
    numeracion = bd.Column("cd_numeracion", bd.String(25))
    total = bd.Column("cd_total", bd.DECIMAL(5,2))
    # RELACION
    usu_id = bd.Column(bd.Integer, bd.ForeignKey("t_usuario.usu_id"), nullable=False)
    detalles = bd.relationship("DetalleDocumentoModel")

    def __init__(self, fecha, numeracion, total, id_usu):
        self.fecha = fecha
        self.numeracion = numeracion
        self.total = total
        self.usu_id = id_usu

    def retornar_cabecera(self):
        return {
            'nro': self.numeracion,
            'fecha': self.fecha,
            'total' : self.total
        }
    
    def guardar_bd(self):
        bd.session.add(self)
        bd.session.commit()
예제 #4
0
class PrecioModel(bd.Model):
    __tablename__="t_precio"
    id = bd.Column("precio_id",bd.Integer, primary_key=True)
    descripcion = bd.Column("precio_desc", bd.String(45))
    precio = bd.Column("precio_precio", bd.DECIMAL(5,2))
    # RELACIONES
    atenciones = bd.relationship("AtencionModel")

    def __init__(self, descripcion, precio):
        self.descripcion = descripcion
        self.precio = precio

    def guardar_bd(self):
        bd.session.add(self)
        bd.session.commit()

    def retornar_precio(self):
        return {
            'descripcion':self.descripcion,
            'precio':self.precio
        }

    def actualizar_precio(self, descripcion, precio):
        self.descripcion= descripcion
        self.precio = precio
        bd.session.commit()
예제 #5
0
class LocalModel(bd.Model):
    __tablename__ = "t_local"

    id = bd.Column("loc_id", bd.Integer, primary_key=True)
    nombre = bd.Column("loc_nombre", bd.String(45))
    latitud = bd.Column("loc_lat", bd.DECIMAL(10, 8))
    longitud = bd.Column("loc_lng", bd.DECIMAL(10, 8))
    direccion = bd.Column("loc_direccion", bd.String(45))
    fono = bd.Column("loc_fono", bd.String(15))

    usuario = bd.Column("usu_id",
                        bd.Integer,
                        bd.ForeignKey('t_usuario.usu_id'),
                        nullable=False)
    # ----------------
    canchitas = bd.relationship('CanchitaModel', lazy=True, backref="cancha")

    # opcion = bd.relationship('OpcionesModel',lazy=True,backref="opciones")

    def __init__(self, nombre, latitud, longitud, direccion, fono, usu_id):
        self.nombre = nombre
        self.latitud = latitud
        self.longitud = longitud
        self.direccion = direccion
        self.fono = fono
        self.usuario = usu_id

    def retornar_yisun(self):
        return {
            'id': self.id,
            'nombre': self.nombre,
            'latitud': str(self.latitud),
            'longitud': str(self.longitud),
            'direccion': self.direccion,
            'fono': self.fono,
        }

    def guardar_na_bd(self):
        bd.session.add(self)
        bd.session.commit()


# parametros  para el lazy puede ser
# 'select'/True => que va a cargar la data de su hijo
# 'joined'/False => es como usar un inner join cuando vamos a hacer un select
# 'subquery'' => es igual que joined pero x detras usa una subquery para jalar los datos del hijo
# 'dynamic' => retorna los objetos del join de la consulta
class ContactoModel(bd.Model):
    __tablename__ = 't_contacto'
    contact_id = bd.Column(bd.Integer, primary_key=True)
    contact_nomb = bd.Column(bd.String(45))
    contact_email = bd.Column(bd.String(25))
    contact_mensaje = bd.Column(bd.Text)
    usu_id = bd.Column(bd.Integer, bd.ForeignKey('t_usuario.usu_id'))

    def __init__(self, nombre, correo, mensaje, id_usuario):
        self.contact_nomb = nombre
        self.contact_email = correo
        self.contact_mensaje = mensaje
        self.usu_id = id_usuario

    def save(self):
        bd.session.add(self)
        bd.session.commit()
class ProyectoModel(bd.Model):
    __tablename__ = 't_proyecto'
    proy_id = bd.Column(bd.Integer, primary_key=True)
    proy_desc = bd.Column(bd.String(45))
    proy_duracion = bd.Column(bd.String(5))
    proy_img = bd.Column(bd.Text)
    usu_id = bd.Column(bd.Integer, bd.ForeignKey('t_usuario.usu_id'))

    def __init__(self, descripcion, duracion, imagen, usuario):
        self.proy_desc = descripcion
        self.proy_duracion = duracion
        self.proy_img = imagen
        self.usu_id = usuario

    def save(self):
        bd.session.add(self)
        bd.session.commit()
class UsuarioModel(bd.Model):
    __tablename__ = 't_usuario'
    usu_id = bd.Column(bd.Integer, primary_key=True)
    usu_nom = bd.Column(bd.String(45))
    usu_ape = bd.Column(bd.String(45))
    usu_titulos = bd.Column(bd.Text)

    # relationship => no crean relaciones en la BD, pero sirven para devolver las relaciones de una manera mas facil,
    # sin la necesidad de usar filtros y tambien las relaciones inversas
    contactos = bd.relationship('ContactoModel', backref='usuarioContacto')
    redes_sociales = bd.relationship('RedSocialModel',
                                     backref='usuarioRedSocial')
    proyectos = bd.relationship('ProyectoModel', backref='usuarioProyecto')

    def __init__(self, nombre, apellido, titulos):
        self.usu_nom = nombre
        self.usu_ape = apellido
        self.usu_titulos = titulos

    def save(self):
        bd.session.add(self)
        bd.session.commit()
예제 #9
0
class ProductoModel(bd.Model):
    __tablename__ = "t_producto"
    id = bd.Column("prod_id", bd.Integer, primary_key=True)
    nombre = bd.Column("prod_nom", bd.String(45))
    precio = bd.Column("prod_precio", bd.Float(precision=2))
    # RELACIONES
    # nullable es para estipular si puede aceptar valores nulos o no, por default viene con el valor de True
    cat_id = bd.Column(bd.Integer,
                       bd.ForeignKey('t_categoria.cat_id'),
                       nullable=False)
    # https://flask-sqlalchemy.palletsprojects.com/en/2.x/models/#one-to-many-relationships
    categoria = bd.relationship('CategoriaModel')

    def __init__(self, nombre, precio, id_cat):
        self.nombre = nombre
        self.precio = precio
        self.cat_id = id_cat
예제 #10
0
class OpcionesModel(bd.Model):
    __tablename__ = "t_opcionesLocal"

    id = bd.Column("ol_id", bd.Integer, primary_key=True)
    descripcion = bd.Column("ol_desc", bd.String(45))

    # relacion
    # localtipo = bd.Column("loc_id",bd.Integer,bd.ForeignKey('t_local.loc_id'),nullable=False)
    # local = bd.relationship("LocalModel")

    def __init__(self, descripcion):
        self.descripcion = descripcion
        # self.localtipo = localtipo

    def retornar_yisun(self):
        return {'id': self.id, 'descripcion': self.descripcion}

    def guardar_en_la_bd(self):
        bd.session.add(self)
        bd.session.commit()
예제 #11
0
class CategoriaModel (bd.Model):
    # si no le cambio el nombre de la tabla, automaticamente pondra de nombre el nombre de la clase
    # https://docs.sqlalchemy.org/en/13/orm/tutorial.html
    __tablename__="t_categoria"
    # https://docs.sqlalchemy.org/en/13/core/type_basics.html#generic-types
    id = bd.Column("cat_id", bd.Integer, primary_key=True)
    nombre = bd.Column("cat_nom", bd.String(45))
    # RELACIONES
    productos = bd.relationship('ProductoModel', lazy='dynamic')

    def __init__(self, nombre):
        self.nombre = nombre

    def devolver_json(self):
        return {
            'id':self.id,
            'nombre': self.nombre
        }
    def guardar_en_la_bd(self):
        bd.session.add(self)
        bd.session.commit()
예제 #12
0
class CanchitaModel(bd.Model):
    __tablename__ = "t_canchita"

    id = bd.Column("can_id", bd.Integer, primary_key=True)
    tamanio = bd.Column("can_tamanio", bd.String(45))
    foto = bd.Column("can_foto", bd.Text)

    # relaciones
    local = bd.Column("loc_id",
                      bd.Integer,
                      bd.ForeignKey('t_local.loc_id'),
                      nullable=False)
    tipo = bd.Column("tipo_id",
                     bd.Integer,
                     bd.ForeignKey('t_tipo.tipo_id'),
                     nullable=False)
    locales = bd.relationship("LocalModel", lazy=True)
    tiposi = bd.relationship("TipoModel", lazy=True)
    precio = bd.relationship("PrecioCanchaModel", lazy=True, backref="precio")

    def __init__(self, tamanio, foto, local, tipo):
        self.tamanio = tamanio
        self.foto = foto
        self.local = local
        self.tipo = tipo

    def retornar_json(self):

        return {
            'id': self.id,
            'tipo': self.tiposi.descripcion,
            'tamanio': self.tamanio,
            'foto': self.foto,
            'local': self.locales.retornar_yisun(),
        }

    def guarda_en_la_bd(self):
        bd.session.add(self)
        bd.session.commit()
예제 #13
0
class TipoModel(bd.Model):
    __tablename__ = "t_tipo"

    id = bd.Column("tipo_id", bd.Integer, primary_key=True)
    descripcion = bd.Column("tipo_desc", bd.String(45), nullable=True)

    canchitas = bd.relationship('CanchitaModel', lazy=True, backref="tipos")

    # backref=> es una manera simple de declarar una nueva propiedad en la clase CanchitasModel para poder ingresar a sus valores solamente necesitaria canchita.tipo
    def __init__(self, descripcion):
        self.descripcion = descripcion

    def retornar_json(self):
        return {'id': self.id, 'descripcion': self.descripcion}

    def retornar_json_con_nombre_local(self):
        locales = []
        for canchita in self.canchitas:
            locales.append(canchita.locales.retornar_yisun())
        return {'descripcion': self.descripcion, 'nombres': locales}

    def guarda_en_la_bd(self):
        bd.session.add(self)
        bd.session.commit()
예제 #14
0
class PrecioCanchaModel(bd.Model):
    __tablename__ = "t_precioCancha"

    id = bd.Column("pc_id", bd.Integer, primary_key=True)
    descripcion = bd.Column("pc_desc", bd.String(45))
    monto = bd.Column("pc_monto", bd.DECIMAL(5, 2))
    disponible = bd.Column("pc_disponibilidad", bd.Boolean)

    canchita = bd.Column("can_id",
                         bd.Integer,
                         bd.ForeignKey('t_canchita.can_id'),
                         nullable=False)
    cancha = bd.relationship("CanchitaModel", lazy=True)
    reservas = bd.relationship("ReservaModel", lazy=True, backref="reserva")

    def __init__(self, descripcion, monto, disponibilidad, canchita):
        self.descripcion = descripcion
        self.monto = monto
        self.disponible = disponibilidad
        self.canchita = canchita

    def retornar_yisus(self):
        return {
            'id': self.id,
            'descripcion': self.descripcion,
            'monto': str(self.monto),
            # 'disponible': self.disponible,
        }

    def guarda_en_la_bd(self):
        bd.session.add(self)
        bd.session.commit()

    def actualizar_estado(self, nuevo_estado):
        self.disponible = nuevo_estado
        bd.session.commit()
class RedSocialModel(bd.Model):
    __tablename__ = 't_redsocial'
    rs_id = bd.Column(bd.Integer, primary_key=True)
    rs_nomb = bd.Column(bd.String(25))
    rs_link = bd.Column(bd.Text)
    usu_id = bd.Column(bd.Integer, bd.ForeignKey('t_usuario.usu_id'))
예제 #16
0
class MascotaModel(bd.Model):
    __tablename__ = "t_mascota"
    mascota_id = bd.Column(bd.Integer, primary_key=True)
    # nullable indica si el campo puede admitir valores nulos
    mascota_nombre = bd.Column(bd.String(45), nullable=False)
    mascota_fechnac = bd.Column(bd.Date)
    mascota_tipo = bd.Column(bd.String(45))
    mascota_raza = bd.Column(bd.String(45))
    mascota_sexo = bd.Column(bd.String(45))
    mascota_obs = bd.Column(bd.Text)
    # RELACIONES
    usu_id = bd.Column(bd.Integer,
                       bd.ForeignKey('t_usuario.usu_id'),
                       nullable=False)
    atenciones = bd.relationship('AtencionModel', lazy=True)

    # valores que puede albergar el parametro lazy
    # 'select'/true => nos va a cargar toda la data del hijo
    # 'joined'/false => es muy parecido al select pero hace una sentencia de join inplicitamente para traer la data del hijo
    # 'subquery' => hace la sentencia similar al joined pero lo que en realidad usa es un select anidado (un select dentro de otro select)
    # 'dynamic' => retorna los objetos del join de la consulta

    def __init__(self,
                 nombre,
                 fecha_nacimiento,
                 tipo,
                 raza,
                 sexo,
                 id_usu,
                 observaciones=None):
        self.mascota_nombre = nombre
        self.mascota_fechnac = fecha_nacimiento
        self.mascota_tipo = tipo
        self.mascota_raza = raza
        self.mascota_sexo = sexo
        self.usu_id = id_usu
        if observaciones:
            self.mascota_obs = observaciones

    def retornar_mascota(self):
        return {
            'nombre': self.mascota_nombre,
            'fecha de nacimiento': str(self.mascota_fechnac),
            'tipo': self.mascota_tipo,
            'raza': self.mascota_raza,
            'sexo': self.mascota_sexo,
            'observaciones': self.mascota_obs
        }

    def guardar_bd(self):
        bd.session.add(self)
        bd.session.commit()

    def actualizar_mascota(self,
                           nombre=None,
                           tipo=None,
                           raza=None,
                           sexo=None,
                           observaciones=None):
        if nombre:
            self.mascota_nombre = nombre
        if tipo:
            self.mascota_tipo = tipo
        if raza:
            self.mascota_raza = raza
        if sexo:
            self.mascota_sexo = sexo
        if observaciones:
            self.mascota_obs = observaciones
        bd.session.commit()