"""
نظام تحليل المناقصات وسلاسل الإمداد والتوقعات المستقبلية
تطبيق خاص بشركة شبه الجزيرة للمقاولات
مهندس التطوير: م. تامر الجوهري
"""
import os
import sys
import yaml
import json
import logging
from datetime import datetime
from pathlib import Path
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
# إضافة المجلد الرئيسي للمسار
current_dir = Path(__file__).parent
sys.path.append(str(current_dir))
# استيراد المكونات الضرورية
from web.pages.home import show_home_page
from web.pages.tender_analysis import show_tender_analysis
from web.pages.requirements_analysis import show_requirements_analysis
from web.pages.cost_estimation import show_cost_estimation
from web.pages.risk_analysis import show_risk_analysis
from web.pages.timeline import show_timeline
from web.pages.local_content import show_local_content
from web.pages.supply_chain import show_supply_chain
from web.pages.procurement import show_procurement
from web.pages.vendors import show_vendors
from web.pages.future_projects import show_future_projects
from web.pages.success_prediction import show_success_prediction
from web.pages.reports import show_reports
from web.components.sidebar import create_sidebar
from web.components.header import create_header
from utils.file_handler import setup_logging
# إعداد التسجيل
setup_logging()
logger = logging.getLogger("TenderAnalysisSystem")
# تحميل الإعدادات
def load_config():
config_path = os.path.join(current_dir, "config", "config.yaml")
if os.path.exists(config_path):
with open(config_path, 'r', encoding='utf-8') as f:
return yaml.safe_load(f)
return {}
# تهيئة حالة الجلسة
def initialize_session():
if 'config' not in st.session_state:
st.session_state.config = load_config()
if 'page' not in st.session_state:
st.session_state.page = "الرئيسية"
if 'uploaded_files' not in st.session_state:
st.session_state.uploaded_files = []
if 'analysis_results' not in st.session_state:
st.session_state.analysis_results = {}
if 'current_tender' not in st.session_state:
st.session_state.current_tender = None
if 'user_info' not in st.session_state:
st.session_state.user_info = {
"company": "شركة شبه الجزيرة للمقاولات",
"user_name": "المستخدم الحالي",
"role": "محلل مناقصات"
}
if 'latest_predictions' not in st.session_state:
st.session_state.latest_predictions = None
# إعداد صفحة Streamlit
def setup_page():
st.set_page_config(
page_title="نظام تحليل المناقصات - شركة شبه الجزيرة للمقاولات",
page_icon="📊",
layout="wide",
initial_sidebar_state="expanded",
)
# إضافة CSS المخصص
with open(os.path.join(current_dir, "web", "styles", "main.css")) as f:
st.markdown(f"", unsafe_allow_html=True)
# إضافة CSS للغة العربية
with open(os.path.join(current_dir, "web", "styles", "rtl.css")) as f:
st.markdown(f"", unsafe_allow_html=True)
# التطبيق الرئيسي
def main():
# تهيئة الجلسة وإعداد الصفحة
initialize_session()
setup_page()
# إنشاء الشريط الجانبي
selected_page = create_sidebar()
# إنشاء رأس الصفحة
create_header()
# عرض الصفحة المحددة
if selected_page == "الرئيسية":
show_home_page()
elif selected_page == "تحليل المناقصات":
show_tender_analysis()
elif selected_page == "تحليل المتطلبات":
show_requirements_analysis()
elif selected_page == "تقدير التكاليف":
show_cost_estimation()
elif selected_page == "تحليل المخاطر":
show_risk_analysis()
elif selected_page == "الجدول الزمني":
show_timeline()
elif selected_page == "المحتوى المحلي":
show_local_content()
elif selected_page == "سلاسل الإمداد":
show_supply_chain()
elif selected_page == "المشتريات":
show_procurement()
elif selected_page == "الموردون والمقاولون":
show_vendors()
elif selected_page == "المشاريع المستقبلية":
show_future_projects()
elif selected_page == "توقع احتمالية النجاح":
show_success_prediction()
elif selected_page == "التقارير":
show_reports()
# تسجيل زيارة الصفحة
logger.info(f"تمت زيارة صفحة {selected_page}")
if __name__ == "__main__":
main()