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()); }
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); }
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(); } }
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(); }
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); }
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 } }
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(); }