Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
    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);
        }
    }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
    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();
    }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
    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);
    }
Exemplo n.º 11
0
    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);
            }
        }
    }
Exemplo n.º 12
0
    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);
    }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
    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;
            }
        }
    }
Exemplo n.º 15
0
    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;
            }
        }
    }
Exemplo n.º 16
0
    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);
    }
Exemplo n.º 17
0
    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));
        }
    }
Exemplo n.º 18
0
    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;
        }
    }
Exemplo n.º 19
0
        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);
        }