v3 / utils /session_state.py
EGYADMIN's picture
Upload 115 files
82676b8 verified
"""
وحدة إدارة حالة الجلسة
"""
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