def index():
    """Show portfolio of stocks"""

    # request necessary data
    data = get_portfolio("symbol", "asc")

    return render_template("index.html", rows = data[1], totals = data[0])
def sort_table():
    if request.method == "POST":
        sort_by = request.form.get("sortBy")
        sort_order = request.form.get("sortOrder")
        table_type = request.form.get("tableType")
        filter_by = request.form.get("filterBy")

        if not table_type:
            return redirect(url_for("index"))

        elif table_type == "portfolio":
            data = get_portfolio(sort_by, sort_order)
            return render_template("portfolio_table.html", rows = data[1], totals = data[0])

        elif table_type == "history":
            data = get_history(sort_by, sort_order, filter_by)
            return render_template("history_table.html", history = data)
Esempio n. 3
0
def sell():

    portfolio = get_portfolio(db, session["user_id"])

    if len(portfolio) == 0:
        return apology("You don't have stocks to sell")
    else:
        symbols = list(map(lambda stock: stock["symbol"].upper(), portfolio))
        if request.method == "GET":
            return render_template("sell.html", symbols=symbols)
        else:
            symbol = request.form.get("symbol")
            shares = request.form.get("shares")
            if symbol == "":
                return apology("You have to select a stock")
            elif shares == "":
                return apology("Must specify number of shares")
            elif symbol not in symbols:
                return apology("You do not own that stock")
            elif int(shares) < 0:
                return apology("Input must be positive")
            elif int(shares) == 0:
                return apology("You need to  sell at least 1")
            elif int(shares) > list(filter(lambda y: y['symbol'].upper() == symbol, portfolio))[0]['sum']:
                return apology(f"You don't have enough { symbol } shares")

            stock = lookup(symbol)
            total_price = int(shares) * stock["price"]

            cash = get_cash(db, session["user_id"])


            update_cash(db, cash, total_price, session["user_id"])


            insert_transaction_cmd = """INSERT INTO transactions (user_id, symbol, shares, price, id)
                                        VALUES (:user_id, :symbol, :shares,
                                        :price, nextval('id_transactions'))"""


            db.engine.execute(text(insert_transaction_cmd),
            user_id=session["user_id"], symbol=symbol.lower(), shares=(0 - int(shares)), price=stock["price"])

            return redirect("/")
Esempio n. 4
0
def index():
    """Show portfolio of stocks"""
    user_id = session["user_id"]
    cash = db.execute("SELECT cash FROM users WHERE id=:user_id",
                      user_id=user_id)
    total = []
    total_buy_price = 0
    total_value = 0
    total_shares = 0
    portfolio = get_portfolio(db, user_id)
    if portfolio:
        for element in portfolio:
            current_price = get_price(element['symbol'])
            value = element['shares'] * current_price
            total_buy_price += element['share_value']
            total_value += value
            total_shares += element['shares']
            element.update({'price': current_price})
            element.update({'value': value})
            element.update({'diff': value - element['share_value']})
            element.update({
                'diff_percent': ((value - element['share_value']) /
                                 (element['share_value'] * 100))
                if element['share_value'] else 0
            })
        total.append({
            'total_shares':
            total_shares,
            'total_buy_price':
            total_buy_price,
            'total_value':
            total_value,
            'total_diff':
            total_value - total_buy_price,
            'total_diff_percent':
            (total_value - total_buy_price) / total_buy_price * 100
        })
        session["value"] = total_value
    return render_template("index.html",
                           portfolio=portfolio,
                           cash=cash,
                           total=total)
Esempio n. 5
0
def index():


    cash = get_cash(db, session["user_id"])

    portfolio = get_portfolio(db, session["user_id"])

    if len(portfolio) > 0:
        # cash = round(portfolio[0]["cash"], 2)
        stocks_value = 0
        for stock in portfolio:
            updated_stock = lookup(stock["symbol"])
            stock["name"] = updated_stock["name"]
            stock["price"] = round(decimal.Decimal(updated_stock["price"]), 2)
            stocks_value += (stock["price"] * stock["sum"])
        empty = False
    else:
        stocks_value = 0
        empty = True

    return render_template("index.html", portfolio=portfolio, cash=round(cash, 2), empty=empty, stocks_value=stocks_value)
Esempio n. 6
0
def sell():
    """Sell shares of stock"""
    user_id = session["user_id"]
    if request.method == "GET":
        portfolio = get_portfolio(db, user_id)
        return render_template("/sell.html", portfolio=portfolio)
    else:
        stock = json.loads(request.form.get("symbol"))
        shares = int(request.form.get("shares"))
        cash_before = get_cash(db, user_id)
        sell = lookup(stock['symbol'])
        # TODO refactor buy in sell in own function
        db.execute(
            "INSERT INTO transactions (user_id, symbol, shares, price, method, time_stamp) values (:user_id, :symbol, :shares, :price, :method, :time)",
            user_id=user_id,
            symbol=stock['symbol'],
            shares=-shares,
            price=sell['price'],
            method="sell",
            time=datetime.now())
        cash_after = cash_before + (sell['price'] * shares)
        update_cash(db, user_id, cash_after)
        return redirect("/")