async def place_order(q): await drop_cards(q, droppable_cards) if q.client.items == {}: q.page['side'] = card_sim_missing() else: for j, item in enumerate(q.client.items.keys()): q.client.p = q.client.items[item] l1 = len(q.client.p.supply) l2 = len(q.client.p.expiring) for i in range(l1): if i == 0: title = 'Current Inventory' else: title = f'Arriving in {i} days' q.page[f'inv{i+j*l1}'] = ui.small_stat_card( box=f'{4 + i} {3*j + 2} 1 1', title=title, value=str(q.client.p.supply[i])) q.page['side'] = card_place_order(q) for i in range(l2): title = f'Expiring in {i} days' q.page[f'exp{i+j*l2}'] = ui.small_stat_card( box=f'{4 + i} {3*j + 3} 1 1', title=title, value=str(q.client.p.expiring[i])) q.page['side'] = card_place_order(q) await q.page.save()
async def make_player_card(q: Q): q.page['player'] = ui.small_stat_card( box='4 1 6 1', title='Player Name', value=f'{q.user.player.first} {q.user.player.last}'.title(), ) await q.page.save()
def add_stat_card(box, key, value): value = str(value) return ui.small_stat_card( box=box, title=key, value='={{intl value}}', # aux_value='', data=dict(value=value), #caption=key + " of the customer" )
async def make_order(q): for j, item in enumerate(q.client.items.keys()): q.client.p = q.client.items[item] s = q.client.p.supply[0] d, r = q.client.p.run_day(eval(f'q.args.gpo_order_{j}'), eval(f'q.args.alt_order_{j}')) q.client.records.loc[len( q.client.records.index)] = [q.client.p.day, item, s, d, r] l1 = len(q.client.p.supply) l2 = len(q.client.p.expiring) for i in range(l1): if i == 0: title = 'Current Inventory' else: title = f'Arriving in {i} days' q.page[f'inv{i+j*l1}'] = ui.small_stat_card( box=f'{4+i} {3*j + 2} 1 1', title=title, value=str(q.client.p.supply[i])) for i in range(l2): title = f'Expiring in {i} days' q.page[f'exp{i+j*l2}'] = ui.small_stat_card( box=f'{4+i} {3*j + 3} 1 1', title=title, value=str(q.client.p.expiring[i])) q.page[f'demand_{j}'] = ui.small_stat_card(box=f'{4} {3*j + 4} 1 1', title='Today\'s demand', value=str(d)) q.page[f'reward_{j}'] = ui.small_stat_card(box=f'{5} {3*j + 4} 1 1', title='Today\'s reward', value=str(r)) q.page['side'] = card_place_order(q) await q.page.save()
def populate_customer_churn_stats(cust_phone_no, df, q): df["Total Charges"] = (df.Total_Day_charge + df.Total_Eve_Charge + df.Total_Night_Charge + df.Total_Intl_Charge) df = df[[ "Total_Day_charge", "Total_Eve_Charge", "Total_Night_Charge", "Total_Intl_Charge", config.id_column, "Total Charges", ]] df.columns = [ "Day Charges", "Evening Charges", "Night Charges", "Int'l Charges", config.id_column, "Total Charges" ] q.page["day_stat"] = wide_stat_card_dollars(df, cust_phone_no, "Day Charges", config.boxes["day_stat"], config.color) q.page["eve_stat"] = wide_stat_card_dollars(df, cust_phone_no, "Evening Charges", config.boxes["eve_stat"], config.color) q.page["night_stat"] = wide_stat_card_dollars(df, cust_phone_no, "Night Charges", config.boxes["night_stat"], config.color) q.page["intl_stat"] = wide_stat_card_dollars(df, cust_phone_no, "Int'l Charges", config.boxes["intl_stat"], config.color) q.page["total_stat"] = tall_stat_card_dollars( df, cust_phone_no, "Total Charges", config.boxes["total_stat"], config.total_gauge_color, ) q.page["customer"] = ui.small_stat_card(box=config.boxes["customer"], title="Customer", value=str(cust_phone_no)) q.page["churn_rate"] = ui.small_stat_card( box=config.boxes["churn_rate"], title="Churn Rate", value= f"{churn_predictor.get_churn_rate_of_customer(q.client.selected_customer_index)}%", ) labels = [ "Day Charges", "Evening Charges", "Night Charges", "Int'l Charges" ] values = [ df[df[config.id_column] == cust_phone_no][labels[0]].values[0], df[df[config.id_column] == cust_phone_no][labels[1]].values[0], df[df[config.id_column] == cust_phone_no][labels[2]].values[0], df[df[config.id_column] == cust_phone_no][labels[3]].values[0], ] html_plot = generate_figure_pie_of_target_percent("", labels, values, get_figure_layout()) q.page["stat_pie"] = ui.frame_card( box=config.boxes["stat_pie"], title="Total call charges breakdown", content=convert_plot_to_html(config.figure_config, html_plot, "cdn", False), )
async def show_grey_dashboard(q: Q): q.page['meta'] = ui.meta_card(box='', layouts=[ ui.layout( breakpoint='xl', min_width='800px', zones=[ ui.zone('header', size='0'), ui.zone('body', size='1000px', zones=[ ui.zone('title', size='0'), ui.zone('top', direction=ui.ZoneDirection.ROW, size='25%'), ui.zone('middle', direction=ui.ZoneDirection.ROW, size='25%'), ui.zone('middle2', direction=ui.ZoneDirection.ROW, size='25%'), ui.zone('bottom', direction=ui.ZoneDirection.ROW, size='20%'), ]), ui.zone('footer', size='0'), ] ) ]) q.page['header'] = ui.header_card(box='header', title='H2O Wave Demo', subtitle='Grey Dashboard', nav=global_nav) q.page['section'] = ui.section_card( box='title', title=next(sample_title), subtitle=next(sample_caption), items=[ ui.label(label='Start:'), ui.date_picker(name='target_date', label='', value='2020-12-20'), ui.label(label='End:'), ui.date_picker(name='target_date', label='', value='2020-12-25'), ], ) stock_dates = generate_time_series(10000) stock_prices = generate_random_walk() q.page['small'] = ui.small_stat_card( box=ui.box('top', order=1), title=next(sample_term), value=next(sample_dollars), ) q.page['small_series'] = ui.small_series_stat_card( box=ui.box('top', order=2), title=next(sample_term), value=next(sample_dollars), plot_category='date', plot_value='price', plot_data=data( fields=['date', 'price'], rows=[(next(stock_dates), next(stock_prices)) for i in range(30)], pack=True, ), ) q.page['small_series_interval'] = ui.small_series_stat_card( box=ui.box('top', order=3), title=next(sample_term), value=next(sample_dollars), plot_category='date', plot_value='price', plot_type=ui.SmallSeriesStatCardPlotType.INTERVAL, plot_data=data( fields=['date', 'price'], rows=[(next(stock_dates), next(stock_prices)) for i in range(30)], pack=True, ), ) q.page['wide_series'] = ui.wide_series_stat_card( box=ui.box('middle', order=1), title=next(sample_term), value=next(sample_dollars), aux_value=next(sample_percent), plot_category='date', plot_value='price', plot_data=data( fields=['date', 'price'], rows=[(next(stock_dates), next(stock_prices)) for i in range(30)], pack=True, ), ) q.page['wide_bar'] = ui.wide_bar_stat_card( box=ui.box('middle', order=2), title=next(sample_term), value=next(sample_dollars), aux_value=next(sample_percent), progress=random.random(), ) q.page['wide_gauge'] = ui.wide_gauge_stat_card( box=ui.box('middle', order=3), title=next(sample_term), value=next(sample_dollars), aux_value=next(sample_percent), progress=random.random(), ) q.page['tall_series'] = ui.tall_series_stat_card( box=ui.box('middle2', order=1), title=next(sample_term), value=next(sample_dollars), aux_value=next(sample_percent), plot_category='date', plot_value='price', plot_data=data( fields=['date', 'price'], rows=[(next(stock_dates), next(stock_prices)) for i in range(30)], pack=True, ), ) q.page['tall_gauge'] = ui.tall_gauge_stat_card( box=ui.box('middle2', order=2), title=next(sample_term), value=next(sample_dollars), aux_value=next(sample_percent), progress=random.random(), ) q.page['large'] = ui.large_stat_card( box=ui.box('bottom', order=1), title=next(sample_term), value=next(sample_dollars), aux_value=next(sample_percent), caption=next(sample_caption), ) q.page['large_bar'] = ui.large_bar_stat_card( box=ui.box('bottom', order=2), title=next(sample_term), value=next(sample_dollars), value_caption=next(sample_term), aux_value=next(sample_dollars), aux_value_caption=next(sample_term), progress=random.random(), caption=next(sample_caption), ) q.page['footer'] = ui.footer_card(box='footer', caption='(c) 2021 H2O.ai. All rights reserved.') await q.page.save()
# Stat / Small # Create a stat card displaying a single value. # #stat_card # --- import time from faker import Faker from synth import FakePercent from h2o_wave import site, ui page = site['/demo'] fake = Faker() f = FakePercent() val, _ = f.next() c = page.add('example', ui.small_stat_card( box='1 1 1 1', title=fake.cryptocurrency_name(), value=f'${val:.2f}', )) page.save() while True: time.sleep(1) val, _ = f.next() c.value = f'${val:.2f}' page.save()
def create_dashboard(update_freq=0.0): page = site['/demo'] simples = [] for i in range(1, 7): f = FakePercent() val, pc = f.next() c = page.add( f'a{i}', ui.small_stat_card( box=f'{i} 1 1 1', title=fake.cryptocurrency_name(), value=f'${val:.2f}', )) simples.append((f, c)) simples_colored = [] for i in range(1, 7): f = FakeCategoricalSeries() cat, val, pc = f.next() c = page.add( f'aa{i}', ui.small_series_stat_card( box=f'{6 + i} 1 1 1', title=fake.cryptocurrency_code(), value= '=${{intl qux minimum_fraction_digits=2 maximum_fraction_digits=2}}', data=dict(qux=val, quux=pc / 100), plot_category='foo', plot_value='qux', plot_color=next_color(), plot_data=data('foo qux', -15), plot_zero_value=0, plot_curve=next_curve(), )) simples_colored.append((f, c)) lines = [] for i in range(1, 13, 2): f = FakeCategoricalSeries() cat, val, pc = f.next() c = page.add( f'b{i}', ui.wide_series_stat_card( box=f'{i} 2 2 1', title=fake.cryptocurrency_name(), value= '=${{intl qux minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl quux style="percent" minimum_fraction_digits=1 maximum_fraction_digits=1}}', data=dict(qux=val, quux=pc / 100), plot_category='foo', plot_value='qux', plot_color=next_color(), plot_data=data('foo qux', -15), plot_zero_value=0, plot_curve=next_curve(), )) lines.append((f, c)) bars = [] for i in range(1, 13, 2): f = FakeCategoricalSeries() cat, val, pc = f.next() c = page.add( f'c{i}', ui.wide_series_stat_card( box=f'{i} 3 2 1', title=fake.cryptocurrency_name(), value= '=${{intl qux minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl quux style="percent" minimum_fraction_digits=1 maximum_fraction_digits=1}}', data=dict(qux=val, quux=pc), plot_type='interval', plot_category='foo', plot_value='qux', plot_color=next_color(), plot_data=data('foo qux', -25), plot_zero_value=0)) bars.append((f, c)) large_pcs = [] for i in range(1, 13): f = FakePercent() val, pc = f.next() c = page.add( f'd{i}', ui.tall_gauge_stat_card( box=f'{i} 4 1 2', title=fake.cryptocurrency_name(), value= '=${{intl foo minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl bar style="percent" minimum_fraction_digits=2 maximum_fraction_digits=2}}', plot_color=next_color(), progress=pc, data=dict(foo=val, bar=pc / 100), )) large_pcs.append((f, c)) large_lines = [] for i in range(1, 13): f = FakeCategoricalSeries() cat, val, pc = f.next() c = page.add( f'e{i}', ui.tall_series_stat_card( box=f'{i} 6 1 2', title=fake.cryptocurrency_name(), value= '=${{intl qux minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl quux style="percent" minimum_fraction_digits=1 maximum_fraction_digits=1}}', data=dict(qux=val, quux=pc), plot_type='area', plot_category='foo', plot_value='qux', plot_color=next_color(), plot_data=data('foo qux', -15), plot_zero_value=0, plot_curve=next_curve(), )) large_lines.append((f, c)) small_pcs = [] for i in range(1, 7, 2): f = FakePercent() val, pc = f.next() c = page.add( f'f{i}', ui.wide_gauge_stat_card( box=f'{i} 8 2 1', title=fake.cryptocurrency_name(), value= '=${{intl foo minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl bar style="percent" minimum_fraction_digits=2 maximum_fraction_digits=2}}', plot_color=next_color(), progress=pc, data=dict(foo=val, bar=pc / 100), )) small_pcs.append((f, c)) small_pbs = [] for i in range(7, 13, 2): f = FakePercent() val, pc = f.next() c = page.add( f'f{i}', ui.wide_bar_stat_card( box=f'{i} 8 2 1', title=fake.cryptocurrency_name(), value= '=${{intl foo minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl bar style="percent" minimum_fraction_digits=2 maximum_fraction_digits=2}}', plot_color=next_color(), progress=pc, data=dict(foo=val, bar=pc / 100), )) small_pbs.append((f, c)) large_cards = [] for i in range(1, 7, 2): f = FakePercent() val, pc = f.next() c = page.add( f'g{i}', ui.large_stat_card( box=f'{i} 9 2 2', title=fake.cryptocurrency_name(), value= '=${{intl qux minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value= '={{intl quux style="percent" minimum_fraction_digits=1 maximum_fraction_digits=1}}', data=dict(qux=val, quux=pc / 100), caption=' '.join(fake.sentences()), )) large_cards.append((f, c)) large_pbs = [] for i in range(7, 13, 2): f = FakePercent() val, pc = f.next() c = page.add( f'g{i}', ui.large_bar_stat_card( box=f'{i} 9 2 2', title=fake.cryptocurrency_name(), value= '=${{intl foo minimum_fraction_digits=2 maximum_fraction_digits=2}}', value_caption='This Month', aux_value= '={{intl bar style="percent" minimum_fraction_digits=2 maximum_fraction_digits=2}}', aux_value_caption='Previous Month', plot_color=next_color(), progress=pc, data=dict(foo=val, bar=pc / 100), caption=' '.join(fake.sentences(2)), )) large_pbs.append((f, c)) page.save() while update_freq > 0: time.sleep(update_freq) for f, c in simples: val, pc = f.next() c.value = f'${val:.2f}', for f, c in simples_colored: cat, val, pc = f.next() c.data.qux = val c.data.quux = pc / 100 c.plot_data[-1] = [cat, val] for f, c in lines: cat, val, pc = f.next() c.data.qux = val c.data.quux = pc / 100 c.plot_data[-1] = [cat, val] for f, c in bars: cat, val, pc = f.next() c.data.qux = val c.data.quux = pc / 100 c.plot_data[-1] = [cat, val] for f, c in large_lines: cat, val, pc = f.next() c.data.qux = val c.data.quux = pc / 100 c.plot_data[-1] = [cat, val] for f, c in large_pcs: val, pc = f.next() c.data.foo = val c.data.bar = pc c.progress = pc for f, c in small_pcs: val, pc = f.next() c.data.foo = val c.data.bar = pc c.progress = pc for f, c in small_pbs: val, pc = f.next() c.data.foo = val c.data.bar = pc c.progress = pc for f, c in large_cards: val, pc = f.next() c.data.qux = val c.data.quux = pc for f, c in large_pbs: val, pc = f.next() c.data.foo = val c.data.bar = pc c.progress = pc page.save()
# Stat / Small # Create a stat card displaying a single value. # --- import time from faker import Faker from synth import FakePercent from h2o_wave import site, ui page = site['/demo'] fake = Faker() f = FakePercent() val, _ = f.next() c = page.add( 'example', ui.small_stat_card( box='1 1 1 1', title=fake.cryptocurrency_name(), value=f'${val:.2f}', )) page.save() while True: time.sleep(1) val, _ = f.next() c.value = f'${val:.2f}' page.save()