⚡
التحديات
1-تطبيق مُنشئ النماذج الديناميكي مع الحفاظ على سلامة البيانات: تحويل النماذج القالبية (Template) إلى نماذج جارية (Instance) دون إنشاء تبعيات مدمرة، وإدارة نسخ الحقول والخيارات والصلاحيات بشكل صحيح أثناء التنفيذ.
2-إدارة سير العمل متعدد الخطوات مع التحكم في المهل: تصميم نظام يكون لكل خطوة مهلتها المستقلة الخاصة بها، وتسجيل التأخيرات، وعرض تقدم المستخدمين بشكل لحظي؛ مع إمكانية الرفض (Reject) والتصحيح على مستويات مختلفة (الحقل، الخطوة، النموذج بالكامل) دون فقدان البيانات.
3-نظام المصادقة والتحكم في الوصول المتدرج (RBAC) على مستويات مختلفة: تطبيق صلاحيات دقيقة على النماذج والخطوات وحتى الحقول، بحيث يرى كل مستخدم ويملأ فقط البيانات المصرح له بها؛ مع إدارة متزامنة لأدوار متعددة لكل مستخدم.
4-تحسين الأداء والإشعارات: تقليل طلبات الخادم باستخدام التخزين المؤقت (LocMemCache) والإدارة الذكية للإشعارات (فقط في حالة وجود مهمة جديدة) دون إرسال إشعارات إضافية، مع دعم Service Worker لإشعارات المتصفح.
💡
الحلول
مُنشئ النماذج الديناميكي: تخزين input_type مباشرةً في InstanceField ونسخ كامل للبيانات الوصفية (Metadata) عند إنشاء نموذج منسوخ لقطع الاعتماد على النموذج الرئيسي (Master Form).
سير العمل والمهل: استخدام JSONField لتخزين مهلة كل خطوة وتاريخ الخطوات؛ واستخدام الدالتين start_step و complete_step لإدارة التوقيت الدقيق وتسجيل التأخيرات.
نظام RBAC المتدرج: تطبيق access_type بخيارات all، specific_role، و specific_user في نموذج الحقل، والتحقق من الصلاحيات عبر الدالة is_accessible_by أثناء التنفيذ.
الإشعارات المحسّنة: تخزين مؤقت لعدد المهام (LocMemCache) ومقارنة notified_task_ids لإرسال الإشعارات فقط عند وجود مهمة جديدة؛ وإدارة isFetching في العميل لمنع الطلبات المتزامنة.
تكامل البيانات القديمة: السكربت fix_instance_field_input_type مع خيار --dry-run لاستعادة input_type في النماذج المنسوخة سابقاً دون خطر التغييرات غير المرغوب فيها.
📚
الإنجازات
تمكين المستخدمين غير التقنيين: إنشاء منصة لتعريف النماذج المعقدة وسير العمل المؤسسي دون الحاجة إلى سطر واحد من التعليمات البرمجية، مما قلل الاعتماد على الفريق التقني إلى أدنى حد.
الشفافية والتحكم الكامل في العمليات: تطبيق نظام ذكي للموافقة/الرفض على ثلاثة مستويات (الحقل، الخطوة، والنموذج بالكامل)، مع تسجيل تاريخ كامل وعرض التقدم لحظياً، مما جعل الإدارة المؤسسية أكثر شفافية.
إدارة الأمان والوصول على أدق مستوى: التنفيذ الناجح لنظام المصادقة القائم على الأدوار (RBAC) الذي يتحكم في وصول المستخدمين حتى مستوى حقل معين، مما يضمن أمان البيانات.
زيادة الإنتاجية من خلال تحسين الأداء: تقليل كبير في طلبات الخادم من خلال التخزين المؤقت الذكي وإرسال الإشعارات الفورية فقط عند وجود مهمة جديدة، مما جعل تجربة المستخدم أكثر سلاسة.
التوافق مع البنية التحتية والثقافة المؤسسية الإيرانية: دعم كامل للتواريخ الشمسية (الجلالية)، والمخرجات الاحترافية (PDF، Excel)، والقدرة على الاتصال بـ MySQL، مما جعله عملياً بالكامل للمؤسسات الإيرانية.
قابلية الترقية إلى التكامل المؤسسي الكامل: تصميم معياري للنظام يتيح إضافة وحدات مالية، والمخزون، والمبيعات، مما أنشأ البنية التحتية لنظام ERP شامل.
🔧
النقاط الفنية البارزة
المعمارية المعيارية والفصل الكامل للطبقات: فصل التطبيقات إلى dynamicform (تعريف النماذج)، form_flow (التنفيذ وسير العمل)، form_review (الموافقة/الرفض)، reports (إعداد التقارير)، و account (إدارة المستخدمين والأدوار)، مما سهّل التطوير والصيانة بشكل كبير.
قطع التبعيات المدمرة من خلال تخزين البيانات الوصفية مباشرةً: تخزين input_type و step_title مباشرةً في InstanceField بدلاً من الإشارة إلى FormInput، مما يضمن بقاء النماذج المنسوخة مستقلة تماماً ومستقرة بعد تغيير أو حذف النموذج الرئيسي.
إدارة سير العمل باستخدام JSONField والمعاملات الذرية: استخدام JSONField لتخزين تاريخ الخطوات (step_history) والمهل الزمنية لكل خطوة (step_deadlines)؛ بالإضافة إلى استخدام transaction.atomic() في العروض (Views) الرئيسية لضمان سلامة البيانات.
نظام المصادقة والوصول الديناميكي على ثلاثة مستويات: تطبيق access_type بخيارات all، specific_role، و specific_user في نموذج الحقل، والدالة is_accessible_by للتحقق من الصلاحيات أثناء التنفيذ؛ بالإضافة إلى دعم أدوار متعددة لكل مستخدم.
تحسين الأداء من خلال التخزين المؤقت الذكي وإدارة الطلبات: استخدام LocMemCache لتخزين مؤقت لعدد المهام لكل مستخدم (timeout=5) وتنفيذ isFetching في جانب العميل لمنع الطلبات المتزامنة وتقليل حمل الخادم.
نظام إشعارات متقدم باستخدام Service Worker: تسجيل sw.js واستخدام Push API لإرسال إشعارات المتصفح حتى عند إغلاق المتصفح؛ بالإضافة إلى إدارة notified_task_ids لمنع الإشعارات المكررة.
سكربتات إدارية لتكامل البيانات: سكربت fix_instance_field_input_type مع خيارات --dry-run و --instance-id لاستعادة البيانات القديمة دون خطر التغييرات غير المرغوب فيها.
دعم التواريخ الشمسية (الجلالية) والمخرجات المتنوعة: استخدام persiantools لتحويل التواريخ إلى جلالية في القوالب والعروض؛ بالإضافة إلى إنشاء مخرجات احترافية (PDF باستخدام reportlab، Excel باستخدام openpyxl و xlsxwriter).
واجهة مستخدم متجاوبة مع الوضع الداكن: تنفيذ أنماط مخصصة لدعم السمة الداكنة ([data-bs-theme="dark"]) في جميع القوالب؛ بالإضافة إلى أزرار لاصقة (Sticky) في أسفل الصفحات لتحسين تجربة المستخدم على الأجهزة المحمولة.
🏗️
الهندسة المعمارية
تم تصميم معماريّة المشروع بناءً على Django بنهج معياري وطبقي. التطبيقات المستقلة بما في ذلك dynamicform (تعريف النماذج القالبية)، form_flow (التنفيذ وسير العمل)، form_review (الموافقة/الرفض)، reports (إعداد التقارير)، و account (إدارة المستخدمين و RBAC) مفصولة بالكامل لتسهيل التطوير والصيانة. يحقق قلب المشروع استقراراً ومرونة عاليين من خلال قطع تبعيات البيانات الوصفية (التخزين المباشر لـ input_type و step_title في النماذج المنسوخة) واستخدام JSONField لإدارة تاريخ الخطوات والمهل الزمنية. بالإضافة إلى ذلك، تم تنفيذ نظام المصادقة والتحكم في الوصول على ثلاثة مستويات (النموذج، الخطوة، والحقل)، وبالاستفادة من التخزين المؤقت (LocMemCache) و Service Worker، يقدم أداءً مثالياً وتجربة مستخدم محسّنة.
📐
نطاق المشروع
يتضمن المشروع 9 تطبيقات منفصلة، وأكثر من 30 نموذجاً، وحوالي 50 عرضاً (View)، وأكثر من 40 قالباً، بإجمالي يزيد عن 10,000 سطر من التعليمات البرمجية (تشمل الواجهة الخلفية، والواجهة الأمامية، والسكربتات الإدارية). هذا النظام، مع دعم 18 نوعاً من الحقول، وإدارة النماذج متعددة الخطوات بمهل زمنية منفصلة، ونظام الموافقة/الرفض على ثلاثة مستويات، والتحكم في الوصول القائم على الأدوار، تم تصميمه للمؤسسات المتوسطة إلى الكبيرة (من 100 إلى 500+ مستخدم متزامن)، ولديه القدرة على الترقية إلى نظام ERP متكامل بوحدات مالية، والمخزون، والمبيعات.