Esempio n. 1
0
        private static List <string> GetRows(List <List <AbstractType> > typesWithMembership)
        {
            var           adpackTypes = AdPackTypeManager.GetAllActiveTypes();
            List <string> rows        = new List <string>();

            foreach (var t in adpackTypes)
            {
                var           merged = typesWithMembership.Select(x => x.Where(i => i.TypeName == t.Name).ToList());
                StringBuilder row    = new StringBuilder();

                if (!(AppSettings.RevShare.AdPack.HideAdPackTypesWhenOneEnabled && adpackTypes.Count() <= 1))
                {
                    row.AppendFormat("<tr><td><span style='color:{0}; font-weight:bold'>{1}</span></td>", t.Color, t.Name);
                }

                foreach (var item in merged)
                {
                    foreach (var i in item)
                    {
                        row.AppendFormat("<td class=\"text-center\">{0}</td><td class=\"text-center\">{1}</td>", i.Roi, i.Repurchase);
                    }
                }
                row.Append("</tr>");
                rows.Add(row.ToString());
            }
            return(rows);
        }
Esempio n. 2
0
    public static void IncreaseAdPacksReturnAmountInClosedGroup(CustomGroup customGroup, UserCustomGroup userCustomGroup)
    {
        var adPackTypes = AdPackTypeManager.GetAllActiveTypes();

        string roiEnlargedBy = "SELECT ROIEnlargedByPercentage FROM Memberships WHERE MembershipId = (SELECT UpgradeId FROM Users WHERE UserId = AdPacks.UserId)";

        foreach (var adPackType in adPackTypes)
        {
            int acceleratedPercent = adPackType.PackReturnValuePercentage + customGroup.AcceleratedProfitPercentage;

            string moneyToReturn      = string.Format(@"CAST({0} * ({1} + ({2})) AS Money)/100", adPackType.Price.ToDecimal(), acceleratedPercent, roiEnlargedBy);
            string updateAdPacksQuery = string.Format(@"UPDATE AdPacks SET MoneyToReturn = {0} WHERE UserCustomGroupId = {1} AND AdPackTypeId = {2};",
                                                      moneyToReturn, userCustomGroup.Id, adPackType.Id);

            TableHelper.ExecuteRawCommandNonQuery(updateAdPacksQuery);
        }

        int adPacksByOtherUsers = (int)TableHelper.SelectScalar(string.Format("SELECT COUNT(*) FROM AdPacks WHERE UserCustomGroupId = {0} AND UserId != {1}",
                                                                              userCustomGroup.Id, userCustomGroup.CreatorUserId));

        if (adPacksByOtherUsers > 0)
        {
            userCustomGroup.GotBonus = false; //gets saved after this function has completed
        }
        else
        {
            userCustomGroup.GotBonus = true; //gets saved after this function has completed
        }
    }
Esempio n. 3
0
    protected override object GetDataFromSource()
    {
        var types      = AdPackTypeManager.GetAllTypes();
        var dictionary = new Dictionary <int, AdPackType>();

        foreach (var type in types)
        {
            dictionary.Add(type.Id, type);
        }

        return(dictionary);
    }
Esempio n. 4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.Visible && AppSettings.RevShare.IsRevShareEnabled && !Page.IsPostBack)
        {
            ContainerPlaceHolder.Visible = true;
            NoDataLiteral.Visible        = false;

            _adPackTypes      = AdPackTypeManager.GetAllActiveTypes();
            _adPackTypesCount = _adPackTypes.Count;

            _sb = new StringBuilder();

            _sb.Append("<table class='table table-striped'><thead><tr>");

            for (int i = 0; i < _adPackTypesCount; i++)
            {
                _sb.Append(string.Format("<th style='color: {0};'>{1}</th>", _adPackTypes[i].Color, _adPackTypes[i].Name));
            }

            _sb.Append("</tr></thead><tbody><tr>");

            _sb.Append(GetTitle(U4200.ALL));

            AddStringToStringBuilder(@"SELECT COUNT (Id) FROM AdPacks WHERE UserId = {0} AND AdPackTypeId = {1}");

            _sb.Append(GetTitle(L1.ACTIVE));

            AddStringToStringBuilder(
                @"SELECT COUNT (Id) FROM AdPacks WHERE UserId = {0} AND AdPackTypeId = {1} AND MoneyReturned < MoneyToReturn");

            _sb.Append(GetTitle(U5003.EXPIRED));

            AddStringToStringBuilder(
                @"SELECT COUNT (Id) FROM AdPacks WHERE UserId = {0} AND AdPackTypeId = {1} AND MoneyReturned >= MoneyToReturn");

            _sb.Append("</tr></tbody></table>");

            TotalAdPacksLiteral.Text = _sb.ToString();
        }
        else
        {
            NoDataLiteral.Text = L1.NODATA;
        }
    }
