File "ReferralSystem.php"
Full Path: /home/fundopuh/trader.fxex.org/app/Http/Livewire/User/ReferralSystem.php
File size: 10.32 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// this Code is Cracked by dharunMods-YouTube-Channel
namespace App\Http\Livewire\User;
use App\Models\Deposit;
use App\Models\Settings;
use App\Models\Tp_Transaction;
use App\Models\User;
use App\Models\User_plans;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Livewire\Component;
use Livewire\WithPagination;
class ReferralSystem extends Component
{
use WithPagination;
protected $paginationTheme = 'bootstrap';
public bool $viewRef;
public string $refLevel;
public $children;
public $referrals;
public $totalDeposit;
public $totalAmountInPlans;
public $totalProfit;
public User $user;
public float $commision;
public string $level;
public array $downlinesIds;
public array $directIDs;
public array $level1IDs;
public array $level2IDs;
public array $level3IDs;
public array $level4IDs;
public array $level5IDs;
public function mount()
{
$this->viewRef = false;
$this->level = 'Direct level';
$this->directIDs = User::where('ref_by', auth()->user()->id)->pluck('id')->toArray();
$this->level1IDs = User::whereIn('ref_by', $this->directIDs)->pluck('id')->toArray();
$this->level2IDs = User::whereIn('ref_by', $this->level1IDs)->pluck('id')->toArray();
$this->level3IDs = User::whereIn('ref_by', $this->level2IDs)->pluck('id')->toArray();
$this->level4IDs = User::whereIn('ref_by', $this->level3IDs)->pluck('id')->toArray();
$this->level5IDs = User::whereIn('ref_by', $this->level4IDs)->pluck('id')->toArray();
$this->totalDeposit = $this->calculateDeposit($this->directIDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->directIDs);
$this->totalProfit = $this->calculateProfit($this->directIDs);
$settings = Settings::find(1);
$this->commision = $settings->referral_commission;
}
public function render()
{
$settings = Settings::select('theme')->find(1);
$parent = User::where('id', auth()->user()->ref_by)->select(['id', 'name'])->first();
return view("{$settings->theme}.livewire.user.referral-system", [
'parent' => $parent,
'downlines' => $this->getDownlines(auth()->user()->id),
]);
}
public function calculateDeposit(array $ids): float
{
if ($this->level == 'Direct level') {
$children = User::where('ref_by', auth()->user()->id)->select(['id'])->get();
} else {
$children = User::whereIn('ref_by', $ids)->select(['id'])->get();
}
$total = 0;
foreach ($children as $child) {
$total += Deposit::where('user', $child->id)->where('status', 'Processed')->sum('amount');
}
return $total;
}
public function totalAmountInPlans(array $ids): float
{
if ($this->level == 'Direct level') {
$children = User::where('ref_by', auth()->user()->id)->select(['id'])->get();
} else {
$children = User::whereIn('ref_by', $ids)->select(['id'])->get();
}
$total = 0;
foreach ($children as $child) {
$total += User_plans::where('user', $child->id)->sum('amount');
}
return $total;
}
public function calculateProfit(array $ids): float
{
if ($this->level == 'Direct level') {
$children = User::where('ref_by', auth()->user()->id)->select(['id'])->get();
} else {
$children = User::whereIn('ref_by', $ids)->select(['id'])->get();
}
$total = 0;
foreach ($children as $child) {
$total += Tp_Transaction::where('user', $child->id)->where('type', 'ROI')->sum('amount');
}
return $total;
}
public function changeLevel(string $level): void
{
$this->level = $level;
$settings = Settings::find(1);
if ($level == 'Direct level') {
$this->totalDeposit = $this->calculateDeposit($this->directIDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->directIDs);
$this->totalProfit = $this->calculateProfit($this->directIDs);
} elseif ($level == 'Level 1') {
$downlines = $this->getReferralsUnderLevel($this->directIDs);
$this->children = $downlines->items();
$this->totalDeposit = $this->calculateDeposit($this->directIDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->directIDs);
$this->totalProfit = $this->calculateProfit($this->directIDs);
$this->commision = floatval($settings->referral_commission1);
} elseif ($level == 'Level 2') {
$downlines = $this->getReferralsUnderLevel($this->level1IDs);
$this->children = $downlines->items();
$this->totalDeposit = $this->calculateDeposit($this->level1IDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->level1IDs);
$this->totalProfit = $this->calculateProfit($this->level1IDs);
$this->commision = floatval($settings->referral_commission2);
} elseif ($level == 'Level 3') {
$downlines = $this->getReferralsUnderLevel($this->level2IDs);
$this->children = $downlines->items();
$this->totalDeposit = $this->calculateDeposit($this->level2IDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->level2IDs);
$this->totalProfit = $this->calculateProfit($this->level2IDs);
$this->commision = floatval($settings->referral_commission3);
} elseif ($level == 'Level 4') {
$downlines = $this->getReferralsUnderLevel($this->level3IDs);
$this->children = $downlines->items();
$this->totalDeposit = $this->calculateDeposit($this->level3IDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->level3IDs);
$this->totalProfit = $this->calculateProfit($this->level3IDs);
$this->commision = floatval($settings->referral_commission4);
} elseif ($level == 'Level 5') {
$downlines = $this->getReferralsUnderLevel($this->level4IDs);
$this->children = $downlines->items();
$this->totalDeposit = $this->calculateDeposit($this->level4IDs);
$this->totalAmountInPlans = $this->totalAmountInPlans($this->level4IDs);
$this->totalProfit = $this->calculateProfit($this->level4IDs);
$this->commision = floatval($settings->referral_commission5);
}
}
public function getOtherColumns(string $id, string $type)
{
if ($type == 'deposit') {
return Deposit::where('user', $id)->where('status', 'Processed')->sum('amount');
}
if ($type == 'invested') {
return User_plans::where('user', $id)->sum('amount');
}
if ($type == 'profit') {
return Tp_Transaction::where('user', $id)->where('type', 'ROI')->sum('amount');
}
if ($type == 'recent') {
return Tp_Transaction::where('user', $id)->where('type', 'ROI')->orderBy('id', 'desc')->first();
}
}
public function getReferralsUnderLevel(array $ids)
{
$refs = User::whereIn('ref_by', $ids)->paginate(15);
$refs->transform(function ($downline) {
return [
'id' => $downline->id,
'name' => $downline->name,
'email' => $downline->email,
'totalDeposit' => $this->getOtherColumns($downline->id, 'deposit'),
'totalInvestment' => $this->getOtherColumns($downline->id, 'invested'),
'totalProfit' => $this->getOtherColumns($downline->id, 'profit'),
'recent' => $this->getOtherColumns($downline->id, 'recent'),
'parent' => User::where('id', $downline->ref_by)->select(['name'])->first(),
'status' => $downline->status,
'created_at' => $downline->created_at->format('d M, Y'),
];
});
return $refs;
}
public function showDetails(int $id): void
{
$settings = Settings::find(1);
$this->user = User::where('id', $id)->select(['name', 'id'])->first();
$downlines = $this->getDownlines($id);
$this->referrals = $downlines->items();
if ($this->level == 'Direct level') {
$commission = $settings->referral_commission;
} else {
$num = Str::of($this->level)->after('Level ');
$commission = $settings->referral_commission . $num;
}
$this->level = 'Level 1';
$this->totalDeposit = $this->calculateDeposit([$id]);
$this->totalAmountInPlans = $this->totalAmountInPlans([$id]);
$this->totalProfit = $this->calculateProfit([$id]);
$this->commision = floatval($commission);
$this->viewRef = true;
}
public function cancelShowDeatials()
{
$settings = Settings::find(1);
$this->level = 'Direct level';
$commission = $settings->referral_commission;
$this->totalDeposit = $this->calculateDeposit([$this->user->id]);
$this->totalAmountInPlans = $this->totalAmountInPlans([$this->user->id]);
$this->totalProfit = $this->calculateProfit([$this->user->id]);
$this->commision = floatval($commission);
$this->user = new User();
$this->viewRef = false;
}
public function getDownlines($parent = 0)
{
//get downline using map function
$downlines = User::where('ref_by', $parent)->select(['id', 'name', 'email', 'ref_by', 'status', 'created_at'])->orderByDesc('id')->paginate(10);
$downlines->transform(function ($downline) {
return [
'id' => $downline->id,
'name' => $downline->name,
'email' => $downline->email,
'totalDeposit' => $this->getOtherColumns($downline->id, 'deposit'),
'totalInvestment' => $this->getOtherColumns($downline->id, 'invested'),
'totalProfit' => $this->getOtherColumns($downline->id, 'profit'),
'recent' => $this->getOtherColumns($downline->id, 'recent'),
'parent' => User::where('id', $downline->ref_by)->select(['name'])->first(),
'status' => $downline->status,
'created_at' => $downline->created_at->format('d M, Y')
];
});
return $downlines;
}
}