engrharis's picture
Upload app.py with huggingface_hub
6f77afa verified
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.")