valkoe's picture
Upload code/app.py with huggingface_hub
06ec561 verified
# %%
# %%
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import panel as pn
from bokeh.models.widgets.tables import NumberFormatter, DateFormatter
from IPython.display import display, Markdown
from loguru import logger
import ledger_husfinans_functions as lhf
pn.extension('tabulator')
plt.style.use("matplotlibstylehus.mplstyle")
split_percentage = {"Valentin":1-0.6278, "Bjørg&Marius":0.6278} #For budget felles alloc
# %%
dfs = pd.read_pickle("husfinans_hovedtabell.pickle")
dfs = dfs[
(dfs["Account"] == "House")
]
dfs = dfs[["ID", "Type", "Date", "Amount", "Comment", "Name", "Split", "BudgetItem"]]
# dfs
# %%
baf = pd.read_pickle("husfinans_baf.pickle")
# baf = baf.set_index("BudgetItem")
# baf
# %%
actors = ["Bjørg&Marius", "Valentin"]
baf_formatters = {
'Budget': NumberFormatter(format='0,0', text_align="right"),
'Actual': NumberFormatter(format='0,0', text_align="right"),
'Forecast': NumberFormatter(format='0,0', text_align="right"),
'Estimate': NumberFormatter(format='0,0', text_align="right"),
'Actual+F+E': NumberFormatter(format='0,0', text_align="right"),
'Diff': NumberFormatter(format='0,0', text_align="right"),
}
def baf_prep(actors):
cols = ["Budget", "Actual", "Forecast", "Estimate", "Actual+F+E", "Diff"]
baf2 = baf[baf["Name"].isin(actors)]
baf2 = baf2.pivot_table(index="BudgetItem", values=cols, aggfunc="sum", margins=True)
baf2 = baf2[["Budget", "Actual", "Forecast", "Estimate", "Actual+F+E", "Diff"]]
return baf2
baf_widget = pn.widgets.Tabulator(baf_prep(actors), disabled=True, formatters=baf_formatters)
dfs_formatters = {
'Date': DateFormatter(format="%Y-%m-%d", text_align="right"),
'Amount': NumberFormatter(format='0,0', text_align="right"),
'Split': NumberFormatter(format='0.0%', text_align="right"),
}
dfs_widget = pn.widgets.Tabulator(pd.DataFrame(data=None, columns=[c for c in dfs.columns if c != "BudgetItem"]), disabled=True, show_index=False, formatters=dfs_formatters)
def click(event):
# print(f'Clicked cell in {event.column!r} column, row {event.row!r} with value {event.value!r}')
dfs2 = dfs[
(dfs["BudgetItem"] == baf_widget.value.index[event.row])
& dfs["Name"].isin(checkbutton_group.value)
]
del dfs2["BudgetItem"]
dfs_widget.value = dfs2
baf_widget.on_click(click)
checkbutton_group = pn.widgets.CheckButtonGroup(name='Name', value=actors, options=actors, button_style="outline", button_type="primary")
def buttonclick(target, event):
target.value = baf_prep(event.new)
checkbutton_group.link(baf_widget, callbacks={"value":buttonclick})
ww = pn.Column(checkbutton_group, pn.Row(baf_widget, dfs_widget))
title = "Bernhar Herres vei 3"
pn.template.BootstrapTemplate(
title=title,
main=ww,
# main_max_width="min(50%, 698px)",
header_background="#F08080",
).servable(title=title)