def add(cls, carrito, usuario, idPR, totalEP, totalARS): #verificaciones for art in carrito: NegocioArticulo.checkStock(art.idTipoArticulo, art.cantidad) NegocioUsuario.checkEP(usuario.id, totalEP) #Pedido puntoRetiro = DatosPuntoRetiro.get_by_id(idPR) fechaEnc = datetime.now() fechaRet = fechaEnc + timedelta(days=puntoRetiro.demoraFija) idPedido = DatosPedido.add(fechaEnc, fechaRet, totalEP, totalARS, idPR, usuario.id) #EcoPuntos nuevos_ep = NegocioUsuario.useEP(usuario.id, totalEP) #Nivel NegocioUsuario.update_nivel(usuario.id, nuevos_ep) #Articulos y Stock for art in carrito: NegocioArticulo.disminuirStock(art.idTipoArticulo, art.cantidad) mg = DatosArticulo.get_margen_ganancia(art.idTipoArticulo) DatosCantArticulo.addArticuloPedido(art.idTipoArticulo, idPedido, art.cantidad, mg) return idPedido
def update_estado(cls, id, estado): try: DatosPedido.update_estado(id, estado) if estado == "cancelado": result = DatosPedido.get_one(id) pedido = result[0] id_usuario = result[1] #Devovler EPs a User NegocioUsuario.addEP(id_usuario, pedido.totalEP) #Devolver Stock al articulo for art in pedido.articulos: DatosArticulo.addStock(art.idTipoArticulo, art.cantidad) except Exception as e: raise e
def get_one(cls, id, user=False): try: result = DatosPedido.get_one(id) pedido = result[0] id_usuario = result[1] if user: return [pedido, DatosUsuario.get_by_id(id_usuario)] else: return pedido return except Exception as e: raise e
def get_all_historial_mov(cls, filtrar_cancelados=False): try: pedidos_ = DatosPedido.get_all(filtrar_cancelados=True) pedidos = [] for pedido in pedidos_: for art in pedido.articulos: pedidos.append( Pedido(pedido.id, pedido.fechaEncargo, pedido.fechaRetiro, art, pedido.totalARS, pedido.totalEP, pedido.idPuntoRetiro, pedido.estado)) return pedidos 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 get_by_user_id(cls, uid, limit=False): try: return DatosPedido.get_by_user_id(uid, limit) except Exception as e: raise e
def get_by_idPR(cls, id, limit=False): try: return DatosPedido.get_by_idPR(id, limit) except Exception as e: raise e
def get_all(cls): try: return DatosPedido.get_all() except Exception as e: raise e