# Approval Workflows — ব্যবহারকারী গাইড

এই গাইড অ্যাডমিনদের জন্য যারা **কোন কাজের জন্য কে approve করবে** সেই **workflow** বানান/এডিট করেন।

সম্পর্কিত: [Approval Settings](./APPROVAL_SETTINGS_USER_GUIDE_BN.md) · [Approval Requests](./APPROVAL_REQUEST_USER_GUIDE_BN.md) · [Attendance](../attendance/ATTENDANCE_USER_GUIDE_BN.md) · [Payroll](../payroll/PAYROLL_USER_GUIDE_BN.md)

শর্টকাট:

> **Workflow তৈরি (Module + Action + Steps + Approver) → Settings-এ Enable + Workflow বেঁধে দিন → ইউজার কাজ করলে Request খোলে → Approver Inbox/মডিউল পেজে সিদ্ধান্ত।**

---

## ১. এটা কী?

**Approval Workflow** = একটা **টেমপ্লেট**: কোন মডিউলের কোন অ্যাকশনে, কত ধাপে, কারা approve করবে।

- Workflow **শুধু সংজ্ঞা** — চালু করতে হলে [Settings](./APPROVAL_SETTINGS_USER_GUIDE_BN.md)-এ Enable করতে হয়।  
- Step এডিট করলে নতুন **version** হয়; চলমান পুরনো request পুরনো version ধরে চলে।

```text
Admin: Workflow create/edit
        └── Settings: approval_enabled = ON + এই workflow বেঁধে দিন
                └── Runtime: Approval Request (+ Inbox)
```

---

## ২. UI ম্যাপ ও লোকেশন

পথ: **সাইডবার → Admin / Platform → Approval Workflows**  
URL: `/admin/approval-workflows`  
পেজ দেখতে: সাধারণত `platform.view`।

| জায়গা | কী |
|--------|-----|
| স্ক্রিন **বাম** | Sidebar → Admin মেনু → Approval Workflows |
| পেজ **উপরের ডান** | **Create** / New (+ আইকন) — `platform.create` |
| **উপরের ডান** (অন্য লিংক থাকলে) | Settings-এ যাওয়ার শর্টকাট |
| **মধ্যে** টেবিল | Name · Module/Action · Steps count · Status |
| সারির **ডান** অ্যাকশন | Edit (পেন্সিল) · Delete (ট্র্যাশ) — `platform.update` |
| Create/Edit | **ডানদিকে Drawer** খোলে (`?mode=create` বা `?mode=edit&workflow=…`) |

### Drawer লেআউট (Create / Edit)

| জায়গা | কী |
|--------|-----|
| Drawer **উপর** | শিরোনাম Create/Edit workflow |
| ফর্ম উপরের অংশ | Name · Enabled · Status |
| Create মোডে | **Module** ড্রপডাউন → তারপর **Module action** (approval-যোগ্য আগে দেখায়) |
| Edit মোডে | Module/Action **লক** (শুধু পড়া যায়) |
| নিচে | **Steps** বিল্ডার — Step 1, 2… যোগ/সরান |
| প্রতি স্টেপ | Name · mode (parallel/sequential) · completion (any/all) · **resolver** (specific user / role / …) · timeout |
| Drawer **নিচ/ফুটার** | Cancel · Save |

---

## ৩. ধাপে ধাপে — নতুন Workflow

1. `/admin/approval-workflows` খুলুন।  
2. **উপরের ডান → Create**।  
3. **Name** দিন (যেমন “Payroll Run Approve”).  
4. **Module** বাছুন (Attendance / Payroll / Employee…)।  
5. **Action** বাছুন (যেমন `run-approve`, `leave-approve`) — যেগুলো manifest-এ approval-যোগ্য সেগুলো আগে।  
6. **Steps** যোগ করুন:
   - এক ধাপ হলে: Step 1 → resolver = Role বা Specific user।  
   - একাধিক: Step 1 HR → Step 2 Finance (sequential)।  
7. Mode: **parallel** = এক স্টেপে অনেকে; **completion any** = একজন হলেই যথেষ্ট, **all** = সবাই।  
8. Save।  
9. পরের ধাপ: [Settings গাইড](./APPROVAL_SETTINGS_USER_GUIDE_BN.md) — সেই action-এর সারি → Workflow সিলেক্ট → Approval চেকবক্স ON।

---

## ৪. Approver কীভাবে বেছে নেওয়া হয় (Resolver)

