চমৎকার! এবার শুরু করছি ✅ Part 4: Weekly Bonus & Rank System, যেখানে আমরা Infinity Trading Hub-এর সবচেয়ে গুরুত্বপূর্ণ ইনসেন্টিভ ফিচারগুলো বাস্তবায়ন করবো।
🎯 মূল লক্ষ্য
- Weekly Bonus: Direct sponsor এর weekly ইনভেস্টমেন্ট টোটাল অনুযায়ী bonus
- Rank System:
- Team A + Team B + Total Volume মিলে Rank নির্ধারণ
- র্যাঙ্ক অনুযায়ী Gift unlock হয়
- Weekly bonus অটো প্রসেস (ক্রোন/ম্যানেজমেন্ট কমান্ড দিয়ে)
🧩 Model Design
📁 bonus/models.py
from django.db import models
from django.contrib.auth.models import User
class WeeklyBonus(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
total_direct_investment = models.DecimalField(max_digits=12, decimal_places=2)
bonus_amount = models.DecimalField(max_digits=10, decimal_places=2)
week_start = models.DateField()
week_end = models.DateField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user.username} - ${self.bonus_amount} for week {self.week_start}"
🎖️ Rank & Gift Structure (from document)
| Rank | Team A | Team B | All Team | Gift |
|---|---|---|---|---|
| INFINITY 1 | 1500 | 1500 | 2000 | $150 |
| INFINITY 2 | 3000 | 3000 | 4000 | $250 |
| INFINITY 3 | 6000 | 6000 | 8000 | $500 |
| INFINITY 4 | 15000 | 15000 | 20000 | $1500 |
| INFINITY 5 | 30000 | 30000 | 40000 | $3000 |
| INFINITY 6 | 60000 | 60000 | 80000 | $7000 |
| INFINITY 7 | 150000 | 150000 | 200000 | $20000 |
📁 bonus/models.py (Rank Achievement)
class RankAchievement(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
rank_name = models.CharField(max_length=50)
team_a_volume = models.DecimalField(max_digits=12, decimal_places=2)
team_b_volume = models.DecimalField(max_digits=12, decimal_places=2)
all_team_volume = models.DecimalField(max_digits=12, decimal_places=2)
gift_amount = models.DecimalField(max_digits=10, decimal_places=2)
achieved_at = models.DateField(auto_now_add=True)
def __str__(self):
return f"{self.user.username} - {self.rank_name}"
🔁 Weekly Bonus Logic
📁 bonus/utils.py
from accounts.models import Profile
from investment.models import UserInvestment
from .models import WeeklyBonus
from django.utils import timezone
from datetime import timedelta
WEEKLY_BONUSES = [
(100000, 250),
(50000, 100),
(20000, 50),
(10000, 20),
(5000, 10),
(2000, 5),
]
def process_weekly_bonuses():
today = timezone.now().date()
start_of_week = today - timedelta(days=today.weekday())
end_of_week = start_of_week + timedelta(days=6)
all_profiles = Profile.objects.all()
for profile in all_profiles:
user = profile.user
direct_referrals = user.referrals.all()
total_direct = sum([
inv.amount for ref in direct_referrals
for inv in ref.investment_set.filter(start_date__range=(start_of_week, end_of_week))
])
bonus = 0
for threshold, reward in WEEKLY_BONUSES:
if total_direct >= threshold:
bonus = reward
break
if bonus > 0:
WeeklyBonus.objects.create(
user=user,
total_direct_investment=total_direct,
bonus_amount=bonus,
week_start=start_of_week,
week_end=end_of_week
)
🧾 bonus/admin.py
from django.contrib import admin
from unfold.admin import ModelAdmin
from .models import WeeklyBonus, RankAchievement
@admin.register(WeeklyBonus)
class WeeklyBonusAdmin(ModelAdmin):
list_display = ['user', 'total_direct_investment', 'bonus_amount', 'week_start', 'week_end']
list_filter = ['week_start', 'bonus_amount']
@admin.register(RankAchievement)
class RankAchievementAdmin(ModelAdmin):
list_display = ['user', 'rank_name', 'gift_amount', 'achieved_at']
list_filter = ['rank_name', 'achieved_at']
🔄 Migration
python manage.py makemigrations bonus
python manage.py migrate
🧪 Bonus Flow Example
- Alice has 5 direct referrals
- This week, their total investment is $10,500
- Alice gets a $20 Weekly Bonus
🎖️ Rank Logic (optional – future)
Later we can:
- calculate leg-wise team volumes (Team A, Team B)
- save RankAchievement once thresholds met
✅ Part 4 Done.
তুমি কি এখন ✅ Part 5: Withdrawal & Admin Panel শুরু করতে চাও?
এখানে থাকবে:
- Withdraw Request Model
- Auto deduction of 10% service charge
- Admin approval via Unfold Panel
Ready?