Hadeeratef91 commited on
Commit
4dd652a
·
verified ·
1 Parent(s): 911884e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -76
app.py CHANGED
@@ -1,93 +1,112 @@
1
  import streamlit as st
2
  import pandas as pd
 
 
 
3
 
4
- # إعدادات الملف
5
- file_path = "complaints.csv"
6
 
7
- # تحميل الشكاوى من ملف CSV أو إنشاء الملف إذا لم يكن موجود
8
- try:
9
- df = pd.read_csv(file_path)
10
- except FileNotFoundError:
11
- df = pd.DataFrame(columns=["مقدم الشكوى", "وصف الشكوى", "حالة الشكوى", "رد الشكوى"])
12
 
13
- # صفحة تسجيل الدخول
14
- def login_screen():
15
- st.subheader("تسجيل الدخول")
16
- user_type = st.selectbox("اختر نوع المستخدم:", ["مقدم شكوى", "مستقبل شكوى"])
17
- username = st.text_input("اسم المستخدم:")
18
- password = st.text_input("كلمة المرور:", type="password")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  if st.button("دخول"):
20
  if username and password:
21
- # حفظ حالة المستخدم في session_state
22
- st.session_state.user_type = user_type
23
  st.session_state.username = username
24
- return True
25
  else:
26
- st.error("الرجاء إدخال اسم المستخدم وكلمة المرور.")
27
- return False
28
 
29
- # التحقق من حالة تسجيل الدخول
30
- if "user_type" not in st.session_state:
31
- if login_screen():
32
- st.rerun() # إعادة تحميل الصفحة بعد تسجيل الدخول
33
  else:
34
- user_type = st.session_state.user_type
35
- username = st.session_state.username
 
 
 
 
36
 
37
- if user_type == "مقدم شكوى":
38
- st.subheader("إضافة شكوى جديدة")
39
- complaint_description = st.text_area("وصف الشكوى:")
 
 
40
  if st.button("إرسال الشكوى"):
41
- if complaint_description:
42
- new_complaint = {"مقدم الشكوى": username, "وصف الشكوى": complaint_description, "حالة الشكوى": "قيد المعالجة", "رد الشكوى": ""}
43
- # استخدام pd.concat بدلاً من append
44
- df = pd.concat([df, pd.DataFrame([new_complaint])], ignore_index=True)
45
- df.to_csv(file_path, index=False)
46
- st.success("تم إرسال الشكوى بنجاح.")
47
- else:
48
- st.error("الرجاء إدخال وصف الشكوى.")
 
 
 
 
 
 
49
 
50
- # عرض الشكاوى المقدمة
51
- st.subheader("الشكاوى المقدمة")
52
- user_complaints = df[df['مقدم الشكوى'] == username]
53
- if not user_complaints.empty:
54
- st.write(user_complaints)
 
 
 
55
  else:
56
- st.write("لا توجد شكاوى مقدمة.")
57
 
58
- # عرض حالة الشكوى
59
- if not user_complaints.empty:
60
- for idx, row in user_complaints.iterrows():
61
- st.write(f"**حالة الشكوى:** {row['حالة الشكوى']}")
62
  else:
63
- st.write("لا توجد شكاوى مقدمة.")
64
-
65
- # زر للخروج من النظام
66
- if st.button("تسجيل الخروج"):
67
- del st.session_state['user_type']
68
- del st.session_state['username']
69
- st.success("تم تسجيل الخروج بنجاح.")
70
- st.experimental_rerun()
71
-
72
- elif user_type == "مستقبل شكوى":
73
- st.subheader("إدارة الشكاوى")
74
- # عرض جميع الشكاوى للإداري للتعامل معها
75
- if not df.empty:
76
- for index, row in df.iterrows():
77
- st.write(f"### شكوى من {row['مقدم الشكوى']}")
78
- st.write(f"**الوصف:** {row['وصف الشكوى']}")
79
- st.write(f"**الحالة الحالية:** {row['حالة الشكوى']}")
80
-
81
- # اختيار حالة الشكوى
82
- new_status = st.selectbox(f"تغيير حالة الشكوى {row['مقدم الشكوى']}", ["قيد المعالجة", "مغلقة", "تم الرد عليها"], key=f"status_{index}")
83
- if st.button(f"تحديث حالة الشكوى {row['مقدم الشكوى']}", key=f"update_{index}"):
84
- df.at[index, 'حالة الشكوى'] = new_status
85
- df.to_csv(file_path, index=False)
86
- st.success(f"تم تحديث حالة الشكوى لـ {row['مقدم الشكوى']}")
87
-
88
- # إضافة رد على الشكوى
89
- response = st.text_area(f"أضف ردًا على الشكوى من {row['مقدم الشكوى']}", key=f"response_{index}")
90
- if st.button(f"إرسال الرد لـ {row['مقدم الشكوى']}", key=f"send_{index}"):
91
- df.at[index, 'رد الشكوى'] = response
92
- df.to_csv(file_path, index=False)
93
- st.success(f"تم إرسال الرد لـ {row['مقدم الشكوى']}")
 
1
  import streamlit as st
2
  import pandas as pd
3
+ import os
4
+ import uuid
5
+ from datetime import datetime
6
 