Esempio n. 5
0
    private void BindDataToTypesDDL()
    {
        CustomTypesDropDown.Items.Clear();

        var availableTypes = AdPackTypeManager.GetAllActiveTypesForUser(Member.CurrentInCache);

        for (int i = 0; i < availableTypes.Count; i++)
        {
            string itemValue  = availableTypes[i].Id.ToString();
            string itemString = availableTypes[i].Name;

            ListItem item = new ListItem(itemString, itemValue);

            CustomTypesDropDown.Items.Insert(i, item);
            CustomTypesDropDown.SelectedIndex = 0;
        }

        if (availableTypes.Count > 0)
        {
            CustomTypesDropDown.Attributes.Add("style", string.Format("background-color:{0};color:white", availableTypes[0].Color));
        }
    }
Esempio n. 6
0
        private static List <AbstractType> GetTypeSet(Membership membership)
        {
            List <AbstractType> sets = new List <AbstractType>();
            var adPackTypes          = AdPackTypeManager.GetAllActiveTypes();

            foreach (var type in adPackTypes)
            {
                if (membership.DisplayOrder >= new Membership(type.RequiredMembership).DisplayOrder)
                {
                    var oldRoi        = type.PackReturnValuePercentage;
                    var newRoi        = membership.ROIEnlargedByPercentage;
                    var oldRepurchase = type.AdBalanceReturnPercentage;
                    var newRepurchase = membership.AdPackAdBalanceReturnPercentage;

                    sets.Add(new MappedType(type.Name, oldRoi, newRoi, oldRepurchase, newRepurchase, membership.Id));
                }
                else
                {
                    sets.Add(new NullMappedType(type.Name, membership.Id));
                }
            }

            return(sets);
        }
Esempio n. 7
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);
    }
    private static void DailyDistribution(bool HourDistribution = false, bool FinalDistributionButHourly = false)
    {
        DailyPool Pool = DailyPool.GetYesterdayPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.AdPackRevenueReturn));

        String RaportMessage    = String.Empty;
        Int32  ActiveAdPacks    = 0;
        Money  TotalDistributed = Money.Zero;
        Money  PerUnit          = Money.Zero;
        Money  InThePool        = Pool.SumAmount;

        using (var bridge = ParserPool.Acquire(Database.Client))
        {
            DistributionSQLHelper DistributionHelper = new DistributionSQLHelper(bridge.Instance);
            DistributionHelper.SetStartingDistributionPriority();
            ActiveAdPacks = DistributionHelper.GetSumOfActiveAdPacks();

            try
            {
                if (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.Classic)
                {
                    //Classic
                    //Nothing to change
                }
                if (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.CustomGroups ||
                    AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticAndCustomGroups)
                {
                    //CustomGrups
                    if (AppSettings.RevShare.AdPack.CustomReturnOption == CustomReturnOption.Accelerate)
                    {
                        DistributionHelper.UpdatePrioritiesCustomGroups();
                    }
                }
                if (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticGroups ||
                    AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticAndCustomGroups)
                {
                    //AutomaticGroups
                    DistributionHelper.UpdatePrioritiesAutomaticGroups();
                }

                Decimal priorities = DistributionHelper.GetSumOfPriorities();

                if (ActiveAdPacks == 0)
                {
                    throw new MsgException("No active AdPacks with active members. " + GetNoDistributionMessage(HourDistribution));
                }

                //Make the distribution
                var adPackTypes = AdPackTypeManager.GetAllTypes();

                foreach (var adPackType in adPackTypes)
                {
                    var returnedPercentage = 0.0m;

                    if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Fixed)
                    {
                        PerUnit            = GetMoneyPerUnit(GetMoneyPerUnitFixed(adPackType), HourDistribution, FinalDistributionButHourly, adPackType);
                        returnedPercentage = adPackType.FixedDistributionValuePercent;
                    }
                    else if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Pools)
                    {
                        PerUnit            = GetMoneyPerUnit(GetMoneyPerUnitPools(InThePool, priorities), HourDistribution, FinalDistributionButHourly, adPackType);
                        returnedPercentage = PerUnit.ToDecimal() / adPackType.Price.ToDecimal();
                    }

                    RaportMessage += "<b>" + adPackType.Name + "</b> for priority 1.00 (no acceleration): <b>" + PerUnit.ToClearString() + "</b>. <br/>";

                    if (PerUnit > Money.Zero)
                    {
                        TotalDistributed += DistributionHelper.DistributeUsingPriority(PerUnit, adPackType.Id);
                    }

                    RevShareManager.AddAdPackTypePercentageHistory(adPackType.Id, returnedPercentage);
                }
                if (TitanFeatures.isAri)
                {
                    AriRevShareDistribution.CreditAriRevShareDistribution();
                }
            }
            catch (MsgException ex)
            {
                RaportMessage += ex.Message;
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
            }

            Pool.SumAmount -= TotalDistributed;

            if (HourDistribution == false)
            {
                if (AppSettings.RevShare.AdPack.DistributionPolicy == DistributionPolicy.Pools)
                {
                    RaportMessage += "Money moved to the next day pool: " + Pool.SumAmount.ToClearString() + ". ";
                }

                Pool.MoveMoneyForTomorrow();
            }

            Pool.Save();

            Report.Add(ActiveAdPacks, InThePool, TotalDistributed, RaportMessage);

            CustomGroupManager.TrySetGroupsAsExpired();
        }
    }
