예제 #1
0
    public static void ExchangeClicksForSeconds(int numberOfSeconds, int adPackId, Member user)
    {
        AdPack     adPack     = new AdPack(adPackId);
        AdPackType adPackType = new AdPackType(adPack.AdPackTypeId);
        int        clicksLeft = (adPack.ClicksBought - adPack.TotalClicks) - 1;

        int maxExtraSecondsLeft = user.Membership.MaxExtraAdPackSecondsForClicks - (adPack.DisplayTime - adPackType.DisplayTime);

        if (numberOfSeconds > maxExtraSecondsLeft)
        {
            throw new MsgException(string.Format(U5006.CANNOTADDMORESECONDS, maxExtraSecondsLeft > 0 ? maxExtraSecondsLeft : 0));
        }

        int requiredClicks = GetReqiuredClicksForExchange(numberOfSeconds, adPackType);

        if (clicksLeft < requiredClicks)
        {
            throw new MsgException(string.Format(U5006.NOTENOUGHCLICKSFOREXCHANGE, requiredClicks + 1));
        }

        adPack.DisplayTime = adPack.DisplayTime + numberOfSeconds;

        adPack.ClicksBought = adPack.ClicksBought - requiredClicks;
        adPack.Save();
    }
예제 #2
0
    public static void TryBuyAdPack(BalanceType fromBalance, int advertId, AdPackType adPackType, int numberOfPacks, Member adPackOwner = null)
    {
        if (Member.Current.IsAnyBalanceIsNegative())
        {
            throw new MsgException(U6013.YOUCANTPROCEED);
        }

        if (numberOfPacks <= 0)
        {
            throw new MsgException(String.Format("Can't buy 0 {0}s", AppSettings.RevShare.AdPack.AdPackNamePlural));
        }

        if (fromBalance == BalanceType.PurchaseBalance)
        {
            AdPackManager.BuyPacks(numberOfPacks, advertId, Member.CurrentInCache, adPackType, PurchaseBalances.Purchase, adPackOwner: adPackOwner);
        }
        else if (fromBalance == BalanceType.CashBalance)
        {
            AdPackManager.BuyPacks(numberOfPacks, advertId, Member.CurrentInCache, adPackType, PurchaseBalances.Cash, adPackOwner: adPackOwner);
        }
        else if (fromBalance == BalanceType.Token)
        {
            AdPackManager.TryBuyAdPackForTokens(numberOfPacks, advertId, Member.CurrentInCache, adPackType, adPackOwner: adPackOwner);
        }
        else
        {
            AdPackManager.TryBuyAdPackFromAnotherBalance(numberOfPacks, advertId, Member.CurrentInCache, adPackType, fromBalance, adPackOwner: adPackOwner);
        }
    }
예제 #3
0
    protected void CalculateButton_Click(object sender, EventArgs e)
    {
        ResultPlaceHolder.Visible = false;

        var      adpackType    = new AdPackType(int.Parse(AdPackDropDownList.SelectedValue));
        var      numberOfPacks = 0;
        DateTime startDate     = DateTime.ParseExact(startDateInput.Value, "MM/dd/yyyy", Thread.CurrentThread.CurrentCulture);

        try
        {
            numberOfPacks = Convert.ToInt32(AdPacksCountTextBox.Text);
        }
        catch (Exception ex)
        {
            FailureP.Visible = true;
            FailureText.Text = U4000.BADFORMAT;
            return;
        }

        ResultPlaceHolder.Visible = true;

        var user         = Member.CurrentInCache;
        var dailyEarning = adpackType.Price * adpackType.FixedDistributionValuePercent / 100;
        int daysToFinish = 0;

        if (dailyEarning != Money.Zero)
        {
            daysToFinish = ((adpackType.Price * adpackType.PackReturnValuePercentage / 100) / dailyEarning).GetTotalsUp();
        }

        if (AppSettings.RevShare.DistributionTime == DistributionTimePolicy.EveryWeek)
        {
            EarnsLiteral.Text = U6007.WEEKLY;
            dailyEarning     *= 7;
        }
        else
        {
            EarnsLiteral.Text = L1.DAILY;
        }

        var adBalanceRepurchase = user.Membership.AdPackAdBalanceReturnPercentage * adpackType.AdBalanceReturnPercentage / 100;
        var adBalanceEarning    = dailyEarning * numberOfPacks * adBalanceRepurchase / 100;
        var mainBalanceEarning  = (100 - adBalanceRepurchase) * dailyEarning * numberOfPacks / 100;

        FinishDateLiteral.Text = string.Format("{0}: <strong>{1}</strong>", U6007.FINISHDATE, startDate.AddDays(daysToFinish).ToShortDateString());

        EarnsLiteral.Text += string.Format(" {0}: {1}: <strong>{2}</strong>, {3}: <strong>{4}</strong>",
                                           U4000.EARNINGS, L1.MAINBALANCE, mainBalanceEarning.ToString(), U6012.PURCHASEBALANCE, adBalanceEarning.ToString());
    }
