File size: 9,164 Bytes
bc73e0b a854c1b 4500ed3 bc73e0b 4500ed3 d9e7bdd 4500ed3 bc73e0b 4500ed3 bc73e0b d9e7bdd bc73e0b d9e7bdd bc73e0b d9e7bdd bc73e0b d9e7bdd bc73e0b d9e7bdd bc73e0b d9e7bdd bc73e0b d9e7bdd |
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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# app.py
import streamlit as st
import sys
import os
from pathlib import Path
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime
# إعداد المسارات
sys.path.append(str(Path(__file__).parent.parent))
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# استيراد مدير التكوين
from config_manager import ConfigManager
# استيراد الوحدات
from modules.document_analysis.document_app import DocumentAnalysisApp
from modules.pricing.pricing_app import PricingApp
from modules.resources.resources_app import ResourcesApp
from modules.risk_analysis.risk_analyzer import RiskAnalysisApp
from modules.project_management.project_management_app import ProjectsApp
from modules.maps.maps_app import MapsApp
from modules.notifications.notifications_app import NotificationsApp
from modules.document_comparison.document_comparison_app import DocumentComparisonApp
from modules.translation.translation_app import TranslationApp
from modules.ai_assistant.ai_app import AIAssistantApp
from modules.data_analysis.data_analysis_app import DataAnalysisApp
from pricing_system.modules.pricing_strategies.pricing_strategies import PricingStrategies #added import
from pricing_system.integrated_app import IntegratedApp #added import
from styling.enhanced_ui import UIEnhancer
# تهيئة مدير التكوين
config_manager = ConfigManager()
# تكوين الصفحة
config_manager.set_page_config_if_needed(
page_title="نظام تحليل المناقصات",
page_icon="📊",
layout="wide",
initial_sidebar_state="expanded",
menu_items={
'Get Help': 'https://www.example.com/help',
'Report a bug': "https://www.example.com/bug",
'About': "### نظام تحليل المناقصات\nالإصدار 2.0.0"
}
)
# تطبيق التنسيق العام
ui_enhancer = UIEnhancer(page_title="نظام تحليل المناقصات", page_icon="📊")
ui_enhancer.apply_global_styles()
# تطبيق الأنماط الموحدة المخصصة للنظام
with open("pricing_system/static/css/unified_style.css") as f:
st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
# إنشاء قائمة العناصر
menu_items = [
{"name": "لوحة المعلومات", "icon": "house"},
{"name": "المناقصات والعقود", "icon": "file-text"},
{"name": "تحليل المستندات", "icon": "file-earmark-text"},
{"name": "نظام التسعير", "icon": "calculator"},
{"name": "حاسبة تكاليف البناء", "icon": "building"},
{"name": "الموارد والتكاليف", "icon": "people"},
{"name": "تحليل المخاطر", "icon": "exclamation-triangle"},
{"name": "إدارة المشاريع", "icon": "kanban"},
{"name": "الخرائط والمواقع", "icon": "geo-alt"},
{"name": "الجدول الزمني", "icon": "calendar3"},
{"name": "الإشعارات", "icon": "bell"},
{"name": "مقارنة المستندات", "icon": "files"},
{"name": "الترجمة", "icon": "translate"},
{"name": "المساعد الذكي", "icon": "robot"},
{"name": "تحليل البيانات", "icon": "bar-chart"},
{"name": "الإعدادات", "icon": "gear"}
]
# إنشاء الشريط الجانبي
selected = ui_enhancer.create_sidebar(menu_items)
# تحديد الوحدة المطلوبة بناءً على اختيار المستخدم
if selected == "لوحة المعلومات":
ui_enhancer.create_header("لوحة المعلومات", "نظرة عامة على المناقصات والمشاريع")
col1, col2, col3 = st.columns(3)
with col1:
ui_enhancer.create_metric_card("المناقصات النشطة", "12", "+3", ui_enhancer.COLORS['primary'])
with col2:
ui_enhancer.create_metric_card("المشاريع قيد التنفيذ", "8", "+1", ui_enhancer.COLORS['success'])
with col3:
ui_enhancer.create_metric_card("المناقصات المقدمة", "24", "+5", ui_enhancer.COLORS['info'])
st.markdown("### الإشعارات الأخيرة")
notifications = [
{"title": "موعد تقديم مناقصة", "project": "إنشاء مبنى مستشفى الولادة والأطفال", "date": "2025-04-05", "priority": "عالية"},
{"title": "تحديث مستندات", "project": "صيانة وتطوير طريق الملك عبدالله", "date": "2025-03-28", "priority": "متوسطة"},
{"title": "اجتماع مراجعة التسعير", "project": "إنشاء محطة معالجة مياه الصرف الصحي", "date": "2025-03-25", "priority": "عالية"}
]
for notification in notifications:
with st.container():
col1, col2 = st.columns([4, 1])
with col1:
st.markdown(f"**{notification['title']}** - {notification['project']}")
st.caption(f"التاريخ: {notification['date']} | الأولوية: {notification['priority']}")
with col2:
st.button("عرض", key=f"view_{notification['title']}")
st.divider()
elif selected == "تحليل المستندات":
document_app = DocumentAnalysisApp()
document_app.run()
elif selected == "نظام التسعير":
import streamlit as st
from pricing_system.integrated_app import IntegratedApp
# تهيئة النظام المتكامل
integrated_pricing = IntegratedApp()
# إعداد التكوين مرة واحدة في بداية التطبيق
config_manager.set_page_config_if_needed(
page_title="نظام التسعير المتكامل",
page_icon="💰",
layout="wide",
initial_sidebar_state="expanded"
)
# عرض الشعار وعنوان النظام
st.markdown("""
<style>
.title-container {
display: flex;
align-items: center;
padding: 1rem;
background-color: #f0f2f6;
border-radius: 0.5rem;
margin-bottom: 2rem;
}
.main-title {
color: #1f77b4;
font-size: 1.8rem;
margin: 0;
padding: 0;
}
</style>
<div class="title-container">
<h1 class="main-title">نظام التسعير المتكامل</h1>
</div>
""", unsafe_allow_html=True)
# تشغيل النظام المتكامل
integrated_pricing.run()
elif selected == "الموارد والتكاليف":
resources_app = ResourcesApp()
resources_app.run()
elif selected == "تحليل المخاطر":
risk_app = RiskAnalysisApp()
risk_app.run()
elif selected == "إدارة المشاريع":
projects_app = ProjectsApp()
projects_app.run()
elif selected == "الخرائط والمواقع":
maps_app = MapsApp()
maps_app.run()
elif selected == "الإشعارات":
notifications_app = NotificationsApp()
notifications_app.run()
elif selected == "مقارنة المستندات":
document_comparison_app = DocumentComparisonApp()
document_comparison_app.run()
elif selected == "الترجمة":
translation_app = TranslationApp()
translation_app.run()
elif selected == "المساعد الذكي":
ai_app = AIAssistantApp()
ai_app.run()
elif selected == "تحليل البيانات":
data_analysis_app = DataAnalysisApp()
data_analysis_app.run()
elif selected == "الجدول الزمني":
from modules.scheduling.schedule_app import ScheduleApp
schedule_app = ScheduleApp()
schedule_app.run()
elif selected == "الإعدادات":
ui_enhancer.create_header("الإعدادات", "إعدادات النظام والحساب")
st.markdown("### إعدادات النظام")
tabs = st.tabs(["إعدادات عامة", "الواجهة", "الأمان", "مفاتيح API"])
with tabs[0]:
st.checkbox("تفعيل الإشعارات", value=True)
st.checkbox("حفظ تلقائي للبيانات", value=True)
st.selectbox("اللغة", ["العربية", "English"])
st.selectbox("المنطقة الزمنية", ["توقيت الرياض (GMT+3)", "توقيت جرينتش (GMT)"])
with tabs[1]:
st.radio("النمط", ["فاتح", "داكن", "تلقائي (حسب نظام التشغيل)"])
st.slider("حجم الخط", 12, 20, 16)
st.color_picker("لون التمييز", "#1E88E5")
with tabs[2]:
st.checkbox("تفعيل المصادقة الثنائية", value=False)
st.number_input("مدة الجلسة (دقائق)", min_value=5, max_value=120, value=30)
st.button("تغيير كلمة المرور")
with tabs[3]:
st.text_input("مفتاح OpenAI API", type="password")
st.text_input("مفتاح Google Maps API", type="password")
st.button("حفظ مفاتيح API") |