예제 #1
0
 def repeat_the_call():
     settings = manage_db.fetch_all_from_table("settings")[0]
     pause = settings[10]
     timer = 3600000  # 1 hour in milliseconds
     if pause == "15min":
         timer = 900000
     elif pause == "30min":
         timer = 1800000
     elif pause == "1h":
         timer = 3600000
     elif pause == "2h":
         timer = 7200000
     manage_db.update_current_price()
     check_alarm_conditions(settings)
     self.after(timer, repeat_the_call)
예제 #2
0
def check_alarm_conditions(settings):
    """check if time and conditions to raise the alarm fit,
    if so, send message"""
    if manage_db.check_time(settings[8], settings[9]) == "alarm on":
        alarms = manage_db.fetch_all_from_table("alarms")

        for alarm in alarms:
            current_price = manage_db.fetch_current_price(alarm[0]).split()[0]
            if float(current_price) >= alarm[1]:
                if settings[0] == "1":
                    send_message.send_sms(alarm[0], current_price, settings)
                if settings[1] == "1":
                    send_message.send_email(alarm[0], current_price, settings)
                if settings[2] == "1":
                    send_message.on_screen(alarm[0], current_price)
            if float(current_price) <= alarm[2]:
                if settings[0] == "1":
                    send_message.send_sms(alarm[0], current_price, settings)
                if settings[1] == "1":
                    send_message.send_email(alarm[0], current_price, settings)
                if settings[2] == "1":
                    send_message.on_screen(alarm[0], current_price)
