예제 #1
0
    public static void Apply(CustomGroup type, UserCustomGroup userCustomGroup)
    {
        //Temporary (for better performance)
        List <AdPackType> typesList     = TableHelper.SelectAllRows <AdPackType>();
        AdPack            creatorAdPack = null;
        var types = new Dictionary <int, AdPackType>();

        foreach (var typeList in typesList)
        {
            types.Add(typeList.Id, typeList);
        }

        Random     random    = new Random();
        List <int> adPackIds = new List <int>();

        //Value of purchases
        Money memberPurchasesAmount  = Money.Zero;
        Money creatorPurchasesAmount = Money.Zero;
        var   adpacks = AdPackManager.GetAllAdPacksInCustomGroup(userCustomGroup.Id);

        foreach (var adpack in adpacks)
        {
            if (adpack.UserId != userCustomGroup.CreatorUserId)
            {
                memberPurchasesAmount += types[adpack.AdPackTypeId].Price;
                adPackIds.Add(adpack.Id);
            }
            else
            {
                creatorPurchasesAmount += types[adpack.AdPackTypeId].Price;
            }
        }

        //Reward for creator
        var    creatorReward = Money.MultiplyPercent(memberPurchasesAmount, type.CreatorRewardBonusPercent);
        Member GroupCreator  = new Member(userCustomGroup.CreatorUserId);

        GroupCreator.AddToPurchaseBalance(creatorReward, "Custom Group creator bonus");
        GroupCreator.SaveBalances();

        //Prize1
        var    prize1Reward    = Money.MultiplyPercent(memberPurchasesAmount, type.FirstRewardPercent);
        int    wonPrize1Ticket = random.Next(0, adPackIds.Count);
        Member Prize1Winner    = new Member((new AdPack(adPackIds[wonPrize1Ticket])).UserId);

        Prize1Winner.AddToPurchaseBalance(prize1Reward, "Custom Group 1st prize");
        Prize1Winner.SaveBalances();

        //Prize2
        var    prize2Reward    = Money.MultiplyPercent(creatorPurchasesAmount, type.SecondRewardPercent);
        int    wonPrize2Ticket = random.Next(0, adPackIds.Count);
        Member Prize2Winner    = new Member((new AdPack(adPackIds[wonPrize2Ticket])).UserId);

        Prize2Winner.AddToPurchaseBalance(prize2Reward, "Custom Group 2nd prize");
        Prize2Winner.SaveBalances();

        userCustomGroup.BonusExtraInformation =
            String.Format("Creator username: <b>{0}</b>, reward: <b>{1}</b>, 1st prize winner: <b>{2}</b> ({3}), 2nd prize winner: <b>{4}</b> ({5}).",
                          GroupCreator.Name, creatorReward.ToString(), Prize1Winner.Name, prize1Reward.ToString(), Prize2Winner.Name, prize2Reward.ToString());
    }
예제 #2
0
    public static int GetNumberOfUsersAdPacksInCustomGroupAvailableToWithdraw(int userId, int userCustomGroupId)
    {
        UserCustomGroup userCustomGroup = new UserCustomGroup(userCustomGroupId);
        CustomGroup     customGroup     = new CustomGroup(userCustomGroup.CustomGroupId);
        var             active          = GetUsersActiveAdPacksForGroups(userId, customGroup, userCustomGroupId).Count;

        var numberOfAvailableAdPacks = active - GetNumberOfUsersAdPacksInCustomGroup(userId, userCustomGroupId);

        return(numberOfAvailableAdPacks);
    }
예제 #3
0
    public static void CreateUserCustomGroup(UserCustomGroup userGroup, CustomGroup customGroup, IEnumerable <AdPack> adPackList, Member user, string name, string description, string videoURL = "",
                                             string email = "", string skype = "", string phoneNumber = "", string facebookURL = "")
    {
        userGroup.CreatorUserId = user.Id;
        userGroup.Name          = name;
        userGroup.Description   = description;

        if (!string.IsNullOrWhiteSpace(videoURL))
        {
            userGroup.PromoUrl = videoURL;
        }

        if (!string.IsNullOrWhiteSpace(email))
        {
            userGroup.Email = email;
        }

        if (!string.IsNullOrWhiteSpace(skype))
        {
            userGroup.Skype = skype;
        }

        if (!string.IsNullOrWhiteSpace(phoneNumber))
        {
            userGroup.PhoneNumber = phoneNumber;
        }

        if (!string.IsNullOrWhiteSpace(facebookURL))
        {
            userGroup.FacebookUrl = facebookURL;
        }

        userGroup.CustomGroupId = customGroup.Id;
        userGroup.AdPacksAdded  = adPackList.Count();
        userGroup.GotBonus      = false;


        userGroup.Save();

        foreach (AdPack adpack in adPackList)
        {
            adpack.UserCustomGroupId = userGroup.Id;
            adpack.Save();
        }
    }
