def ShopingCart(menu_shoping_cart, product_shoping_cart, id_user):
    descuento_carrito = 0
    direccion_pedido = ""
    while True:
        general_cart = []
        for a in menu_shoping_cart:
            menu_on_cart = psfunc.SelectQuerry(
                "SELECT * FROM menues WHERE id_menu = " + str(a))
            general_cart.append(menu_on_cart[0])
        for a in menu_shoping_cart:
            menu_on_cart = psfunc.SelectQuerry(
                "SELECT * FROM productos WHERE id_producto = " + str(a))
            general_cart.append(menu_on_cart[0])

        print(
            tabulate(general_cart,
                     headers=[
                         "ID Item", "ID Local", "Descuento", "Nombre", "Precio"
                     ],
                     tablefmt="psql"))
        opciones_carrito = [
            "Eliminar Item", "Vaciar Carrito", "Eligir Promocion",
            "Elegir Direccion", "Confirmar Pedido", "Volver Atras"
        ]
        psfunc.DisplayMenu(opciones_carrito)
        opcion = psfunc.InputOpciones(opciones_carrito)
        if opcion == 1:
            try:
                id_item = int(input("Ingresar ID item a eliminar: "))
                id_local = int(input("Ingresar ID del local: "))

                for local in range(len(general_cart)):
                    if id_item == general_cart[local][0]:
                        if id_local == general_cart[local][1]:
                            try:
                                menu_shoping_cart.remove(
                                    general_cart[local][0])
                            except:
                                pass
                            try:
                                product_shoping_cart.remove(
                                    general_cart[local][0])
                            except:
                                pass
                            print("Item eliminado")

            except:
                print("Valor no valido")

        elif opcion == 2:
            psfunc.ClearShopingCart(menu_shoping_cart, product_shoping_cart)

        elif opcion == 3:
            if psfunc.PrintQuerry(
                    "SELECT pr.id_codigo, pr.nombre, pr.fecha_venc, pr.descripcion FROM promociones pr \
                                FULL JOIN (SELECT * FROM promocion_usuario) AS t1 ON t1.id_codigo = pr.id_codigo\
                                WHERE t1.id_usuario = " + str(id_user)):
                opcion_seleccionar_promocion = psfunc.QuerryOptionIdCheck(
                    "SELECT pr.id_codigo FROM promociones pr \
                                    FULL JOIN (SELECT * FROM promocion_usuario) AS t1 ON t1.id_codigo = pr.id_codigo\
                                    WHERE t1.id_usuario = " + str(id_user),
                    "Seleccionar Promocion:")

                if opcion_seleccionar_promocion != 0:
                    descuento_carrito = psfunc.SelectQuerry(
                        "SELECT pr.monto FROM promociones pr \
                                    FULL JOIN (SELECT * FROM promocion_usuario) AS t1 ON t1.id_codigo = pr.id_codigo\
                                    WHERE t1.id_usuario = " + str(id_user) +
                        " AND pr.id_codigo = " +
                        str(opcion_seleccionar_promocion))

                    descuento_carrito = descuento_carrito[0][0]

        elif opcion == 4:
            if psfunc.PrintQuerry(
                    "SELECT * FROM direcciones dir FULL JOIN (SELECT * FROM usuario_direccion) AS t1 ON t1.id_direccion = dir.id_direccion WHERE t1.id_usuario = "
                    + str(id_user)):
                opcion_seleccionar_direccion = psfunc.QuerryOptionIdCheck(
                    "SELECT dir.id_direccion FROM direcciones dir FULL JOIN (SELECT * FROM usuario_direccion) AS t1 ON t1.id_direccion = dir.id_direccion WHERE t1.id_usuario = "
                    + str(id_user), "Seleccione ID direccion: ")
                if opcion_seleccionar_direccion != 0:
                    direccion_pedido_aux = psfunc.SelectQuerry(
                        "SELECT dir.nombre, dir.calle, dir.numero, dir.comuna, dir.region FROM direcciones dir FULL JOIN (SELECT * FROM usuario_direccion) AS t1 ON t1.id_direccion = dir.id_direccion WHERE t1.id_usuario = "
                        + str(id_user) + " AND id_direccion = " +
                        str(opcion_seleccionar_direccion))
                    direccion_pedido = direccion_pedido_aux[0][
                        0], direccion_pedido_aux[0][1], direccion_pedido_aux[
                            0][2], direccion_pedido_aux[0][
                                3], direccion_pedido_aux[0][4]

        elif opcion == 5:
            print("Confirmar Pedido")
            if len(general_cart) >= 0:
                if len(direccion_pedido) > 0:
                    suma_carro = 0
                    for local in range(len(general_cart)):
                        suma_carro += general_cart[local][4]

                    print("Calcular Pedido")
                    print("Direccion: ", direccion_pedido)
                    print("Descuento: ", str(descuento_carrito))
                    print("Total Pedido: ", suma_carro)
                    confirmar_pedido = input("Desea Confirmar Pedido? (S/N)")
                    if confirmar_pedido == "S":
                        repartidores_seleccionar = psfunc.SelectQuerry(
                            "SELECT id_repartidor FROM repartidores")
                        random_id = randint(0, len(repartidores_seleccionar))
                        print("Sera atendido por")
                        psfunc.PrintQuerry(
                            "SELECT * FROM repartidores WHERE id_repartidor = "
                            + str(random_id))

                else:
                    print("No ha escogido una direccion de envio")
            else:
                print("No hay productos en el carro")

        elif opcion == 6:
            break