예제 #4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        TokenCryptocurrency      = CryptocurrencyFactory.Get <BitcoinCryptocurrency>();
        ERC20TokenCryptocurrency = CryptocurrencyFactory.Get <ERC20TokenCryptocurrency>();


        if (!IsPostBack)
        {
            HideMessages();

            var PurchaseOptions = PurchaseOption.Get(PurchaseOption.Features.AdPack);

            BindDataToTypesDDL();
            CustomCampaignsDropDownManagement();

            CustomPurchaseViaTokenPlaceHolder.Visible             = false;
            CustomPurchaseViaMainBalancePlaceHolder.Visible       = TitanFeatures.IsTrafficThunder;
            CustomPurchaseViaCommissionBalancePlaceHolder.Visible = AppSettings.RevShare.AdPackPurchasesViaCommissionBalanceEnabled;
            CustomPurchaseViaPurchaseBalancePlaceHolder.Visible   = PurchaseOptions.PurchaseBalanceEnabled && !TitanFeatures.PurchaseBalanceDisabled;
            CustomPurchaseViaCashBalancePlaceHolder.Visible       = PurchaseOptions.CashBalanceEnabled;
            CustomPurchaseForReferralPlaceHolder.Visible          = AppSettings.RevShare.AdPack.BuyAdPacksForReferralsEnabled;

            CustomPurchaseViaERC20TokensButton.Enabled       = false;
            CustomPurchaseViaCommissionBalanceButton.Enabled = false;
            CustomPurchaseViaCashBalanceButton.Enabled       = false;
            CustomPurchaseViaPurchaseBalanceButton.Enabled   = false;
            CustomPurchaseViaMainBalanceButton.Enabled       = false;

            TOSAgreement.Checked = false;

            if (TitanFeatures.IsTrafficThunder)
            {
                CustomTypesDDLPlaceHolder.Visible = false;
            }

            LangAdders();
        }

        var adPackType = new AdPackType(Convert.ToInt32(CustomTypesDropDown.SelectedValue));

        CustomPackPriceLabel.Text = adPackType.Price.ToClearString();

        ScriptManager.RegisterStartupScript(CustomAdPackPurchaseUpdatePanel, GetType(), "AdPacksTBChanged", "AdPacksTBChanged();", true);
    }
예제 #5
0
    private void TryPrepareDataForAdPackPurchase()
    {
        AdvertId      = -1;
        NumberOfPacks = 0;
        AdPackType    = null;
        AdPackOwner   = null;
        AdPackOwnerId = null;

        //Get Advert Id
        try
        {
            AdvertId = Convert.ToInt32(CustomCampaignsDropDown.SelectedValue);
        }
        catch (Exception ex) { }

        //Get number of AdPacks
        try
        {
            Money CostOfPack = Money.Parse(CustomPackPriceLabel.Text);
            NumberOfPacks = (int)(Decimal.Parse((MoneyToInvestTextBox.Text)) / CostOfPack.ToDecimal());
        }
        catch (Exception ex)
        {
            throw new MsgException(U4000.BADFORMAT);
        }

        //Get AdPack type
        AdPackType = new AdPackType(Convert.ToInt32(CustomTypesDropDown.SelectedValue));


        //Get referral for AdPack
        if (AppSettings.RevShare.AdPack.BuyAdPacksForReferralsEnabled && CustomBuyForReferralCheckBox.Checked && CustomReferralsDropDownList.Items.Count > 0)
        {
            AdPackOwnerId = Convert.ToInt32(CustomReferralsDropDownList.SelectedValue);
        }

        if (AdPackOwnerId.HasValue)
        {
            ValidateAdPacksForReferrals();
            AdPackOwner = new Member(AdPackOwnerId.Value);
        }
    }
