public function createPartialPayouts(Payment $payment) { $user = $payment->getAccount()->getUser(); $baseAmount = $payment->getAmount() * $payment->getAccount()->getPayoutPercentage(); // Check for referral payments if ($firstLevelReferrer = $user->getReferrer()) { // Payment for first level $amount = round($baseAmount * self::REFERRAL_PERCENT_LEVEL_1); $this->createPartialPayout($payment, $firstLevelReferrer, $amount); // Check for second level payment if ($secondLevelReferrer = $firstLevelReferrer->getReferrer()) { // Payment for second level $amount = round($baseAmount * self::REFERRAL_PERCENT_LEVEL_2); $this->createPartialPayout($payment, $secondLevelReferrer, $amount); // Check for the third level payment if ($thirdLevelReferrer = $secondLevelReferrer->getReferrer()) { // Payment for the third level $amount = round($baseAmount * self::REFERRAL_PERCENT_LEVEL_3); $this->createPartialPayout($payment, $thirdLevelReferrer, $amount); } } } $this->createPartialPayout($payment, $user, $baseAmount); }