def MenuLocales(login_nombre_usuario, menu_shoping_cart, product_shoping_cart,
                id_user):
    while True:
        psfunc.PrintQuerry("SELECT * FROM locales")
        opciones_locales = [
            "Seleccionar Local", "Agregar Local", "Volver Atras"
        ]
        psfunc.DisplayMenu(opciones_locales)
        opcion = psfunc.InputOpciones(opciones_locales)
        if opcion == 1:
            id_local_seleccionado = psfunc.QuerryOptionIdCheck(
                "SELECT id_local FROM locales", "Ingresar id local: ")
            if id_local_seleccionado != 0:
                while True:
                    psfunc.PrintQuerry(
                        "SELECT * FROM locales WHERE id_local = " +
                        str(id_local_seleccionado))
                    opcion_local_id = [
                        "Editar Local", "Eliminar Local", "Ver Menus",
                        "Ver Productos", "Categorias", "Favorito", "Rating",
                        "Volver Atras"
                    ]
                    psfunc.DisplayMenu(opcion_local_id)
                    opcion = psfunc.InputOpciones(opcion_local_id)
                    if opcion == 1:
                        EditarLocal(id_local_seleccionado)

                    elif opcion == 2:
                        delete_check = input(
                            "Seguro que desea eliminar este local (S/N) ")
                        if delete_check == "S":
                            psfunc.DeleteQuerry(
                                "locales",
                                "id_local = " + str(id_local_seleccionado))

                    elif opcion == 3:
                        VerMenus(id_local_seleccionado, menu_shoping_cart,
                                 product_shoping_cart)

                    elif opcion == 4:
                        Productos(id_local_seleccionado, menu_shoping_cart,
                                  product_shoping_cart)

                    elif opcion == 5:
                        while True:
                            psfunc.PrintQuerry(
                                "SELECT DISTINCT ON (cat.id_categoria)  cat.id_categoria, cat.nombre FROM categorias cat INNER JOIN (SELECT lc.id_local, t1.id_categoria FROM locales lc \
                                FULL JOIN (SELECT * FROM categoria_local) AS t1 ON lc.id_local = t1.id_local WHERE lc.id_local = "
                                + str(id_local_seleccionado) + ") AS t2\
                                ON t2.id_categoria = cat.id_categoria ORDER BY cat.id_categoria"
                            )
                            opcion_local_id = [
                                "Agregar Categoria", "Eliminar Categoria",
                                "Volver Atras"
                            ]
                            psfunc.DisplayMenu(opcion_local_id)
                            opcion = psfunc.InputOpciones(opcion_local_id)
                            if opcion == 1:
                                print("Agregar Categoria")
                                psfunc.PrintQuerry(
                                    "SELECT DISTINCT ON (cat.id_categoria) cat.id_categoria, cat.nombre FROM categorias cat INNER JOIN (SELECT lc.id_local, t1.id_categoria FROM locales lc \
                                FULL JOIN (SELECT * FROM categoria_local) AS t1 ON lc.id_local = t1.id_local WHERE lc.id_local NOT IN ("
                                    + str(id_local_seleccionado) + ")) AS t2\
                                ON t2.id_categoria = cat.id_categoria ORDER BY cat.id_categoria"
                                )
                                id_categoria_seleccionada = psfunc.QuerryOptionIdCheck(
                                    "SELECT cat.id_categoria FROM categorias cat INNER JOIN (SELECT lc.id_local, t1.id_categoria FROM locales lc \
                                FULL JOIN (SELECT * FROM categoria_local) AS t1 ON lc.id_local = t1.id_local WHERE lc.id_local NOT IN ("
                                    + str(id_local_seleccionado) + ")) AS t2\
                                ON t2.id_categoria = cat.id_categoria",
                                    "Ingresar id categoria: ")
                                if id_categoria_seleccionada != 0:
                                    psfunc.InsertQuerry(
                                        "categoria_local", (),
                                        (str(id_local_seleccionado),
                                         str(id_categoria_seleccionada)))

                            elif opcion == 2:
                                print("Eliminar Categoria")
                                id_categoria_seleccionada = psfunc.QuerryOptionIdCheck(
                                    "SELECT cat.id_categoria FROM categorias cat INNER JOIN (SELECT lc.id_local, t1.id_categoria FROM locales lc \
                                FULL JOIN (SELECT * FROM categoria_local) AS t1 ON lc.id_local = t1.id_local WHERE lc.id_local = "
                                    + str(id_local_seleccionado) + ") AS t2\
                                ON t2.id_categoria = cat.id_categoria",
                                    "Ingresar id categoria: ")
                                if id_categoria_seleccionada != 0:
                                    psfunc.DeleteQuerry(
                                        "categoria_local", "id_local = " +
                                        str(id_local_seleccionado) +
                                        " AND id_categoria = " +
                                        str(id_categoria_seleccionada))

                            elif opcion == 3:
                                break

                    elif opcion == 6:
                        fav = psfunc.SelectQuerry(
                            "SELECT * FROM usuario_favoritos WHERE id_local = "
                            + str(id_local_seleccionado) +
                            " AND id_usuario = " + str(id_user))
                        if fav:
                            psfunc.DeleteQuerry(
                                "usuario_favoritos",
                                "id_local = " + str(id_local_seleccionado) +
                                " AND id_usuario = " + str(id_user))
                            print("Eliminado de favoritos")
                        else:
                            psfunc.InsertQuerry(
                                "usuario_favoritos", (),
                                (str(id_user), str(id_local_seleccionado)))
                            print("Agregado a favoritos")

                    elif opcion == 7:
                        Rating(id_local_seleccionado, id_user)

                    elif opcion == 8:
                        break

        elif opcion == 2:
            AgregarLocal()

        elif opcion == 3:
            break