예제 #3
0
    def populate_canvas(parent):
        """create scrollable canvas with child frame bind to it
        to display all the assets """
        list_of_assets = manage_db.fetch_all_from_table("assets")
        added_values = calculate.add_liquid_assets()

        def menu_window(asset):
            def delete_asset():
                manage_db.delete_row_from_table(
                    "assets", "timestamp", asset[0])
                choice_window.destroy()
                Assets.populate_canvas(parent)

            def edit_asset():
                choice_window.destroy()

                def save():
                    new_asset = {"Currency": currency_spinbox.get(),
                                 "Amount": amount_entry.get(),
                                 "Note": note.get("1.0", "end-1c"),
                                 }
                    if manage_db.check_for_real_numbers(new_asset["Amount"]):
                        manage_db.add_asset(new_asset)
                        manage_db.delete_row_from_table(
                            "assets", "timestamp", asset[0])
                        top_window.destroy()
                        Assets.populate_canvas(parent)

                top_window = tk.Toplevel(parent, height=350, width=390)
                top_window.title("Edit")

                little_frame = tk.Frame(top_window, height=50, width=200)
                little_frame.grid(sticky="nw")

                amount_label = tk.Label(
                    little_frame, text="Amount:   ", font=FONT)
                amount_label.grid(sticky="nw", padx=5, pady=5)

                amount_entry = tk.Entry(little_frame, width=10, font=FONT)
                amount_entry.grid(row=0, column=1, padx=5, pady=5)
                amount_entry.insert(0, asset[1])

                currency_label = tk.Label(
                    little_frame, text="Currency:   ", font=FONT)
                currency_label.grid(sticky="nw", padx=5)

                currency_tuple = ("USD", "EUR", "GBP", "PLN", "CHF")

                currency_spinbox = tk.Spinbox(
                    little_frame, values=currency_tuple, width=5,
                    state="readonly", font=FONT)
                currency_spinbox.grid(row=1, column=1)
                currency_spinbox.insert(0, asset[2])

                note = st.ScrolledText(
                    top_window, width=30, height=5, font=FONT)
                note.grid(row=6, column=0, columnspan=3)
                note.insert(1.0, asset[3])

                save_button = tk.Button(
                    top_window, text="Edit", font=FONT, command=save)
                save_button.grid(sticky="nw", padx=5)

            choice_window = tk.Toplevel(master=None, width=400, height=200)

            edit_button = tk.Button(
                choice_window, text="Edit", font=FONT, bg="green",
                command=lambda: edit_asset())
            edit_button.grid(row=0, column=0, pady=20, padx=20)

            delete_button = tk.Button(
                choice_window, text="Delete", font=FONT, bg="red",
                command=lambda: delete_asset())
            delete_button.grid(row=0, column=1, pady=20)

            cancel_button = tk.Button(
                choice_window, text="Cancel", font=FONT,
                command=choice_window.destroy)
            cancel_button.grid(row=0, column=2, pady=20, padx=20)

        def on_frame_configure(canvas):
            '''Reset the scroll region to encompass the inner frame'''
            canvas.configure(scrollregion=canvas.bbox("all"))

        def check_which_asset_you_clicked_on(event):
            if event.y < 80:
                pass
            else:
                asset_num = int((event.y-80)/80)
                menu_window(list_of_assets[asset_num])

        canvas_scrollregion = 100*len(list_of_assets)

        canvas = tk.Canvas(
            parent, width=800, height=300,
            scrollregion=(0, 0, 0, canvas_scrollregion))
        canvas.grid(row=1, column=0, sticky="w", rowspan=20)

        vbar = tk.Scrollbar(
            parent, orient=tk.VERTICAL, command=canvas.yview)
        vbar.grid(row=1, column=1, rowspan=20, sticky="ns")
        canvas.config(yscrollcommand=vbar.set)

        frame = tk.Frame(
            canvas, width=790, height=len(list_of_assets)*100)
        frame.grid(sticky="nw")
        frame.bind("<Configure>", lambda event, canvas=canvas:
                   on_frame_configure(canvas))
        canvas.create_window((0, 0), window=frame, anchor="nw")

        title_label = tk.Label(frame, text="SUMMARY:", font=BFONT)
        title_label.grid(row=0, column=0, sticky="w")

        eur_label = tk.Label(frame, text="EUR = " + str(added_values['eur']), font=BFONT)
        eur_label.grid(row=0, column=1, sticky="w")
        pln_label = tk.Label(frame, text="PLN = " + str(added_values['pln']), font=BFONT)
        pln_label.grid(row=1, column=1, sticky="w")
        gbp_label = tk.Label(frame, text="GBP = " + str(added_values['gbp']), font=BFONT)
        gbp_label.grid(row=0, column=2, sticky="w")
        usd_label = tk.Label(frame, text="USD = " + str(added_values['usd']), font=BFONT)
        usd_label.grid(row=1, column=2, sticky="w")
        chf_label = tk.Label(frame, text="CHF = " + str(added_values['chf']), font=BFONT)
        chf_label.grid(row=0, column=3, sticky="w")

        separator_label = tk.Label(frame, text="_"*300)
        separator_label.grid(sticky="nw", columnspan=15)

        row = 3
        for asset in list_of_assets:
            cash_currency_string = (str(asset[1]) + "    " + asset[2])
            bils_label = tk.Label(
                frame, text=cash_currency_string, font=BFONT)
            bils_label.grid(row=row+1, column=0, sticky="w")

            description_label = tk.Label(frame, text=asset[3], font=BFONT)
            description_label.grid(sticky="nw", columnspan=15)

            separator_label = tk.Label(frame, text="_"*300)
            separator_label.grid(sticky="nw", columnspan=15)

            row += 3

        frame.bind("<Button-3>", check_which_asset_you_clicked_on)
