public static void BuySurfAds(int adPacksAdvertId, Member user, SurfAdsPack surfAdsPack, PurchaseBalances targetBalance) { var availablePacks = SurfAdsPack.GetAllActivePacks(); if (surfAdsPack.Status != SurfAdsPackStatus.Active) { throw new MsgException("Selected Surf Ads Pack is unavailable"); } //BUY ADPACKS var totalPrice = surfAdsPack.Price; PurchaseOption.ChargeBalance(user, totalPrice, PurchaseOption.Features.SurfAd.ToString(), targetBalance, string.Format("{0} purchase", U5004.SURFADS)); AdPacksAdvert ad = new AdPacksAdvert(adPacksAdvertId); AdPack pack = new AdPack(); pack.MoneyReturned = new Money(0); pack.AdPacksAdvertId = adPacksAdvertId; pack.TotalConstantBannerImpressions = pack.ConstantBannerImpressionsBought = 0; pack.NormalBannerImpressionsBought = pack.TotalNormalBannerImpressions = 0; pack.ClicksBought = surfAdsPack.Clicks; pack.PurchaseDate = DateTime.Now; pack.MoneyToReturn = pack.MoneyReturned = new Money(0); pack.UserCustomGroupId = -1; pack.UserId = user.Id; pack.DistributionPriority = new Decimal(0); pack.AdPackTypeId = -1; pack.DisplayTime = surfAdsPack.DisplayTime; pack.Save(); //Pools PoolDistributionManager.AddProfit(ProfitSource.SurfAds, totalPrice); }
/// <summary> /// Return current banner that should be displayed, NULL otherwise /// </summary> /// <param name="type"></param> /// <param name="position">if you want to get different position than 1st banner (e.g. you have multiple banner controls)</param> /// <returns></returns> public static BannerAdvert GetCurrentBanner(BannerAdvertDimensions dimensions, int position = 1) { using (var bridge = ParserPool.Acquire(Database.Client)) { var currentSql = bridge.Instance.ExecuteRawCommandToDataTable(BannerAuctionSQLManager.GetCurrentSQL(dimensions)); var currentList = TableHelper.GetListFromDataTable <BannerAuction>(currentSql, 1); if (currentList.Count > 0) { BannerAuction auction = currentList[0]; BannerBid bid = auction.GetHighestBid(position); if (bid != null) { if (!bid.RefAndPoolsCredited) { BannerCrediter crediter = new BannerCrediter(new Member(bid.Username)); Money moneyLeftForPools = crediter.CreditReferer(bid.BidValue); PoolDistributionManager.AddProfit(ProfitSource.Banners, moneyLeftForPools); bid.RefAndPoolsCredited = true; bid.Save(); } return(new BannerAdvert(bid.BannerAdvertId)); } } return(null); } }
private void buyAdvert(string advertTypeName, int advertId, Money money, string from, string transId, string cryptoCurrencyInfo) { var advert = (Advert)Activator.CreateInstance(Type.GetType(advertTypeName), new object[] { advertId }); //Prevent fraud transactions (GET price modifications)c //NOTE: {X}.XXX cost = {X}.XX received (1.051 = 1.05, 1.059 = 1.05) //That is why we add 0.009 bool successful = false; if ((money + new Money(0.009)) >= advert.Price) { successful = true; advert.Status = AdvertStatus.WaitingForAcceptance; advert.SaveStatus(); } //Earnings stats if (advert is BannerAdvert) { BannerAdvert thisAdvert = (BannerAdvert)advert; EarningsStatsManager.Add(EarningsStatsType.Banner, money); PoolDistributionManager.AddProfit(ProfitSource.Banners, money); } //AddLog PaymentProcessor PP = PaymentAccountDetails.GetFromStringType(from); CompletedPaymentLog.Create(PP, "Purchase Advertisement pack", transId, advert.Advertiser.CreatedBy == Advertiser.Creator.Stranger, advert.Advertiser.MemberUsername, money, Money.Zero, successful, cryptoCurrencyInfo); }
public static void AddMoneyToRevenuePool(Money amount) { var poolId = PoolsHelper.GetBuiltInProfitPoolId(Pools.AdPackRevenueReturn); var pool = TableHelper.GetListFromRawQuery <ProfitPoolDistribution>(string.Format("SELECT * FROM ProfitPoolDistribution WHERE Pool = {0}", poolId)).FirstOrDefault(); if (pool != null) { PoolDistributionManager.AddProfit(ProfitSource.Memberships, amount, pool); } }
public void BuyStage(Money costOfStage) { Money moneySpent = base.CreditReferersMainBalance(costOfStage, "JackpotPvp Stage buy /ref/" + User.Name, BalanceLogType.PvpJackpotBuy); Money moneyLeft = costOfStage - moneySpent; User.SubtractFromCashBalance(costOfStage, "Pvp Jackpot stage buy"); User.Save(); PoolDistributionManager.AddProfit(ProfitSource.JackpotPvp, moneyLeft); }
private static void CreditWinner(Jackpot jackpot, JackpotWinningTicket winningTicket, Member winner) { var prizeType = GetPrizeType(jackpot, winner); switch (prizeType) { case JackpotPrize.MainBalance: var mainBalancePrize = jackpot.MainBalancePrize / jackpot.NumberOfWinningTickets; winner.AddToMainBalance(mainBalancePrize, "Jackpot win", BalanceLogType.Other); winner.SaveBalances(); History.AddJackpotWin(winner.Name, string.Format("{0} - {1}", L1.MAINBALANCE, mainBalancePrize.ToString()), winningTicket.WinningTicketNumber.ToString(), jackpot.Name); PoolDistributionManager.SubtractProfit(ProfitSource.Jackpots, mainBalancePrize); break; case JackpotPrize.AdBalance: var adBalancePrize = jackpot.AdBalancePrize / jackpot.NumberOfWinningTickets; winner.AddToPurchaseBalance(adBalancePrize, "Jackpot win", BalanceLogType.Other); winner.SaveBalances(); History.AddJackpotWin(winner.Name, string.Format("{0} - {1}", U6012.PURCHASEBALANCE, adBalancePrize.ToString()), winningTicket.WinningTicketNumber.ToString(), jackpot.Name); PoolDistributionManager.SubtractProfit(ProfitSource.Jackpots, adBalancePrize); break; case JackpotPrize.LoginAdsCredits: var loginAdsCreditsPrize = jackpot.LoginAdsCreditsPrize / jackpot.NumberOfWinningTickets; winner.AddToLoginAdsCredits(loginAdsCreditsPrize, "Jackpot win"); winner.SaveBalances(); History.AddJackpotWin(winner.Name, string.Format("{0} - {1}", U5008.LOGINADSCREDITS, loginAdsCreditsPrize.ToString()), winningTicket.WinningTicketNumber.ToString(), jackpot.Name); break; case JackpotPrize.Upgrade: var upgradeMembershipDaysPrize = jackpot.UpgradeDaysPrize / jackpot.NumberOfWinningTickets; if (winner.MembershipId == Membership.Standard.Id) { winner.Upgrade(new Membership(jackpot.UpgradeIdPrize), new TimeSpan(upgradeMembershipDaysPrize, 0, 0, 0)); } else { winner.Upgrade(new Membership(jackpot.UpgradeIdPrize), winner.MembershipExpires.HasValue ? winner.MembershipExpires.Value.AddDays(upgradeMembershipDaysPrize) : AppSettings.ServerTime.AddDays(upgradeMembershipDaysPrize)); } History.AddJackpotWin(winner.Name, string.Format("{0} - {1}", U5008.UPGRADED, winner.Membership.Name), winningTicket.WinningTicketNumber.ToString(), jackpot.Name); break; default: break; } JackpotTicketPrize prize = new JackpotTicketPrize(); prize.JackpotId = jackpot.Id; prize.PrizeType = prizeType; prize.Save(); }
public static void AddPack(Member user, MembershipPack pack, Money paidAmountToValidate = null) { Money PackPrice = pack.GetPrice(user); if (paidAmountToValidate != null && paidAmountToValidate < PackPrice) { throw new MsgException(string.Format("{0} is not enough to buy the chosen Membership ({1} - {2})", paidAmountToValidate, pack.Membership.Name, PackPrice)); } user.Upgrade(pack); //Add history entry History.AddUpgradePurchase(user.Name, pack.Membership.Name, PackPrice); //Update pack stats pack.CopiesBought++; pack.Save(); //Credit Balances Bonuses var AdBalanceBonus = pack.Membership.AdBalanceBonusForUpgrade; var CashBalanceBonus = pack.Membership.CashBalanceBonusForUpgrade; var TrafficBalanceBonus = pack.Membership.TrafficBalanceBonusForUpgrade; if (AdBalanceBonus > Money.Zero) { user.AddToPurchaseBalance(AdBalanceBonus, "Bonus from Upgrade"); } if (AppSettings.Payments.CashBalanceEnabled && CashBalanceBonus > Money.Zero) { user.AddToCashBalance(CashBalanceBonus, "Bonus from Upgrade"); } if (AppSettings.TitanFeatures.EarnTrafficExchangeEnabled && TrafficBalanceBonus > Money.Zero) { user.AddToTrafficBalance(TrafficBalanceBonus, "Bonus from Upgrade"); } var moneyLeftForPools = PackPrice; Titan.UpgradeCrediter Crediter = (Titan.UpgradeCrediter)Titan.CrediterFactory.Acquire(user, Titan.CreditType.Upgrade); moneyLeftForPools = Crediter.CreditReferer(PackPrice); //LeadershipSystem var list = new List <RestrictionKind>(); list.Add(RestrictionKind.RequiredMembership); LeadershipSystem.CheckSystem(list, user); //Pools PoolDistributionManager.AddProfit(ProfitSource.Memberships, moneyLeftForPools); }
public void CreditWin(Money cashWon) { base.CreditMainBalance(cashWon, "PvpJackpot Win", BalanceLogType.PvpJackpotWin); User.Save(); if (TitanFeatures.IsNightwolf && PoolDistributionManager.GetGlobalPoolSumInMoney(PoolsHelper.GetBuiltInProfitPoolId(Pools.PvpJackpotGamePool)) < cashWon) { GlobalPoolManager.SubtractFromPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.AdministratorProfit), cashWon); } else { GlobalPoolManager.SubtractFromPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.PvpJackpotGamePool), cashWon); } }
public void TryTransfer(Money value) { //Anti-Injection Fix if (value <= new Money(0)) { throw new MsgException(L1.ERROR); } if (value > from.MainBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } CheckPersonalSettings(); if (from.Name == to.Name) { throw new MsgException("You can't send money to yourself :-)"); } from.SubtractFromMainBalance(value, "Member transfer to " + to.Name); Money amountWithFee = Money.Zero; if (AppSettings.Payments.TransferMode == TransferFundsMode.AllowPointsAndMainBalance || AppSettings.Payments.TransferMode == TransferFundsMode.AllowMainBalanceOnly) { amountWithFee = GetAmountWithFee(value, TransferFeeType.OtherUserMainToMain, to); to.AddToMainBalance(amountWithFee, "Member transfer from " + from.Name); } else if (AppSettings.Payments.TransferMode == TransferFundsMode.AllowMainToPurchaseBalance) { amountWithFee = GetAmountWithFee(value, TransferFeeType.OtherUserMainToPurchase, to); to.AddToPurchaseBalance(amountWithFee, "Member transfer from " + from.Name); } from.SaveBalances(); to.SaveBalances(); History.AddTransfer(from.Name, value, from.Name, to.Name); History.AddTransfer(to.Name, amountWithFee, from.Name, to.Name); //Pools Money moneyLeft = value - amountWithFee; PoolDistributionManager.AddProfit(ProfitSource.TransferFees, moneyLeft); }
public static void GiveTickets(Jackpot jackpot, Member user, int tickets) { if (!AppSettings.TitanFeatures.MoneyJackpotEnabled) { throw new MsgException("Jackpots unavailable"); } for (int i = 0; i < tickets; i++) { JackpotTicket ticket = new JackpotTicket(); ticket.JackpotId = jackpot.Id; ticket.UserId = user.Id; ticket.Save(); } var totalPrice = jackpot.TicketPrice * tickets; PoolDistributionManager.AddProfit(ProfitSource.Jackpots, totalPrice); }
public static void TryCheckSystemPoolsCash(int selectedStageId) { var CurrentStage = new JackpotPvpStage(selectedStageId); Money MoneyToWin = (CurrentStage.Cost / BattlesAmountPerStage) * Decimal.Parse(CurrentStage.WinPercent.ToString()) / 100; if (PoolDistributionManager.GetGlobalPoolSumInMoney(PoolsHelper.GetBuiltInProfitPoolId(Pools.PvpJackpotGamePool)) < MoneyToWin) { if (TitanFeatures.IsNightwolf) { if (PoolDistributionManager.GetGlobalPoolSumInMoney(PoolsHelper.GetBuiltInProfitPoolId(Pools.AdministratorProfit)) < MoneyToWin) { throw new MsgException(U6011.NOCREDITSINSYSTEM); } } else { throw new MsgException(U6011.NOCREDITSINSYSTEM); } } }
public static void TryMarkAccountActivationFeeAsPaid(Member user, Money amount, string from, string transId, string cryptoCurrencyInfo) { bool Successful = false; try { String Message = String.Format(" {0} money for account activation. ", amount); if (amount < AppSettings.Registration.AccountActivationFee) { Message += "Amount is lower than expected! Account not activated."; History.AddEntry(Member.CurrentName, HistoryType.Transfer, Message); PoolDistributionManager.AddProfit(ProfitSource.AccountActivationFee, amount); throw new Exception(String.Format("Account activation fee is lower than expected! ({0})", amount)); } AccountActivationFeeCrediter Crediter = (AccountActivationFeeCrediter)CrediterFactory.Acquire(user, CreditType.AccountActivationFee); var moneyLeftForPools = Crediter.CreditReferer(amount); //Pools PoolDistributionManager.AddProfit(ProfitSource.AccountActivationFee, moneyLeftForPools); user.IsAccountActivationFeePaid = true; user.Save(); Message += "Account activated."; History.AddEntry(Member.CurrentName, HistoryType.Transfer, Message); Successful = true; } catch (Exception ex) { ErrorLogger.Log(ex); } PaymentProcessor PP = PaymentAccountDetails.GetFromStringType(from); CompletedPaymentLog.Create(PP, "Activation Fee", transId, false, user.Name, amount, Money.Zero, Successful, cryptoCurrencyInfo); }
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 void CreateAdButton_Click(object sender, EventArgs e) { ErrorMessagePanel.Visible = false; SuccMessagePanel.Visible = false; if (Page.IsValid) { try { User = Member.Current; AppSettings.DemoCheck(); if (URL.Enabled) { throw new MsgException(U4200.CHECKURL); } var Ad = new LoginAd { TargetUrl = URL.Text, }; if (AppSettings.LoginAds.LoginAdsCreditsEnabled && LoginAdsCreditsCheckBox.Checked) { //Login Ads Credits Ad.PricePaid = new Money((int)LoginAdCreditsPrice); } else { Ad.PricePaid = AppSettings.LoginAds.Price; } if (chbGeolocation.Checked && AppSettings.LoginAds.IsGeolocationEnabled) { //Now get it from client-state var countriesSelectedDelimited = Request.Form[GeoCountriesValues.Name].Substring(1); GeolocationUnit unit = GeolocationUnit.ParseFromCountries(countriesSelectedDelimited); //Cities unit.Cities = GeoCities.Text; unit.MinAge = Convert.ToInt32(GeoAgeMin.Text); unit.MaxAge = Convert.ToInt32(GeoAgeMax.Text); unit.Gender = (Gender)Convert.ToInt32(GeoGenderList.SelectedValue); Ad.AddGeolocation(unit); } Ad.CreatorUserId = User.Id; Ad.Status = AdvertStatusExtensions.GetStartingStatus(); var displayDate = AdDisplayDateCalendar.SelectedDate; if (displayDate <= DateTime.Now.Date) { throw new MsgException(U4200.SELECTDIFFERENTDISPLAYDATE); } if (LoginManager.GetNumberOfAdsPurchasedForDay(displayDate) >= AppSettings.LoginAds.AdsPerDay) { throw new MsgException(U4200.SELECTDIFFERENTDISPLAYDATE); } Ad.DisplayDate = displayDate; Ad.PurchaseDate = DateTime.Now; if (AppSettings.LoginAds.LoginAdsCreditsEnabled && LoginAdsCreditsCheckBox.Checked) { Ad.TargetBalance = PurchaseBalances.LoginAdsCredits; PurchaseOption.ChargeBalance(User, Ad.PricePaid, PurchaseBalances.LoginAdsCredits, U5001.LOGINAD); string extraViews = string.Format(@"({0} {1})", User.LoginAdsCredits, U4200.AVAILABLE); AvailableLoginAdsCreditsLiteral.Text = extraViews; History.AddPurchase(User.Name, Ad.PricePaid.AsPoints(), U5001.LOGINAD); } else { Ad.TargetBalance = TargetBalanceRadioButtonList.TargetBalance; PurchaseOption.ChargeBalance(User, Ad.PricePaid, TargetBalanceRadioButtonList.Feature, TargetBalanceRadioButtonList.TargetBalance, U5001.LOGINAD); //Pools PoolDistributionManager.AddProfit(ProfitSource.LoginAds, Ad.PricePaid); //Add history entry 1 History.AddPurchase(User.Name, Ad.PricePaid, U5001.LOGINAD); MatrixBase.TryAddMemberAndCredit(User, Ad.PricePaid, AdvertType.Login); } //Save advert Ad.Save(); SuccMessagePanel.Visible = true; SuccMessage.Text = U4200.ADAWAITSAPPROVAL; URL.Text = "http://"; URL.Enabled = true; CheckURLButton.Visible = true; } catch (MsgException ex) { SuccMessagePanel.Visible = false; ErrorMessagePanel.Visible = true; ErrorMessage.Text = ex.Message; } catch (Exception ex) { ErrorLogger.Log(ex); throw ex; } } }
protected void CreateAdButton_Click(object sender, EventArgs e) { ErrorMessagePanel.Visible = false; SuccMessagePanel.Visible = false; if (Page.IsValid) { try { AppSettings.DemoCheck(); Member User = null; if (Member.IsLogged) { User = Member.Logged(Context); } if (ddlOptions.SelectedItem == null) { throw new MsgException(U6002.BANNERPACKERROR); } BannerAdvertPack Pack = new BannerAdvertPack(Int32.Parse(ddlOptions.SelectedValue)); Money AdCost = Pack.Price; if (chbGeolocation.Checked) { AdCost += AppSettings.BannerAdverts.GeolocationCost; //Now get it from client-state var CTable = Request.Form[GeoCountriesValues.Name].Substring(1).Split('#'); var geoUList = GeolocationUtils.GeoCountData.Keys; foreach (string s in CTable) { if (geoUList.Contains <string>(s)) { NewBannerAdvert.BannedCountries.Add(s); } } } if (Member.IsLogged) { var targetBalance = TargetBalanceRadioButtonList.TargetBalance; PurchaseOption.ChargeBalance(User, AdCost, TargetBalanceRadioButtonList.Feature, targetBalance, "Banner campaign"); NewBannerAdvert.Advertiser = Advertiser.AsMember(User.Name); NewBannerAdvert.Status = AdvertStatusExtensions.GetStartingStatus(); NewBannerAdvert.TargetBalance = targetBalance; } else { NewBannerAdvert.Advertiser = Advertiser.AsStranger(OutEmail.Text); NewBannerAdvert.Status = AdvertStatus.Null; } //Set basics - add to db NewBannerAdvert.TargetUrl = URL.Text; NewBannerAdvert.Pack = Pack; NewBannerAdvert.Price = AdCost; NewBannerAdvert.Save(); if (Member.IsLogged) { if (AppSettings.BannerAdverts.AdvertisingPolicy != BannerPolicy.BannerBidding && (NewBannerAdvert.Status == AdvertStatus.Active || NewBannerAdvert.Status == AdvertStatus.Paused)) { BannerCrediter crediter = new BannerCrediter(User); Money moneyLeftForPools = crediter.CreditReferer(NewBannerAdvert.Price); PoolDistributionManager.AddProfit(ProfitSource.Banners, moneyLeftForPools); } //Achievements trial int UserCurrentCampaigns = TableHelper.CountOf <BannerAdvert>(TableHelper.MakeDictionary("CreatorUsername", User.Name)); bool ShouldBeSaved = User.TryToAddAchievements( Prem.PTC.Achievements.Achievement.GetProperAchievements( Prem.PTC.Achievements.AchievementType.AfterAdvertisingBannerCampaigns, UserCurrentCampaigns)); if (ShouldBeSaved) { User.Save(); } //Add history entry 1 History.AddPurchase(User.Name, AdCost, "Banner campaign"); SuccMessagePanel.Visible = true; SuccMessage.Text = U3501.ADCREATED; //Earning stats EarningsStatsManager.Add(EarningsStatsType.Banner, AdCost); MatrixBase.TryAddMemberAndCredit(User, AdCost, AdvertType.Banner); Response.Redirect("banners.aspx"); } else { //Show buttons PaymentButtons.Visible = true; CreateAdButton.Visible = false; PaymentButtons.Text = GenerateHTMLButtons.GetPaymentButtons( new BuyAdvertButtonGenerator <IBannerAdvertPack>(NewBannerAdvert)); } Session["YourCampaigns_NewBannerAdvert"] = null; } catch (MsgException ex) { ErrorMessagePanel.Visible = true; ErrorMessage.Text = ex.Message; } catch (Exception ex) { ErrorLogger.Log(ex); throw ex; } } }
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); }
public static string TryInvokeTransfer(string transferFrom, string transferTo, Money amount, Member user, ref bool htmlResponse) { var TokenCryptocurrency = CryptocurrencyFactory.Get(CryptocurrencyType.ERC20Token); //Anti-Injection Fix if (amount <= new Money(0)) { throw new MsgException(L1.ERROR); } if (!TransferHelper.IsAllowed(transferFrom, transferTo)) { throw new MsgException("This transfer is not allowed."); } if (transferFrom == "MPesa" && String.IsNullOrWhiteSpace(user.GetPaymentAddress(PaymentProcessor.MPesa))) { throw new MsgException(U6010.ACCOUNTIDREQUIRED); } AppSettings.DemoCheck(); htmlResponse = false; if (transferFrom == "Main balance") { // Option 1: From Main Balance (always available) if (amount > user.MainBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } user.SubtractFromMainBalance(amount, "Transfer from Main Balance"); user.MoneyTransferredFromMainBalance += amount; if (transferTo == "Traffic balance") { user.AddToTrafficBalance(amount, "Transfer from Main Balance"); } else if (transferTo == "Purchase balance" && AppSettings.Payments.TransferMainInAdBalanceEnabled) { user.AddToPurchaseBalance(amount, "Transfer from Main Balance"); } else if (transferTo == "Cash balance") { user.AddToCashBalance(amount, "Transfer from Main Balance"); } else if (transferTo == TokenCryptocurrency.Code + " Wallet" && AppSettings.Payments.TransferFromMainBalanceToTokenWalletEnabled) { //Let's calculate transfer amount using current token rate decimal tokenValue = CryptocurrencyFactory.Get(CryptocurrencyType.ERC20Token).ConvertFromMoney(amount); user.AddToCryptocurrencyBalance(CryptocurrencyType.ERC20Token, tokenValue, "Transfer from Main Balance"); } else { throw new MsgException("You must select your target account / this transfer is not available."); } user.Save(); AddHistoryAndTryAchievement(amount, user, "Main balance", transferTo); return(U3501.TRANSFEROK); } else if (transferFrom == "Cash balance") { if (AppSettings.Payments.CashBalanceEnabled && AppSettings.Payments.CashToAdBalanceEnabled) { if (amount > user.CashBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } user.SubtractFromCashBalance(amount, "Transfer from Cash Balance"); if (transferTo == "Purchase balance") { user.AddToPurchaseBalance(amount, "Transfer from Cash Balance"); } user.SaveBalances(); return(U3501.TRANSFEROK); } else { throw new MsgException("You cannot transfer from Cash Balance"); } } else if (transferFrom == "Commission Balance") { if (((AppSettings.Payments.CommissionToMainBalanceEnabled) || (TitanFeatures.UserCommissionToMainBalanceEnabled && user.CommissionToMainBalanceEnabled) || (AppSettings.Payments.CommissionToAdBalanceEnabled) || TitanFeatures.isAri) && user.CheckAccessCustomizeTradeOwnSystem) { if (amount > user.CommissionBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } user.SubtractFromCommissionBalance(amount, "Transfer from Commission Balance"); if (transferTo == "Main balance") { Money amountWithFee = TransferManager.GetAmountWithFee(amount, TransferFeeType.SameUserCommissionToMain, user); user.AddToMainBalance(amountWithFee, "Transfer from Commission Balance"); //Pools Money moneyLeft = amount - amountWithFee; PoolDistributionManager.AddProfit(ProfitSource.TransferFees, moneyLeft); } else if (transferTo == "Purchase balance") { user.AddToPurchaseBalance(amount, "Transfer from Commission Balance"); } else if (transferTo == "Cash balance") { user.AddToCashBalance(amount, "Transfer from Purchase Balance"); } user.SaveBalances(); return(U3501.TRANSFEROK); } else { throw new MsgException("You cannot transfer from Commission Balance"); } } else if (transferFrom == "Purchase balance") { if (!TitanFeatures.IsRevolca) { throw new MsgException("You cannot transfer from Purchase Balance"); } if (amount > user.MainBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } user.SubtractFromPurchaseBalance(amount, "Transfer from Purchase Balance"); user.AddToMainBalance(amount, "Transfer from Purchase Balance"); user.SaveBalances(); return(U3501.TRANSFEROK); } else { htmlResponse = true; return(TryInvokeProcessorTransfer(transferFrom, transferTo, amount, user)); } }
protected void CreateAdButton_Click(object sender, EventArgs e) { SPanel.Visible = false; EPanel.Visible = false; try { if (URL.Enabled) { throw new MsgException(U4200.CHECKURL); } NewAdPackAdvert.Title = InputChecker.HtmlEncode(Title.Text, Title.MaxLength, L1.TITLE); NewAdPackAdvert.Description = InputChecker.HtmlEncode(Description.Text, Description.MaxLength, L1.DESCRIPTION); NewAdPackAdvert.TargetUrl = URL.Text; Member admin = new Member(AppSettings.RevShare.AdminUsername); NewAdPackAdvert.CreatorUserId = User.Id; //No need to approve admin's adverts if (NewAdPackAdvert.CreatorUserId == admin.Id) { NewAdPackAdvert.Status = AdvertStatus.Active; } else { NewAdPackAdvert.Status = AdvertStatusExtensions.GetStartingStatus(); } NewAdPackAdvert.AddedAsType = PurchaseOption.Features.SurfAd; UrlVerifier.Check(UrlCreator.ParseUrl(URL.Text)); if (AppSettings.RevShare.AdPack.IsStartPageEnabled && PurchaseStartPageCheckBox.Checked) { if (AdPackManager.GetNumberOfStartPagesPurchasedForDay(StartPageDateCalendar.SelectedDate) > 0) { throw new MsgException("You can't buy a Start Page for a selected date"); } User = Member.Current; Money startPagePrice = AppSettings.RevShare.AdPack.StartPagePrice; if (startPagePrice > User.PurchaseBalance) { throw new MsgException(L1.NOTENOUGHFUNDS); } NewAdPackAdvert.StartPageDate = StartPageDateCalendar.SelectedDate; User.SubtractFromPurchaseBalance(startPagePrice, "Start Page"); User.SaveBalances(); //Add to profit sources PoolDistributionManager.AddProfit(ProfitSource.StartPage, startPagePrice); } NewAdPackAdvert.Save(); //Clear all ClearAll(); BindDataToCampaignsDDL(); //Display info SPanel.Visible = true; if (User.Name == AppSettings.RevShare.AdminUsername) { SText.Text = U3501.ADCREATED; } else { SText.Text = U4200.ADAWAITSAPPROVAL; } AdPacksAdGridView.DataBind(); } catch (MsgException ex) { EPanel.Visible = true; EText.Text = ex.Message; } catch (Exception ex) { ErrorLogger.Log(ex); throw ex; } }
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); }