#!/usr/bin/env python # -*- coding: utf-8 -*- """ وحدة المساعدات العامة توفر هذه الوحدة مجموعة من الدوال المساعدة المستخدمة في مختلف أجزاء النظام """ import os import datetime import json import re import streamlit as st def create_directory_if_not_exists(directory_path): """إنشاء مجلد إذا لم يكن موجوداً بالفعل""" if not os.path.exists(directory_path): os.makedirs(directory_path) return True return False def get_data_folder(): """الحصول على مسار مجلد البيانات""" data_folder = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', 'data')) create_directory_if_not_exists(data_folder) return data_folder def format_time(timestamp=None): """تنسيق الوقت بصيغة قابلة للقراءة""" if timestamp is None: timestamp = datetime.datetime.now() return timestamp.strftime("%Y-%m-%d %H:%M:%S") def get_user_info(): """الحصول على معلومات المستخدم الحالي""" # في الوقت الحالي، نستخدم معلومات مستخدم افتراضية # يمكن تعديل هذه الدالة لاحقاً للتكامل مع نظام المصادقة return { "id": 1, "username": "admin", "name": "مدير النظام", "role": "admin" } def load_css(): """تحميل أنماط CSS المخصصة""" st.markdown(""" """, unsafe_allow_html=True) def render_credits(): """عرض المعلومات عن حقوق الملكية وإصدار النظام""" st.markdown("""
""", unsafe_allow_html=True) def load_icons(): """تحميل الأيقونات المستخدمة في النظام""" icons = { "project": "🏗️", "document": "📄", "analysis": "🔍", "warning": "⚠️", "success": "✅", "error": "❌", "info": "ℹ️", "settings": "⚙️", "user": "👤", "money": "💰", "time": "⏱️", "location": "📍", "notification": "🔔", "edit": "✏️", "delete": "🗑️", "upload": "📤", "download": "📥", "save": "💾", "cancel": "❌", "add": "➕", "calendar": "📅", "chat": "💬", "search": "🔎", "star": "⭐", "trophy": "🏆", "medal": "🥇", "chart": "📊", "map": "🗺️", "building": "🏢", "road": "🛣️", "bridge": "🌉", } return icons def format_number(number, decimal_places=2): """تنسيق الأرقام بطريقة أنيقة""" if isinstance(number, (int, float)): if decimal_places == 0: return "{:,.0f}".format(number) else: return "{:,.{dp}f}".format(number, dp=decimal_places) return str(number) def format_currency(amount, currency="ريال", decimal_places=2): """تنسيق المبالغ المالية""" if amount is None: return "غير محدد" formatted = format_number(amount, decimal_places) return f"{formatted} {currency}" def styled_button(label, key=None, type="primary", on_click=None, args=None, full_width=False, icon=None, is_link=False, help=None): """ إنشاء زر بتنسيق معين :param label: نص الزر :param key: مفتاح الزر الفريد :param type: نوع التنسيق ('primary', 'secondary', 'success', 'warning', 'danger', 'info', 'glass', 'flat') :param on_click: الدالة التي سيتم تنفيذها عند النقر :param args: معاملات الدالة :param full_width: هل يأخذ الزر العرض كاملاً :param icon: أيقونة لعرضها قبل النص (emoji أو HTML) :param is_link: إذا كان الزر رابطاً بدلاً من زر عادي :param help: نص المساعدة للزر :return: زر مُنسّق """ if is_link: btn_class = f"{type}-btn" if icon: btn_class += " action-btn" label_with_icon = f"{icon} {label}" else: label_with_icon = label button_html = f"""