private static List <string> GetRows(List <List <AbstractType> > typesWithMembership) { var adpackTypes = AdPackTypeManager.GetAllActiveTypes(); List <string> rows = new List <string>(); foreach (var t in adpackTypes) { var merged = typesWithMembership.Select(x => x.Where(i => i.TypeName == t.Name).ToList()); StringBuilder row = new StringBuilder(); if (!(AppSettings.RevShare.AdPack.HideAdPackTypesWhenOneEnabled && adpackTypes.Count() <= 1)) { row.AppendFormat("<tr><td><span style='color:{0}; font-weight:bold'>{1}</span></td>", t.Color, t.Name); } foreach (var item in merged) { foreach (var i in item) { row.AppendFormat("<td class=\"text-center\">{0}</td><td class=\"text-center\">{1}</td>", i.Roi, i.Repurchase); } } row.Append("</tr>"); rows.Add(row.ToString()); } return(rows); }
public static void IncreaseAdPacksReturnAmountInClosedGroup(CustomGroup customGroup, UserCustomGroup userCustomGroup) { var adPackTypes = AdPackTypeManager.GetAllActiveTypes(); string roiEnlargedBy = "SELECT ROIEnlargedByPercentage FROM Memberships WHERE MembershipId = (SELECT UpgradeId FROM Users WHERE UserId = AdPacks.UserId)"; foreach (var adPackType in adPackTypes) { int acceleratedPercent = adPackType.PackReturnValuePercentage + customGroup.AcceleratedProfitPercentage; string moneyToReturn = string.Format(@"CAST({0} * ({1} + ({2})) AS Money)/100", adPackType.Price.ToDecimal(), acceleratedPercent, roiEnlargedBy); string updateAdPacksQuery = string.Format(@"UPDATE AdPacks SET MoneyToReturn = {0} WHERE UserCustomGroupId = {1} AND AdPackTypeId = {2};", moneyToReturn, userCustomGroup.Id, adPackType.Id); TableHelper.ExecuteRawCommandNonQuery(updateAdPacksQuery); } int adPacksByOtherUsers = (int)TableHelper.SelectScalar(string.Format("SELECT COUNT(*) FROM AdPacks WHERE UserCustomGroupId = {0} AND UserId != {1}", userCustomGroup.Id, userCustomGroup.CreatorUserId)); if (adPacksByOtherUsers > 0) { userCustomGroup.GotBonus = false; //gets saved after this function has completed } else { userCustomGroup.GotBonus = true; //gets saved after this function has completed } }
protected override object GetDataFromSource() { var types = AdPackTypeManager.GetAllTypes(); var dictionary = new Dictionary <int, AdPackType>(); foreach (var type in types) { dictionary.Add(type.Id, type); } return(dictionary); }
protected void Page_Load(object sender, EventArgs e) { if (this.Visible && AppSettings.RevShare.IsRevShareEnabled && !Page.IsPostBack) { ContainerPlaceHolder.Visible = true; NoDataLiteral.Visible = false; _adPackTypes = AdPackTypeManager.GetAllActiveTypes(); _adPackTypesCount = _adPackTypes.Count; _sb = new StringBuilder(); _sb.Append("<table class='table table-striped'><thead><tr>"); for (int i = 0; i < _adPackTypesCount; i++) { _sb.Append(string.Format("<th style='color: {0};'>{1}</th>", _adPackTypes[i].Color, _adPackTypes[i].Name)); } _sb.Append("</tr></thead><tbody><tr>"); _sb.Append(GetTitle(U4200.ALL)); AddStringToStringBuilder(@"SELECT COUNT (Id) FROM AdPacks WHERE UserId = {0} AND AdPackTypeId = {1}"); _sb.Append(GetTitle(L1.ACTIVE)); AddStringToStringBuilder( @"SELECT COUNT (Id) FROM AdPacks WHERE UserId = {0} AND AdPackTypeId = {1} AND MoneyReturned < MoneyToReturn"); _sb.Append(GetTitle(U5003.EXPIRED)); AddStringToStringBuilder( @"SELECT COUNT (Id) FROM AdPacks WHERE UserId = {0} AND AdPackTypeId = {1} AND MoneyReturned >= MoneyToReturn"); _sb.Append("</tr></tbody></table>"); TotalAdPacksLiteral.Text = _sb.ToString(); } else { NoDataLiteral.Text = L1.NODATA; } }
private void BindDataToTypesDDL() { CustomTypesDropDown.Items.Clear(); var availableTypes = AdPackTypeManager.GetAllActiveTypesForUser(Member.CurrentInCache); for (int i = 0; i < availableTypes.Count; i++) { string itemValue = availableTypes[i].Id.ToString(); string itemString = availableTypes[i].Name; ListItem item = new ListItem(itemString, itemValue); CustomTypesDropDown.Items.Insert(i, item); CustomTypesDropDown.SelectedIndex = 0; } if (availableTypes.Count > 0) { CustomTypesDropDown.Attributes.Add("style", string.Format("background-color:{0};color:white", availableTypes[0].Color)); } }
private static List <AbstractType> GetTypeSet(Membership membership) { List <AbstractType> sets = new List <AbstractType>(); var adPackTypes = AdPackTypeManager.GetAllActiveTypes(); foreach (var type in adPackTypes) { if (membership.DisplayOrder >= new Membership(type.RequiredMembership).DisplayOrder) { var oldRoi = type.PackReturnValuePercentage; var newRoi = membership.ROIEnlargedByPercentage; var oldRepurchase = type.AdBalanceReturnPercentage; var newRepurchase = membership.AdPackAdBalanceReturnPercentage; sets.Add(new MappedType(type.Name, oldRoi, newRoi, oldRepurchase, newRepurchase, membership.Id)); } else { sets.Add(new NullMappedType(type.Name, membership.Id)); } } return(sets); }
public static void BuyPacks(int numberOfPacks, int adPacksAdvertId, Member user, AdPackType adPackType, PurchaseBalances targetBalance, int?userGroupIdNullable = null, int?groupIdNullable = null, bool forcePurchaseWithoutDeducingFunds = false, Member adPackOwner = null) { if (!TitanFeatures.IsClickmyad && !AppSettings.RevShare.AdPack.EnableAdvertChange && adPacksAdvertId == -1 && AppSettings.RevShare.AdPacksPolicy != AppSettings.AdPacksPolicy.HYIP) { throw new MsgException(U6000.CANNOTBUYADPACKS); } AdPacksForOtherUsers record = null; string note = string.Format("{0} purchase", AppSettings.RevShare.AdPack.AdPackName); //Buying AdPacks for oneself if (adPackOwner == null) { if (!user.HasThisMembershipOrHigher(adPackType.RequiredMembership)) { throw new MsgException(String.Format(U5006.YOUNEEDMEMBERSHIP, Membership.SelectName(adPackType.RequiredMembership))); } int numberOfUsersAdPacks = GetNumberOfUsersAdPacks(user.Id, true, adPackType.Id); if (numberOfUsersAdPacks + numberOfPacks > adPackType.MaxInstances) { throw new MsgException(U5004.TOOMANYADPACKOFTYPE.Replace("%a%", AppSettings.RevShare.AdPack.AdPackNamePlural) .Replace("%b%", (adPackType.MaxInstances - numberOfUsersAdPacks).ToString())); } int numberOfAllUsersAdpacks = GetNumberOfAllUsersAdPacks(user.Id, adPackType.Id); if (numberOfAllUsersAdpacks + numberOfPacks > adPackType.MaxInstancesOfAllAdpacks) { throw new MsgException(U5004.TOOMANYADPACKOFTYPE.Replace("%a%", AppSettings.RevShare.AdPack.AdPackNamePlural) .Replace("%b%", (adPackType.MaxInstancesOfAllAdpacks - numberOfAllUsersAdpacks).ToString())); } var availableTypes = AdPackTypeManager.GetAllActiveTypesForUser(user); if (!availableTypes.Any(el => el.Id == adPackType.Id) || adPackType.Status != AdPackTypeStatus.Active) { throw new MsgException("You cannot buy AdPacks of selected type."); } adPackOwner = user; } else { AdPacksForOtherUsers.Validate(user.Id, adPackOwner.Id, numberOfPacks, out record); note += " for " + adPackOwner.Name; } //BUY ADPACKS var totalPrice = GetAdPacksPrice(adPackType, numberOfPacks); if (!forcePurchaseWithoutDeducingFunds) { PurchaseOption.ChargeBalance(user, totalPrice, PurchaseOption.Features.AdPack.ToString(), targetBalance, note, BalanceLogType.AdPackPurchase); } if (user != adPackOwner) { AdPacksForOtherUsers.AddOrUpdate(record, user.Id, adPackOwner.Id, numberOfPacks); } Money totalTrafficExchangeSurfCredits = Money.Zero; int totalLoginAdsCredits = 0; for (int i = 0; i < numberOfPacks; i++) { AdPack pack = new AdPack(); pack.MoneyReturned = new Money(0); pack.AdPacksAdvertId = adPacksAdvertId; pack.TotalConstantBannerImpressions = 0; pack.TotalNormalBannerImpressions = 0; pack.ConstantBannerImpressionsBought = adPackType.ConstantBannerImpressions; pack.NormalBannerImpressionsBought = adPackType.NormalBannerImpressions; pack.ClicksBought = adPackType.Clicks; pack.PurchaseDate = DateTime.Now; pack.MoneyReturned = new Money(0); pack.MoneyToReturn = Money.MultiplyPercent(adPackType.Price, adPackType.PackReturnValuePercentage + adPackOwner.Membership.ROIEnlargedByPercentage); pack.UserCustomGroupId = -1; pack.UserId = adPackOwner.Id; pack.DistributionPriority = new Decimal(1); pack.AdPackTypeId = adPackType.Id; pack.DisplayTime = adPackType.DisplayTime; pack.BalanceBoughtType = targetBalance; pack.Save(); totalTrafficExchangeSurfCredits += adPackType.TrafficExchangeSurfCredits; totalLoginAdsCredits += adPackType.LoginAdsCredits; } if (AppSettings.TitanFeatures.AdvertTrafficExchangeEnabled) { adPackOwner.AddToTrafficBalance(totalTrafficExchangeSurfCredits, "Traffic Exchange Surf Credits", BalanceLogType.Other); } adPackOwner.AddToLoginAdsCredits(totalLoginAdsCredits, note); adPackOwner.SaveBalances(); Money moneyLeftForPools; if (TitanFeatures.isAri) { AriRevShareDistribution.AdPackAriCrediter crediter = new AriRevShareDistribution.AdPackAriCrediter(user); moneyLeftForPools = crediter.CreditReferer(totalPrice, targetBalance); } else { AdPackCrediter crediter = new AdPackCrediter(user); moneyLeftForPools = crediter.CreditReferer(totalPrice); } //Pools if (TitanFeatures.StringSawSundayPool.HasValue && AppSettings.ServerTime.DayOfWeek == DayOfWeek.Sunday) { PoolDistributionManager.AddProfitToSundayPool(moneyLeftForPools); } else { PoolDistributionManager.AddProfit(ProfitSource.AdPacks, moneyLeftForPools); } //Matrix MatrixBase.TryAddMemberAndCredit(user, totalPrice, AdvertType.AdPack); var purchasedItem = PurchasedItem.Create(user.Id, adPackType.Price, numberOfPacks, adPackType.Name + " " + AppSettings.RevShare.AdPack.AdPackName, PurchasedItemType.AdPack); if (TitanFeatures.isAri) { HtmlInvoiceGenerator generator = new HtmlInvoiceGenerator(purchasedItem); generator.SendPdfViaEmail(); } //LeadershipSystem var list = new List <RestrictionKind>(); list.Add(RestrictionKind.ActiveAdPacks); list.Add(RestrictionKind.ActiveAdPacksPrice); list.Add(RestrictionKind.DirectReferralsActiveAdPacks); list.Add(RestrictionKind.DirectReferralsActiveAdPacksPrice); LeadershipSystem.CheckSystem(list, user, 1); }
private static void DailyDistribution(bool HourDistribution = false, bool FinalDistributionButHourly = false) { DailyPool Pool = DailyPool.GetYesterdayPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.AdPackRevenueReturn)); String RaportMessage = String.Empty; Int32 ActiveAdPacks = 0; Money TotalDistributed = Money.Zero; Money PerUnit = Money.Zero; Money InThePool = Pool.SumAmount; using (var bridge = ParserPool.Acquire(Database.Client)) { DistributionSQLHelper DistributionHelper = new DistributionSQLHelper(bridge.Instance); DistributionHelper.SetStartingDistributionPriority(); ActiveAdPacks = DistributionHelper.GetSumOfActiveAdPacks(); try { if (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.Classic) { //Classic //Nothing to change } if (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.CustomGroups || AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticAndCustomGroups) { //CustomGrups if (AppSettings.RevShare.AdPack.CustomReturnOption == CustomReturnOption.Accelerate) { DistributionHelper.UpdatePrioritiesCustomGroups(); } } if (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticGroups || AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticAndCustomGroups) { //AutomaticGroups DistributionHelper.UpdatePrioritiesAutomaticGroups(); } Decimal priorities = DistributionHelper.GetSumOfPriorities(); if (ActiveAdPacks == 0) { throw new MsgException("No active AdPacks with active members. " + GetNoDistributionMessage(HourDistribution)); } //Make the distribution var adPackTypes = AdPackTypeManager.GetAllTypes(); foreach (var adPackType in adPackTypes) { var returnedPercentage = 0.0m; if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Fixed) { PerUnit = GetMoneyPerUnit(GetMoneyPerUnitFixed(adPackType), HourDistribution, FinalDistributionButHourly, adPackType); returnedPercentage = adPackType.FixedDistributionValuePercent; } else if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Pools) { PerUnit = GetMoneyPerUnit(GetMoneyPerUnitPools(InThePool, priorities), HourDistribution, FinalDistributionButHourly, adPackType); returnedPercentage = PerUnit.ToDecimal() / adPackType.Price.ToDecimal(); } RaportMessage += "<b>" + adPackType.Name + "</b> for priority 1.00 (no acceleration): <b>" + PerUnit.ToClearString() + "</b>. <br/>"; if (PerUnit > Money.Zero) { TotalDistributed += DistributionHelper.DistributeUsingPriority(PerUnit, adPackType.Id); } RevShareManager.AddAdPackTypePercentageHistory(adPackType.Id, returnedPercentage); } if (TitanFeatures.isAri) { AriRevShareDistribution.CreditAriRevShareDistribution(); } } catch (MsgException ex) { RaportMessage += ex.Message; } catch (Exception ex) { ErrorLogger.Log(ex); } Pool.SumAmount -= TotalDistributed; if (HourDistribution == false) { if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Pools) { RaportMessage += "Money moved to the next day pool: " + Pool.SumAmount.ToClearString() + ". "; } Pool.MoveMoneyForTomorrow(); } Pool.Save(); Report.Add(ActiveAdPacks, InThePool, TotalDistributed, RaportMessage); CustomGroupManager.TrySetGroupsAsExpired(); } }
public static Money GetMaxPossiblePayout(PaymentProcessor processor, Member user, out string errorNote) { PaymentProportionsManager manager = new PaymentProportionsManager(user); decimal maxDailyPayout = user.Membership.MaxDailyCashout.ToDecimal() - user.PaidOutToday.ToDecimal(); if (maxDailyPayout < 0) { maxDailyPayout = 0; } decimal maxGlobalPayout = user.Membership.MaxGlobalCashout.ToDecimal() - user.MoneyCashout.ToDecimal(); decimal maxFromProcessor = 0m; decimal maxSinglePayout = 0m; decimal maxBasedOnAdPacks = 0m; if (AppSettings.Payments.MaximumPayoutPolicy == MaximumPayoutPolicy.Constant) { maxSinglePayout = AppSettings.Payments.MaximumPayoutConstant.ToDecimal(); } else if (AppSettings.Payments.MaximumPayoutPolicy == MaximumPayoutPolicy.Percentage) { maxSinglePayout = Money.MultiplyPercent(user.MainBalance, AppSettings.Payments.MaximumPayoutPercentage).ToDecimal(); } Dictionary <string, decimal> dic = new Dictionary <string, decimal>(); dic.Add(L1.MEMBERSHIP, maxDailyPayout); dic.Add(U6011.PAYMENTS, maxSinglePayout); dic.Add(U5002.YOUCANNOTCASHOUTLIMIT, maxGlobalPayout); if (AppSettings.Payments.ProportionalPayoutLimitsEnabled && processor != PaymentProcessor.CustomPayoutProcessor) { maxFromProcessor = manager.GetMaximum(processor).ToDecimal(); dic.Add(string.Format(U6011.PROPORTIONALLIMITSPROCESSOR), maxFromProcessor); } if (AppSettings.Payments.AdPackTypeWithdrawLimitEnabled) { maxBasedOnAdPacks = (AdPackTypeManager.GetWithdrawalLimit(user.Id) - user.MoneyCashout).ToDecimal(); if (maxBasedOnAdPacks < 0m) { maxBasedOnAdPacks = 0m; } dic.Add(AppSettings.RevShare.AdPack.AdPackNamePlural, maxBasedOnAdPacks); } //Maximum withdrawal of deposited amount % if (user.Membership.MaxWithdrawalAllowedPerInvestmentPercent < 1000000000) { PaymentProportionsManager ppm = new PaymentProportionsManager(user); Money invested = ppm.TotalPaidIn; Money withdrawn = ppm.TotalPaidOut; Money canwithdraw = Money.MultiplyPercent(invested, user.Membership.MaxWithdrawalAllowedPerInvestmentPercent); dic.Add(U6011.MEMBERSHIPMAXWITDRAWAL, (canwithdraw - withdrawn).ToDecimal()); } var min = dic.OrderBy(x => x.Value).First(); var money = new Money(min.Value); errorNote = string.Format(U6011.PAYOUTREQUESTTOOHIGH, money.ToString(), min.Key); if (money > user.MainBalance) { errorNote = string.Format(U6012.PAYOUTREQUESTBALANCEERROR, user.MainBalance.ToString()); money = user.MainBalance; } return(money > Money.Zero ? money : Money.Zero); }