diff --git a/app.py b/app.py index b09c504..8934e56 100644 --- a/app.py +++ b/app.py @@ -167,6 +167,7 @@ def main(): if mailbag_no: st.session_state.last_result = { + "tracking_no": tracking_input, "mailbag_no": mailbag_no, "sequence_no": sequence_no, "found": True @@ -186,6 +187,8 @@ def main(): if st.session_state.last_result["found"]: st.markdown( f"""
+

Tracking Number:

+

{st.session_state.last_result["tracking_no"]}

Mail Bag No:

{st.session_state.last_result["mailbag_no"]}

Sequence #:

diff --git a/app1.py b/app1.py deleted file mode 100644 index 8934e56..0000000 --- a/app1.py +++ /dev/null @@ -1,203 +0,0 @@ -import streamlit as st -import pandas as pd -import os -from typing import Dict, Tuple - -class TrackingLookup: - def __init__(self): - self.tracking_data: Dict[str, Tuple[str, str]] = {} - - def extract_mailbag_no(self, df: pd.DataFrame) -> str: - for _, row in df.iterrows(): - for col in df.columns: - val = str(row[col]) - if 'HDOD-' in val: - return val.strip() - return 'unknown_mailbag' - - def clean_tracking_numbers(self, df: pd.DataFrame) -> pd.DataFrame: - tracking_col = None - number_col = None - - if '#' in df.columns and 'Tracking No' in df.columns: - return df[['#', 'Tracking No']] - - for col in df.columns: - if df[col].astype(str).str.contains('UV|UW|LP|LORD', na=False, regex=True).any(): - tracking_col = col - break - - for col in df.columns: - if df[col].astype(str).str.match('^\d+$', na=False).any(): - number_col = col - break - - if tracking_col is not None and number_col is not None: - df = df[[number_col, tracking_col]] - df.columns = ['#', 'Tracking No'] - df = df[df['Tracking No'].notna()] - df = df[df['Tracking No'].str.match(r'^[A-Z0-9]+$', na=False)] - return df - - return pd.DataFrame(columns=['#', 'Tracking No']) - - def process_excel_file(self, uploaded_file) -> bool: - try: - xl = pd.ExcelFile(uploaded_file) - processed_sheets = 0 - - for sheet_name in xl.sheet_names: - try: - df = pd.read_excel(uploaded_file, sheet_name=sheet_name) - if df.empty or 'Domestic Letter Bill' not in str(df.iloc[0:5].values): - continue - - mailbag_no = self.extract_mailbag_no(df) - cleaned_df = self.clean_tracking_numbers(df) - - if not cleaned_df.empty: - for _, row in cleaned_df.iterrows(): - self.tracking_data[row['Tracking No']] = (mailbag_no, row['#']) - processed_sheets += 1 - - except Exception as e: - st.warning(f"Warning: Could not process sheet '{sheet_name}': {str(e)}") - continue - - if processed_sheets > 0: - st.success(f"✅ Successfully processed {processed_sheets} sheet(s)") - return True - else: - st.error("No valid sheets were found in the file") - return False - - except Exception as e: - st.error(f"Error processing file: {str(e)}") - return False - - def lookup_tracking(self, tracking_no: str) -> Tuple[str, str]: - return self.tracking_data.get(tracking_no, (None, None)) - -def main(): - st.set_page_config( - page_title="Mail Tracking Lookup", - layout="wide", - initial_sidebar_state="collapsed" - ) - - st.markdown(""" - - """, unsafe_allow_html=True) - - st.title("📬 Mail Tracking Lookup System") - - # Initialize session state - if 'tracker' not in st.session_state: - st.session_state.tracker = TrackingLookup() - if 'file_processed' not in st.session_state: - st.session_state.file_processed = False - if 'last_result' not in st.session_state: - st.session_state.last_result = None - if 'form_count' not in st.session_state: - st.session_state.form_count = 0 - - # File upload section - if not st.session_state.file_processed: - uploaded_file = st.file_uploader("Choose an Excel file", type=['xlsx', 'xls']) - if uploaded_file: - if st.session_state.tracker.process_excel_file(uploaded_file): - st.session_state.file_processed = True - st.rerun() - - # Tracking lookup section - if st.session_state.file_processed: - st.markdown("

Enter Tracking Number

", unsafe_allow_html=True) - - # Centered input with columns - col1, col2, col3 = st.columns([1, 2, 1]) - with col2: - # Create a unique key for each form instance - form_key = f'tracking_form_{st.session_state.form_count}' - with st.form(key=form_key): - tracking_input = st.text_input( - "Tracking Number", - label_visibility="collapsed", - placeholder="e.g., UV743594518UZ or LORD04012" - ) - submit_button = st.form_submit_button(label='Search', type='primary') - - if submit_button and tracking_input: - mailbag_no, sequence_no = st.session_state.tracker.lookup_tracking(tracking_input) - - if mailbag_no: - st.session_state.last_result = { - "tracking_no": tracking_input, - "mailbag_no": mailbag_no, - "sequence_no": sequence_no, - "found": True - } - else: - st.session_state.last_result = { - "found": False, - "tracking": tracking_input - } - - # Increment form count to create a new form instance - st.session_state.form_count += 1 - st.rerun() - - # Display results if they exist - if st.session_state.last_result: - if st.session_state.last_result["found"]: - st.markdown( - f"""
-

Tracking Number:

-

{st.session_state.last_result["tracking_no"]}

-

Mail Bag No:

-

{st.session_state.last_result["mailbag_no"]}

-

Sequence #:

-

{st.session_state.last_result["sequence_no"]}

-
""", - unsafe_allow_html=True - ) - else: - st.warning(f"❌ Tracking number not found in the uploaded data") - -if __name__ == "__main__": - main()