/// <exception cref="DbException" /> public void Upgrade(MembershipPack pack) { if (this.Membership.Name == pack.Membership.Name) { //The same bought, lets sum up DateTime Expires = (DateTime)this.MembershipExpires; setMembership(pack.Membership, AppSettings.ServerTime, Expires.AddDays(pack.TimeDays)); } else { setMembership(pack.Membership, AppSettings.ServerTime, AppSettings.ServerTime.AddDays(pack.TimeDays)); } ResolveReferralLimits(pack.Membership); if (AppSettings.Misc.SpilloverEnabled) { SpilloverManager spillover = new SpilloverManager(this); spillover.ResolveReferrals(); } }
protected virtual Money CreditReferersMainBalance(Money input, String note, BalanceLogType balanceLogType, int level = 1, Member forcedUser = null, bool forceSave = true) { if (AppSettings.Referrals.AreIndirectReferralsEnabled && level > AppSettings.Referrals.ReferralEarningsUpToTier || TitanFeatures.IsGambinos && User.MembershipId == 1) { return(Money.Zero); } if (level == 1) { MoneySpent = Money.Zero; OriginalUser = User; } if (forcedUser != null) { User = forcedUser; } if (User.HasReferer) { Member referer = new Member(User.ReferrerId); if (referer.HasClickedEnoughToProfitFromReferrals()) { if (!MatrixBase.CanCreditReferer(User, referer)) { return(MoneySpent); } Money calculated = CalculateRefEarnings(referer, input, level); //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); } if (!adminCommissionPoolCredited) { //Add commission to Revenue Pool instead of crediting member if (AppSettings.Misc.SpilloverEnabled && referer.Membership.Id == Membership.Standard.Id) { SpilloverManager.AddMoneyToRevenuePool(calculated); } //Credit else { if (!AppSettings.Payments.CommissionBalanceEnabled) { CreditMainBalanceHelper(ref referer, calculated, note, balanceLogType); } else { CreditCommissionBalanceHelper(ref referer, calculated, note, balanceLogType); } refererCredited = true; AddToCommissionsIncomeStatistics(referer, calculated); } } if (refererCredited) { if (this is AdPackCrediter) { referer.IncreaseAdPackEarningsFromDR(calculated); User.TotalAdPacksToDReferer += calculated; } if (this is CashLinkCrediter) { referer.IncreaseDRCashLinksEarnings(calculated); User.TotalCashLinksToDReferer += calculated; } referer.IncreaseEarningsFromDirectReferral(calculated); referer.SaveStatisticsAndBalances(); User.TotalEarnedToDReferer += calculated; } User.LastDRActivity = DateTime.Now; if (forceSave) { User.SaveStatisticsAndBalances(); } try { if (AppSettings.Emails.NewReferralCommisionEnabled && calculated != Money.Zero) { Mailer.SendNewReferralCommisionMessage(referer.Name, User.Name, calculated, referer.Email, note); } } catch (Exception ex) { ErrorLogger.Log(ex); } //Mailer //increase Money spent MoneySpent += calculated; //Indirect referrals don't get paid for CashLinks if (AppSettings.Referrals.AreIndirectReferralsEnabled && !(this is CashLinkCrediter)) { var referralsMoneySpent = CreditReferersMainBalance(input, note, balanceLogType, level + 1, referer); //change to Original user when leaving recurrence if (level == 1 && User.Id != OriginalUser.Id) { User = OriginalUser; } return(referralsMoneySpent); } } } return(MoneySpent); }
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); }