Wahbi-AI / config.py
EGYADMIN's picture
Upload 70 files
d9e7bdd verified
raw
history blame
9.13 kB
"""
ملف الإعدادات لنظام إدارة المناقصات
"""
import os
import json
from pathlib import Path
class AppConfig:
"""فئة إعدادات التطبيق"""
def __init__(self):
"""تهيئة الإعدادات"""
# المسارات الأساسية
self.app_dir = os.path.dirname(os.path.abspath(__file__))
self.assets_dir = os.path.join(self.app_dir, "assets")
self.data_dir = os.path.join(self.app_dir, "data")
# إنشاء المجلدات إذا لم تكن موجودة
Path(self.assets_dir).mkdir(parents=True, exist_ok=True)
Path(self.data_dir).mkdir(parents=True, exist_ok=True)
# مسارات الأصول
self.icons_dir = os.path.join(self.assets_dir, "icons")
self.images_dir = os.path.join(self.assets_dir, "images")
self.fonts_dir = os.path.join(self.assets_dir, "fonts")
# إنشاء مجلدات الأصول إذا لم تكن موجودة
Path(self.icons_dir).mkdir(parents=True, exist_ok=True)
Path(self.images_dir).mkdir(parents=True, exist_ok=True)
Path(self.fonts_dir).mkdir(parents=True, exist_ok=True)
# مسارات البيانات
self.database_file = os.path.join(self.data_dir, "database.db")
self.settings_file = os.path.join(self.data_dir, "settings.json")
self.charts_dir = os.path.join(self.data_dir, "charts")
# إنشاء مجلد الرسوم البيانية إذا لم يكن موجودًا
Path(self.charts_dir).mkdir(parents=True, exist_ok=True)
# تحميل الإعدادات
self.settings = self._load_settings()
def _load_settings(self):
"""تحميل الإعدادات من ملف JSON"""
default_settings = {
"app": {
"name": "نظام إدارة المناقصات",
"version": "1.0.0",
"language": "ar",
"theme": "light",
"font": "Cairo",
"font_size": 12
},
"database": {
"type": "sqlite",
"path": self.database_file
},
"ui": {
"window_width": 1200,
"window_height": 800,
"sidebar_width": 250
},
"notifications": {
"enabled": True,
"email_enabled": True,
"email_server": "smtp.example.com",
"email_port": 587,
"email_username": "",
"email_password": ""
},
"reports": {
"default_format": "pdf",
"default_path": os.path.join(self.data_dir, "reports")
},
"backup": {
"auto_backup": True,
"backup_frequency": "weekly",
"backup_path": os.path.join(self.data_dir, "backups"),
"max_backups": 10
}
}
# إذا كان ملف الإعدادات موجودًا، قم بتحميله
if os.path.exists(self.settings_file):
try:
with open(self.settings_file, "r", encoding="utf-8") as f:
settings = json.load(f)
# دمج الإعدادات المحملة مع الإعدادات الافتراضية
self._merge_settings(default_settings, settings)
return default_settings
except Exception as e:
print(f"خطأ في تحميل الإعدادات: {str(e)}")
return default_settings
else:
# إنشاء ملف الإعدادات الافتراضية
self._save_settings(default_settings)
return default_settings
def _merge_settings(self, default_settings, loaded_settings):
"""دمج الإعدادات المحملة مع الإعدادات الافتراضية"""
for key, value in loaded_settings.items():
if key in default_settings:
if isinstance(value, dict) and isinstance(default_settings[key], dict):
self._merge_settings(default_settings[key], value)
else:
default_settings[key] = value
def _save_settings(self, settings=None):
"""حفظ الإعدادات إلى ملف JSON"""
if settings is None:
settings = self.settings
try:
with open(self.settings_file, "w", encoding="utf-8") as f:
json.dump(settings, f, ensure_ascii=False, indent=4)
return True
except Exception as e:
print(f"خطأ في حفظ الإعدادات: {str(e)}")
return False
def get_setting(self, section, key, default=None):
"""الحصول على قيمة إعداد معين"""
try:
return self.settings[section][key]
except KeyError:
return default
def set_setting(self, section, key, value):
"""تعيين قيمة إعداد معين"""
if section not in self.settings:
self.settings[section] = {}
self.settings[section][key] = value
self._save_settings()
def get_app_name(self):
"""الحصول على اسم التطبيق"""
return self.get_setting("app", "name", "نظام إدارة المناقصات")
def get_app_version(self):
"""الحصول على إصدار التطبيق"""
return self.get_setting("app", "version", "1.0.0")
def get_language(self):
"""الحصول على لغة التطبيق"""
return self.get_setting("app", "language", "ar")
def set_language(self, language):
"""تعيين لغة التطبيق"""
self.set_setting("app", "language", language)
def get_theme(self):
"""الحصول على نمط التطبيق"""
return self.get_setting("app", "theme", "light")
def set_theme(self, theme):
"""تعيين نمط التطبيق"""
self.set_setting("app", "theme", theme)
def get_font(self):
"""الحصول على خط التطبيق"""
return self.get_setting("app", "font", "Cairo")
def set_font(self, font):
"""تعيين خط التطبيق"""
self.set_setting("app", "font", font)
def get_font_size(self):
"""الحصول على حجم خط التطبيق"""
return self.get_setting("app", "font_size", 12)
def set_font_size(self, font_size):
"""تعيين حجم خط التطبيق"""
self.set_setting("app", "font_size", font_size)
def get_window_size(self):
"""الحصول على حجم نافذة التطبيق"""
width = self.get_setting("ui", "window_width", 1200)
height = self.get_setting("ui", "window_height", 800)
return (width, height)
def set_window_size(self, width, height):
"""تعيين حجم نافذة التطبيق"""
self.set_setting("ui", "window_width", width)
self.set_setting("ui", "window_height", height)
def get_sidebar_width(self):
"""الحصول على عرض الشريط الجانبي"""
return self.get_setting("ui", "sidebar_width", 250)
def set_sidebar_width(self, width):
"""تعيين عرض الشريط الجانبي"""
self.set_setting("ui", "sidebar_width", width)
def get_database_config(self):
"""الحصول على إعدادات قاعدة البيانات"""
return self.settings.get("database", {
"type": "sqlite",
"path": self.database_file
})
def get_notifications_config(self):
"""الحصول على إعدادات الإشعارات"""
return self.settings.get("notifications", {
"enabled": True,
"email_enabled": True,
"email_server": "smtp.example.com",
"email_port": 587,
"email_username": "",
"email_password": ""
})
def get_reports_config(self):
"""الحصول على إعدادات التقارير"""
return self.settings.get("reports", {
"default_format": "pdf",
"default_path": os.path.join(self.data_dir, "reports")
})
def get_backup_config(self):
"""الحصول على إعدادات النسخ الاحتياطي"""
return self.settings.get("backup", {
"auto_backup": True,
"backup_frequency": "weekly",
"backup_path": os.path.join(self.data_dir, "backups"),
"max_backups": 10
})