import polars as pl from dash import html from src.figures import DataTable from utils import add_links_in_dict, format_values, setup_table_columns def get_top_org_table(data, org_type: str): dff = pl.DataFrame(data, strict=False, infer_schema_length=5000) if dff.height == 0: return html.Div() dff = dff.select( ["uid", f"{org_type}_id", f"{org_type}_nom", "titulaire_distance", "montant"] ) dff_nb = dff.group_by( f"{org_type}_id", f"{org_type}_nom", "titulaire_distance" ).agg(pl.len().alias("Attributions"), pl.sum("montant").alias("montant")) dff_nb = dff_nb.sort(by="montant", descending=True, nulls_last=True) dff_nb = dff_nb.cast(pl.String) dff_nb = dff_nb.fill_null("") dff_nb = format_values(dff_nb) columns, tooltip = setup_table_columns( dff_nb, hideable=False, exclude=[f"{org_type}_id"], new_columns=["Attributions"] ) data = dff_nb.to_dicts() data = add_links_in_dict(data, f"{org_type}") return DataTable( dtid=f"top10_{org_type}", data=data, page_action="native", page_size=10, columns=columns, tooltip_header=tooltip, )