#!/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, icon=None, is_link=False, key=None, help=None, on_click=None): """زر مخصص بأسلوب موحد""" button_html = f""" """ if is_link: return st.markdown(button_html, unsafe_allow_html=True) else: return st.button( f"{icon + ' ' if icon else ''}{label}", key=key, help=help, on_click=on_click ) def filter_dataframe(df, column, value): """ترشيح إطار البيانات""" if value == "الكل": return df return df[df[column] == value] def get_file_extension(filename): """استخراج امتداد الملف""" if not filename: return "" return os.path.splitext(filename)[-1].lower() def extract_numbers_from_text(text): """استخراج الأرقام من النص Args: text (str): النص المراد استخراج الأرقام منه Returns: list: قائمة بالأرقام المستخرجة """ if not text: return [] # نمط للعثور على الأرقام (صحيحة أو عشرية) في النص pattern = r'[-+]?\d*\.\d+|\d+' # استخراج جميع الأرقام من النص numbers = re.findall(pattern, text) # تحويل النصوص المستخرجة إلى أرقام (صحيحة أو عشرية) converted_numbers = [] for num in numbers: if '.' in num: converted_numbers.append(float(num)) else: converted_numbers.append(int(num)) return converted_numbers