# UPLOAD LIST — Govt Portal Bulk Import + Admin theke User Add + Referral commission Main Wallet এ

তারিখ: 2026-08-24

---

## 1. লাইভ সার্ভারে যে ফাইলগুলো আপলোড করতে হবে

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

| # | সার্ভারে পাথ | কাজ |
|---|---|---|
| 1 | `/admin/service_import.php` | **Bulk Import** পেজ — CSV দিয়ে একসাথে অনেক Govt Portal / সার্ভিস অ্যাড |

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

| # | সার্ভারে পাথ | কী বদলেছে |
|---|---|---|
| 1 | `/admin/includes/sidebar.php` | Service Management এর নিচে নতুন **Bulk Import (CSV)** অপশন |
| 2 | `/admin/user_list.php` | **Add New User** বাটন + ফুল ফর্ম মডাল, `create_user` হ্যান্ডলার, **Created By** কলামে "কে অ্যাড করেছে" দেখা, CSV export এ **Added By** কলাম |
| 3 | `/includes/shares.php` | রেফার করা ইউজার সার্ভিস কিনলে কমিশন এখন **Main Wallet** এ (আগে virtual/bonus wallet এ যেত) + referrer কে নোটিফিকেশন |
| 4 | `/refer.php` | তিন ভাষাতেই লেখা আপডেট — sale commission মেইন ওয়ালেটে, subscription commission ভার্চুয়াল ওয়ালেটে |
| 5 | `/my_commission.php` | বাটন "Open Virtual Wallet" → **Open My Wallet** |
| 6 | `/testsmigration.php` | **আপডেট হয়েছে — আবার একবার চালাতে হবে** (নতুন কলাম যোগ করে) |

---

## 2. ডাটাবেস পরিবর্তন — `testsmigration.php` চালান

`users` টেবিলে নতুন কলাম (ID কার্ডের কলামগুলোর সাথে):

| কলাম | টাইপ | কাজ |
|---|---|---|
| `created_by` | INT NULL | কোন অ্যাডমিন/স্টাফ অ্যাকাউন্টটা খুলেছে (NULL = নিজে রেজিস্টার করেছে) |
| `created_by_name` | VARCHAR(120) NULL | সেই অ্যাডমিনের নাম (snapshot — পরে নাম বদলালেও রেকর্ড থাকবে) |
| `created_via` | VARCHAR(20) DEFAULT 'self' | `self` / `admin` / `import` |

নতুন ইনডেক্স: `idx_users_createdby` (`created_by`)

পুরনো সব অ্যাকাউন্টে `created_via = 'self'` বসিয়ে দেওয়া হয়।

**চালানোর নিয়ম**

1. উপরের ফাইলগুলো আপলোড করুন
2. ব্রাউজারে খুলুন: `https://wbmcz.online/testsmigration.php`
3. সবুজ "completed successfully" দেখলে **ফাইলটা সার্ভার থেকে ডিলিট করে দিন**

> মাইগ্রেশন না চালালেও `user_list.php` নিজেই কলামগুলো তৈরি করে নেবে (ওখানে auto-DDL আছে), তবু মাইগ্রেশন চালানোই ভালো — ইনডেক্স আর ব্যাকফিল তখনই হয়।

---

## 3. ফিচার ১ — Govt Portal Bulk Import

**কোথায়:** Admin → Service Management → **Bulk Import (CSV)** → `admin/service_import.php`

**কীভাবে কাজ করে (৩ ধাপ)**

1. **ফাইল বাছুন** — Category সিলেক্ট করুন (ডিফল্ট Government Portals), চাইলে একটা default Sub-category, তারপর `.csv` ফাইল
2. **প্রিভিউ** — প্রতিটা রো চেক হয়ে দেখাবে: <span>**Ready**</span> / **Duplicate** / **Error**। এখনো কিছুই সেভ হয়নি
3. **Import now** — শুধু Ready রো গুলো অ্যাড হবে। Duplicate চাইলে চেকবক্স টিক দিয়ে জোর করে অ্যাড করা যাবে। Error রো **কখনোই** অ্যাড হয় না

