protected Money CreditReferersMainAndPointBalance(Money input, String note, BalanceLogType balanceLogType, int level = 1, Member forcedUser = null, bool forceSave = true) { if (level == 1) { MoneySpent = Money.Zero; } if (AppSettings.Referrals.AreIndirectReferralsEnabled && level > AppSettings.Referrals.ReferralEarningsUpToTier) { return(MoneySpent); } if (forcedUser != null) { User = forcedUser; } if (User.HasReferer) { Member referer = new Member(User.ReferrerId); if (!MatrixBase.CanCreditReferer(User, referer)) { return(MoneySpent); } Money calculated = CalculateRefEarnings(referer, input, level); var points = CalculateRefPointsEarnings(referer, input, level); Money calculatedPoints = PointsConverter.ToMoney(points); //Representatives bonus calculated += Representative.IncreaseAmountForRepresentative(input, User, referer.Id, level); bool refererCredited = false; bool adminCommissionPoolCredited = false; if (AppSettings.RevShare.IsRevShareEnabled && referer.Id == AppSettings.RevShare.AdminUserId) { adminCommissionPoolCredited = PoolDistributionManager.AddProfit(ProfitSource.RevenueAdminCommissions, calculated + calculatedPoints); } if (!adminCommissionPoolCredited) { if (AppSettings.Misc.SpilloverEnabled && referer.Membership.Id == Membership.Standard.Id) { //Add commission to Revenue Pool instead of crediting member SpilloverManager.AddMoneyToRevenuePool(calculated); } //Credit else if (!AppSettings.Payments.CommissionBalanceEnabled) { CreditMainBalanceHelper(ref referer, calculated, note, balanceLogType); refererCredited = true; } else { CreditCommissionBalanceHelper(ref referer, calculated, note, balanceLogType); refererCredited = true; } if (calculatedPoints > Money.Zero) { CreditPointsHelper(ref referer, PointsConverter.ToPoints(calculatedPoints), note, BalanceLogType.AdPackPurchase); } } if (refererCredited) { referer.IncreaseAdPackEarningsFromDR(calculated + calculatedPoints); referer.IncreaseDirectRefPointsEarnings(points); referer.IncreaseEarningsFromDirectReferral(calculated); User.TotalAdPacksToDReferer += calculated + calculatedPoints; referer.SaveStatisticsAndBalances(); User.TotalPointsEarnedToDReferer += points; User.TotalEarnedToDReferer += calculated; } User.LastDRActivity = DateTime.Now; if (forceSave) { User.SaveStatisticsAndBalances(); } try { if (AppSettings.Emails.NewReferralCommisionEnabled && calculated + calculatedPoints != Money.Zero) { Mailer.SendNewReferralCommisionMessage(referer.Name, User.Name, calculated, referer.Email, note, points); } } catch (Exception ex) { ErrorLogger.Log(ex); } //Mailer //increase Money spent MoneySpent += calculated + calculatedPoints; //Indirect referrals don't get paid for CashLinks if (AppSettings.Referrals.AreIndirectReferralsEnabled) { return(CreditReferersMainAndPointBalance(input, note, balanceLogType, level + 1, referer)); } } return(MoneySpent); }