예제 #6
0
    public static void TryBuyAdPackFromAnotherBalance(int numberOfPacks, int advertId, Member user, AdPackType adPackType, BalanceType targetType,
                                                      int?userGroupIdNullable = null, int?groupIdNullable = null, bool forcePurchaseWithoutDeducingFunds = false, Member adPackOwner = null)
    {
        Money TotalPriceForAdPacks = AdPackManager.GetAdPacksPrice(adPackType, numberOfPacks);

        if (TotalPriceForAdPacks <= Money.Zero)
        {
            throw new MsgException("Value can not be <= 0");
        }


        if (targetType == BalanceType.CommissionBalance)
        {
            if (TotalPriceForAdPacks > user.CommissionBalance)
            {
                throw new MsgException(L1.NOTENOUGHFUNDS);
            }

            try
            {
                //Funds ok, lets proceed with tokens transfer
                user.SubtractFromCommissionBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                user.AddToPurchaseBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                AdPackManager.BuyPacks(numberOfPacks, advertId, user, adPackType, PurchaseBalances.Purchase, adPackOwner: adPackOwner);
            }
            catch (MsgException ex)
            {
                user.SubtractFromPurchaseBalance(TotalPriceForAdPacks, "Reversed Purchase transfer", BalanceLogType.ReversedPurchaseTransfer);
                user.AddToPurchaseBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                throw new MsgException("<br />" + ex.Message);
            }
        }
        else if (targetType == BalanceType.MainBalance)
        {
            if (TotalPriceForAdPacks > user.MainBalance)
            {
                throw new MsgException(L1.NOTENOUGHFUNDS);
            }

            try
            {
                //Funds ok, lets proceed with tokens transfer
                user.SubtractFromMainBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                user.AddToPurchaseBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                AdPackManager.BuyPacks(numberOfPacks, advertId, user, adPackType, PurchaseBalances.Purchase, adPackOwner: adPackOwner);
            }
            catch (MsgException ex)
            {
                user.SubtractFromPurchaseBalance(TotalPriceForAdPacks, "Reversed Purchase transfer", BalanceLogType.ReversedPurchaseTransfer);
                user.AddToMainBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                throw new MsgException("<br />" + ex.Message);
            }
        }
        else if (targetType == BalanceType.BTC)
        {
            Money   BTCValue        = CryptocurrencyFactory.Get(CryptocurrencyType.BTC).GetValue();
            Decimal BTCAmountNeeded = TotalPriceForAdPacks.ToDecimal() / BTCValue.ToDecimal();

            if (BTCAmountNeeded > user.GetCryptocurrencyBalance(CryptocurrencyType.BTC).ToDecimal())
            {
                throw new MsgException(String.Format(U6012.NOFUNDSINWALLET, "BTC"));
            }

            try
            {
                //Funds ok, lets proceed with tokens transfer
                user.SubtractFromCryptocurrencyBalance(CryptocurrencyType.BTC, BTCAmountNeeded, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                user.AddToPurchaseBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                AdPackManager.BuyPacks(numberOfPacks, advertId, user, adPackType, PurchaseBalances.Purchase, adPackOwner: adPackOwner);
            }
            catch (MsgException ex)
            {
                user.SubtractFromPurchaseBalance(TotalPriceForAdPacks, "Reversed Purchase transfer", BalanceLogType.ReversedPurchaseTransfer);
                user.AddToCryptocurrencyBalance(CryptocurrencyType.BTC, BTCAmountNeeded, "Purchase transfer", BalanceLogType.PurchaseTransfer);
                throw new MsgException("<br />" + ex.Message);
            }
        }
        else
        {
            throw new MsgException("Not implemented transaction");
        }
    }
예제 #7
0
    public static void TryBuyAdPackForTokens(int numberOfPacks, int advertId, Member user, AdPackType adPackType,
                                             int?userGroupIdNullable = null, int?groupIdNullable = null, bool forcePurchaseWithoutDeducingFunds = false, Member adPackOwner = null)
    {
        var TokenCryptocurrency = CryptocurrencyFactory.Get(CryptocurrencyType.ERC20Token);

        //Check all basic values
        Money   TotalPriceForAdPacks = AdPackManager.GetAdPacksPrice(adPackType, numberOfPacks);
        Money   TokenValue           = TokenCryptocurrency.GetValue();
        Decimal TokenNumberNeeded    = TotalPriceForAdPacks.ToDecimal() / TokenValue.ToDecimal();

        if (TokenValue <= Money.Zero)
        {
            throw new MsgException("Amount of tokens can not be <= 0");
        }

        if (TokenNumberNeeded > user.GetCryptocurrencyBalance(CryptocurrencyType.ERC20Token).ToDecimal())
        {
            throw new MsgException(String.Format(U6012.NOFUNDSINWALLET, TokenCryptocurrency.Code));
        }

        try
        {
            //Funds ok, lets proceed with tokens transfer
            user.SubtractFromCryptocurrencyBalance(CryptocurrencyType.ERC20Token, TokenNumberNeeded, "Purchase transfer", BalanceLogType.PurchaseTransfer);
            user.AddToPurchaseBalance(TotalPriceForAdPacks, "Purchase transfer", BalanceLogType.PurchaseTransfer);

            AdPackManager.BuyPacks(numberOfPacks, advertId, user, adPackType, PurchaseBalances.Purchase, adPackOwner: adPackOwner);
        }
        catch (MsgException ex)
        {
            user.AddToCryptocurrencyBalance(CryptocurrencyType.ERC20Token, TokenNumberNeeded, "Reversed Purchase transfer", BalanceLogType.ReversedPurchaseTransfer);
            user.SubtractFromPurchaseBalance(TotalPriceForAdPacks, "Reversed Purchase transfer", BalanceLogType.ReversedPurchaseTransfer);
            throw new MsgException("<br />" + ex.Message);
        }
    }
예제 #8
0
    public static int GetReqiuredClicksForExchange(int numberOfSeconds, AdPackType adPackType)
    {
        int oneSecondInClicks = adPackType.ValueOf1SecondInClicks;

        return(numberOfSeconds * oneSecondInClicks);
    }
예제 #9
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);
    }