| Resolver | মানে | কনফিগ |
|----------|------|--------|
| **specific_user** | নির্দিষ্ট ইউজার | User ড্রপডাউন |
| **role** | ওই কোম্পানির রোলের সব ইউজার | Role ড্রপডাউন |
| **reporting_manager** | কর্মীর রিপোর্টিং ম্যানেজার (সাপোর্ট থাকলে) | — |
| **department_head** | ডিপার্টমেন্ট হেড (সাপোর্ট থাকলে) | — |
| **custom** | কাস্টম কী | কনফিগ ফিল্ড |

Request খোলার সময় resolver চালিয়ে `approval_request_approvers` ভরে — **তখনকার** ইউজার লিস্ট। পরে রোল বদলালে পুরনো request অটো বদলায় না।

---

## ৫. কোন approval-এ কোন permission (টেবিল)

### A) Workflow অ্যাডমিন পেজ

| কাজ | Permission |
|-----|------------|
| পেজ দেখা | `platform.view` |
| Workflow তৈরি | `platform.create` |
| এডিট / স্টেপ আপডেট | `platform.update` |
| ডিলিট | `platform.update` (UI অনুযায়ী) |

### B) ব্যবসায়িক অ্যাকশন — কে approve করতে পারবে (মডিউল পারমিশন)

Approver-কে সাধারণত **দুটো** লাগে: (১) নিচের approve পারমিশন, (২) workflow step-এ resolve হয়ে Inbox/পেজে নাম থাকা।

| মডিউল | Action slug | Permission key | কী approve হয় | মডিউল UI | Platform Inbox |
|--------|-------------|----------------|----------------|----------|----------------|
| Attendance | `leave-approve` | `attendance.leave-approve` | Leave request | Leave Approvals | হ্যাঁ (Settings ON) |
| Attendance | `correction-approve` | `attendance.correction-approve` | Correction | Correction Approvals | হ্যাঁ |
| Attendance | `monthly-approve` | `attendance.monthly-approve` | Monthly attendance | Monthly Approval | হ্যাঁ (সেটিং অনুযায়ী) |
| Attendance | `correction-override-lock` | `attendance.correction-override-lock` | লক মাসে correction | ডিটেইল কনফার্ম | — |
| Payroll | `run-approve` | `payroll.run-approve` | Payroll run | Run → Approval Decision | হ্যাঁ |
| Payroll | `advance-approve` | `payroll.advance-approve` | Salary advance | Advances ডিটেইল | হ্যাঁ |
| Employee | `create` | `employee.create` | নতুন কর্মী (gateway দিলে) | Employee | হ্যাঁ |
| Employee | `update` | `employee.update` | কর্মী আপডেট | Employee | হ্যাঁ |
| Employee | `delete` | `employee.delete` | কর্মী ডিলিট | Employee | হ্যাঁ |

> Manifest `requires_approval` = ডিফল্ট ইঙ্গিত। **রানটাইম** চালু/বন্ধ = Settings-এর Approval চেকবক্স।

লকড মাস correction-এ অতিরিক্ত: `attendance.correction-override-lock`।  
Monthly unlock: `attendance.monthly-unlock` (আলাদা — workflow নয়)।

---

## ৬. ভালো প্র্যাকটিস

- প্রতি **approvable action**-এর জন্য আলাদা workflow নাম রাখুন।  
- Role resolver ব্যবহার করলে রোলে সঠিক approve পারমিশন দিন।  
- Settings Enable-এর আগে workflow Save করুন।  
- প্রোডে step বদলালে version বাড়ে — চলমান request পুরনো নিয়মেই চলবে।

---

## ৭. FAQ

**প্রশ্ন: Create বাটন নেই।**  
→ `platform.create` নেই।

**প্রশ্ন: Action লিস্ট খালি / ভুল।**  
→ আগে Module সিলেক্ট করুন; মডিউল sync আছে কিনা।

**প্রশ্ন: Workflow আছে কিন্তু approve চাইছে না।**  
→ Settings-এ সেই action Enable + এই workflow বাঁধা আছে কিনা।

**প্রশ্ন: Role দিয়ে বানিয়েছি কিন্তু X ইউজার দেখে না।**  
→ X-এর `user_roles`-এ সেই role? Approve পারমিশন আছে? Request open হওয়ার পর যোগ হলে পুরনো request-এ নাম নাও থাকতে পারে।

**প্রশ্ন: Edit করে Module বদলাতে পারি না।**  
→ ডিজাইন — module/action ফিক্সড। নতুন workflow বানান।

**প্রশ্ন: Delete করলে কী হয়?**  
→ Settings লিংক ভাঙতে পারে; আগে Settings OFF করুন বা অন্য workflow বাঁধুন।

---

## ৮. এক লাইন

> **Workflow = কে approve করবের টেমপ্লেট · Settings = কখন লাগবে · Request = চলমান কেস।**