**Sample CSV** — পেজের উপরে ডান দিকে **Sample CSV** বাটন (`?template=1`) থেকে রেডিমেড ফাইল নামিয়ে তাতেই ডেটা বসান।

**CSV এর কলাম**

| কলাম | লাগবেই? | কাজ |
|---|---|---|
| `title` | **হ্যাঁ** | পোর্টালের নাম |
| `description` | না | সংক্ষিপ্ত বিবরণ |
| `web_url` | না | পোর্টাল লিংক (`https://` না থাকলে নিজে বসিয়ে নেয়) |
| `app_url`, `tutorial_url` | না | অ্যাপ লিংক, ইউটিউব টিউটোরিয়াল |
| `icon_class` | না | `fa-id-card` জাতীয় Font Awesome ক্লাস, অথবা ফুল ইমেজ URL (তখন `is_img=1` হয়) |
| `color_class` | না | `color-1` … `color-8` (ডিফল্ট color-1) |
| `price`, `discount_price` | না | Government Portals এ **সবসময় 0** করে দেওয়া হয় |
| `sub_category` | না | সাব-ক্যাটাগরির নাম বা id — না মিললে পেজের ডিফল্ট |
| `status` | না | 1 = Live, 0 = Hidden (ডিফল্ট 1) |
| `seller_share_pct`, `referral_share_pct`, `staff_share_pct`, `subscription_discount_pct` | না | শেয়ার পার্সেন্ট — বাকিটা company share হয়ে যায় |

হেডারের নাম একটু আলাদা হলেও চলবে — `Portal Name`, `URL`, `Icon`, `Colour`, `Sub Category` এগুলোও চেনে।

**নিয়ম**

- ইমপোর্ট করা রো গুলোর মালিক হয় **যে অ্যাডমিন আপলোড করছে**, আর `status = 1` (সরাসরি Live)
- একই ক্যাটাগরিতে একই নামের পোর্টাল আগে থেকে থাকলে **Duplicate** হিসেবে মার্ক হয়ে স্কিপ হয়
- এক ফাইলে সর্বোচ্চ **2000 রো**
- Excel থেকে করলে **"CSV UTF-8 (Comma delimited)"** ফরম্যাটে সেভ করবেন

---

## 4. ফিচার ২ — Admin থেকে User Add

**কোথায়:** Admin → User Management → User List → উপরে ডান দিকে **Add New User** বাটন

**ফর্মে যা যা আছে**

- **Basic** — নাম*, Gender, Mobile* (লগইন নম্বর), Email, Call number, WhatsApp number
- **Login Password** — Password* + Confirm* (Show password টগল, "Suggest a strong one" বাটনে র‍্যান্ডম পাসওয়ার্ড)
- **Account** — User Type (Customer / Seller / Staff), Status, Subscription
  - Seller বাছলে → **Business Name** ফিল্ড আসে, `sellers` টেবিলে রোও তৈরি হয়
  - Staff বাছলে → **Staff Role** ড্রপডাউন (roles টেবিল থেকে)
- **Referred By** (ঐচ্ছিক) — `WBMCZ0004` বা ইউজার আইডি; ভুল কোড দিলে সেভ হবে না, এরর দেখাবে
- **Address** — Village, Post Office, Block/City, Landmark, District, State, Pin Code

**Assign by / কে অ্যাড করেছে**

- ফর্মের উপরেই দেখায়: **Assigned by: [আপনার নাম] (WBMCZxxxx) · তারিখ ও সময়**
- সেভ হওয়ার সময় `created_by`, `created_by_name`, `created_via='admin'` বসে যায়
- User List এর **Created By** কলামে দেখাবে —
  - অ্যাডমিন অ্যাড করলে: অ্যাডমিনের কোড + নাম + নীল ব্যাজ **"Assigned by admin"** (রেফারার থাকলে নিচে ছোট করে `Ref: WBMCZxxxx`)
  - নিজে রেজিস্টার করলে: রেফারারের নাম + সবুজ ব্যাজ **"Referral"**
  - কিছু না থাকলে: *Direct / Self*