def Productos(id_local_seleccionado, menu_shoping_cart, product_shoping_cart):
    while True:
        psfunc.PrintQuerry(
            "SELECT pr.id_producto, pr.nombre, pr.precio, t1.valor FROM productos pr FULL JOIN\
        (SELECT * FROM descuentos) AS t1 ON pr.id_descuento = t1.id_descuento WHERE pr.id_local = "
            + str(id_local_seleccionado))
        opcion_local_productos = [
            "Seleccionar Producto", "Agregar Producto", "Volver Atras"
        ]
        psfunc.DisplayMenu(opcion_local_productos)
        opcion = psfunc.InputOpciones(opcion_local_productos)
        if opcion == 1:
            id_producto_seleccionado = psfunc.QuerryOptionIdCheck(
                "SELECT id_producto FROM productos WHERE id_local = " +
                str(id_local_seleccionado), "Ingresar id producto: ")
            if id_producto_seleccionado != 0:
                while True:
                    psfunc.PrintQuerry(
                        "SELECT * FROM locales WHERE id_local = " +
                        str(id_local_seleccionado))
                    opcion_local_id = [
                        "Agregar Al Carrito", "Agregar A Menu",
                        "Editar Producto", "Eliminar Producto", "Descuento",
                        "Volver Atras"
                    ]
                    psfunc.DisplayMenu(opcion_local_id)
                    opcion = psfunc.InputOpciones(opcion_local_id)
                    if opcion == 1:
                        psfunc.AddToCart(id_producto_seleccionado, True,
                                         menu_shoping_cart,
                                         product_shoping_cart)

                    elif opcion == 2:
                        psfunc.PrintQuerry(
                            "SELECT * FROM menues WHERE id_local = " +
                            str(id_local_seleccionado))
                        id_menu_seleccionado = psfunc.QuerryOptionIdCheck(
                            "SELECT id_menu FROM menues WHERE id_menu = " +
                            str(id_menu_seleccionado), "Ingresar id menu: ")
                        if id_menu_seleccionado != 0:
                            pr_men = psfunc.SelectQuerry(
                                "SELECT * FROM menu_producto WHERE id_menu = "
                                + str(id_menu_seleccionado) +
                                " AND id_producto = " +
                                str(id_producto_seleccionado))
                            if pr_men:
                                ctd_pedido = pr_men[0][2]
                                psfunc.UpdateQuerry(
                                    "menu_producto", "cantidad_producto = " +
                                    str(ctd_pedido + 1),
                                    "id_menu = " + str(id_menu_seleccionado) +
                                    " AND id_producto = " +
                                    str(id_producto_seleccionado))
                            else:
                                psfunc.InsertQuerry(
                                    "menu_producto", (),
                                    (str(id_menu_seleccionado),
                                     str(id_producto_seleccionado), str(1)))

                    elif opcion == 3:
                        print("Que Parametro Desea Modificar")
                        opcion_editar_menu = [
                            "Nombre", "Precio", "Volver Atras"
                        ]
                        psfunc.DisplayMenu(opcion_editar_menu)
                        opcion = psfunc.InputOpciones(opcion_editar_menu)
                        if opcion == 1:
                            editar_producto = input(
                                "Ingresar Nuevo Nombre Producto: ")
                            psfunc.UpdateQuerry("productos",
                                                "nombre = '" + str(editar_producto) + "'",
                                                "id_local = " + str(id_local_seleccionado) \
                                                + " id_producto = " + str(id_producto_seleccionado))

                        elif opcion == 2:
                            editar_producto = input(
                                "Ingresar Nuevo Precio Producto: ")
                            psfunc.UpdateQuerry("productos",
                                                "precio = '" + str(editar_producto) + "'",
                                                "id_local = " + str(id_local_seleccionado)\
                                                + "id_producto = " + str(id_producto_seleccionado))

                        elif opcion == 3:
                            pass

                    elif opcion == 4:
                        delete_product_from_menu = input(
                            "Eliminar el producto del local? (S/N) ")
                        if delete_product_from_menu == "S":
                            psfunc.DeleteQuerry("productos"
                                                , "id_producto = " + str(id_producto_seleccionado) + \
                                                " AND id_local = " + str(id_local_seleccionado))

                    elif opcion == 5:
                        desc = psfunc.SelectQuerry(
                            "SELECT * FROM productos FULL JOIN (SELECT * FROM descuentos) AS t1 ON t1.id_descuento = productos.id_descuento\
                             WHERE id_producto = " +
                            str(id_producto_seleccionado) +
                            " AND id_local = " + str(id_local_seleccionado))
                        if desc:
                            psfunc.DeleteQuerry(
                                "descuentos",
                                "id_descuento = " + str(desc[0][0]))
                        else:
                            print("Crear Descuento")
                            try:
                                valor = int(input("Valor del descuento: "))
                                tipo = input(
                                    "Descuento Por Valor(N)/Porcentaje(P)")
                                if tipo == "P" or tipo == "N":
                                    psfunc.InsertQuerry(
                                        "descuentos", (), (tipo, str(valor)))
                                else:
                                    print("Opcion no valida")
                            except:
                                print("Valor no valido")

                    elif opcion == 6:
                        break

        elif opcion == 2:
            print("Agregar Producto")
            nombre_producto = "'" + input("Nombre Producto: ") + "'"
            precio_producto = input("Precio Producto: ")
            psfunc.InsertQuerry("productos", ("nombre", "precio", "id_local"),
                                (nombre_producto, str(precio_producto),
                                 str(id_local_seleccionado)))

        elif opcion == 3:
            break
