EGYADMIN commited on
Commit
dff2d03
·
verified ·
1 Parent(s): e5b37a0

Update web/pages/home.py

Browse files
Files changed (1) hide show
  1. web/pages/home.py +105 -2
web/pages/home.py CHANGED
@@ -5,6 +5,47 @@ import plotly.express as px
5
  import plotly.graph_objects as go
6
  from datetime import datetime, timedelta
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  def show_home_page():
9
  """
10
  عرض الصفحة الرئيسية مع لوحة المعلومات
@@ -65,7 +106,7 @@ def show_home_page():
65
  fig.update_traces(textposition='inside', textinfo='percent+label')
66
  st.plotly_chart(fig, use_container_width=True)
67
 
68
- # المناقصات المقبلة
69
  col1, col2 = st.columns(2)
70
 
71
  with col1:
@@ -90,4 +131,66 @@ def show_home_page():
90
  prediction_data = {
91
  'المشروع': [
92
  'تطوير البنية التحتية في المنطقة الشرقية',
93
- 'إنشاء مبا
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  import plotly.graph_objects as go
6
  from datetime import datetime, timedelta
7
 
8
+ def create_sample_tenders_data():
9
+ """
10
+ إنشاء بيانات توضيحية للمناقصات
11
+ """
12
+ # تواريخ عشوائية خلال الشهرين القادمين
13
+ today = datetime.now().date()
14
+ dates = [today + timedelta(days=np.random.randint(1, 60)) for _ in range(20)]
15
+
16
+ # حالات المناقصات
17
+ statuses = ['جديدة', 'قيد التحليل', 'جاهزة للتقديم', 'تم التقديم', 'انتهت']
18
+
19
+ # الجهات
20
+ agencies = [
21
+ 'وزارة الإسكان', 'وزارة النقل', 'أمانة الرياض', 'الهيئة الملكية',
22
+ 'وزارة الصحة', 'وزارة التعليم', 'شركة أرامكو', 'شركة سابك',
23
+ 'هيئة المدن الصناعية', 'الهيئة العامة للترفيه'
24
+ ]
25
+
26
+ # القطاعات
27
+ sectors = ['البنية التحتية', 'المباني', 'الطرق', 'الطاقة', 'المياه', 'الصحة', 'التعليم', 'الصناعة']
28
+
29
+ # إنشاء البيانات
30
+ data = {
31
+ 'رقم المناقصة': [f"T-{2025}-{np.random.randint(1000, 9999)}" for _ in range(20)],
32
+ 'الجهة': [np.random.choice(agencies) for _ in range(20)],
33
+ 'اسم المشروع': [
34
+ 'إنشاء طريق دائري', 'تطوير شبكة مياه', 'بناء مدرسة', 'تجديد مستشفى',
35
+ 'إنشاء حديقة عامة', 'تطوير منطقة صناعية', 'صيانة طرق', 'بناء مركز تجاري',
36
+ 'تطوير بنية تحتية', 'إنشاء محطة تحلية', 'بناء مجمع سكني', 'تطوير مركز أبحاث',
37
+ 'صيانة شبكة كهرباء', 'إنشاء ملاعب رياضية', 'تطوير مطار', 'إنشاء مبنى إداري',
38
+ 'تطوير شبكة اتصالات', 'بناء مركز ثقافي', 'إنشاء محطة طاقة شمسية', 'تطوير منطقة ساحلية'
39
+ ],
40
+ 'القيمة التقديرية (مليون)': np.random.uniform(10, 200, 20).round(1),
41
+ 'الموعد النهائي': dates,
42
+ 'حالة المناقصة': [np.random.choice(statuses, p=[0.3, 0.3, 0.2, 0.1, 0.1]) for _ in range(20)],
43
+ 'المحتوى المحلي المطلوب': [np.random.randint(30, 70) for _ in range(20)],
44
+ 'القطاع': [np.random.choice(sectors) for _ in range(20)]
45
+ }
46
+
47
+ return pd.DataFrame(data)
48
+
49
  def show_home_page():
50
  """
51
  عرض الصفحة الرئيسية مع لوحة المعلومات
 
106
  fig.update_traces(textposition='inside', textinfo='percent+label')
107
  st.plotly_chart(fig, use_container_width=True)
108
 
109
+ # المناقصات المقبلة والتوقعات
110
  col1, col2 = st.columns(2)
111
 
112
  with col1:
 
131
  prediction_data = {
132
  'المشروع': [
133
  'تطوير البنية التحتية في المنطقة الشرقية',
134
+ 'إنشاء مباني سكنية في الرياض',
135
+ 'صيانة الطرق في المدينة المنورة',
136
+ 'توسعة شبكة المياه في جدة',
137
+ 'إنشاء مركز بيانات في الدمام'
138
+ ],
139
+ 'احتمالية النجاح': [85, 72, 63, 91, 77]
140
+ }
141
+
142
+ for i, proj in enumerate(prediction_data['المشروع']):
143
+ prob = prediction_data['احتمالية النجاح'][i]
144
+ color = "green" if prob >= 80 else "orange" if prob >= 60 else "red"
145
+
146
+ st.markdown(f"**{proj}**")
147
+ st.progress(prob/100)
148
+ st.markdown(f"<span style='color:{color}'><b>احتمالية النجاح: {prob}%</b></span>", unsafe_allow_html=True)
149
+ st.markdown("---")
150
+
151
+ # توزيع المناقصات حسب الشهر (كمثال على رسم بياني إضافي)
152
+ st.subheader("توزيع المناقصات حسب الشهر")
153
+
154
+ # إضافة شهر كعمود في DataFrame
155
+ active_tenders['الشهر'] = active_tenders['الموعد النهائي'].apply(lambda x: x.strftime('%Y-%m'))
156
+ monthly_df = active_tenders.groupby('الشهر').size().reset_index(name='عدد المناقصات')
157
+
158
+ fig = px.bar(
159
+ monthly_df,
160
+ x='الشهر',
161
+ y='عدد المناقصات',
162
+ color='عدد المناقصات',
163
+ color_continuous_scale='Viridis',
164
+ title="توزيع المناقصات حسب الشهر"
165
+ )
166
+
167
+ st.plotly_chart(fig, use_container_width=True)
168
+
169
+ # روابط سريعة للعمليات الشائعة
170
+ st.subheader("روابط سريعة")
171
+
172
+ col1, col2, col3 = st.columns(3)
173
+
174
+ with col1:
175
+ if st.button("تحليل مناقصة جديدة", key="new_analysis"):
176
+ st.session_state.page = "تحليل المناقصات"
177
+ st.experimental_rerun()
178
+
179
+ with col2:
180
+ if st.button("البحث في قاعدة الموردين", key="search_vendors"):
181
+ st.session_state.page = "الموردون والمقاولون"
182
+ st.experimental_rerun()
183
+
184
+ with col3:
185
+ if st.button("تقرير المحتوى المحلي", key="local_content_report"):
186
+ st.session_state.page = "المحتوى المحلي"
187
+ st.experimental_rerun()
188
+
189
+ # اختبار مستقل للصفحة
190
+ if __name__ == "__main__":
191
+ st.set_page_config(
192
+ page_title="نظام تحليل المناقصات - الصفحة الرئيسية",
193
+ page_icon="📊",
194
+ layout="wide",
195
+ )
196
+ show_home_page()