예제 #10
0
 public static Money GetAdPacksPrice(AdPackType adPackType, int numberOfPacks)
 {
     return(adPackType.Price * numberOfPacks);
 }
예제 #11
0
        public static void CheckAndUpdateStatistics(StatisticsType Type)
        {
            Statistics Stat;

            switch (Type)
            {
            case StatisticsType.TotalMembersCount:
                Stat = new Statistics(Type);
                var where1 = new Dictionary <string, object>();

                where1.Add("AccountStatusInt", (int)MemberStatus.Active);
                int totalmember = TableHelper.CountOf <Member>(where1);

                where1.Add(Member.Columns.MembershipName, Memberships.Membership.Standard.Name);
                int upgradedmember = TableHelper.CountOf <Member>(where1);
                upgradedmember = totalmember - upgradedmember;

                //Now update
                var list1 = TableHelper.GetIntListFromString(Stat.Data1);
                list1[0]   = totalmember;
                Stat.Data1 = TableHelper.GetStringFromIntList(list1);

                var list2 = TableHelper.GetIntListFromString(Stat.Data2);
                list2[0]   = upgradedmember;
                Stat.Data2 = TableHelper.GetStringFromIntList(list2);

                Stat.Save();
                break;

            case StatisticsType.PointsInSystem:
                Stat = new Statistics(Type);

                //Now update
                var list888 = TableHelper.GetIntListFromString(Stat.Data1);
                list888[0] = AppSettings.Points.TotalInSystem;
                Stat.Data1 = TableHelper.GetStringFromIntList(list888);

                Stat.Save();
                break;

            case StatisticsType.PointsGenerated:
                Stat = new Statistics(Type);

                //Now update
                var list999        = TableHelper.GetIntListFromString(Stat.Data1);
                int totalNow       = AppSettings.Points.TotalGenerated;
                int totalYesterday = AppSettings.Points.TotalGeneratedUpToYesterday;
                int totalToday     = totalNow - totalYesterday;

                list999[0] = totalToday;
                Stat.Data1 = TableHelper.GetStringFromIntList(list999);

                Stat.Save();
                break;

            case StatisticsType.AvailableReferrals:
                Stat = new Statistics(Type);
                //Now update
                var list3 = TableHelper.GetIntListFromString(Stat.Data1);
                list3[0]   = RentReferralsSystem.GetAvailableNormalReferralsCount();
                Stat.Data1 = TableHelper.GetStringFromIntList(list3);

                Stat.Save();
                break;

            case StatisticsType.NormalRentedReferrals:
                Stat = new Statistics(Type);
                //Now update
                var list4 = TableHelper.GetIntListFromString(Stat.Data1);
                list4[0]   = RentReferralsSystem.GetRentedNormalReferralsCount();
                Stat.Data1 = TableHelper.GetStringFromIntList(list4);

                Stat.Save();
                break;

            case StatisticsType.BotRentedReferrals:
                Stat = new Statistics(Type);
                //Now update
                var list5 = TableHelper.GetIntListFromString(Stat.Data1);
                list5[0]   = RentReferralsSystem.GetRentedBotReferralsCount();
                Stat.Data1 = TableHelper.GetStringFromIntList(list5);

                Stat.Save();
                break;

            case StatisticsType.MoneyDistributedPerAdPack:
                Stat = new Statistics(Type);
                //Now update
                //TO DO: review
                var        list6 = TableHelper.GetMoneyListFromString(Stat.Data1);
                AdPackType type  = AdPackType.Standard;
                list6[0]   = new Money(type.Price.ToDecimal() * (type.FixedDistributionValuePercent / (Decimal)100));
                Stat.Data1 = TableHelper.GetStringFromMoneyList(list6);

                Stat.Save();
                break;

            case StatisticsType.AvailableFunds:

                //Handle
                var list = PaymentAccountDetails.AllGateways;

                foreach (var account in list)
                {
                    var where = TableHelper.MakeDictionary("Type", (int)StatisticsType.AvailableFunds);
                    where.Add("Data1", StatisticsManager.GetPaymentAccountName(account));

                    var TempStatList = TableHelper.SelectRows <Statistics>(where);
                    if (TempStatList.Count > 0)
                    {
                        Statistics stat = TempStatList[0];
                        if (stat != null)
                        {
                            stat.SetData2(account.Account.Balance);
                            stat.Save();
                        }
                    }
                }

                //var where2 = TableHelper.MakeDictionary("Type", (int)StatisticsType.AvailableFunds);
                //where2.Add("Data1", AppSettings.Cryptocurrencies.APIProvider.ToString());

                //var tempStatList2 = TableHelper.SelectRows<Statistics>(where2);
                //if (tempStatList2.Count > 0)
                //{
                //    var stat = tempStatList2[0];
                //    if (stat != null)
                //    {
                //        stat.SetData2(BitcoinAPIFacotry.Get().GetAccountBalance());
                //        stat.Save();
                //    }
                //}

                break;
            }
        }
 private static Money GetMoneyPerUnitFixed(AdPackType type)
 {
     return(new Money(type.Price.ToDecimal() * (type.FixedDistributionValuePercent / (Decimal)100)));
 }
    private static Money GetMoneyPerUnit(Money PerUnit, bool HourDistribution, bool FinalDistributionButHourly, AdPackType adPackType)
    {
        if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Pools)
        {
            var maxRoi = Money.MultiplyPercent(Money.MultiplyPercent(adPackType.Price, adPackType.PackReturnValuePercentage),
                                               AppSettings.RevShare.AdPack.MaxDailyROIPercent);

            if (PerUnit > maxRoi)
            {
                PerUnit = maxRoi;
            }
        }

        //Hour distribution?
        if (HourDistribution)
        {
            PerUnit = new Money(PerUnit.ToDecimal() / (Decimal)(24));
        }

        //Hour but final
        if (FinalDistributionButHourly)
        {
            PerUnit = PerUnit - (AppSettings.RevShare.HourlyDistributionsMadeToday * (new Money(PerUnit.ToDecimal() / (Decimal)(24))));
        }

        return(PerUnit);
    }