예제 #4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        AccessManager.RedirectIfDisabled(AppSettings.TitanFeatures.AdvertAdPacksEnabled &&
                                         (AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.CustomGroups || AppSettings.RevShare.AdPack.GroupPolicy == GroupPolicy.AutomaticAndCustomGroups));

        if (Request.Params.Get("g") == null)
        {
            Response.Redirect("~/default.aspx");
        }

        if (!Int32.TryParse(Request.Params.Get("g"), out _userCustomGroupId))
        {
            Response.Redirect("~/default.aspx");
        }

        try
        {
            userCustomGroup = new UserCustomGroup(userCustomGroupId);
        }
        catch (IndexOutOfRangeException ex)
        {
            Response.Redirect("~/default.aspx");
        }

        if (Member.IsLogged)
        {
            User = Member.Current;
        }
        else
        {
            Button2.Visible = false;
        }

        if (Member.IsLogged)
        {
            UpdateAvailableAdPacks();
        }

        DataBind();
    }
예제 #5
0
    public static List <KeyValuePair <string, int> > GetParticipantNamesAndAdPackCount(UserCustomGroup userCustomGroup)
    {
        List <KeyValuePair <string, int> > userNames = new List <KeyValuePair <string, int> >();
        var adPacks = TableHelper.GetListFromRawQuery <AdPack>(string.Format("SELECT ap.UserId, SUM(1) as TotalClicks FROM AdPacks ap WHERE ap.UserCustomGroupId = {0} GROUP BY ap.UserId", userCustomGroup.Id));

        foreach (var adPack in adPacks)
        {
            if (adPack.UserId != userCustomGroup.CreatorUserId)
            {
                string userName = new Member(adPack.UserId).Name;
                userNames.Add(new KeyValuePair <string, int>(userName, adPack.TotalClicks));
            }
        }
        return(userNames);
    }
예제 #6
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
        }
    }
예제 #7
0
    public static void AddRemoveUsersAdPacksToCustomGroup(int userId, int numberOfAdPacks, UserCustomGroup userCustomGroup, bool join)
    {
        CustomGroup customGroup = new CustomGroup(userCustomGroup.CustomGroupId);

        if (userId == userCustomGroup.CreatorUserId && !join)
        {
            var packsAvailableToWithdraw = AdPackManager.GetUsersActiveAdPacksForGroups(userId, customGroup, userCustomGroup.Id).Count - customGroup.CreatorsMinNumberOfAdPacks;
            if (numberOfAdPacks > packsAvailableToWithdraw)
            {
                throw new MsgException(U4200.NOTENOUGHADPACKSAVAILABLEFORGROUPS.Replace("%n%", AppSettings.RevShare.AdPack.AdPackNamePlural));
            }
        }

        List <AdPack> allAdPacksList;

        if (join)
        {
            allAdPacksList = AdPackManager.GetUsersActiveAdPacksForGroups(userId, customGroup, -1);
        }
        else
        {
            allAdPacksList = AdPackManager.GetUsersActiveAdPacksForGroups(userId, customGroup, userCustomGroup.Id);
        }


        //HAS ENOUGH ADPACKS?
        if (allAdPacksList.Count < numberOfAdPacks)
        {
            throw new MsgException(U4200.NOTENOUGHADPACKSAVAILABLEFORGROUPS.Replace("%n%", AppSettings.RevShare.AdPack.AdPackNamePlural));
        }

        IEnumerable <AdPack> adPacksList = (from a in allAdPacksList select a).Take(numberOfAdPacks);

        //NUMBER OF PACKS TO CLOSE
        if (join)
        {
            if (customGroup.AdPacksLimit - userCustomGroup.AdPacksAdded < numberOfAdPacks)
            {
                throw new MsgException(U4200.TOOMANYPACKS.Replace("%n%", AppSettings.RevShare.AdPack.AdPackNamePlural) + " " + (customGroup.AdPacksLimit - userCustomGroup.AdPacksAdded));
            }

            //Max number of creator/user adpack limit check
            var  myCurrentAdPacksInThisGroupCount = AdPackManager.GetUsersActiveAdPacksForGroups(userId, customGroup, userCustomGroup.Id).Count;
            bool IsGroupCreator = userId == userCustomGroup.CreatorUserId;

            if (IsGroupCreator && myCurrentAdPacksInThisGroupCount + numberOfAdPacks > customGroup.CreatorsMaxNumberOfAdPacks)
            {
                throw new MsgException(U4200.TOOMANYPACKS.Replace("%n%", AppSettings.RevShare.AdPack.AdPackNamePlural) + " " + (customGroup.CreatorsMaxNumberOfAdPacks - myCurrentAdPacksInThisGroupCount));
            }

            if (!IsGroupCreator && myCurrentAdPacksInThisGroupCount + numberOfAdPacks > customGroup.UsersMaxNumberOfAdPacks)
            {
                throw new MsgException(U4200.TOOMANYPACKS.Replace("%n%", AppSettings.RevShare.AdPack.AdPackNamePlural) + " " + (customGroup.UsersMaxNumberOfAdPacks - myCurrentAdPacksInThisGroupCount));
            }
        }
        else
        {
            if (customGroup.AdPacksLimit == userCustomGroup.AdPacksAdded)
            {
                throw new MsgException("Can't leave closed group");
            }
        }

        if (join)
        {
            userCustomGroup.AdPacksAdded += numberOfAdPacks;
            foreach (AdPack adpack in adPacksList)
            {
                adpack.UserCustomGroupId = userCustomGroup.Id;
                adpack.Save();
            }
        }
        else
        {
            userCustomGroup.AdPacksAdded -= numberOfAdPacks;
            foreach (AdPack adpack in adPacksList)
            {
                adpack.UserCustomGroupId = -1;
                adpack.Save();
            }
        }

        userCustomGroup.Save();
    }