# UPLOAD LIST — Phase 2 (Access control + Leads) ও Phase 3 (KYC + Services)

তারিখ: 2026-08-30

> ✅ সব ফাইল `D:\xamp\htdocs\neo` তে বসানো হয়ে গেছে। নিচের টেবিলে প্রতিটার পাথ দেওয়া আছে —
> লাইভ সার্ভারে ঠিক এই পাথেই আপলোড করবেন।

---

## 1. লাইভ সার্ভারে যে ফাইলগুলো যাবে

### নতুন ফাইল (NEW)

| # | সার্ভারে পাথ | কাজ |
|---|---|---|
| 1 | `/includes/rbac.php` | পারমিশন ইঞ্জিন — কে কোন মডিউল দেখবে, সব এক জায়গায় |
| 2 | `/includes/leads.php` | Lead এর টেবিল, স্ট্যাটাস, হিস্ট্রি, potential-lead কোয়েরি |
| 3 | `/includes/kyc_fields.php` | ফিল্ড-লেভেল KYC ক্যাটালগ + অ্যাডমিনের নিজের প্রশ্ন |
| 4 | `/admin/leads.php` | **Lead Management** পেজ |
| 5 | `/admin/kyc_fields.php` | **KYC Questions** — নিজের প্রশ্ন তৈরির পেজ |
| 6 | `/seller/service_import.php` | **সেলারের Bulk Upload** |
| 7 | `/kyc_extra.php` | মেম্বারের "Extra Information" পেজ (কাস্টম প্রশ্নের উত্তর) |

### পরিবর্তিত ফাইল (MODIFIED — replace করুন)

| # | সার্ভারে পাথ | কী বদলেছে |
|---|---|---|
| 1 | `/tmomigration.php` | **আপডেট হয়েছে — আবার একবার চালাতে হবে** (নতুন টেবিল ও কলাম) |
| 2 | `/admin/includes/sidebar.php` | **পারমিশন অনুযায়ী মেনু** + Lead Management গ্রুপ + KYC Questions লিংক |
| 3 | `/admin/product_management.php` | Customer Data Recruitment এ **ফিল্ড ধরে ধরে KYC**, **State** এরিয়া মোড, নতুন **Edit Product** মডাল |
| 4 | `/admin/roles.php` | পারমিশন লিস্ট এখন `rbac.php` থেকে (নতুন **Manage Leads** সহ) |
| 5 | `/admin/services.php` | Sub-category তৈরি/এডিট/ডিলিট শুধু admin/employee — সার্ভার সাইডে ব্লক |
| 6 | `/admin/activity_log.php` | পারমিশন গার্ড যোগ (আগে কোনো গার্ড ছিল না) |
| 7 | `/admin/messages.php` | পারমিশন গার্ড যোগ |
| 8 | `/admin/payouts.php` | পারমিশন গার্ড যোগ |
| 9 | `/admin/upgrade_requests.php` | পারমিশন গার্ড যোগ |
| 10 | `/admin/website_requests.php` | পারমিশন গার্ড যোগ |
| 11 | `/includes/shares.php` | KYC গেট এখন ফিল্ড লেভেল, এরিয়া গেটে State সাপোর্ট |
| 12 | `/includes/theme.php` | সেলার মেনুতে **Bulk Upload**, ইউজার মেনুতে **Extra Information** |
| 13 | `/category.php` | পপআপে ঠিক **কোন কোন ঘর বাকি** সেটাই দেখাবে, সেকশন অনুযায়ী সাজানো |

---

## 2. ডাটাবেস — `tmomigration.php` আবার চালান

**নতুন টেবিল**

| টেবিল | কাজ |
|---|---|
| `leads` | প্রতিটা লিড — নাম, নম্বর, সোর্স, স্ট্যাটাস, প্রায়োরিটি, কাকে assign করা, পরের follow-up তারিখ |
| `lead_activities` | ওই লিডের প্রতিটা কল / স্ট্যাটাস বদল / হাতবদলের রেকর্ড |
| `kyc_custom_fields` | অ্যাডমিনের নিজের KYC প্রশ্ন |
| `kyc_custom_values` | মেম্বাররা ওই প্রশ্নের যা উত্তর দিয়েছে |

**নতুন কলাম**

| টেবিল | কলাম | কাজ |
|---|---|---|
| `product_areas` | `state` VARCHAR(100) | প্রোডাক্ট কোন কোন রাজ্যে চলবে |
| `product_areas` | `pincode` → NULL allowed | একটা রো হয় পিনকোড, নয় স্টেট রাখে |
| `users` | `created_by`, `created_by_name` | (আগের ধাপেরই, না থাকলে বসে যাবে) |

