Spaces:
Sleeping
Sleeping
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.") | |