EGYADMIN commited on
Commit
15b212d
·
verified ·
1 Parent(s): f7d2bb1

Update modules/document_analysis/document_app.py

Browse files
modules/document_analysis/document_app.py CHANGED
@@ -287,137 +287,146 @@ class DataAnalysisApp:
287
  st.markdown("#### مؤشرات الأداء الرئيسية")
288
 
289
  # استخراج البيانات اللازمة للمؤشرات
290
- tenders_df = st.session_state.sample_data["tenders"]
291
-
292
- # حساب المؤشرات
293
- total_tenders = len(tenders_df)
294
- won_tenders = len(tenders_df[tenders_df["الحالة"] == "فائز"])
295
- win_rate = won_tenders / total_tenders * 100
296
- avg_profit_margin = tenders_df["هامش الربح (%)"].mean()
297
- total_profit = tenders_df["الربح (ريال)"].sum()
298
-
299
- # عرض المؤشرات
300
- col1, col2, col3, col4 = st.columns(4)
301
-
302
- with col1:
303
- st.metric("إجمالي المناقصات", f"{total_tenders}")
304
-
305
- with col2:
306
- st.metric("معدل الفوز", f"{win_rate:.1f}%")
307
-
308
- with col3:
309
- st.metric("متوسط هامش الربح", f"{avg_profit_margin:.1f}%")
310
-
311
- with col4:
312
- st.metric("إجمالي الربح", f"{total_profit:,.0f} ريال")
313
-
314
- # عرض توزيع المناقصات حسب الحالة
315
- st.markdown("#### توزيع المناقصات حسب الحالة")
316
-
317
- status_counts = tenders_df["الحالة"].value_counts().reset_index()
318
- status_counts.columns = ["الحالة", "العدد"]
319
-
320
- fig = px.pie(
321
- status_counts,
322
- values="العدد",
323
- names="الحالة",
324
- title="توزيع المناقصات حسب الحالة",
325
- color="الحالة",
326
- color_discrete_map={
327
- "فائز": "#2ecc71",
328
- "خاسر": "#e74c3c",
329
- "قيد التنفيذ": "#3498db",
330
- "منجز": "#f39c12"
331
- }
332
- )
333
-
334
- st.plotly_chart(fig, use_container_width=True)
335
-
336
- # عرض توزيع المناقصات حسب نوع المشروع
337
- st.markdown("#### توزيع المناقصات حسب نوع المشروع")
338
-
339
- type_counts = tenders_df["نوع المشروع"].value_counts().reset_index()
340
- type_counts.columns = ["نوع المشروع", "العدد"]
341
-
342
- fig = px.bar(
343
- type_counts,
344
- x="نوع المشروع",
345
- y="العدد",
346
- title="توزيع المناقصات حسب نوع المشروع",
347
- color="نوع المشروع",
348
- text_auto=True
349
- )
350
-
351
- st.plotly_chart(fig, use_container_width=True)
352
-
353
- # عرض تطور هامش الربح عبر الزمن
354
- st.markdown("#### تطور هامش الربح عبر الزمن")
355
-
356
- # إضافة عمود السنة
357
- tenders_df["السنة"] = tenders_df["تاريخ التقديم"].str[:4]
358
-
359
- # حساب متوسط هامش الربح لكل سنة
360
- profit_margin_by_year = tenders_df.groupby("السنة")["هامش الربح (%)"].mean().reset_index()
361
-
362
- fig = px.line(
363
- profit_margin_by_year,
364
- x="السنة",
365
- y="هامش الربح (%)",
366
- title="تطور متوسط هامش الربح عبر السنوات",
367
- markers=True
368
- )
369
-
370
- st.plotly_chart(fig, use_container_width=True)
371
-
372
- # عرض توزيع المناقصات حسب الموقع
373
- st.markdown("#### توزيع المناقصات حسب الموقع")
374
-
375
- location_counts = tenders_df["الموقع"].value_counts().reset_index()
376
- location_counts.columns = ["الموقع", "العدد"]
377
-
378
- fig = px.bar(
379
- location_counts,
380
- x="الموقع",
381
- y="العدد",
382
- title="توزيع المناقصات حسب الموقع",
383
- color="الموقع",
384
- text_auto=True
385
- )
386
-
387
- st.plotly_chart(fig, use_container_width=True)
388
-
389
- # عرض العلاقة بين الميزانية والتكلفة
390
- st.markdown("#### العلاقة بين الميزانية والتكلفة")
391
-
392
- fig = px.scatter(
393
- tenders_df,
394
- x="الميزانية (ريال)",
395
- y="التكلفة (ريال)",
396
- color="الحالة",
397
- size="المساحة (م2)",
398
- hover_name="رقم المناقصة",
399
- hover_data=["نوع المشروع", "الموقع", "هامش الربح (%)"],
400
- title="العلاقة بين الميزانية والتكلفة",
401
- color_discrete_map={
402
- "فائز": "#2ecc71",
403
- "خاسر": "#e74c3c",
404
- "قيد التنفيذ": "#3498db",
405
- "منجز": "#f39c12"
406
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
  )
408
-
409
- # إضافة خط الميزانية = التكلفة
410
- max_value = max(tenders_df["الميزانية (ريال)"].max(), tenders_df["التكلفة (ريال)"].max())
411
- fig.add_trace(
412
- go.Scatter(
413
- x=[0, max_value],
414
- y=[0, max_value],
415
- mode="lines",
416
- line=dict(color="gray", dash="dash"),
417
- name="الميزانية = التكلفة"
418
  )
419
- )
420
- st.plotly_chart(fig, use_container_width=True)
421
 
422
  DocumentAnalysisApp = DataAnalysisApp
423
 
 
287
  st.markdown("#### مؤشرات الأداء الرئيسية")
288
 
289
  # استخراج البيانات اللازمة للمؤشرات
290
+ def _render_dashboard_tab(self):
291
+ """عرض تبويب لوحة المعلومات"""
292
+
293
+ st.markdown("### لوحة المعلومات")
294
+
295
+ # عرض مؤشرات الأداء الرئيسية
296
+ st.markdown("#### مؤشرات الأداء الرئيسية")
297
+
298
+ # استخراج البيانات اللازمة للمؤشرات
299
+ tenders_df = st.session_state.sample_data["tenders"]
300
+
301
+ # حساب المؤشرات
302
+ total_tenders = len(tenders_df)
303
+ won_tenders = len(tenders_df[tenders_df["الحالة"] == "فائز"])
304
+ win_rate = won_tenders / total_tenders * 100
305
+ avg_profit_margin = tenders_df["هامش الربح (%)"].mean()
306
+ total_profit = tenders_df["الربح (ريال)"].sum()
307
+
308
+ # عرض المؤشرات
309
+ col1, col2, col3, col4 = st.columns(4)
310
+
311
+ with col1:
312
+ st.metric("إجمالي المناقصات", f"{total_tenders}")
313
+
314
+ with col2:
315
+ st.metric("معدل الفوز", f"{win_rate:.1f}%")
316
+
317
+ with col3:
318
+ st.metric("متوسط هامش الربح", f"{avg_profit_margin:.1f}%")
319
+
320
+ with col4:
321
+ st.metric("إجمالي الربح", f"{total_profit:,.0f} ريال")
322
+
323
+ # عرض توزيع المناقصات حسب الحالة
324
+ st.markdown("#### توزيع المناقصات حسب الحالة")
325
+
326
+ status_counts = tenders_df["الحالة"].value_counts().reset_index()
327
+ status_counts.columns = ["الحالة", "العدد"]
328
+
329
+ fig = px.pie(
330
+ status_counts,
331
+ values="العدد",
332
+ names="الحالة",
333
+ title="توزيع المناقصات حسب الحالة",
334
+ color="الحالة",
335
+ color_discrete_map={
336
+ "فائز": "#2ecc71",
337
+ "خاسر": "#e74c3c",
338
+ "قيد التنفيذ": "#3498db",
339
+ "منجز": "#f39c12"
340
+ }
341
+ )
342
+
343
+ st.plotly_chart(fig, use_container_width=True)
344
+
345
+ # عرض توزيع المناقصات حسب نوع المشروع
346
+ st.markdown("#### توزيع المناقصات حسب نوع المشروع")
347
+
348
+ type_counts = tenders_df["نوع المشروع"].value_counts().reset_index()
349
+ type_counts.columns = ["نوع المشروع", "العدد"]
350
+
351
+ fig = px.bar(
352
+ type_counts,
353
+ x="نوع المشروع",
354
+ y="العدد",
355
+ title="توزيع المناقصات حسب نوع المشروع",
356
+ color="نوع المشروع",
357
+ text_auto=True
358
+ )
359
+
360
+ st.plotly_chart(fig, use_container_width=True)
361
+
362
+ # عرض تطور هامش الربح عبر الزمن
363
+ st.markdown("#### تطور هامش الربح عبر الزمن")
364
+
365
+ # إضافة عمود السنة
366
+ tenders_df["السنة"] = tenders_df["تاريخ التقديم"].str[:4]
367
+
368
+ # حساب متوسط هامش الربح لكل سنة
369
+ profit_margin_by_year = tenders_df.groupby("السنة")["هامش الربح (%)"].mean().reset_index()
370
+
371
+ fig = px.line(
372
+ profit_margin_by_year,
373
+ x="السنة",
374
+ y="هامش الربح (%)",
375
+ title="تطور متوسط هامش الربح عبر السنوات",
376
+ markers=True
377
+ )
378
+
379
+ st.plotly_chart(fig, use_container_width=True)
380
+
381
+ # عرض توزيع المناقصات حسب الموقع
382
+ st.markdown("#### توزيع المناقصات حسب الموقع")
383
+
384
+ location_counts = tenders_df["الموقع"].value_counts().reset_index()
385
+ location_counts.columns = ["الموقع", "العدد"]
386
+
387
+ fig = px.bar(
388
+ location_counts,
389
+ x="الموقع",
390
+ y="العدد",
391
+ title="توزيع المناقصات حسب الموقع",
392
+ color="الموقع",
393
+ text_auto=True
394
+ )
395
+
396
+ st.plotly_chart(fig, use_container_width=True)
397
+
398
+ # عرض العلاقة بين الميزانية والتكلفة
399
+ st.markdown("#### العلاقة بين الميزانية والتكلفة")
400
+
401
+ fig = px.scatter(
402
+ tenders_df,
403
+ x="الميزانية (ريال)",
404
+ y="التكلفة (ريال)",
405
+ color="الحالة",
406
+ size="المساحة (م2)",
407
+ hover_name="رقم المناقصة",
408
+ hover_data=["نوع المشروع", "الموقع", "هامش الربح (%)"],
409
+ title="العلاقة بين الميزانية والتكلفة",
410
+ color_discrete_map={
411
+ "فائز": "#2ecc71",
412
+ "خاسر": "#e74c3c",
413
+ "قيد التنفيذ": "#3498db",
414
+ "منجز": "#f39c12"
415
+ }
416
+ )
417
+
418
+ # إضافة خط الميزانية = التكلفة
419
+ max_value = max(tenders_df["الميزانية (ريال)"].max(), tenders_df["التكلفة (ريال)"].max())
420
+ fig.add_trace(
421
+ go.Scatter(
422
+ x=[0, max_value],
423
+ y=[0, max_value],
424
+ mode="lines",
425
+ line=dict(color="gray", dash="dash"),
426
+ name="الميزانية = التكلفة"
427
  )
 
 
 
 
 
 
 
 
 
 
428
  )
429
+ st.plotly_chart(fig, use_container_width=True)
 
430
 
431
  DocumentAnalysisApp = DataAnalysisApp
432