1. Home
  2. infinity_hub
  3. সেটআপ
  4. Part 4: Weekly Bonus & Rank System

Part 4: Weekly Bonus & Rank System

চমৎকার! এবার শুরু করছি ✅ Part 4: Weekly Bonus & Rank System, যেখানে আমরা Infinity Trading Hub-এর সবচেয়ে গুরুত্বপূর্ণ ইনসেন্টিভ ফিচারগুলো বাস্তবায়ন করবো।


🎯 মূল লক্ষ্য

  1. Weekly Bonus: Direct sponsor এর weekly ইনভেস্টমেন্ট টোটাল অনুযায়ী bonus
  2. Rank System:
    • Team A + Team B + Total Volume মিলে Rank নির্ধারণ
    • র‍্যাঙ্ক অনুযায়ী Gift unlock হয়
  3. 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)

RankTeam ATeam BAll TeamGift
INFINITY 1150015002000$150
INFINITY 2300030004000$250
INFINITY 3600060008000$500
INFINITY 4150001500020000$1500
INFINITY 5300003000040000$3000
INFINITY 6600006000080000$7000
INFINITY 7150000150000200000$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?

How can we help?