1. Home
  2. infinity_hub
  3. সেটআপ
  4. Part 5: Withdrawal & Admin Panel

Part 5: Withdrawal & Admin Panel

চমৎকার! এখন শুরু করছি ✅ Part 5: Withdrawal & Admin Panel — এখানে ইউজার তাদের আয়কৃত টাকা উইথড্র রিকোয়েস্ট করতে পারবে এবং অ্যাডমিন সেটা Unfold Admin প্যানেল থেকে অ্যাপ্রুভ/রিজেক্ট করতে পারবে।


🎯 কাজের লক্ষ্য

  1. WithdrawRequest মডেল তৈরি
  2. উইথড্র অ্যানাউন্টে ১০% সার্ভিস চার্জ কেটে রাখতে হবে
  3. Only approved request gets marked as paid
  4. 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_at and computes net_amount

🔄 Migration

python manage.py makemigrations withdrawal
python manage.py migrate

🧪 Example

UserRequestStatusNet AmountAction
Alice$100PendingAdmin 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?

How can we help?