File size: 3,538 Bytes
82676b8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
import streamlit as st
import pandas as pd
import plotly.express as px
from datetime import datetime, timedelta
import time
class ReportsApp:
"""وحدة التقارير والتحليلات"""
def __init__(self):
pass
def render(self):
st.markdown("<h1 class='module-title'>وحدة التقارير والتحليلات</h1>", unsafe_allow_html=True)
tabs = st.tabs(["لوحة المعلومات", "تقارير المشاريع", "تقارير التسعير", "تقارير المخاطر", "التقارير المخصصة"])
with tabs[0]:
self._render_dashboard_tab()
# باقي التبويبات موجودة ولكن لم يتم طلب تصحيحها في هذا السياق
def _render_dashboard_tab(self):
st.markdown("### لوحة معلومات النظام")
col1, col2, col3, col4 = st.columns(4)
with col1:
total_projects = self._get_total_projects()
st.metric("إجمالي المشاريع", total_projects)
with col2:
active_projects = self._get_active_projects()
st.metric("المشاريع النشطة", active_projects, delta=f"{active_projects/total_projects*100:.1f}%" if total_projects > 0 else "0%")
with col3:
won_projects = self._get_won_projects()
st.metric("المشاريع المرساة", won_projects, delta=f"{won_projects/total_projects*100:.1f}%" if total_projects > 0 else "0%")
with col4:
avg_local_content = self._get_avg_local_content()
st.metric("متوسط المحتوى المحلي", f"{avg_local_content:.1f}%", delta=f"{avg_local_content-70:.1f}%" if avg_local_content > 0 else "0%")
st.markdown("#### توزيع المشاريع حسب الحالة")
project_status_data = self._get_project_status_data()
fig = px.pie(project_status_data, values='count', names='status', title='توزيع المشاريع حسب الحالة', hole=0.4)
st.plotly_chart(fig, use_container_width=True)
st.markdown("#### اتجاه المشاريع الشهري")
monthly_data = self._get_monthly_project_data()
fig = px.line(monthly_data, x='month', y=['new', 'submitted', 'won'], title='اتجاه المشاريع الشهري')
st.plotly_chart(fig, use_container_width=True)
st.markdown("#### توزيع قيم المشاريع")
project_value_data = self._get_project_value_data()
fig = px.bar(project_value_data, x='range', y='count', title='توزيع قيم المشاريع')
st.plotly_chart(fig, use_container_width=True)
def _get_total_projects(self):
return 10
def _get_active_projects(self):
return 7
def _get_won_projects(self):
return 4
def _get_avg_local_content(self):
return 72.5
def _get_project_status_data(self):
return pd.DataFrame({
'status': ['جديد', 'قيد التنفيذ', 'تمت الترسية', 'ملغي'],
'count': [5, 3, 1, 1]
})
def _get_monthly_project_data(self):
return pd.DataFrame({
'month': ['يناير', 'فبراير', 'مارس'],
'new': [2, 3, 4],
'submitted': [1, 2, 3],
'won': [0, 1, 2]
})
def _get_project_value_data(self):
return pd.DataFrame({
'range': ['0-500K', '500K-1M', '1M-2M', '2M+'],
'count': [2, 3, 4, 1]
})
|