import streamlit as st import pandas as pd import os from io import BytesIO from PIL import Image, ImageDraw, ImageFont # CSV file for saving records CSV_FILE = "tailor_data.csv" # Urdu and English fields FIELDS = [ "سیریل نمبر", "گاہک کا نام", "موبائل نمبر", "قمیض کی لمبائی", "شلوار کی لمبائی", "بازو", "کالر", "بین", "شلوار پاکٹ", "سائیڈ پاکٹ", "گھیرا", "پائنچہ", "پٹی", "چھاتی", "انٹری کرنے والے کا نام" ] # Load existing data or create empty DataFrame if os.path.exists(CSV_FILE): df = pd.read_csv(CSV_FILE) else: df = pd.DataFrame(columns=FIELDS) st.set_page_config(page_title="Riwaj Tailors", layout="wide") st.title("✂️ Riwaj Tailors - Wah Cantt") st.markdown("Developed by: Muhammad Haris | [engrharis@proton.me](mailto:engrharis@proton.me)") # --- Sidebar Navigation --- tab = st.sidebar.radio("Navigate", ["➕ Add Customer", "📋 View/Edit Records"]) def save_df(): df.to_csv(CSV_FILE, index=False) if tab == "➕ Add Customer": st.header("➕ Add New Customer") with st.form("customer_form"): inputs = {} cols = st.columns(2) for i, field in enumerate(FIELDS[:-1]): inputs[field] = cols[i % 2].text_input(field, value="", help="Fill this field") inputs["انٹری کرنے والے کا نام"] = st.text_input("انٹری کرنے والے کا نام", value="") submitted = st.form_submit_button("Save Customer") if submitted: if any(inputs[field].strip() == "" for field in FIELDS[:-1]): st.error("❌ All fields are required!") elif inputs["موبائل نمبر"] in df["موبائل نمبر"].astype(str).values: st.error("❌ موبائل نمبر پہلے سے موجود ہے!") elif inputs["سیریل نمبر"] in df["سیریل نمبر"].astype(str).values: st.error("❌ سیریل نمبر پہلے سے موجود ہے!") else: df.loc[len(df)] = inputs save_df() st.success("✅ Customer saved successfully!") if tab == "📋 View/Edit Records": st.header("📋 Customer Records") search = st.text_input("🔍 Search by Name, Phone or Serial") filtered_df = df[ df["سیریل نمبر"].astype(str).str.contains(search, case=False, na=False) | df["گاہک کا نام"].astype(str).str.contains(search, case=False, na=False) | df["موبائل نمبر"].astype(str).str.contains(search, case=False, na=False) ] if search else df if not filtered_df.empty: selected = st.selectbox("Select customer by index to edit or export", filtered_df.index) st.dataframe(filtered_df) with st.expander("✏️ Edit Selected Customer"): updated = {} for field in FIELDS: updated[field] = st.text_input(field, value=str(df.at[selected, field])) if st.button("Update Record"): for field in FIELDS: df.at[selected, field] = updated[field] save_df() st.success("✅ Record updated successfully.") if st.button("🗑️ Delete Selected"): df.drop(index=selected, inplace=True) df.reset_index(drop=True, inplace=True) save_df() st.success("✅ Record deleted.") if st.button("🖼️ Export Selected to Image"): customer = df.loc[selected] img = Image.new("RGB", (800, 600), color="white") d = ImageDraw.Draw(img) try: font = ImageFont.truetype("arial.ttf", 24) except: font = ImageFont.load_default() y = 20 for key, val in customer.items(): d.text((40, y), f"{key}: {val}", fill="black", font=font) y += 35 buffer = BytesIO() img.save(buffer, format="PNG") st.image(buffer.getvalue(), caption="Exported Record", use_column_width=True) st.download_button("📥 Download as Image", buffer.getvalue(), file_name="record.png", mime="image/png") else: st.warning("❗ No matching records found.")