**roles** — যেসব role এ ইতিমধ্যে *Manage Customers* আছে, তাদের **Manage Leads** ও যোগ হয়ে যাবে (চাইলে Custom Roles থেকে টিক তুলে দিতে পারেন)।

**নিয়ম:** ফাইল আপলোড → `https://wbmcz.online/tmomigration.php` খুলুন → সবুজ দেখলে **ফাইল ডিলিট**।

---

## 3. Phase 2 — কী কী হলো

### ক) পারমিশন অনুযায়ী Admin Sidebar

এখন থেকে **যাকে যা access দেওয়া হবে সে শুধু সেটাই দেখবে**।

- কোনো employee কে যদি শুধু **User Management** দেন, তার sidebar এ শুধু ওটাই থাকবে — Wallet, Service, Order, Settings কিছুই দেখবে না
- গ্রুপের ভিতরের অপশনও আলাদা করে চেক হয় (যেমন *Staff Accounts* আর *Custom Roles* শুধু **Manage Staff & Roles** থাকলেই দেখাবে)
- যে হেডিং এর নিচে কিছু নেই সেটাও লুকিয়ে যায়, তাই মেনু ফাঁকা-ফাঁকা দেখায় না
- মালিকের অ্যাকাউন্ট (যার কোনো role বসানো নেই) আর যে role এ `all` আছে — তারা আগের মতোই সব দেখবে
- URL টাইপ করে ঢোকার রাস্তাও বন্ধ: প্রতিটা পেজে গার্ড আছে, না থাকলে সুন্দর **"You do not have access here"** স্ক্রিন আসে
- আগে **activity_log, messages, payouts, upgrade_requests, website_requests** — এই ৫টা পেজে কোনো গার্ডই ছিল না, এখন আছে

| মডিউল | কোন পারমিশন লাগে |
|---|---|
| Dashboard, Profile | সবার জন্য খোলা |
| User Management | Manage Customers / Manage Staff & Roles |
| **Lead Management** | **Manage Leads** (নতুন) |
| Wallet, Payout, Transactions | Manage Transactions |
| Service Management, Website Requests | Manage Services |
| Order Management | Manage Orders |
| Website Settings, Commission, Refer | Manage Site Settings |
| Helpdesk | Manage Support Tickets |
| Sellers | Manage Sellers |
| Activity Log, Staff, Roles | Manage Staff & Roles |

### খ) Lead Management

**Admin → Lead Management** (৪টা ট্যাব)

**১. Potential Leads** — যারা রেজিস্টার করেছে কিন্তু **সাবস্ক্রিপশনও নেয়নি, কোনো অর্ডারও করেনি**। এটা `users` টেবিল থেকে লাইভ পড়া হয়, তাই কোনো ইম্পোর্ট লাগে না — সবসময় আপ-টু-ডেট। প্রতিটা রো তে নাম, কোড, মোবাইল, ইমেল, লোকেশন, কবে রেজিস্টার করেছে, কে রেফার/অ্যাড করেছে — সব দেখাবে। পাশে সরাসরি **Call / WhatsApp** বাটন।

**২. Active Leads** — যেগুলো নিয়ে এখন কাজ চলছে (New / Contacted / Interested / Follow-up)

**৩. All Leads** — সব

**৪. Closed** — Converted + Not interested

**যা যা করা যাবে**

- **Add Lead** — নাম, ২টা মোবাইল, ইমেল, সোর্স (Walk-in / কল / WhatsApp / Facebook / Referral / Camp…), কী নিয়ে আগ্রহ, রাজ্য-জেলা-পিন-ঠিকানা, প্রায়োরিটি, স্ট্যাটাস, কাকে assign, পরের follow-up তারিখ, নোট
  - নম্বরটা যদি আগে থেকে সাইটে রেজিস্টার করা থাকে, লিডটা ওই অ্যাকাউন্টের সাথে **আপনা থেকে জুড়ে যায়**
- **Assign** — যেকোনো staff কে দেওয়া যায়, সে **নোটিফিকেশন** পায় আর লিডটা তার লিস্টে চলে যায়। Potential Leads থেকে একসাথে টিক দিয়ে **bulk assign** ও করা যায়
- **Follow up** — স্ট্যাটাস + "কী হলো" + "আবার কবে ফোন করব" — এক পপআপে। অ্যাডমিন নিজেও follow-up নিয়ে স্ট্যাটাস আপডেট করতে পারবে
- **Details** — পুরো ডিটেইলস + নিচে **পুরো হিস্ট্রি টাইমলাইন** (কে কখন কী করেছে)
- **ফিল্টার** — সার্চ, স্ট্যাটাস, সোর্স, owner (আমার / unassigned / নির্দিষ্ট staff), follow-up (আজ due / overdue / ৭ দিন), তারিখ range, **Export CSV**
- উপরে ৬টা স্ট্যাট কার্ড: Potential members · Open leads · Follow-up due · Converted · Not interested · আজকে যোগ হয়েছে
- সাইডবারে **লাল ব্যাজ** — কত follow-up আজ due

