def get_all(cls): """ Busca todos depósitos de la BD. """ try: return DatosDeposito.get_all() except Exception as e: raise e
def get_by_id_PD(cls,id): """ Busca todos depósitos realizados en un PD de la BD. """ try: return DatosDeposito.get_by_id_PD(id) except Exception as e: raise e
def get_user_id(cls,id): """ Busca el id del usuario de un deposito segun su id. """ try: return DatosDeposito.get_user_id(id) except Exception as e: raise e
def get_by_id_usuario(cls,uid, limit=False): """ Busca los depósitos que correspondan a un usuario en base a su ID. """ try: return DatosDeposito.get_by_id_usuario(uid, limit) except Exception as e: raise e
def get_by_id(cls,id): """ Busca un depósito según su ID de la BD. """ try: return DatosDeposito.get_by_id(id) except Exception as e: raise e
def alta(cls, id_mat,id_pd,cantidad,cant_ep): """ Añade un nuevo depósito. """ try: DatosMaterial.addStock(id_mat,cantidad) return DatosDeposito.add(int(id_mat),int(id_pd),float(cantidad),float(cant_ep)) except Exception as e: raise e
def verificar_codigo(cls,cod,user): """ Verifica que el codigo corresponda a un deposito y le asigna el deposito al usuario correspondiente Devuelve la cantidad de EP acreditados """ try: return DatosDeposito.verificar_codigo(cod,user.id) except Exception as e: raise e
def get_info_cancelar(cls, id): errores = {"EP":-1,"Stock":0} dep = DatosDeposito.get_by_id(id) if dep.isAcreditado(): errores["EP"] = 0 user_id = cls.get_user_id(id) user = NegocioUsuario.get_by_id(user_id) if user.totalEcopuntos < dep.ecoPuntos.cantidad: errores["EP"] = dep.ecoPuntos.cantidad-user.totalEcopuntos material = DatosMaterial.get_by_id(dep.material.idMaterial) if material.stock < dep.material.cantidad: errores["Stock"] = dep.material.cantidad-material.stock return errores
def cancelar(cls,id): """ Cancela un depósito. Si el depósito ha sido acreditado, los EP se le restan al usuario. Si el usuario no tiene suficientes EP para restar, se lo deja en 0 EP. Se descuenta, asimismo, el stock de materiales generado por el deposito. Si no hay suficiente stock para restar, se genera una entrada correspondiente al stock faltante """ try: dep = DatosDeposito.get_by_id(id) DatosDeposito.update_estado(id,"cancelado") if dep.isAcreditado(): user_id = cls.get_user_id(id) NegocioUsuario.descontarEPDeposito(user_id,dep.ecoPuntos.cantidad) material = DatosMaterial.get_by_id(dep.material.idMaterial) if material.stock >= dep.material.cantidad: DatosMaterial.updateStock(material.id,material.stock - dep.material.cantidad) else: DatosMaterial.updateStock(material.id,0) restante = dep.material.cantidad-material.stock DatosEntradaExterna.add_one(material.id,restante,"Compensación por cancelación de depósito número "+str(id)+".",datetime.now()) except Exception as e: raise e
def get_by_id(cls, id, noClose=False): """ Busca un usuario en la BD segun su id. """ try: cls.abrir_conexion() sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img \ from usuarios where usuarios.idUsuario = {}").format(id) cls.cursor.execute(sql) usuarios = cls.cursor.fetchall() if len(usuarios) > 0: usu = usuarios[0] direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10]) usuario.calcularTotalEcopuntos() return usuario else: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.get_by_id()", msj_adicional="Usuario inexistente") except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.get_by_id()", msj=str(e), msj_adicional="Error buscando usuario en la BD.") finally: if not (noClose): cls.cerrar_conexion()
def buscar_info_user(cls, busqueda): """ Obtiene todos los usuarios según su ID, nombre completo, email, o documento """ try: cls.abrir_conexion() sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img \ from usuarios WHERE estado = \"habilitado\" AND (idUsuario=\"{}\" OR email=\"{}\" OR nroDOC=\"{}\")" ).format(busqueda, busqueda, busqueda) cls.cursor.execute(sql) usuarios = cls.cursor.fetchall() users = [] for usu in usuarios: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) tipo_doc = DatosTipoDocumento.get_by_id(usu[7]) usuario = Usuario(usu[0], usu[1], tipo_doc, usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10]) usuario.calcularTotalEcopuntos() users.append(usuario) return users except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.buscar_info_user()", msj=str(e), msj_adicional="Error buscando usuarios.") finally: cls.cerrar_conexion()
def get_all(cls, noFilter=False): """ Obtiene todos los usuarios. El No filter solamente filtra los no-activos y los no-verificados, no se incluyen nunca los eliminados. """ try: cls.abrir_conexion() if noFilter: sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img, \ usuarios.estado \ from usuarios where estado != 'eliminado' order by nombre IS NULL, nombre,estado ASC" ) else: sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img, \ usuarios.estado \ from usuarios WHERE estado = \"habilitado\" order by nombre ASC" ) cls.cursor.execute(sql) usuarios = cls.cursor.fetchall() users = [] if noFilter: for usu in usuarios: print(usu[0]) print(usu[11]) if usu[11] != 'habilitado': direc = None depositos = None ped = None usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) users.append(usuario) else: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) usuario.calcularTotalEcopuntos() users.append(usuario) else: for usu in usuarios: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) usuario.calcularTotalEcopuntos() users.append(usuario) return users except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.get_all()", msj=str(e), msj_adicional="Error obteniendo todos los usuarios.") finally: cls.cerrar_conexion()
def login(cls, email, password, noClose=False): """ Busca un usuario en la BD que tenga el email y la contraseña que recibe como parámetro. Si no hay ninguno, devuelve False. """ try: cls.abrir_conexion() sql = ("SELECT usuarios.idUsuario, \ usuarios.nroDoc, \ usuarios.nombre, \ usuarios.apellido, \ usuarios.email, \ usuarios.password, \ usuarios.idTipoUsuario, \ usuarios.idTipoDoc, \ usuarios.idDireccion, \ usuarios.idNivel, \ usuarios.img, \ usuarios.estado \ from usuarios where email = %s and password = %s and estado != 'eliminado'" ) values = (email, password) cls.cursor.execute(sql, values) usuarios = cls.cursor.fetchall() if len(usuarios) > 0: usu = usuarios[0] if usu[11] != "habilitado": usuario = Usuario(usu[0], None, None, None, None, usu[5], None, None, email=usu[4], estado=usu[11]) else: direc = DatosDireccion.get_one_id(usu[8]) depositos = DatosDeposito.get_by_id_usuario(usu[0]) ped = DatosPedido.get_by_user_id(usu[0]) usuario = Usuario(usu[0], usu[1], usu[7], usu[2], usu[3], usu[5], usu[6], direc, depositos, ped, usu[9], [], [], [], usu[4], usu[10], usu[11]) usuario.calcularTotalEcopuntos() return usuario else: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.login()", msj_adicional="Usuario inexistente") except custom_exceptions.ErrorDeConexion as e: raise e except Exception as e: raise custom_exceptions.ErrorDeConexion( origen="data_usuario.login()", msj=str(e), msj_adicional= "Error buscando usuario en la BD para realizar el login.") finally: if not (noClose): cls.cerrar_conexion()
def acreditar(cls,dip,uid): try: dep = cls.get_by_id(dip) return DatosDeposito.verificar_codigo(dep.codigo,uid) except Exception as e: raise e