""" وحدة إدارة حالة الجلسة """ import streamlit as st from datetime import datetime import pandas as pd import config def initialize_session_state(): """ تهيئة متغيرات حالة الجلسة """ # المتغيرات الرئيسية لحالة المستخدم if 'is_authenticated' not in st.session_state: st.session_state.is_authenticated = False if 'user_info' not in st.session_state: st.session_state.user_info = None # المتغيرات المتعلقة بالمناقصات والمشاريع if 'current_project' not in st.session_state: st.session_state.current_project = None if 'current_pricing' not in st.session_state: st.session_state.current_pricing = None if 'pricing_history' not in st.session_state: st.session_state.pricing_history = [] # المتغيرات المتعلقة بالمحتوى المحلي if 'local_content_products' not in st.session_state: st.session_state.local_content_products = pd.DataFrame({ 'المنتج': [], 'الكمية': [], 'سعر_الوحدة': [], 'التكلفة_الإجمالية': [], 'نسبة_المحتوى_المحلي': [] }) if 'local_content_services' not in st.session_state: st.session_state.local_content_services = pd.DataFrame({ 'الخدمة': [], 'التكلفة': [], 'نسبة_المحتوى_المحلي': [] }) if 'local_content_labor' not in st.session_state: st.session_state.local_content_labor = pd.DataFrame({ 'فئة_العمالة': [], 'العدد': [], 'الراتب_الشهري': [], 'المدة_بالأشهر': [], 'نسبة_المحتوى_المحلي': [] }) # المتغيرات المتعلقة بتحليل المستندات if 'current_document' not in st.session_state: st.session_state.current_document = None if 'analyzed_documents' not in st.session_state: st.session_state.analyzed_documents = [] # المتغيرات المتعلقة بالتسعير if 'manual_items' not in st.session_state: st.session_state.manual_items = pd.DataFrame({ 'رقم البند': [], 'وصف البند': [], 'الوحدة': [], 'الكمية': [], 'سعر الوحدة': [], 'الإجمالي': [] }) # المتغيرات المتعلقة بالمصادر if 'resources' not in st.session_state: st.session_state.resources = [] # المتغيرات المتعلقة بالإعدادات if 'settings' not in st.session_state: st.session_state.settings = { 'ui_theme': config.UI_THEME, 'locale': config.LOCALE, 'enable_animations': config.ENABLE_ANIMATIONS } def save_current_pricing(): """ حفظ التسعير الحالي في سجل التسعير الإرجاع: True في حالة النجاح، False في حالة الفشل """ try: if st.session_state.current_pricing: # إضافة معلومات إضافية pricing_entry = st.session_state.current_pricing.copy() pricing_entry['timestamp'] = datetime.now() # إضافة إلى سجل التسعير st.session_state.pricing_history.append(pricing_entry) return True return False except Exception as e: print(f"خطأ في حفظ التسعير الحالي: {str(e)}") return False def set_current_project(project_data): """ تعيين المشروع الحالي المعلمات: project_data: بيانات المشروع """ st.session_state.current_project = project_data def set_current_pricing(pricing_data): """ تعيين التسعير الحالي المعلمات: pricing_data: بيانات التسعير """ st.session_state.current_pricing = pricing_data def set_current_document(document_data): """ تعيين المستند الحالي المعلمات: document_data: بيانات المستند """ st.session_state.current_document = document_data def clear_session(): """ مسح بيانات الجلسة الحالية """ # الاحتفاظ بحالة المصادقة والمستخدم is_authenticated = st.session_state.is_authenticated user_info = st.session_state.user_info settings = st.session_state.settings # مسح المتغيرات st.session_state.clear() # إعادة تعيين حالة المصادقة والمستخدم st.session_state.is_authenticated = is_authenticated st.session_state.user_info = user_info st.session_state.settings = settings # إعادة تهيئة متغيرات الجلسة initialize_session_state() def export_session_state(): """ تصدير حالة الجلسة الحالية الإرجاع: قاموس يحتوي على حالة الجلسة """ # إنشاء نسخة من حالة الجلسة session_data = {} # تخزين البيانات الرئيسية if st.session_state.current_project: session_data['current_project'] = st.session_state.current_project if st.session_state.current_pricing: session_data['current_pricing'] = st.session_state.current_pricing if st.session_state.pricing_history: session_data['pricing_history'] = st.session_state.pricing_history # تحويل DataFrames إلى قوائم من القواميس if 'local_content_products' in st.session_state and not st.session_state.local_content_products.empty: session_data['local_content_products'] = st.session_state.local_content_products.to_dict('records') if 'local_content_services' in st.session_state and not st.session_state.local_content_services.empty: session_data['local_content_services'] = st.session_state.local_content_services.to_dict('records') if 'local_content_labor' in st.session_state and not st.session_state.local_content_labor.empty: session_data['local_content_labor'] = st.session_state.local_content_labor.to_dict('records') # تخزين البيانات الأخرى if 'manual_items' in st.session_state and not st.session_state.manual_items.empty: session_data['manual_items'] = st.session_state.manual_items.to_dict('records') if st.session_state.resources: session_data['resources'] = st.session_state.resources # إضافة بيانات الوقت session_data['exported_at'] = datetime.now().isoformat() return session_data def import_session_state(session_data): """ استيراد حالة الجلسة المعلمات: session_data: قاموس يحتوي على حالة الجلسة الإرجاع: True في حالة النجاح، False في حالة الفشل """ try: # استيراد البيانات الرئيسية if 'current_project' in session_data: st.session_state.current_project = session_data['current_project'] if 'current_pricing' in session_data: st.session_state.current_pricing = session_data['current_pricing'] if 'pricing_history' in session_data: st.session_state.pricing_history = session_data['pricing_history'] # استيراد DataFrames if 'local_content_products' in session_data: st.session_state.local_content_products = pd.DataFrame(session_data['local_content_products']) if 'local_content_services' in session_data: st.session_state.local_content_services = pd.DataFrame(session_data['local_content_services']) if 'local_content_labor' in session_data: st.session_state.local_content_labor = pd.DataFrame(session_data['local_content_labor']) # استيراد البيانات الأخرى if 'manual_items' in session_data: st.session_state.manual_items = pd.DataFrame(session_data['manual_items']) if 'resources' in session_data: st.session_state.resources = session_data['resources'] return True except Exception as e: print(f"خطأ في استيراد حالة الجلسة: {str(e)}") return False