def VerMenus(id_local_seleccionado, menu_shoping_cart, product_shoping_cart):
    while True:
        psfunc.PrintQuerry("SELECT * FROM menues WHERE id_local = " +
                           str(id_local_seleccionado))
        opcion_menues = ["Seleccionar Menu", "Agregar Menu", "Volver Atras"]
        psfunc.DisplayMenu(opcion_menues)
        opcion = psfunc.InputOpciones(opcion_menues)
        if opcion == 1:
            id_menu_seleccionado = psfunc.QuerryOptionIdCheck(
                "SELECT id_menu FROM menues WHERE id_local = " +
                str(id_local_seleccionado), "Ingresar id menu: ")
            if id_menu_seleccionado != 0:
                while True:
                    psfunc.PrintQuerry("SELECT pr.id_local, pr.id_producto, pr.nombre, pr.precio, pr.id_descuento \
                                    FROM productos pr INNER JOIN \
                                    (SELECT mp.id_producto FROM menu_producto mp INNER JOIN \
                                    (SELECT men.id_menu FROM menues men WHERE id_menu = "                                                                                          + str(id_menu_seleccionado) + \
                                    ") AS t1 ON mp.id_menu = t1.id_menu) AS t2 ON pr.id_producto = t2.id_producto")

                    opcion_menues = [
                        "Agregar Menu Al Carrito",
                        "Eliminar Producto Del Menu", "Editar Menu",
                        "Eliminar Menu", "Descuento", "Volver Atras"
                    ]
                    psfunc.DisplayMenu(opcion_menues)
                    opcion = psfunc.InputOpciones(opcion_menues)

                    if opcion == 1:
                        psfunc.AddToCart(id_menu_seleccionado, False,
                                         menu_shoping_cart,
                                         product_shoping_cart)
                        print("Menu Agregado Al Carrito")

                    elif opcion == 2:
                        EliminarProductoMenu(id_menu_seleccionado)

                    elif opcion == 3:
                        EditarMenu(id_local_seleccionado, id_menu_seleccionado)

                    elif opcion == 4:
                        EliminarMenu(id_local_seleccionado,
                                     id_menu_seleccionado)

                    elif opcion == 5:
                        desc = psfunc.SelectQuerry(
                            "SELECT * FROM menues FULL JOIN (SELECT * FROM descuentos) AS t1 ON t1.id_descuento = menues.id_descuento\
                             WHERE id_menu = " + str(id_menu_seleccionado) +
                            " AND id_local = " + str(id_local_seleccionado))
                        if desc:
                            psfunc.DeleteQuerry(
                                "descuentos",
                                "id_descuento = " + str(desc[0][0]))
                        else:
                            print("Crear Descuento")
                            try:
                                valor = int(input("Valor del descuento: "))
                                tipo = input(
                                    "Descuento Por Valor(N)/Porcentaje(P)")
                                if tipo == "P" or tipo == "N":
                                    psfunc.InsertQuerry(
                                        "descuentos", (), (tipo, str(valor)))
                                else:
                                    print("Opcion no valida")
                            except:
                                print("Valor no valido")

                    elif opcion == 6:
                        break

        elif opcion == 2:
            AgregarMenu(id_local_seleccionado)

        elif opcion == 3:
            break