예제 #4
0
    def curent_canvas(parent):
        """displays active (not sold) shares"""
        list_of_shares = manage_db.fetch_all_from_table("gpw_shares")
        top_seven_shares = calculate.seven_biggest_shares(
            calculate.shares_worth(list_of_shares))
        total_worth = calculate.totaled_shares_worth()

        def on_frame_configure(canvas):
            '''Reset the scroll region to encompass the inner frame'''
            canvas.configure(scrollregion=canvas.bbox("all"))

        def check_which_share_you_clicked_on(event):
            if event.y < 217:
                pass
            else:
                share_num = int((event.y - 217) / 217)
                add_edit_delete_share.menu_window(parent,
                                                  list_of_shares[share_num])

        canvas_scrollregion = 110 * len(list_of_shares)
        canvas = tk.Canvas(parent,
                           width=800,
                           height=300,
                           scrollregion=(0, 0, 0, canvas_scrollregion))
        canvas.grid(row=1, column=0, sticky="w", rowspan=20)

        vbar = tk.Scrollbar(parent, orient=tk.VERTICAL, command=canvas.yview)
        vbar.grid(row=1, column=1, rowspan=20, sticky="ns")
        canvas.config(yscrollcommand=vbar.set)

        frame = tk.Frame(canvas, width=805, height=len(list_of_shares) * 110)
        frame.grid(sticky="nw")
        frame.bind("<Configure>",
                   lambda event, canvas=canvas: on_frame_configure(canvas))
        canvas.create_window((0, 0), window=frame, anchor="nw")

        # SHARES PAGE, TOP OF SCROLABLE CANVAS, FIRST COLUMN (LABELS)
        title_label = tk.Label(frame, text="WALLET SUMMARY:", font=SFON)
        title_label.grid(sticky="nw")
        label = tk.Label(frame, text="TOP 7 SHARES:", font=SFON)
        label.grid(sticky="nw")
        counter = 1
        for share in top_seven_shares:
            label = tk.Label(frame, text=share[0] + ':', font=SFON)
            label.grid(sticky="nw")
            counter += 1
        while counter <= 7:
            label = tk.Label(frame, text=' ' * 5, font=SFON)
            label.grid(sticky="nw")
            counter += 1

        # SHARES PAGE, TOP OF SCROLABLE CANVAS, SECOND COLUMN (WORTH)
        total_worth_label = tk.Label(frame,
                                     font=SFON,
                                     text="total worth: " + str(total_worth))
        total_worth_label.grid(row=0, column=1, sticky="w")
        counter = 1
        for share in top_seven_shares:
            label = tk.Label(frame, text="worth: " + str(share[1]), font=SFON)
            label.grid(row=counter + 1, column=1, sticky="w")
            counter += 1
        while counter <= 7:
            label = tk.Label(frame, text=" " * 5, font=SFON)
            label.grid(row=counter + 1, column=1, sticky="w")
            counter += 1

        # SHARES PAGE, TOP OF SCROLABLE CANVAS, THIRD COLUMN (PROFIT)
        total_profit_label = tk.Label(frame, font=SFON)
        total_profit_label.grid(row=0, column=2, sticky="w")
        profit_totaled = 0
        for share in list_of_shares:
            profit_totaled += calculate.profit_per_share(share)
        profit_totaled = round(profit_totaled, 2)
        if profit_totaled > 0:
            total_profit_label.configure(fg="green",
                                         text="total profit: " +
                                         str(profit_totaled))
        if profit_totaled < 0:
            total_profit_label.configure(fg="red",
                                         text="total profit: " +
                                         str(profit_totaled))
        counter = 1
        profit_per_packet = calculate.profit_per_packet(list_of_shares)
        for top in top_seven_shares:
            profit = round(profit_per_packet[top[0]], 2)
            label = tk.Label(frame, text="profit: " + str(profit), font=SFON)
            label.grid(row=counter + 1, column=2, sticky="w")
            counter += 1
        while counter <= 7:
            label = tk.Label(frame, text=" " * 5, font=SFON)
            label.grid(row=counter + 1, column=2, sticky="w")
            counter += 1

        # SHARES PAGE, TOP OF SCROLABLE CANVAS, 4 COLUMN (% OF WHOLE WALLET)
        counter = 1
        for share in top_seven_shares:
            percentage = calculate.calculate_percentage(total_worth, share[1])
            label = tk.Label(frame,
                             text="% of wallet: " + str(percentage) + "%",
                             font=SFON)
            label.grid(row=counter + 1, column=3, sticky="w")
            counter += 1
        while counter <= 7:
            label = tk.Label(frame, text=" " * 5, font=SFON)
            label.grid(row=counter + 1, column=3, sticky="w")
            counter += 1

        # separator
        note_label = tk.Label(frame, text="_" * 200)
        note_label.grid(sticky="nw", columnspan=15)

        row = 10
        for share in list_of_shares:
            curent_price = manage_db.fetch_current_price(share[1])

            # TITLE LABELS:
            list_of_labels = [
                "NAME:", "QUANTITY:", "PRICE PER S.:", "ENTRY DATE:",
                "CURRENT PRICE:", "COSTS:", "DIVIDENDS:", "ANNUAL RoR:",
                "PROFIT:"
            ]
            for txt in list_of_labels:
                label = tk.Label(frame, text=txt, font=SFON)
                label.grid(sticky="nw")
            # VALUES
            curent_val_per_s = float(curent_price.split(" ")[0])
            total_buying_price = share[2] * share[3]
            total_selling_price = share[2] * curent_val_per_s
            total_div = calculate.total_dividend(share[8])
            total_costs = calculate.total_costs(total_buying_price,
                                                total_selling_price)
            annual_ror = calculate.annual_ror(share, curent_val_per_s,
                                              total_costs, total_div)
            profit = (total_selling_price - total_buying_price + total_div -
                      total_costs)

            label = tk.Label(frame, text=share[1], font=SFON)
            label.grid(row=row + 0, column=1, sticky="w")
            label = tk.Label(frame, text=share[2], font=SFON)
            label.grid(row=row + 1, column=1, sticky="w")
            label = tk.Label(frame, text=share[3], font=SFON)
            label.grid(row=row + 2, column=1, sticky="w")
            label = tk.Label(frame, text=share[4], font=SFON)
            label.grid(row=row + 3, column=1, sticky="w")
            label = tk.Label(frame, text=curent_price.split(" ")[0], font=SFON)
            label.grid(row=row + 4, column=1, sticky="w")
            label = tk.Label(frame,
                             text=curent_price.split(" ")[1],
                             font="Calabria 8")
            label.grid(row=row + 4, column=2, sticky="w")
            percent_change = float(curent_price.split(" ")[1].strip("%"))
            if percent_change > 0:
                label.configure(fg="green")
            if percent_change < 0:
                label.configure(fg="red")
            val_change = curent_price.split(" ")[2]
            label = tk.Label(frame, text=val_change, font="Calabria 8")
            label.grid(row=row + 4, column=3, sticky="w")
            if float(val_change) > 0:
                label.configure(fg="green")
            if float(val_change) < 0:
                label.configure(fg="red")
            time = (curent_price.split(" ")[3] + " " +
                    curent_price.split(" ")[4])
            label = tk.Label(frame, text=time, font="Calabria 8")
            label.grid(row=row + 4, column=4, sticky="w")
            label = tk.Label(frame, text=round(total_costs, 2), font=SFON)
            label.grid(row=row + 5, column=1, sticky="w")
            label = tk.Label(frame, text=total_div, font=SFON)
            label.grid(row=row + 6, column=1, sticky="w")
            label = tk.Label(frame, text=str(annual_ror) + "%", font=SFON)
            label.grid(row=row + 7, column=1, sticky="w")
            label = tk.Label(frame, text=round(profit, 2), font=SFON)
            if profit > 0:
                label.configure(fg="green")
            if profit < 0:
                label.configure(fg="red")
            label.grid(row=row + 8, column=1, sticky="w")
            row += 10

            # separator
            note_label = tk.Label(frame, text="_" * 200)
            note_label.grid(sticky="nw", columnspan=15)

        frame.bind("<Button-3>", check_which_share_you_clicked_on)