- মোবাইল ভিউয়ের কার্ডেও "Added by …" লাইনটা আসে
- **Export CSV** এ নতুন **Added By** কলাম
- Update History তে **"Account Created"** এন্ট্রি লেখা হয়, আর নতুন ইউজার একটা Welcome নোটিফিকেশন পায়

**চেক হয় যা যা:** নাম ফাঁকা নয়, মোবাইল কমপক্ষে ১০ ডিজিট ও আগে থেকে রেজিস্টার করা নেই, পাসওয়ার্ড ৬+ ও দুটো মিলছে, ইমেইল ফরম্যাট ঠিক, রেফারেল কোড আসল।

---

## 5. ফিচার ৩ — Referral commission Main Wallet এ

**আগে কী হতো:** রেফার করা ইউজার সার্ভিস কিনলে referrer এর কমিশন **Virtual (bonus) wallet** এ যেত — শুধু কেনাকাটায় খরচ করা যেত, ব্যাংকে তোলা যেত না।

**এখন:** ওই কমিশন সরাসরি **Main Wallet** (`users.wallet_balance`) এ যায় — অর্থাৎ **withdraw করা যাবে**।

- কোড: `includes/shares.php` → `shares_distribute()` → referral share এর `wallet_credit(...)` এ `WALLET_VIRTUAL` → **`WALLET_MAIN`**
- ক্যাটাগরি আগের মতোই `ref_sale`, তাই **Earning Report** এ "Referral on sale" আলাদা করেই দেখাবে
- `product_share_ledger` এ `share_type='referral', paid=1` রো আগের মতোই বসে — **My Commission** পেজ অপরিবর্তিত
- নতুন: টাকা ঢুকলেই referrer একটা **নোটিফিকেশন** পায় — "₹xxx has been added to your main wallet — [নাম] purchased [সার্ভিস]"

**যা বদলায়নি (ইচ্ছে করে):**

- **Subscription** এর Level 1 / 2 / 3 কমিশন আগের মতোই **Virtual wallet** এ যায় (`includes/functions.php` → `distributeReferralCommission()`)
- সেলারের নিজের শেয়ার আগের মতোই অর্ডার **Completed** হলে Main wallet এ ছাড়ে
- পুরনো যেসব কমিশন ইতিমধ্যে virtual wallet এ জমা আছে সেগুলো ওখানেই থাকবে — চাইলে পরে ট্রান্সফার করে দেওয়া যাবে, বললেই করে দেবো

---

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

1. `testsmigration.php` চালান → সব সবুজ → ফাইল ডিলিট
2. Admin → Service Management → **Bulk Import (CSV)** → Sample CSV নামান → ২-৩ লাইন লিখে আপলোড → প্রিভিউ ঠিক আসছে কিনা → Import → `category.php?cat_id=1` এ পোর্টাল দেখা যাচ্ছে কিনা
3. একই ফাইল আবার আপলোড করুন → সব রো **Duplicate** দেখাচ্ছে কিনা
4. User List → **Add New User** → একটা customer বানান → লিস্টে **Created By** তে আপনার নাম + "Assigned by admin" ব্যাজ
5. ওই নতুন ইউজারের মোবাইল + পাসওয়ার্ড দিয়ে সাইটে লগইন হচ্ছে কিনা
6. Seller টাইপ দিয়ে একটা বানান → `sellers` টেবিলে রো তৈরি হয়েছে কিনা
7. একটা ইউজারের রেফারেল লিংক দিয়ে আরেকজনকে রেজিস্টার করান → সে একটা **পেইড সার্ভিস** কিনুক → referrer এর **Main Wallet** বাড়ছে কিনা + নোটিফিকেশন এসেছে কিনা + Earning Report এ "Referral on sale" দেখাচ্ছে কিনা
8. Export CSV এ **Added By** কলাম আছে কিনা
