From 56bc3cfe04fb432c9b766bf24f532c5327047247 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Sat, 9 Nov 2024 00:26:10 +0500 Subject: [PATCH] now shows the input tracking number in the out --- app1.py | 203 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 app1.py diff --git a/app1.py b/app1.py new file mode 100644 index 0000000..8934e56 --- /dev/null +++ b/app1.py @@ -0,0 +1,203 @@ +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()