예제 #5
0
    def populate_frame(parent):
        """display current settings"""
        if manage_db.fetch_all_from_table('settings'):
            # if len(manage_db.fetch_all_from_table('settings')) == 0:
            settings_dict = {
                "sms": '0',
                "mail": '0',
                "screen": '0',
                "id": "",
                "api": "",
                "p_number": "",
                "email": "",
                "from": "09:00",
                "to": "17:00",
                "break": "30min",
                "email_pass": ""
            }
            manage_db.add_settings(settings_dict)
            current_settings = manage_db.fetch_all_from_table('settings')[0]
        else:
            current_settings = manage_db.fetch_all_from_table('settings')[0]

        def save():
            """save settings"""
            settings_dict = {
                "sms": str(sms_var.get()),
                "mail": str(email_var.get()),
                "screen": str(screen_var.get()),
                "id": id_entry.get(),
                "api": api_entry.get(),
                "p_number": number_entry.get(),
                "email": email_entry.get(),
                "from": from_time.get(),
                "to": to_time.get(),
                "break": break_time.get()
            }
            if email_pass.get().rstrip("*"):
                settings_dict["email_pass"] = email_pass.get()
            else:
                settings_dict["email_pass"] = current_settings[7]
            manage_db.delete_row_from_table('settings', 'sms',
                                            current_settings[0])
            manage_db.add_settings(settings_dict)
            Settings.populate_frame(parent)

        frame = tk.Frame(parent, width=800, height=300)
        frame.grid(row=1, column=0, sticky="w", rowspan=20)

        save_changes = tk.Button(frame, text="Save", font=FONT, command=save)
        save_changes.grid(row=8, column=2, sticky="e", padx=10)

        label = tk.Label(frame, text="customer id:", font=FONT)
        label.grid(row=1, column=0, sticky="w")
        label = tk.Label(frame, text="api key:", font=FONT)
        label.grid(row=2, column=0, sticky="w")

        label = tk.Label(frame, text=" " * 30, font=FONT)
        label.grid(row=2, column=2, sticky="w")

        label = tk.Label(frame, text="phone number:         +", font=FONT)
        label.grid(row=3, column=0, sticky="w")
        label = tk.Label(frame, text="email:", font=FONT)
        label.grid(row=4, column=0, sticky="w")
        label = tk.Label(frame, text="password:"******"message time:", font=FONT)
        label.grid(row=5, column=0, sticky="w")
        label = tk.Label(frame, text="from:", font=FONT)
        label.grid(row=6, column=0, sticky="e")
        label = tk.Label(frame, text="to:", font=FONT)
        label.grid(row=7, column=0, sticky="e")
        label = tk.Label(frame, text="send every:", font=FONT)
        label.grid(row=8, column=0, sticky="ne")

        sms_var = tk.IntVar()

        def disable_widgets():
            """unables to make changes in the inputed 'api_entry' and 'id_entry'
            widgets to avoid erasing input, widgets will respond after
            unlocking them with 'sms_button' checkbutton"""
            if sms_var.get() == 0:
                id_entry.configure(state=tk.DISABLED)
                api_entry.configure(state=tk.DISABLED)
                number_entry.configure(state=tk.DISABLED)
            else:
                id_entry.configure(state=tk.NORMAL)
                api_entry.configure(state=tk.NORMAL)
                number_entry.configure(state=tk.NORMAL)

        sms_button = tk.Checkbutton(frame,
                                    text="SMS",
                                    variable=sms_var,
                                    onvalue=1,
                                    offvalue=0,
                                    height=5,
                                    width=20,
                                    command=disable_widgets,
                                    pady=1,
                                    padx=1)
        sms_button.grid(row=0, column=1, sticky="w")

        id_entry = tk.Entry(frame, width=40, font=FONT)
        id_entry.grid(row=1, column=1, sticky="nw")

        api_entry = tk.Entry(frame, width=60, font=FONT)
        api_entry.grid(row=2, column=1, sticky="nw")

        number_entry = tk.Entry(frame, width=12, font=FONT)
        number_entry.grid(row=3, column=1, sticky="nw")

        email_var = tk.IntVar()

        def disable_widgets_2():
            """unables to make changes in the inputed 'email_entry' and
            'email_pass' widgets to avoid erasing input, widgets will respond
            after unlocking them with 'email_button' checkbutton"""
            if email_var.get() == 0:
                email_entry.configure(state=tk.DISABLED)
                email_pass.configure(state=tk.DISABLED)
            else:
                email_entry.configure(state=tk.NORMAL)
                email_pass.configure(state=tk.NORMAL)

        email_button = tk.Checkbutton(frame,
                                      text="EMAIL",
                                      variable=email_var,
                                      onvalue=1,
                                      offvalue=0,
                                      height=5,
                                      width=20,
                                      command=disable_widgets_2)
        email_button.grid(row=0, column=1)

        email_entry = tk.Entry(frame, width=20, font=FONT)
        email_entry.grid(row=4, column=1, sticky="nw")

        email_pass = tk.Entry(frame, width=20, font=FONT)
        email_pass.grid(row=4, column=1, sticky="ne")

        screen_var = tk.IntVar()
        on_screen_button = tk.Checkbutton(frame,
                                          text="ON SCREEN NOTIFICATION",
                                          variable=screen_var,
                                          onvalue=1,
                                          offvalue=0,
                                          height=5,
                                          width=20)
        on_screen_button.grid(row=0, column=1, sticky="e")

        from_time_tuple = (current_settings[8], "01:00", "02:00", "03:00",
                           "04:00", "05:00", "06:00", "07:00", "07:00",
                           "08:00", "09:00", "10:00", "11:00", "12:00",
                           "13:00", "14:00", "15:00", "16:00", "17:00",
                           "18:00", "19:00", "20:00", "21:00", "22:00",
                           "23:00", "24:00")

        to_time_tuple = (current_settings[9], "01:00", "02:00", "03:00",
                         "04:00", "05:00", "06:00", "07:00", "07:00", "08:00",
                         "09:00", "10:00", "11:00", "12:00", "13:00", "14:00",
                         "15:00", "16:00", "17:00", "18:00", "19:00", "20:00",
                         "21:00", "22:00", "23:00", "24:00")

        break_tuple = (current_settings[10], "15min", "30min", "1h", "2h")

        from_time = tk.Spinbox(frame, values=from_time_tuple, width=5)
        from_time.grid(row=6, column=1, sticky="nw")
        to_time = tk.Spinbox(frame, values=to_time_tuple, width=5)
        to_time.grid(row=7, column=1, sticky="nw")
        break_time = tk.Spinbox(frame, values=break_tuple, width=6)
        break_time.grid(row=8, column=1, sticky="nw")

        sms_var.set(int(current_settings[0]))
        email_var.set(int(current_settings[1]))
        screen_var.set(int(current_settings[2]))
        id_entry.insert(0, current_settings[3])
        api_entry.insert(0, current_settings[4])
        number_entry.insert(0, current_settings[5])
        email_entry.insert(0, current_settings[6])
        email_pass.insert(0, "*" * len(current_settings[7]))

        id_entry.configure(state=tk.DISABLED)
        api_entry.configure(state=tk.DISABLED)
        number_entry.configure(state=tk.DISABLED)
        email_entry.configure(state=tk.DISABLED)
        email_pass.configure(state=tk.DISABLED)
