চল শুরু করি ✅ Part 3: Referral & Affiliate System — এখানে আমরা ইনফিনিটি ট্রেডিং হাবের রেফারাল ও অ্যাফিলিয়েট সিস্টেম তৈরি করব, যেখানে একজন ইউজার অন্যকে রেফার করলে তারা ইনকাম পাবে সর্বোচ্চ 10 লেভেল পর্যন্ত।
🎯 লক্ষ্য
- রেফার করা ইউজার ট্র্যাক করা
- ইনভেস্টমেন্ট বা ROI অনুযায়ী ১০ লেভেল ইনকাম
- ReferralIncome মডেল ও লজিক
- Signal / Function দিয়ে রেফার ইনকাম প্রসেস করা
🧩 Model Design
📁 referral/models.py
from django.db import models
from django.contrib.auth.models import User
class ReferralIncome(models.Model):
referrer = models.ForeignKey(User, on_delete=models.CASCADE, related_name='referral_earnings')
referred_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='referred_investments')
level = models.PositiveIntegerField()
amount = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateField(auto_now_add=True)
def __str__(self):
return f"{self.referrer.username} earned ${self.amount} from {self.referred_user.username} (L{self.level})"
🧠 Level Income Percentages (Based on Document)
| Level | Percentage |
|---|---|
| 1 | 10% |
| 2 | 5% |
| 3 | 3% |
| 4 | 2% |
| 5 | 1% |
| 6–10 | 0.5% each |
REFERRAL_PERCENTAGES = {
1: 10,
2: 5,
3: 3,
4: 2,
5: 1,
6: 0.5,
7: 0.5,
8: 0.5,
9: 0.5,
10: 0.5,
}
🔁 Referral Logic (Triggered on Investment or ROI)
📁 referral/utils.py
from decimal import Decimal
from django.contrib.auth.models import User
from accounts.models import Profile
from .models import ReferralIncome
REFERRAL_PERCENTAGES = {
1: 10,
2: 5,
3: 3,
4: 2,
5: 1,
6: 0.5,
7: 0.5,
8: 0.5,
9: 0.5,
10: 0.5,
}
def distribute_referral_income(base_user, base_amount):
current_user = base_user
for level in range(1, 11):
try:
profile = current_user.profile
sponsor = profile.sponsor
except:
break
if not sponsor:
break
percent = Decimal(REFERRAL_PERCENTAGES.get(level, 0))
income = (base_amount * percent) / Decimal(100)
ReferralIncome.objects.create(
referrer=sponsor,
referred_user=base_user,
level=level,
amount=income
)
current_user = sponsor
🔗 Integration: ROI Calculation এর সাথে যুক্ত করো
📁 investment/utils.py → generate_daily_roi() ফাংশনের ভিতরে:
from referral.utils import distribute_referral_income
def generate_daily_roi():
today = timezone.now().date()
investments = UserInvestment.objects.filter(active=True)
for inv in investments:
roi_amount = (inv.amount * inv.package.roi_percent) / Decimal(100)
ROITransaction.objects.create(
user=inv.user,
investment=inv,
amount=roi_amount,
created_at=today
)
# 💸 Trigger referral income
distribute_referral_income(inv.user, roi_amount)
🧾 Admin Panel: referral/admin.py
from django.contrib import admin
from unfold.admin import ModelAdmin
from .models import ReferralIncome
@admin.register(ReferralIncome)
class ReferralIncomeAdmin(ModelAdmin):
list_display = ['referrer', 'referred_user', 'level', 'amount', 'created_at']
list_filter = ['level', 'created_at']
search_fields = ['referrer__username', 'referred_user__username']
🔄 Migrate
python manage.py makemigrations referral
python manage.py migrate
🧪 Example:
- Alice → Bob → Carol → Dave
- Dave gets $2 ROI
- Bob gets $0.20 (10%), Carol gets $0.10 (5%), Alice gets $0.06 (3%)
✅ Part 3 Done.
🔜 Part 4: Weekly Bonus & Rank System
- Direct sponsor total calculation
- Weekly fixed bonuses
- Team A, B, All Volume → Rank logic
তুমি কি এখন Part 4 শুরু করতে চাও?