Beispiel #5
0
def Directions(login_nombre_usuario):
    id_user = psfunc.SelectQuerry(
        f"SELECT id_usuario FROM Usuarios WHERE email= '{login_nombre_usuario}'"
    )
    id_user = id_user[0][0]
    while True:
        print("\nDirecciones\n")
        headers = [
            "ID", "Nombre", "Calle", "Número", "Región", "Comuna", "Dpto/block"
        ]
        sql = psfunc.PrintQuerryCustomHeaders(
            f"SELECT id_direccion, nombre, calle, numero, region, comuna, dpto_block \
                                             FROM usuario_direccion INNER JOIN Direcciones \
                                             USING(id_direccion)\
                                             WHERE id_usuario= {id_user}",
            headers)
        print(sql)  #Direcciones de usuario

        menu_directions = [
            "Ver dirección", "Agregar dirección", "Volver a Menú"
        ]
        psfunc.DisplayMenu(menu_directions)
        option_directions = psfunc.InputOpciones(menu_directions)

        if option_directions == 1:
            print("Ver dirección\n")
            print(sql)
            text = "Ingrese la direccion que desea ver:"
            querry = f"SELECT id_direccion \
                    FROM usuario_direccion INNER JOIN Direcciones \
                    USING(id_direccion) WHERE id_usuario={id_user}"

            id_direction = psfunc.QuerryOptionIdCheck(querry, text)
            while True:
                if id_direction != 0:
                    print(sql)
                    menu_whatch = [
                        "Editar direccion", "Eliminar direccion",
                        "Volver a Direcciones"
                    ]
                    psfunc.DisplayMenu(menu_whatch)
                    option_whatch = psfunc.InputOpciones(menu_whatch)
                    if option_whatch == 1:
                        print("\nEditar direccion\n")
                        print("Seleccione el campo que desea editar")
                        menu_editor = [
                            "Nombre", "Calle", "Número", "Región", "Comuna",
                            "dpto_block", "Volver a Direcciones"
                        ]
                        psfunc.DisplayMenu(menu_editor)
                        option_editor = psfunc.InputOpciones(menu_editor)
                        if option_editor == 1:  #Nombre
                            new_name = input(
                                "Ingrese el nuevo alias para la direccion:")
                            table = "direcciones"
                            set_parameters = f"nombre='{new_name}'"
                            where_parameters = f"id_direccion= {id_direction}"
                            psfunc.UpdateQuerry(table, set_parameters,
                                                where_parameters)

                        if option_editor == 2:  #Calle
                            new_street = input(
                                "Ingrese la nueva calle para la direccion:")
                            table = "direcciones"
                            set_parameters = f"calle='{new_street}'"
                            where_parameters = f"id_direccion= {id_direction}"
                            psfunc.UpdateQuerry(table, set_parameters,
                                                where_parameters)

                        if option_editor == 3:  #Numero
                            new_number = input(
                                "Ingrese el numero de calle para la direccion:"
                            )
                            table = "direcciones"
                            set_parameters = f"numero={new_number}"
                            where_parameters = f"id_direccion= {id_direction}"
                            psfunc.UpdateQuerry(table, set_parameters,
                                                where_parameters)

                        if option_editor == 4:  #Region
                            new_region = input(
                                "Ingrese la region para la direccion:")
                            table = "direcciones"
                            set_parameters = f"region='{new_region}'"
                            where_parameters = f"id_direccion= {id_direction}"
                            psfunc.UpdateQuerry(table, set_parameters,
                                                where_parameters)

                        if option_editor == 5:  #Comuna
                            new_comuna = input(
                                "Ingrese la comuna para la direccion:")
                            table = "direcciones"
                            set_parameters = f"comuna='{new_comuna}'"
                            where_parameters = f"id_direccion= {id_direction}"
                            psfunc.UpdateQuerry(table, set_parameters,
                                                where_parameters)
                        if option_editor == 6:  #Dpto_block
                            new_dptoblock = input(
                                "Ingrese el dpto o block para la direccion:")
                            table = "direcciones"
                            set_parameters = f"dpto_block={new_dptoblock}"
                            where_parameters = f"id_direccion= {id_direction}"
                            psfunc.UpdateQuerry(table, set_parameters,
                                                where_parameters)
                        if option_editor == 7:  #Volver atrás
                            break
                    if option_whatch == 2:
                        print(
                            "\n¿Estas seguro que deseas eliminar a esta dirección?"
                        )
                        yes_no = ["Sí, estoy seguro", "No estoy seguro"]
                        psfunc.DisplayMenu(yes_no)
                        option_delete = psfunc.InputOpciones(yes_no)
                        if option_delete == 1:
                            table = "direcciones"
                            table2 = "usuario_direccion"
                            text = f"id_direccion= {id_direction}"
                            psfunc.DeleteQuerry(table, text)
                            psfunc.DeleteQuerry(table2, text)
                            break
                        if option_delete == 2:
                            break
                    if option_whatch == 3:
                        break

        elif option_directions == 2:
            print("\nAgregar Direccion")
            table = "direcciones"
            table2 = "usuario_direccion"
            name = input("Ingrese el nombre:")
            street = input("Ingrese la calle:")
            try:
                number = int(input("Ingrese la enumeración:"))
                region = input("Ingrese la region:")
                comuna = input("Ingrese la comuna:")
                dpto_block = input(
                    "Ingrese el numero de dpto o block. En caso de no corresponder presione enter:"
                )
                if dpto_block == "":
                    try:
                        cur = psfunc.GetCon().cursor()
                        insertsrt = f"INSERT INTO {table}(nombre, calle, numero, region,comuna, dpto_block) values('{name}','{street}',{number},'{region}','{comuna}',null)"
                        cur.execute(insertsrt)
                        psfunc.GetCon().commit()
                        print("\nDireccion añadida con exito")
                        id_new1 = psfunc.SelectQuerry(
                            "SELECT*FROM Direcciones ORDER BY id_direccion DESC LIMIT 1"
                        )
                        id_new = id_new1[0][0]
                        instertsrt2 = f"INSERT INTO {table2}(id_direccion,id_usuario) values(" + str(
                            id_new) + "," + str(id_user) + ")"
                        cur.execute(instertsrt2)
                        psfunc.GetCon().commit()
                        print("La direccion fue añadida exitosamente")
                    except:
                        print("Error al agregar direccion")
                else:
                    try:
                        dpto_block = int(dpto_block)
                        cur = psfunc.GetCon().cursor()
                        insertsrt = f"INSERT INTO {table}(nombre, calle, numero, region,comuna, dpto_block) values('{name}','{street}',{number},'{region}','{comuna}',{dpto_block})"
                        cur.execute(insertsrt)
                        psfunc.GetCon().commit()
                        print("\nDireccion añadida con exito")
                        id_new = psfunc.SelectQuerry(
                            "SELECT*FROM Direcciones ORDER BY id_direccion DESC LIMIT 1"
                        )
                        id_new = id_new[0][0]
                        instertsrt2 = f"INSERT INTO {table2}(id_direccion,id_usuario) values(" + str(
                            id_new) + "," + str(id_user) + ")"
                        cur.execute(instertsrt2)
                        psfunc.GetCon().commit()
                        print("La direccion fue añadida exitosamente")
                    except:
                        print("Error al agregar direccion")
            except:
                print("Parametro ingresado no valido")
        elif option_directions == 3:
            break