**Employee দেখলে কী হয়:** যাকে `Manage Leads` দেওয়া আছে সে **তার নিজের assign করা লিড** আর **যেগুলো এখনো কারো নামে নেই** সেগুলো দেখে। মালিকের অ্যাকাউন্ট সবারটা দেখে।

> Potential lead এ যেই মুহূর্তে assign করবেন বা একটা follow-up সেভ করবেন, সেটা আপনা থেকেই একটা লিড হয়ে যায় — আলাদা করে কিছু বানাতে হয় না।

---

## 4. Phase 3 — কী কী হলো

### ক) সার্ভিস অনুযায়ী KYC পপআপ — এখন ঘর ধরে ধরে

আগে টিক করা যেত শুধু ৪টা বড় সেকশন (Personal / Address / Bank / Business)। এখন **প্রতিটা ঘর আলাদা করে** টিক করা যায়:

- **Address Details** খুললে ভিতরে — Village, Post office, Block/City, Landmark, District, State, Pin code, Address proof — যেটা দরকার শুধু সেটাই চাইতে পারবেন
- একইভাবে Personal এর ভিতরে Aadhaar number, PAN, ছবি ইত্যাদি; Bank এর ভিতরে IFSC, account number…
- প্রতিটা সেকশনে **All / none** বাটন, আর "কতটার মধ্যে কটা টিক" কাউন্টার
- পুরনো সেটিংস নষ্ট হবে না — আগে যেখানে `address` লেখা ছিল সেটা আপনা থেকেই ওই সেকশনের সব ঘরে ছড়িয়ে যায়

**পপআপে কী দেখাবে:** কাস্টমার যেগুলো **ইতিমধ্যে পূরণ করে ফেলেছে সেগুলো বাদ দিয়ে**, শুধু বাকিগুলো — সেকশন অনুযায়ী সাজানো। নিচে ছোট করে লেখা থাকে "আপনার ইতিমধ্যে পূরণ করা X টা আর চাওয়া হচ্ছে না"।

### খ) নিজের কাস্টম প্রশ্ন

**Admin → Service Management → KYC Questions**

- যেকোনো প্রশ্ন বানানো যায় — লেখা, লম্বা লেখা, নম্বর, তারিখ, ইমেল, **লিস্ট থেকে বাছাই**, **ফাইল/ছবি আপলোড**
- বাংলা লেবেল আলাদা দেওয়া যায়, গ্রুপ হেডিং দেওয়া যায়, helper লাইন দেওয়া যায়
- কার্ডে দেখায় কতজন উত্তর দিয়েছে আর কোন কোন প্রোডাক্ট এটা চায়
- বানানোর পর Product Management এর ওই লিস্টেই টিক করার জন্য চলে আসে
- মেম্বার উত্তর দেয় **Profile → Extra Information** (`kyc_extra.php`) পেজে, আর পপআপে বেগুনি বাটন **"Fill the extra information"** সরাসরি ওখানে নিয়ে যায়

### গ) Admin এর কাছেও Edit / Delete

Product Management এর Update কলামে নতুন **Edit Product** বাটন (সেলারের My Services এ যেমন) — নাম, বিবরণ, ক্যাটাগরি, সাব-ক্যাটাগরি, দাম, ওয়েবসাইট/অ্যাপ/টিউটোরিয়াল লিংক, আইকন বা ছবি আপলোড, রং, স্ট্যাটাস — সব বদলানো যায়। মডালের নিচে বাঁদিকে **Delete**। পুরনো Update বাটনটার নাম এখন **Price & Share** (ওটা শেয়ার/দামের জন্য)। প্রতিটা বদল Update History তে লেখা হয়।

### ঘ) Available Area তে State

Customer Data Recruitment → Available Area এ এখন **৪টা মোড**: All India · Single pincode · Bulk pincode · **By State**

- By State বাছলে ৩৬টা রাজ্য/কেন্দ্রশাসিত অঞ্চলের লিস্ট, সার্চ বক্স, Select all / Clear
- কাস্টমারের রাজ্য প্রোফাইল থেকে নেওয়া হয়, না থাকলে KYC ঠিকানার রাজ্য থেকে
- "Not available in your area" মেসেজে এখন পিনকোড না থাকলে রাজ্যের নাম দেখায়