예제 #6
0
    def populate_canvas(parent):
        """create a scrollable canvas with frame binded to it"""
        list_of_reports = list()
        for profile in manage_db.fetch_all_from_table("current_price"):
            prof = manage_db.fetch_reports(profile[0])
            if prof:
                list_of_reports.append(prof)

        def choose_action(event):
            """"""
            def delete_asset(to_delete):
                manage_db.delete_row_from_table("reports", "profile",
                                                to_delete[0][0])
                choice_window.destroy()
                Watched.populate_canvas(parent)

            def set_alarm(share):
                prof = share[0][0]
                alarm = manage_db.fetch_alarm(prof)
                choice_window.destroy()

                def save():
                    high = high_price_entry.get()
                    low = low_price_entry.get()
                    if (manage_db.check_for_real_numbers(high)
                            and manage_db.check_for_real_numbers(low)):
                        manage_db.add_alarm(prof, high, low)
                        Watched.populate_canvas(parent)
                        top_window.destroy()

                top_window = tk.Toplevel(parent, height=350, width=390)
                top_window.title("Edit")

                amount_label = tk.Label(top_window, text=prof, font=FONT)
                amount_label.grid(sticky="nw", padx=5, pady=5)

                amount_label = tk.Label(top_window,
                                        text="Let me know when:",
                                        font=FONT)
                amount_label.grid(sticky="nw", padx=5, pady=5)

                label = tk.Label(top_window,
                                 text="Price is higher or equal to:",
                                 font=FONT)
                label.grid(sticky="nw", padx=5, pady=5)

                label = tk.Label(top_window,
                                 text="Price is lower or equal to:",
                                 font=FONT)
                label.grid(sticky="nw", padx=5, pady=5)

                high_price_entry = tk.Entry(top_window, width=10, font=FONT)
                high_price_entry.grid(row=2, column=1, padx=5, pady=5)

                low_price_entry = tk.Entry(top_window, width=10, font=FONT)
                low_price_entry.grid(row=3, column=1, padx=5, pady=5)

                high_price_entry.insert(0, alarm[1])
                low_price_entry.insert(0, alarm[2])
                add_button = tk.Button(top_window,
                                       text="Add",
                                       font=FONT,
                                       command=save)
                add_button.grid(sticky="nw", padx=5)

            asset_num = int(event.y / 196)
            choice_window = tk.Toplevel(master=None, width=400, height=200)

            alarm_button = tk.Button(
                choice_window,
                text="Add alarm",
                font=FONT,
                bg="green",
                command=lambda: set_alarm(list_of_reports[asset_num]))
            alarm_button.grid(row=0, column=0, pady=20, padx=20)

            delete_button = tk.Button(
                choice_window,
                text="Delete",
                font=FONT,
                bg="red",
                command=lambda: delete_asset(list_of_reports[asset_num]))
            delete_button.grid(row=0, column=1, pady=20)

            cancel_button = tk.Button(choice_window,
                                      text="Cancel",
                                      font=FONT,
                                      command=choice_window.destroy)
            cancel_button.grid(row=0, column=2, pady=20, padx=20)

        def on_frame_configure(canvas):
            '''Reset the scroll region to encompass the inner frame'''
            canvas.configure(scrollregion=canvas.bbox("all"))

        canvas_scrollregion = 100 * len(list_of_reports)

        canvas = tk.Canvas(parent,
                           width=800,
                           height=300,
                           scrollregion=(0, 0, 0, canvas_scrollregion))
        canvas.grid(row=1, column=0, sticky="w", rowspan=20)

        vbar = tk.Scrollbar(parent, orient=tk.VERTICAL, command=canvas.yview)
        vbar.grid(row=1, column=1, rowspan=20, sticky="ns")
        canvas.config(yscrollcommand=vbar.set)

        frame = tk.Frame(canvas, width=705, height=len(list_of_reports) * 100)
        frame.grid(sticky="nw")
        frame.bind("<Configure>",
                   lambda event, canvas=canvas: on_frame_configure(canvas))
        canvas.create_window((0, 0), window=frame, anchor="nw")

        row = 0
        for report in list_of_reports:
            current_price = manage_db.fetch_current_price(report[0][0])
            # first column
            rows = 0
            list_of_labels = [
                report[0][0], "  ", "Av. Price:", "BV/Share:", "Price/BV:",
                "Net Profit(k):", "Shares(k):", "NMP:"
            ]
            for txt in list_of_labels:
                label = tk.Label(frame, text=txt, font=SFON)
                label.grid(row=0 + rows + row, column=0, sticky="w")
                rows += 1
            # first row
            price_label = tk.Label(frame,
                                   text=current_price.split(" ")[0],
                                   font=SFON)
            price_val_label = tk.Label(frame,
                                       text=current_price.split(" ")[1],
                                       font=SFON)
            price_prc_label = tk.Label(frame,
                                       text=current_price.split(" ")[2],
                                       font=SFON)
            if float(current_price.split(" ")[2]) > 0:
                price_val_label.configure(fg="green")
                price_prc_label.configure(fg="green")
            elif float(current_price.split(" ")[2]) < 0:
                price_val_label.configure(fg="red")
                price_prc_label.configure(fg="red")
            list_of_labels = [price_label, price_val_label, price_prc_label]
            col = 1
            for label in list_of_labels:
                label.grid(row=0 + row, column=col, sticky='w')
                col += 1
            label = tk.Label(frame, text="P/BV:", font=SFON)
            label.grid(row=0 + row, column=4, sticky="w")
            current_price_per_bv = (float(current_price.split(" ")[0]) / (
                (float(report[4][9]) * 1000) / int(report[5][9])))
            label = tk.Label(frame,
                             text=round(current_price_per_bv, 2),
                             font=SFON)
            label.grid(row=0 + row, column=5, sticky="w")

            for i in range(2, 10):
                # second row
                label = tk.Label(frame, text=report[0][i], font=SFON)
                label.grid(row=1 + row, column=i - 1, sticky="w")
                # third row (quartal average share price)
                label = tk.Label(frame,
                                 text=round(float(report[1][i]), 2),
                                 font=SFON)
                label.grid(row=2 + row, column=i - 1, sticky="w")
                # 4th row (BV/Share - book_value/share_numbers)
                bv_per_share = (float(report[4][i]) * 1000) / int(report[5][i])
                label = tk.Label(frame, text=round(bv_per_share, 2), font=SFON)
                label.grid(row=3 + row, column=i - 1, sticky="w")
                # 5th row (P/BV - price/(book_value/shares_number))
                price_per_bv = (float(report[1][i]) / (
                    (float(report[4][i]) * 1000) / int(report[5][i])))
                label = tk.Label(frame, text=round(price_per_bv, 2), font=SFON)
                label.grid(row=4 + row, column=i - 1, sticky="w")
                # 6th row (net profit[k])
                label = tk.Label(frame, text=report[3][i], font=SFON)
                label.grid(row=5 + row, column=i - 1, sticky="w")
                # 7th row (number of shares[k]):
                label = tk.Label(frame,
                                 text=str(round(int(report[5][i]) / 1000)),
                                 font=SFON)
                label.grid(row=6 + row, column=i - 1, sticky="w")
                # 8th row (NMP - net profit margin (net_profit/net_income)*100%)
                nmp = (int(report[3][i]) / int(report[2][i])) * 100
                label = tk.Label(frame,
                                 text=str(round(nmp, 2)) + "%",
                                 font=SFON)
                label.grid(row=7 + row, column=i - 1, sticky="w")

            # separator
            note_label = tk.Label(frame, text="_" * 200)
            note_label.grid(sticky="nw", columnspan=15)

            row += 9
        frame.bind("<Button-3>", choose_action)