7
+ st.set_page_config(page_title="نظام الشكاوى", layout="centered")
 
8
 
9
+ # اسم الملف لتخزين الشكاوى
10
+ csv_file = "complaints.csv"
 
 
 
11
 
12
+ # التأكد من وجود الملف
13
+ if not os.path.exists(csv_file):
14
+ df_init = pd.DataFrame(columns=[
15
+ "complaint_id", "username", "complaint_text", "status", "response", "timestamp"
16
+ ])
17
+ df_init.to_csv(csv_file, index=False)
18
+
19
+ def load_data():
20
+ return pd.read_csv(csv_file)
21
+
22
+ def save_data(df):
23
+ df.to_csv(csv_file, index=False)
24
+
25
+ def generate_complaint_id(user_id, existing_ids):
26
+ counter = 1
27
+ while True:
28
+ cid = f"SUE U{user_id}-{str(counter).zfill(6)}"
29
+ if cid not in existing_ids:
30
+ return cid
31
+ counter += 1
32
+
33
+ # جلسة المستخدم
34
+ if "logged_in" not in st.session_state:
35
+ st.session_state.logged_in = False
36
+ if "role" not in st.session_state:
37
+ st.session_state.role = None
38
+ if "username" not in st.session_state:
39
+ st.session_state.username = ""
40
+
41
+ # تسجيل الدخول
42
+ if not st.session_state.logged_in:
43
+ st.title("تسجيل الدخول")
44
+ username = st.text_input("اسم المستخدم")
45
+ password = st.text_input("كلمة المرور", type="password")
46
+ role = st.selectbox("الدور", ["مقدم الشكوى", "مستقبل الشكوى"])
47
+
48
  if st.button("دخول"):
49
  if username and password:
50
+ st.session_state.logged_in = True
51
+ st.session_state.role = role
52
  st.session_state.username = username
53
+ st.rerun()
54
  else:
55
+ st.error("من فضلك أدخل اسم المستخدم وكلمة المرور")
 
56
 
 
 
 
 
57
  else:
58
+ st.sidebar.success(f"مرحبًا {st.session_state.username} ({st.session_state.role})")
59
+ if st.sidebar.button("تسجيل الخروج"):
60
+ st.session_state.logged_in = False
61
+ st.session_state.role = None
62
+ st.session_state.username = ""
63
+ st.rerun()
64
 
65
+ df = load_data()
66
+
67
+ if st.session_state.role == "مقدم الشكوى":
68
+ st.header("📨 إرسال شكوى جديدة")
69
+ complaint_text = st.text_area("وصف الشكوى:")
70
  if st.button("إرسال الشكوى"):
71
+ user_id = st.session_state.username[-1] if st.session_state.username[-1].isdigit() else "X"
72
+ existing_ids = set(df["complaint_id"])
73
+ complaint_id = generate_complaint_id(user_id, existing_ids)
74
+ new_complaint = {
75
+ "complaint_id": complaint_id,
76
+ "username": st.session_state.username,
77
+ "complaint_text": complaint_text,
78
+ "status": "قيد الانتظار",
79
+ "response": "",
80
+ "timestamp": datetime.now().isoformat()
81
+ }
82
+ df = pd.concat([df, pd.DataFrame([new_complaint])], ignore_index=True)
83
+ save_data(df)
84
+ st.success(f"تم إرسال الشكوى بنجاح ✅\nرقم الشكوى الخاص بك: {complaint_id}")
85
 
86
+ st.subheader("📋 الشكاوى الخاصة بك")
87
+ user_df = df[df["username"] == st.session_state.username]
88
+ if not user_df.empty:
89
+ for _, row in user_df.iterrows():
90
+ with st.expander(f"🔹 شكوى: {row['complaint_id']}"):
91
+ st.write(f"**الحالة:** {row['status']}")
92
+ st.write(f"**الرد:** {row['response'] if row['response'] else 'لم يتم الرد بعد'}")
93
+ st.write(f"**الوصف:** {row['complaint_text']}")
94
  else:
95
+ st.info("لا توجد شكاوى بعد.")
96
 
97
+ elif st.session_state.role == "مستقبل الشكوى":
98
+ st.header("📬 جميع الشكاوى")
99
+ if df.empty:
100
+ st.info("لا توجد شكاوى بعد")
101
  else:
102
+ for i, row in df.iterrows():
103
+ with st.expander(f"🧾 شكوى: {row['complaint_id']} (بواسطة {row['username']})"):
104
+ st.write(f"**الوصف:** {row['complaint_text']}")
105
+ st.write(f"**الحالة الحالية:** {row['status']}")
106
+ new_status = st.selectbox("تغيير الحالة", ["قيد الانتظار", "جاري المعالجة", "تم الرد"], index=["قيد الانتظار", "جاري المعالجة", "تم الرد"].index(row['status']), key=f"status_{i}")
107
+ response = st.text_area("الرد على الشكوى", value=row['response'], key=f"response_{i}")
108
+ if st.button("تحديث", key=f"update_{i}"):
109
+ df.at[i, 'status'] = new_status
110
+ df.at[i, 'response'] = response
111
+ save_data(df)
112
+ st.success("تم تحديث الشكوى")