Beispiel #6
0
def Historial_pedidos(login_nombre_usuario):
    id_user = psfunc.SelectQuerry(
        f"SELECT id_usuario FROM Usuarios WHERE email='{login_nombre_usuario}'"
    )
    id_user = id_user[0][0]  #ID del usuario

    menu = True
    while menu:
        print("\nHistorial de pedidos\n")

        headers = ["ID", "Dirección", "# ", "Fecha", "Monto"]
        sql = psfunc.PrintQuerryCustomHeaders(
            f"SELECT id_pedido, calle,numero, fecha_pedido, monto FROM (SELECT id_pedido, (monto_producto+COALESCE(monto_menu,0)) AS monto FROM (SELECT id_pedido, monto_producto, monto_menu FROM (SELECT DISTINCT  id_pedido,  (cantidad_producto*precio) AS monto_producto \
        FROM pedido_producto INNER JOIN productos \
        USING(id_producto) \
        ORDER BY id_pedido) AS t1 FULL JOIN (SELECT DISTINCT  id_pedido,  SUM((cantidad_menu*precio)) AS monto_menu \
        FROM pedido_menu INNER JOIN menues \
        USING(id_menu) \
        GROUP BY id_pedido \
        ORDER BY id_pedido) AS t2 \
        USING(id_pedido)) AS t5) AS t3 INNER JOIN (SELECT id_pedido, id_usuario, calle , numero, fecha_pedido \
        FROM Pedidos INNER JOIN Direcciones \
        USING(id_direccion)) AS t4 \
        USING(id_pedido) \
        WHERE id_usuario={id_user}", headers)
        print(sql)  #Pedidos de Usuario

        menu_historial = ["Ver pedido",
                          "Volver a Menú"]  #Menu_Historial_de_pedidos
        psfunc.DisplayMenu(menu_historial)
        option_historial = psfunc.InputOpciones(menu_historial)

        if option_historial == 1:
            whatch_order = True
            while whatch_order:
                print("Ver pedido\n")
                print(sql)
                text = "Ingrese el pedido que desea ver:"
                querry = f"SELECT id_pedido FROM Pedidos WHERE id_usuario={id_user}"
                id_order = psfunc.QuerryOptionIdCheck(querry, text)
                if id_order == 0:
                    whatch_order = False
                if id_order != 0:
                    headers = ["ID", "Dirección", "# ", "Fecha", "Monto"]
                    sql_2 = psfunc.PrintQuerryCustomHeaders(
                        f"SELECT id_pedido, calle,numero, fecha_pedido, monto FROM (SELECT id_pedido, (monto_producto+COALESCE(monto_menu,0)) AS monto FROM (SELECT id_pedido, monto_producto, monto_menu FROM (SELECT DISTINCT  id_pedido,  (cantidad_producto*precio) AS monto_producto \
                                        FROM pedido_producto INNER JOIN productos \
                                        USING(id_producto) \
                                        ORDER BY id_pedido) AS t1 FULL JOIN (SELECT DISTINCT  id_pedido,  SUM((cantidad_menu*precio)) AS monto_menu \
                                        FROM pedido_menu INNER JOIN menues \
                                        USING(id_menu) \
                                        GROUP BY id_pedido \
                                        ORDER BY id_pedido) AS t2 \
                                        USING(id_pedido)) AS t5) AS t3 INNER JOIN (SELECT id_pedido, id_usuario, calle , numero, fecha_pedido \
                                        FROM Pedidos INNER JOIN Direcciones \
                                        USING(id_direccion)) AS t4 \
                                        USING(id_pedido) \
                                        WHERE id_usuario={id_user} AND id_pedido={id_order}",
                        headers)
                    print(
                        sql_2)  #Informacion solo del pedido que se seleccionó

                    id_check = id_order
                    querry_product = f"SELECT id_pedido FROM Pedido_producto WHERE id_pedido={id_order}"
                    querry_menu = f"SELECT id_pedido FROM Pedido_menu WHERE id_pedido={id_order}"
                    id_checkproduct = psfunc.QuerryOptionIdCheck2(
                        querry_product, id_check)
                    id_checkmenu = psfunc.QuerryOptionIdCheck2(
                        querry_menu, id_check)

                    if id_checkproduct != 0 and id_checkmenu != 0:
                        headers_detail = [
                            "ID", "Nombre", "Cantidad", "Precio unitario",
                            "Descuento"
                        ]

                        #Detalle del producto
                        sql_product_detail = psfunc.PrintQuerryCustomHeaders(
                            f"SELECT id_pedido, nombre, cantidad_producto, precio, descuento_aplicado \
                                                        FROM Pedidos INNER JOIN (SELECT id_pedido, nombre, cantidad_producto, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos FULL JOIN (SELECT id_pedido, nombre, cantidad_producto, id_descuento, precio FROM pedido_producto INNER JOIN Productos \
                                                        USING(id_producto)\
                                                        WHERE id_pedido= {id_order}) AS t1 USING(id_descuento)\
                                                        WHERE id_pedido IS NOT null) AS t2 USING(id_pedido)\
                                                        WHERE id_usuario= {id_user}",
                            headers_detail)

                        #Detalle del menu
                        sql_menu_detail = psfunc.PrintQuerryCustomHeaders(
                            f"SELECT id_pedido, nombre, cantidad_menu, precio, descuento_aplicado \
                                                      FROM Pedidos INNER JOIN (SELECT id_pedido,nombre, cantidad_menu, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos JOIN (SELECT id_pedido, nombre, cantidad_menu, id_descuento, precio \
                                                      FROM pedido_menu INNER JOIN Menues \
                                                      USING(id_menu)\
                                                      WHERE id_pedido={id_order})  AS t1 USING(id_descuento)) AS t1 USING(id_pedido)\
                                                      WHERE id_usuario={id_user}",
                            headers_detail)

                        #Detalle del pedido
                        print("\nDetalle del pedido")
                        print("\nProductos")
                        print(sql_product_detail)
                        print("\nMenues")
                        print(sql_menu_detail)

                        #Promoción aplicada
                        sql_promo = psfunc.SelectQuerry(
                            f"SELECT DISTINCT id_usuario, id_pedido,COALESCE(nombre,'NO APLICA'), COALESCE(monto,0) FROM Pedidos \
                                                FULL JOIN (SELECT id_codigo, nombre, monto FROM Promocion_usuario INNER JOIN Promociones USING(id_codigo)) AS t1\
                                                USING(id_codigo)\
                                                WHERE id_usuario={id_user} AND id_pedido={id_order}"
                        )
                        #monto y nombre de la promoción
                        monto_promo = sql_promo[0][3]
                        nombre_promo = sql_promo[0][2]

                        if monto_promo != 0:
                            #Hay promoción aplicada
                            print("\nPromoción -->", nombre_promo,
                                  "$" + str(monto_promo))
                        else:
                            #No hay promocion aplicada
                            print("\nPromoción -->", nombre_promo)

                        #Valor final del pedido
                        #Solo los productos
                        tp = 0
                        data1 = psfunc.SelectQuerry(
                            f"SELECT id_pedido, nombre, cantidad_producto, precio, descuento_aplicado \
                                            FROM Pedidos INNER JOIN (SELECT id_pedido, nombre, cantidad_producto, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos FULL JOIN (SELECT id_pedido, nombre, cantidad_producto, id_descuento, precio FROM pedido_producto INNER JOIN Productos \
                                            USING(id_producto)\
                                            WHERE id_pedido= {id_order}) AS t1 USING(id_descuento)\
                                            WHERE id_pedido IS NOT null) AS t2 USING(id_pedido)\
                                            WHERE id_usuario= {id_user}")
                        data2 = psfunc.SelectQuerry(
                            f"SELECT id_pedido, nombre, cantidad_menu, precio, descuento_aplicado \
                                            FROM Pedidos INNER JOIN (SELECT id_pedido,nombre, cantidad_menu, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos JOIN (SELECT id_pedido, nombre, cantidad_menu, id_descuento, precio \
                                            FROM pedido_menu INNER JOIN Menues \
                                            USING(id_menu)\
                                            WHERE id_pedido={id_order})  AS t1 USING(id_descuento)) AS t1 USING(id_pedido)\
                                            WHERE id_usuario={id_user}")
                        for a in range(len(data1)):
                            quantity_product = data1[a][2]
                            price_product = data1[a][3]
                            discount_product = data1[a][4]
                            #Total precio por la cantidad de productos pedidos
                            total_pricep = price_product * quantity_product
                            if 0 < discount_product < 100:
                                #Descuento por %
                                total_pricep_discount = total_pricep - (
                                    total_pricep * discount_product) / 100
                                tp += total_pricep_discount
                            if discount_product > 100:
                                #Descuento por valor
                                total_pricep_discount = total_pricep - (
                                    quantity_product * discount_product)
                                tp += total_pricep_discount
                            if discount_product == 0:
                                #No tenga descuento
                                total_pricep_discount = total_pricep
                                tp += total_pricep_discount

                        #Solo los menues
                        tm = 0
                        for b in range(len(data2)):
                            quantity_menu = data2[b][2]
                            price_menu = data2[b][3]
                            discount_menu = data2[b][4]
                            #Total precio por la cantidad de menues pedidos
                            total_pricem = price_menu * quantity_menu
                            if 0 < discount_menu < 100:
                                #Descuento por %
                                total_pricem_discount = total_pricem - (
                                    total_pricem * discount_menu) / 100
                                tm += total_pricem_discount
                            if discount_menu > 100:
                                #Descuento por valor
                                total_pricem_discount = total_pricem - (
                                    quantity_menu * discount_menu)
                                tm += total_pricem_discount
                            if discount_menu == 0:
                                #No tenga descuento
                                total_pricem_discount = total_pricem
                                tm += total_pricem_discount

                        #Operacion para valor final
                        total = int(tp + tm) - monto_promo
                        print("Valor final del pedido -->", "$" + str(total))
                        pass

                    if id_checkproduct != 0 and id_checkmenu == 0:
                        headers_detail = [
                            "ID", "Nombre", "Cantidad", "Precio unitario",
                            "Descuento"
                        ]

                        #Detalle del producto
                        sql_product_detail = psfunc.PrintQuerryCustomHeaders(
                            f"SELECT id_pedido, nombre, cantidad_producto, precio, descuento_aplicado \
                                                        FROM Pedidos INNER JOIN (SELECT id_pedido, nombre, cantidad_producto, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos FULL JOIN (SELECT id_pedido, nombre, cantidad_producto, id_descuento, precio FROM pedido_producto INNER JOIN Productos \
                                                        USING(id_producto)\
                                                        WHERE id_pedido= {id_order}) AS t1 USING(id_descuento)\
                                                        WHERE id_pedido IS NOT null) AS t2 USING(id_pedido)\
                                                        WHERE id_usuario= {id_user}",
                            headers_detail)

                        #Detalle del pedido
                        print("\nDetalle del pedido")
                        print("\nProductos")
                        print(sql_product_detail)

                        #Promoción aplicada
                        sql_promo = psfunc.SelectQuerry(
                            f"SELECT DISTINCT id_usuario, id_pedido,COALESCE(nombre,'NO APLICA'), COALESCE(monto,0) FROM Pedidos \
                                                FULL JOIN (SELECT id_codigo, nombre, monto FROM Promocion_usuario INNER JOIN Promociones USING(id_codigo)) AS t1\
                                                USING(id_codigo)\
                                                WHERE id_usuario={id_user} AND id_pedido={id_order}"
                        )
                        #monto y nombre de la promoción
                        monto_promo = sql_promo[0][3]
                        nombre_promo = sql_promo[0][2]

                        if monto_promo != 0:
                            #Hay promoción aplicada
                            print("\nPromoción -->", nombre_promo,
                                  "$" + str(monto_promo))
                        else:
                            #No hay promocion aplicada
                            print("\nPromoción -->", nombre_promo)

                        #Valor final del pedido
                        #Solo los productos
                        tp = 0
                        data1 = psfunc.SelectQuerry(
                            f"SELECT id_pedido, nombre, cantidad_producto, precio, descuento_aplicado \
                                            FROM Pedidos INNER JOIN (SELECT id_pedido, nombre, cantidad_producto, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos FULL JOIN (SELECT id_pedido, nombre, cantidad_producto, id_descuento, precio FROM pedido_producto INNER JOIN Productos \
                                            USING(id_producto)\
                                            WHERE id_pedido= {id_order}) AS t1 USING(id_descuento)\
                                            WHERE id_pedido IS NOT null) AS t2 USING(id_pedido)\
                                            WHERE id_usuario= {id_user}")
                        for a in range(len(data1)):
                            quantity_product = data1[a][2]
                            price_product = data1[a][3]
                            discount_product = data1[a][4]
                            #Total precio por la cantidad de productos pedidos
                            total_pricep = price_product * quantity_product
                            if 0 < discount_product < 100:
                                #Descuento por %
                                total_pricep_discount = total_pricep - (
                                    total_pricep * discount_product) / 100
                                tp += total_pricep_discount
                            if discount_product > 100:
                                #Descuento por valor
                                total_pricep_discount = total_pricep - (
                                    quantity_product * discount_product)
                                tp += total_pricep_discount
                            if discount_product == 0:
                                #No tenga descuento
                                total_pricep_discount = total_pricep
                                tp += total_pricep_discount

                        #Operacion para valor final
                        total = int(tp) - monto_promo
                        print("Valor final del pedido -->", "$" + str(total))
                        pass

                    if id_checkproduct == 0 and id_checkmenu != 0:
                        headers_detail = [
                            "ID", "Nombre", "Cantidad", "Precio unitario",
                            "Descuento"
                        ]

                        #Detalle del menu
                        sql_menu_detail = psfunc.PrintQuerryCustomHeaders(
                            f"SELECT id_pedido, nombre, cantidad_menu, precio, descuento_aplicado \
                                                      FROM Pedidos INNER JOIN (SELECT id_pedido,nombre, cantidad_menu, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos JOIN (SELECT id_pedido, nombre, cantidad_menu, id_descuento, precio \
                                                      FROM pedido_menu INNER JOIN Menues \
                                                      USING(id_menu)\
                                                      WHERE id_pedido={id_order})  AS t1 USING(id_descuento)) AS t1 USING(id_pedido)\
                                                      WHERE id_usuario={id_user}",
                            headers_detail)

                        #Detalle del pedido
                        print("\nDetalle del pedido")
                        print("\nMenues")
                        print(sql_menu_detail)

                        #Promoción aplicada
                        sql_promo = psfunc.SelectQuerry(
                            f"SELECT DISTINCT id_usuario, id_pedido,COALESCE(nombre,'NO APLICA'), COALESCE(monto,0) FROM Pedidos \
                                                FULL JOIN (SELECT id_codigo, nombre, monto FROM Promocion_usuario INNER JOIN Promociones USING(id_codigo)) AS t1\
                                                USING(id_codigo)\
                                                WHERE id_usuario={id_user} AND id_pedido={id_order}"
                        )
                        #monto y nombre de la promoción
                        monto_promo = sql_promo[0][3]
                        nombre_promo = sql_promo[0][2]

                        if monto_promo != 0:
                            #Hay promoción aplicada
                            print("\nPromoción -->", nombre_promo,
                                  "$" + str(monto_promo))
                        else:
                            #No hay promocion aplicada
                            print("\nPromoción -->", nombre_promo)

                        data2 = psfunc.SelectQuerry(
                            f"SELECT id_pedido, nombre, cantidad_menu, precio, descuento_aplicado \
                                            FROM Pedidos INNER JOIN (SELECT id_pedido,nombre, cantidad_menu, precio, COALESCE(valor,0) AS descuento_aplicado FROM Descuentos JOIN (SELECT id_pedido, nombre, cantidad_menu, id_descuento, precio \
                                            FROM pedido_menu INNER JOIN Menues \
                                            USING(id_menu)\
                                            WHERE id_pedido={id_order})  AS t1 USING(id_descuento)) AS t1 USING(id_pedido)\
                                            WHERE id_usuario={id_user}")
                        tm = 0
                        for b in range(len(data2)):
                            quantity_menu = data2[b][2]
                            price_menu = data2[b][3]
                            discount_menu = data2[b][4]
                            #Total precio por la cantidad de menues pedidos
                            total_pricem = price_menu * quantity_menu
                            if 0 < discount_menu < 100:
                                #Descuento por %
                                total_pricem_discount = total_pricem - (
                                    total_pricem * discount_menu) / 100
                                tm += total_pricem_discount
                            if discount_menu > 100:
                                #Descuento por valor
                                total_pricem_discount = total_pricem - (
                                    quantity_menu * discount_menu)
                                tm += total_pricem_discount
                            if discount_menu == 0:
                                #No tenga descuento
                                total_pricem_discount = total_pricem
                                tm += total_pricem_discount

                        #Operacion para valor final
                        total = int(tm) - monto_promo
                        print("Valor final del pedido -->", "$" + str(total))
                        pass

                    else:
                        whatch_order = False
                        continue
                else:
                    continue
                break
            ##
            if id_order != 0:
                flag = True
                while flag:
                    headers = [
                        "Pedido", "Repartidor", "Nombre", "Teléfono",
                        "Vehículo", "Patente"
                    ]
                    sql_repartidor = psfunc.PrintQuerryCustomHeaders(
                        f"SELECT id_pedido,id_repartidor, nombre, telefono, vehiculo, patente \
                                    FROM Pedidos INNER JOIN Repartidores \
                                    USING(id_repartidor)\
                                    WHERE id_pedido={id_order}", headers)
                    nombre_repartidor = psfunc.SelectQuerry(f"SELECT nombre \
                                                    FROM Pedidos INNER JOIN Repartidores \
                                                    USING(id_repartidor)\
                                                    WHERE id_pedido={id_order}"
                                                            )
                    nombre_repartidor = nombre_repartidor[0][0]
                    print("\nInformacion del repartidor")
                    print(sql_repartidor)
                    menu_dar_rating = [
                        "Dar rating", "Volver a Historial de Pedidos"
                    ]
                    psfunc.DisplayMenu(menu_dar_rating)
                    option = psfunc.InputOpciones(menu_dar_rating)
                    if option == 1:
                        print(f"\nDar rating a {nombre_repartidor} ")
                        print(sql_repartidor)
                        menu_puntuacion = [
                            "★", "★★", "★★★", "★★★★", "★★★★★",
                            "Volver a Ver Pedido"
                        ]
                        psfunc.DisplayMenu(menu_puntuacion)
                        option_rating = psfunc.InputOpciones(menu_puntuacion)

                        if option_rating == 1 or option_rating == 2 or option_rating == 3 or option_rating == 4 or option_rating == 5:
                            sql_puntuacion = psfunc.SelectQuerry(
                                f"SELECT puntuacion_repartidor \
                                                        FROM Pedidos INNER JOIN Repartidores \
                                                        USING(id_repartidor)\
                                                        WHERE id_pedido={id_order} AND puntuacion_repartidor IS null"
                            )
                            if sql_puntuacion != False:
                                psfunc.PrintQuerryNoHeaders(
                                    f"UPDATE Pedidos SET puntuacion={option_rating} \
                                                        WHERE id_pedido={id_order} AND puntuacion_repartidor IS NULL"
                                )
                            else:
                                print(
                                    "El repartidor ya ha recibido una puntuación por parte de este usuario"
                                )
                                break
                        else:
                            continue
                        break

                    elif option == 2:
                        flag = False

                    else:
                        continue

        elif option_historial == 2:
            menu = False