Esempio n. 9
0
    public static Money GetMaxPossiblePayout(PaymentProcessor processor, Member user, out string errorNote)
    {
        PaymentProportionsManager manager = new PaymentProportionsManager(user);

        decimal maxDailyPayout = user.Membership.MaxDailyCashout.ToDecimal() - user.PaidOutToday.ToDecimal();

        if (maxDailyPayout < 0)
        {
            maxDailyPayout = 0;
        }

        decimal maxGlobalPayout = user.Membership.MaxGlobalCashout.ToDecimal() - user.MoneyCashout.ToDecimal();

        decimal maxFromProcessor  = 0m;
        decimal maxSinglePayout   = 0m;
        decimal maxBasedOnAdPacks = 0m;

        if (AppSettings.Payments.MaximumPayoutPolicy == MaximumPayoutPolicy.Constant)
        {
            maxSinglePayout = AppSettings.Payments.MaximumPayoutConstant.ToDecimal();
        }
        else if (AppSettings.Payments.MaximumPayoutPolicy == MaximumPayoutPolicy.Percentage)
        {
            maxSinglePayout = Money.MultiplyPercent(user.MainBalance, AppSettings.Payments.MaximumPayoutPercentage).ToDecimal();
        }

        Dictionary <string, decimal> dic = new Dictionary <string, decimal>();

        dic.Add(L1.MEMBERSHIP, maxDailyPayout);
        dic.Add(U6011.PAYMENTS, maxSinglePayout);
        dic.Add(U5002.YOUCANNOTCASHOUTLIMIT, maxGlobalPayout);

        if (AppSettings.Payments.ProportionalPayoutLimitsEnabled && processor != PaymentProcessor.CustomPayoutProcessor)
        {
            maxFromProcessor = manager.GetMaximum(processor).ToDecimal();
            dic.Add(string.Format(U6011.PROPORTIONALLIMITSPROCESSOR), maxFromProcessor);
        }

        if (AppSettings.Payments.AdPackTypeWithdrawLimitEnabled)
        {
            maxBasedOnAdPacks = (AdPackTypeManager.GetWithdrawalLimit(user.Id) - user.MoneyCashout).ToDecimal();

            if (maxBasedOnAdPacks < 0m)
            {
                maxBasedOnAdPacks = 0m;
            }

            dic.Add(AppSettings.RevShare.AdPack.AdPackNamePlural, maxBasedOnAdPacks);
        }

        //Maximum withdrawal of deposited amount %
        if (user.Membership.MaxWithdrawalAllowedPerInvestmentPercent < 1000000000)
        {
            PaymentProportionsManager ppm = new PaymentProportionsManager(user);
            Money invested    = ppm.TotalPaidIn;
            Money withdrawn   = ppm.TotalPaidOut;
            Money canwithdraw = Money.MultiplyPercent(invested, user.Membership.MaxWithdrawalAllowedPerInvestmentPercent);

            dic.Add(U6011.MEMBERSHIPMAXWITDRAWAL, (canwithdraw - withdrawn).ToDecimal());
        }

        var min   = dic.OrderBy(x => x.Value).First();
        var money = new Money(min.Value);

        errorNote = string.Format(U6011.PAYOUTREQUESTTOOHIGH, money.ToString(), min.Key);

        if (money > user.MainBalance)
        {
            errorNote = string.Format(U6012.PAYOUTREQUESTBALANCEERROR, user.MainBalance.ToString());
            money     = user.MainBalance;
        }

        return(money > Money.Zero ? money : Money.Zero);
    }