import streamlit as st import pandas as pd import plotly.express as px from datetime import datetime import emoji current_day = datetime.now().day dataframe="" def day_without_sunday(): if current_day > 7: return current_day-1 elif current_day > 14: return current_day-2 elif current_day > 21: return current_day - 3 else: return current_day-4 st.set_page_config(page_title="Rapport FDV", page_icon=":bar_chart:", layout="wide" ) df = pd.read_excel( io="suivi.xlsx", engine="openpyxl", sheet_name=["TANGER","QUALI NV"], #skiprows=8, usecols="A:AC", #nrows=163, ) # st.dataframe(df) # ------Sidebar------- st.sidebar.header("Filter:") uploaded_file = st.sidebar.file_uploader("Choose a file") if uploaded_file is not None: # To read file as bytes: # bytes_data = uploaded_file.getvalue() df = pd.read_excel(uploaded_file, engine="openpyxl", sheet_name=["TANGER","QUALI NV"], usecols="A:AC", nrows=163, ) quantitatif_df=df.get("TANGER") qualitatif_df=df.get("QUALI NV") # st.write(bytes_data) show_all_fdv = st.sidebar.checkbox('Tout les FDV') vendeur = st.sidebar.multiselect( "Vendeur:", options=quantitatif_df["Vendeur"].unique(), default=quantitatif_df["Vendeur"][0], disabled=show_all_fdv ) famille = st.sidebar.multiselect( "Famille:", options=quantitatif_df["Famille"].unique(), default=quantitatif_df["Famille"][6] ) jour_travail = st.sidebar.text_input( label="Jour Travail", value=day_without_sunday()) jour_reste = st.sidebar.text_input(label="Jour Reste", value=24) df_selection_quantitatif = quantitatif_df.query( "Vendeur== @vendeur & Famille==@famille" ) df_select_qualitatif = qualitatif_df.query( "Vendeur== @vendeur" ) if show_all_fdv: df_selection_quantitatif = quantitatif_df.query( "Famille==@famille & Vendeur!='KHALIL HMER LEGHROUNE' & Vendeur!='CDZ TANGER GROS' &Vendeur!='BAALAKI YOUSSEF' & Vendeur!='CDZ AGADIR DET2'& Vendeur!='VIDE' ", ) df_selection_quantitatif = df_selection_quantitatif.astype({ "REAL": "int", "OBJ": "int", "J-1": "int", "REAL.1": "int", '2021.1': "int", }) st.dataframe(df_selection_quantitatif) st.dataframe(df_select_qualitatif) total_ht = int(df_selection_quantitatif["REAL"].sum()) total_ttc = round(total_ht*1.2) min_ca = int(df_selection_quantitatif["REAL"].min()) min_ca_index = int(df_selection_quantitatif["REAL"].idxmin()) max_ca = int(df_selection_quantitatif["REAL"].max()) max_ca_index = int(df_selection_quantitatif["REAL"].idxmax()) objectif_ht = ((round(df_selection_quantitatif["OBJ"].sum()))*24/int(jour_travail)) objectif_ttc = round(objectif_ht*1.2) rest_jour_ttc = round((objectif_ttc-(total_ttc))/int(jour_reste)) average_ttc = round(total_ttc/int(jour_travail)) moyenne_client_facture=round(int(df_select_qualitatif["CLT FACTURE"].sum())/ int(jour_travail)) col1, col2, col3, col4, col5,col6,col7,col8 = st.columns(8) with col1: st.caption("Total HT",) st.subheader(f'{total_ht:,}') with col2: st.caption("Total TTC") st.subheader(f'{total_ttc:,}') with col3: st.caption("Objectif TTC") st.subheader(f'{objectif_ttc:,}') with col4: st.caption("Rest jour TTC") st.subheader(f'{rest_jour_ttc:,}') with col5: st.caption("ACM") st.subheader(f'{round(df_select_qualitatif["% vs Obj"].sum()*100):,}%') with col6: st.caption("Moyenne TSM") st.subheader(moyenne_client_facture) with col7: st.caption("Line /bl") st.subheader(f'{round(df_select_qualitatif["%"].sum()*100):,}%') with col8: st.caption("TSM") st.subheader(f'{round(df_select_qualitatif["%.1"].sum()*100):,}%') st.text(f"Maximum RĂ©aliser : {max_ca:} ({quantitatif_df['Vendeur'][max_ca_index]:} {emoji.emojize(':1st_place_medal:')})") st.text(f"Minimum RĂ©aliser : {min_ca:} ({quantitatif_df['Vendeur'][min_ca_index]:} {emoji.emojize(':thumbs_down:')})") vendeur_ca = ( df_selection_quantitatif.groupby(by=["Vendeur"]).sum()[["REAL"]].sort_values(by="REAL") ) fig_produit_sales = px.bar( vendeur_ca, x="REAL", y=vendeur_ca.index, orientation="h", title='CA par Vendeur', color_discrete_sequence=["#0083B8"] * len(vendeur_ca), template="plotly_white", color='REAL' ) st.plotly_chart(fig_produit_sales) hide_st_style = """ """ st.markdown(hide_st_style, unsafe_allow_html=True) print(moyenne_client_facture)