Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

حالات سير العمل

كل مهمة في OpenPR لها حالة تمثل موضعها في سير العمل. أعمدة لوحة الكانبان تخرط مباشرة مع هذه الحالات.

يأتي OpenPR مع أربع حالات افتراضية، لكنه يدعم حالات سير عمل مخصصة بالكامل من خلال نظام دقة ثلاثي المستويات. يمكنك تعريف سير عمل مختلفة لكل مشروع أو مساحة عمل أو الاعتماد على الحالات الافتراضية للنظام.

الحالات الافتراضية

mermaid
graph LR
    BL["Backlog"] --> TD["To Do"]
    TD --> IP["In Progress"]
    IP --> DN["Done"]

    IP -.->|"blocked"| TD
    DN -.->|"reopened"| IP
    BL -.->|"prioritized"| IP
الحالةالقيمةالوصف
Backlogbacklogالأفكار والعمل المستقبلي والعناصر غير المخططة. لم تُجدوَل بعد.
To Dotodoمخطط ومُرتَّب حسب الأولوية. جاهز للاستلام.
In Progressin_progressيُعمَل عليه بفاعلية من قِبل مُكلَّف.
Donedoneمكتمل ومُتحقق منه.

هذه هي الحالات المدمجة التي تبدأ بها كل مساحة عمل جديدة. يمكنك تخصيصها أو إضافة حالات إضافية كما هو موضح في سير العمل المخصص أدناه.

انتقالات الحالات

يتيح OpenPR انتقالات حالات مرنة. لا توجد قيود مفروضة -- يمكن لأي حالة الانتقال إلى أي حالة أخرى. الأنماط الشائعة تشمل:

الانتقالالمحفزمثال
Backlog -> To Doتخطيط السبرينت، تحديد الأولويةمهمة مُسحَبة إلى السبرينت القادم
To Do -> In Progressيبدأ المطور العملالمُكلَّف يبدأ التنفيذ
In Progress -> Doneاكتمال العملدُمِج طلب السحب
In Progress -> To Doعمل محظور أو موقوفانتظار اعتماد خارجي
Done -> In Progressإعادة فتح المهمةاكتشاف تراجع في خطأ
Backlog -> In Progressإصلاح عاجلمشكلة إنتاج حرجة

سير العمل المخصص

يدعم OpenPR حالات سير العمل المخصصة من خلال نظام دقة ثلاثي المستويات. عند تحقق API من حالة لعنصر عمل، يحل سير العمل الفعّال بفحص ثلاثة مستويات بالترتيب:

Project workflow  >  Workspace workflow  >  System defaults

إذا عرّف مشروع سير عمل خاص به، فإنه يأخذ الأولوية. وإلا يُستخدم سير العمل على مستوى مساحة العمل. إذا لم يكن أي منهما موجوداً، تُطبَّق الحالات الافتراضية الأربع للنظام.

مخطط قاعدة البيانات

تُخزَّن سير العمل المخصصة في جدولين (مُقدَّمان في الترحيل 0024_workflow_config.sql):

  • workflows -- يعرّف سير عمل مُسمى مرتبطاً بمشروع أو مساحة عمل.
  • workflow_states -- الحالات الفردية داخل سير العمل.

كل حالة لها الخصائص التالية:

الحقلالنوعالوصف
keystringمعرف مقروء بالآلة (مثل in_review)
display_namestringاسم مقروء للإنسان (مثل "In Review")
categorystringفئة التجميع للحالة
positionintegerترتيب العرض على لوحة الكانبان
colorstringرمز لون hex لشارة الحالة
is_initialbooleanما إذا كانت هذه الحالة الافتراضية للمهام الجديدة
is_terminalbooleanما إذا كانت هذه الحالة تمثل الإكمال

إنشاء سير عمل مخصص عبر API

الخطوة الأولى -- إنشاء سير عمل لمشروع:

bash
curl -X POST http://localhost:8080/api/workflows \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "name": "Engineering Flow",
    "project_id": "<project_uuid>"
  }'

الخطوة الثانية -- إضافة حالات لسير العمل:

bash
curl -X POST http://localhost:8080/api/workflows/<workflow_id>/states \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "key": "in_review",
    "display_name": "In Review",
    "category": "active",
    "position": 3,
    "color": "#f59e0b",
    "is_initial": false,
    "is_terminal": false
  }'

مثال: سير عمل هندسي بـ 6 حالات

mermaid
graph LR
    BL["Backlog"] --> TD["To Do"]
    TD --> IP["In Progress"]
    IP --> IR["In Review"]
    IR --> QA["QA"]
    QA --> DN["Done"]

    IR -.->|"changes requested"| IP
    QA -.->|"failed"| IP
الحالةالمفتاحالفئةأوليةنهائية
Backlogbacklogbacklogنعملا
To Dotodoplannedلالا
In Progressin_progressactiveلالا
In Reviewin_reviewactiveلالا
QAqaactiveلالا
Donedonecompletedلانعم

التحقق الديناميكي

عند تحديث حالة عنصر عمل، يتحقق API من الحالة الجديدة مقابل سير العمل الفعّال لذلك المشروع. إذا ضبطت مفتاح حالة غير موجود في سير العمل المحلول، يُعيد API خطأ 422 Unprocessable Entity. الحالات ليست مُرمَّزة بشكل صلب -- تُبحث ديناميكياً في وقت الطلب.

لوحة الكانبان

يعرض عرض اللوحة المهام كبطاقات في أعمدة مقابلة لحالات سير العمل. اسحب وأسقط بطاقة بين الأعمدة لتغيير حالتها. عند تفعيل سير العمل المخصص، تعكس اللوحة تلقائياً الحالات المخصصة وترتيبها المُعيَّن.

كل بطاقة تُظهر:

  • معرف المهمة (مثل API-42)
  • العنوان
  • مؤشر الأولوية
  • صورة المُكلَّف الرمزية
  • شارات الوسوم

تحديث الحالة عبر API

bash
# Move issue to "in_progress"
curl -X PATCH http://localhost:8080/api/issues/<issue_id> \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"state": "in_progress"}'

تحديث الحالة عبر MCP

json
{
  "method": "tools/call",
  "params": {
    "name": "work_items.update",
    "arguments": {
      "work_item_id": "<issue_uuid>",
      "state": "in_progress"
    }
  }
}

مستويات الأولوية

بالإضافة إلى الحالات، يمكن لكل مهمة أن يكون لها مستوى أولوية:

الأولويةالقيمةالوصف
منخفضةlowجيد أن يتوفر، بدون ضغط وقت
متوسطةmediumأولوية قياسية، عمل مخطط
عاليةhighمهم، يجب معالجته قريباً
عاجلةurgentحرجة، تحتاج اهتماماً فورياً

تتبع النشاط

كل تغيير في الحالة يُسجَّل في خلاصة نشاط المهمة مع الفاعل والطابع الزمني والقيم القديمة/الجديدة. هذا يوفر سجل تدقيق كاملاً.

الخطوات التالية

Released under the Apache-2.0 License.