import pandas as pd import streamlit as st def search_application(user_application_number, df): # Ensure the Application Number column is treated as string for consistent comparison df['Application Number'] = df['Application Number'].astype(str) # Search for the application number in the dataframe result = df[df['Application Number'] == user_application_number] if not result.empty: decision = result.iloc[0]['Decision'] if decision.lower() == 'approved': st.success(f"Congratulations! Your visa application ({user_application_number}) has been Approved.") elif decision.lower() == 'rejected': st.error(f"Sorry, your visa application ({user_application_number}) has been Rejected.") else: st.warning(f"Your visa application ({user_application_number}) has a status of '{decision}'.") else: # When no record is found, show a warning st.warning(f"No record found for Application Number: {user_application_number}.") # Remove non-numeric rows for the nearest application number calculation df_cleaned = df[pd.to_numeric(df['Application Number'], errors='coerce').notnull()] # Convert application number to integer for the nearest calculation df_cleaned['Application Number'] = df_cleaned['Application Number'].astype(int) try: user_application_number_int = int(user_application_number) # Find the nearest pre and post application numbers df_sorted = df_cleaned.sort_values(by='Application Number') pre_number = df_sorted[df_sorted['Application Number'] < user_application_number_int].tail(1) post_number = df_sorted[df_sorted['Application Number'] > user_application_number_int].head(1) # Prepare the results pre_diff = user_application_number_int - pre_number['Application Number'].values[0] if not pre_number.empty else None post_diff = post_number['Application Number'].values[0] - user_application_number_int if not post_number.empty else None result_table = pd.DataFrame({ "Nearest Application": ['Before', 'After'], "Application Number": [pre_number['Application Number'].values[0] if not pre_number.empty else None, post_number['Application Number'].values[0] if not post_number.empty else None], "Decision": [pre_number['Decision'].values[0] if not pre_number.empty else None, post_number['Decision'].values[0] if not post_number.empty else None], "Difference": [pre_diff, post_diff] }) # Display the nearest application numbers in tabular form st.subheader("Nearest Application Numbers") st.table(result_table) except ValueError: st.error("Invalid Application Number format. Please enter a numeric value.")