চমৎকার! এখন শুরু করছি ✅ Part 5: Withdrawal & Admin Panel — এখানে ইউজার তাদের আয়কৃত টাকা উইথড্র রিকোয়েস্ট করতে পারবে এবং অ্যাডমিন সেটা Unfold Admin প্যানেল থেকে অ্যাপ্রুভ/রিজেক্ট করতে পারবে।
🎯 কাজের লক্ষ্য
WithdrawRequestমডেল তৈরি- উইথড্র অ্যানাউন্টে ১০% সার্ভিস চার্জ কেটে রাখতে হবে
- Only approved request gets marked as paid
- Admin Panel দিয়ে অ্যাপ্রুভ/রিজেক্ট কন্ট্রোল
🧩 Model Design
📁 withdrawal/models.py
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
from decimal import Decimal
class WithdrawRequest(models.Model):
STATUS_CHOICES = [
('pending', 'Pending'),
('approved', 'Approved'),
('rejected', 'Rejected'),
]
user = models.ForeignKey(User, on_delete=models.CASCADE)
requested_amount = models.DecimalField(max_digits=12, decimal_places=2)
service_charge_percent = models.DecimalField(default=10.0, max_digits=5, decimal_places=2) # always 10%
net_amount = models.DecimalField(max_digits=12, decimal_places=2, blank=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')
requested_at = models.DateTimeField(auto_now_add=True)
processed_at = models.DateTimeField(null=True, blank=True)
def save(self, *args, **kwargs):
if not self.net_amount:
charge = (self.requested_amount * self.service_charge_percent) / Decimal(100)
self.net_amount = self.requested_amount - charge
if self.status in ['approved', 'rejected'] and not self.processed_at:
self.processed_at = timezone.now()
super().save(*args, **kwargs)
def __str__(self):
return f"{self.user.username} requested ${self.requested_amount} - {self.status}"
✅ Admin Integration
📁 withdrawal/admin.py
from django.contrib import admin
from unfold.admin import ModelAdmin
from .models import WithdrawRequest
@admin.register(WithdrawRequest)
class WithdrawRequestAdmin(ModelAdmin):
list_display = ['user', 'requested_amount', 'net_amount', 'status', 'requested_at', 'processed_at']
list_filter = ['status', 'requested_at']
search_fields = ['user__username', 'user__email']
readonly_fields = ['net_amount', 'processed_at']
⚙️ Panel View
- Admin goes to
/admin/withdrawal/withdrawrequest/ - Approves or rejects requests
- Approving auto-generates
processed_atand computesnet_amount
🔄 Migration
python manage.py makemigrations withdrawal
python manage.py migrate
🧪 Example
| User | Request | Status | Net Amount | Action |
|---|---|---|---|---|
| Alice | $100 | Pending | – | Admin approves |
| Approved | $90.00 |
🚀 Future Enhancement Ideas
- Wallet system: balance calculation
- Withdrawable balance only from approved ROI + referral + weekly bonuses
- Auto-email on withdrawal approval
✅ Part 5 Done.
তুমি কি এখন ✅ Part 6: User Dashboard & API View শুরু করতে চাও?
এখানে থাকবেঃ
- ইউজারের ইনভেস্টমেন্ট, ROI, রেফার ইনকাম, উইকলি বোনাস, উইথড্র রিকোয়েস্ট API
- টোটাল আর্নিং, ইউজারের র্যাঙ্ক দেখা যাবে
Ready?