private Money CalculatePackCost(Member user, ReferralPackage pack) { Money membershipSingleRefPrice = user.Membership.ReferralRentCost; int currentRefs = new RentReferralsSystem(user.Name, user.Membership).GetUserRentedReferralsCount(); Money singleRefPrice = RentedReferralRangePrice.GetPriceForSingleRef(membershipSingleRefPrice, currentRefs + pack.RefsInPackage); return(Money.MultiplyPercent(singleRefPrice * pack.RefsInPackage, pack.PercentValue)); }
private bool HasValidRequirements(Member User, ReferralPackage pack, RentReferralsSystem rrs, bool throwsMsgException) { bool isValid = true; try { //Limit if (AppSettings.Referrals.Renting != AppSettings.Referrals.RentingOption.DirectReferrals && (pack.RefsInPackage + rrs.GetUserRentedReferralsCount() > User.Membership.RentedReferralsLimit)) { throw new MsgException(L1.ER_RENT_LIMIT); } if (AppSettings.Referrals.Renting == AppSettings.Referrals.RentingOption.DirectReferrals && (pack.RefsInPackage + User.GetDirectReferralsCount() > User.Membership.DirectReferralsLimit)) { throw new MsgException(L1.ER_RENT_LIMIT); } //Min clicks if (AppSettings.Referrals.MinTotalClicksToRentRefs > User.TotalClicks) { throw new MsgException(L1.ER_RENT_CLICKS); } //Renting interval if (User.LastRentDate != null && ((DateTime)User.LastRentDate).AddDays(User.Membership.MinRentingInterval.Days) > DateTime.Now) { throw new MsgException(L1.ER_RENT_INTERVAL); } //Lets validate the money Money totalCost = CalculatePackCost(User, pack); if (totalCost > User.PurchaseBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } //Max ref package if (pack.RefsInPackage > User.Membership.MaxRefPackageCount) { throw new MsgException(U2502.ER_EXCEEDPACKAGE); } } catch (MsgException ex) { isValid = false; if (throwsMsgException) { throw ex; } } return(isValid); }
public int Comparison(ReferralPackage x, ReferralPackage y) { if (x.RefsInPackage > y.RefsInPackage) { return(1); } else if (x.RefsInPackage == y.RefsInPackage) { return(0); } else { return(-1); } }
protected void Page_Load(object sender, EventArgs e) { AccessManager.RedirectIfDisabled(AppSettings.TitanFeatures.ReferralsRentedEnabled); Member User = Member.Current; RentReferralsSystem rrs; //For Chrome compatibility Context.Response.AppendHeader("X-XSS-Protection", "0"); //Lets check if user clicked the pack and want to make a purchase if (Request.Params.Get("__PACKID") != null && IsParameterANumber() && !AppSettings.Site.TrafficExchangeMod) { SuccMessagePanel.Visible = false; ErrorMessagePanel.Visible = false; int packID = Int32.Parse(Request.Params.Get("__PACKID")); rrs = new RentReferralsSystem(User.Name, User.Membership); try { AppSettings.DemoCheck(); ReferralPackage pack = new ReferralPackage(packID); // Check if all valid HasValidRequirements(User, pack, rrs, true); //Purchase the pack and save the user rrs.RentReferrals(pack.RefsInPackage); //throws MsgException if no ref available Money totalPrice = CalculatePackCost(User, pack); User.SubtractFromPurchaseBalance(totalPrice, "Ref: rent"); User.LastRentDate = DateTime.Now; //Check if achievement should be applied rrs = new RentReferralsSystem(User.Name, User.Membership); User.TryToAddAchievements( Prem.PTC.Achievements.Achievement.GetProperAchievements( Prem.PTC.Achievements.AchievementType.AfterHavingRentedReferrals, rrs.GetUserRentedReferralsCount())); User.Save(); // 4. Write success info SuccMessagePanel.Visible = true; SuccMessage.Text = U3501.REFSUCC; //Ad history entry History.AddPurchase(User.Name, totalPrice, pack.RefsInPackage.ToString() + " rented referrals"); } catch (MsgException ex) { ErrorMessagePanel.Visible = true; ErrorMessage.Text = ex.Message; } } //Lang DirectRefsGridView.EmptyDataText = L1.NORENTEDREFERRALS; LangAdder.Add(Button1, L1.MANAGE); LangAdder.Add(Button2, L1.RENTNEW); UserName.Text = Member.CurrentName; RemoveButton.Text = L1.REMOVE; RecycleButton.Text = string.Format("{0} ({1} {2})", L1.RECYCLE, User.Membership.RentedReferralRecycleCost, U6011.PERONE); AutopayAllOnButton.Text = AutopayOnButton.Text = U6004.AUTOPAYON; AutopayAllOffButton.Text = AutopayOffButton.Text = U6004.AUTOPAYOFF; RenewButton.Text = L1.RENEW; //Data rrs = new RentReferralsSystem(User.Name, User.Membership); RefLimit.Text = User.Membership.RentedReferralsLimit.ToString(); MaxRefPack.Text = User.Membership.MaxRefPackageCount.ToString(); RefCount.Text = rrs.GetUserRentedReferralsCount().ToString(); RentalTimeLabel.Text = AppSettings.RentedReferrals.CanBeRentedFor.Days.ToString(); RefGauranteeLabel.Text = (AppSettings.RentedReferrals.MinLastClickingActivity == TimeSpan.MinValue) ? L1.NONE : L1.CLICKEDINLAST + " " + AppSettings.RentedReferrals.MinLastClickingActivity.Days.ToString() + " " + L1.DAYS; MinClicksLabel.Text = AppSettings.Referrals.MinTotalClicksToRentRefs.ToString(); LastRentedLiteral.Text = (User.LastRentDate == null) ? L1.NEVER : User.LastRentDate.ToString(); MinRentInterval.Text = User.Membership.MinRentingInterval.Days.ToString(); TotalClicksLiteral.Text = User.TotalClicks.ToString(); //Autopay available? AutopayOnButton.Visible = AutopayOffButton.Visible = User.Membership.CanAutoPay && AppSettings.Referrals.RentedRefAutopayPolicy == AppSettings.Referrals.AutopayPolicy.UserChooses; AutopayAllPlaceHolder.Visible = User.Membership.CanAutoPay && AppSettings.Referrals.RentedRefAutopayPolicy == AppSettings.Referrals.AutopayPolicy.AllReferrals; //Generate pack images RefBoxesLiteral.Text = string.Empty; var packList = TableHelper.SelectAllRows <ReferralPackage>(); packList.Sort(Comparison); for (int i = 0; i < packList.Count; ++i) { bool isActive = HasValidRequirements(User, packList[i], rrs, false); Money packPrice = CalculatePackCost(User, packList[i]); RefBoxesLiteral.Text += HtmlCreator.GenerateRentRefBox(packList[i].RefsInPackage, packPrice, isActive, packList[i].Id); } if (AppSettings.Referrals.Renting == AppSettings.Referrals.RentingOption.DirectReferrals) { InfoPlaceHolder.Visible = false; Button1.Visible = false; Button2.CssClass = "ViewSelected"; MenuMultiView.ActiveViewIndex = 1; } //Warning displays if (!User.HasClickedEnoughToProfitFromReferrals() && DirectRefsGridView.Rows.Count != 0) { WarningPanel.Visible = true; WarningLiteral.Text = L1.REFNOPROFITS; WarningLiteral.Text = WarningLiteral.Text.Replace("%n%", AppSettings.Referrals.MinDailyClicksToEarnFromRefs.ToString()); } RemoveButton.Visible = AppSettings.RentedReferrals.IsDeletingEnabled; RecycleButton.Visible = AppSettings.RentedReferrals.IsRecyclingEnabled; RegisterStartupGridViewCode(DirectRefsGridView, SelectedPanel, ref jsSelectAllCode); }