### ঙ) সেলারের Bulk Upload

**Seller → My Service → Bulk Upload** (`seller/service_import.php`)

অ্যাডমিনেরটার মতোই ৩ ধাপ (ফাইল → প্রিভিউ → আপলোড), তবে দুটো নিয়ম আলাদা:

- সেলার শুধু **তাকে assign করা এবং seller-add খোলা আছে** এমন ক্যাটাগরিতেই আপলোড করতে পারবে (Government Portals অ্যাডমিনের, তাই ওখানে পারবে না)
- সব রো **Pending** হয়ে ঢোকে, অ্যাডমিন approve করলে তবেই লাইভ
- এক ফাইলে সর্বোচ্চ ৫০০ রো, Sample CSV বাটন আছে

### চ) Sub-category শুধু admin/employee

- সেলারের কোথাও sub-category বানানোর অপশন নেই — সে শুধু লিস্ট থেকে বেছে **প্রোডাক্ট লোড** করে
- `admin/services.php` এ এখন সার্ভার-সাইড গার্ড: admin না হলে, বা `Manage Services` না থাকলে add/edit/delete কোনোটাই চলবে না
- সেলার আর অ্যাডমিন দুই জায়গাতেই ছোট করে লেখা আছে "Sub categories are created by the admin"

---

## 5. টেস্ট চেকলিস্ট

1. ফাইল আপলোড → `tmomigration.php` চালান → সবুজ → ডিলিট
2. **Custom Roles** এ একটা role বানান শুধু *Manage Customers* টিক দিয়ে → ওই role এর staff দিয়ে লগইন → sidebar এ শুধু User Management (+ Leads) আছে কিনা
3. ওই staff দিয়ে `admin/settings.php` URL টাইপ করে ঢুকতে চান → "You do not have access here" আসছে কিনা
4. **Lead Management → Potential Leads** — লিস্ট আসছে কিনা → একজনকে **Assign** করুন → Active Leads এ চলে গেছে কিনা, staff নোটিফিকেশন পেয়েছে কিনা
5. **Add Lead** দিয়ে একটা ম্যানুয়াল লিড ঢোকান → Follow up করে স্ট্যাটাস বদলান → **Details** এ টাইমলাইনে সব দেখাচ্ছে কিনা
6. **Product Management → Customer Data** → Address Details খুলে শুধু **Pin code** টিক করুন → Save
7. যে কাস্টমারের পিনকোড দেওয়া আছে তাকে দিয়ে ওই সার্ভিস কিনতে যান → পপআপে শুধু বাকি ঘরগুলোই আসছে কিনা
8. **KYC Questions** এ একটা প্রশ্ন বানান → ওই প্রোডাক্টে টিক করুন → কাস্টমার সাইডে পপআপে বেগুনি বাটন আসছে কিনা → **Extra Information** পেজে উত্তর দিয়ে দেখুন আনলক হয় কিনা
9. **Available Area → By State** → West Bengal টিক → অন্য রাজ্যের কাস্টমার "Not available in your area" পাচ্ছে কিনা
10. **Edit Product** দিয়ে নাম/লিংক বদলে দেখুন, Update History তে উঠছে কিনা
11. Seller লগইন → **My Service → Bulk Upload** → Sample CSV দিয়ে ২ লাইন আপলোড → Pending হয়ে ঢুকছে কিনা → Admin → Pending Services এ approve

---

## 6. মনে রাখার মতো

- `includes/rbac.php` এখন **একমাত্র জায়গা** যেখানে মডিউলের লিস্ট আছে — নতুন মডিউল যোগ করলে ওখানেই যোগ করবেন, sidebar আর Custom Roles দুটোই আপনা থেকে ধরে নেবে
- `required_kyc` কলামটা ২৫৫ ক্যারেক্টার — একটা সেকশনের সব ঘর টিক করলে কোড নিজেই সেটাকে ছোট করে (`address`) লিখে রাখে, তাই জায়গা কম পড়ে না
- Potential Leads পুরোপুরি লাইভ কোয়েরি — কেউ সাবস্ক্রাইব বা কেনাকাটা করলেই লিস্ট থেকে আপনা থেকে সরে যায়
- `uploads/kyc_extra/` ফোল্ডারটা কোড নিজে বানিয়ে নেবে (কাস্টম প্রশ্নের ফাইল আপলোডের জন্য); না পারলে হাতে বানিয়ে 777 দিন
