コード例 #1
0
        private async Task UpsertUserReferralAsync(UserReferral referral)
        {
            if (referral != null)
            {
                var existingReferral = await _context.UserReferral.FirstOrDefaultAsync(x => x.Id == referral.Id || x.UserId == referral.UserId);

                if (existingReferral != null)
                {
                    existingReferral.Earnings        = referral.Earnings;
                    existingReferral.Enabled         = referral.Enabled;
                    existingReferral.PayoutPercent   = referral.PayoutPercent;
                    existingReferral.PayPalAccount   = referral.PayPalAccount;
                    existingReferral.ReferralCode    = referral.ReferralCode;
                    existingReferral.RequestedPayout = referral.RequestedPayout;
                    existingReferral.UserId          = referral.UserId;
                    _context.UserReferral.Update(existingReferral);
                }
                else
                {
                    _context.UserReferral.Add(referral);
                }

                await _context.SaveChangesAsync();
            }
        }
コード例 #2
0
        public async Task <IEnumerable <UserReferral> > CreateReferralsAsync(int loggedUser, IEnumerable <CreateUserReferralRequest> request)
        {
            var result = new List <UserReferral>();
            var user   = await _uow.UserRepository.GetAsync(loggedUser);

            if (user == null)
            {
                throw new NotFoundException(ExceptionConstants.NOT_FOUND, "User");
            }

            foreach (var item in request)
            {
                var referral = new UserReferral
                {
                    Email      = item.Email,
                    UserId     = loggedUser,
                    User       = user,
                    CreatedAt  = DateTime.UtcNow,
                    ModifiedAt = DateTime.UtcNow
                };

                await _uow.UserReferralRepository.AddAsync(referral);

                result.Add(referral);
            }

            await _uow.CommitAsync();

            return(result);
        }
コード例 #3
0
        public async Task <IActionResult> Index(ManageMessageId?message = null)
        {
            ViewData["StatusMessage"] =
                message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
       : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
       : message == ManageMessageId.SetTwoFactorSuccess ? "Your two-factor authentication provider has been set."
       : message == ManageMessageId.Error ? "An error has occurred."
       : message == ManageMessageId.AddPhoneSuccess ? "Your phone number was added."
       : message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed."
       : "";

            var user = await GetCurrentUserAsync();

            if (user == null)
            {
                return(View("Error"));
            }
            var model = new IndexViewModel
            {
                HasPassword       = await _userManager.HasPasswordAsync(user),
                PhoneNumber       = await _userManager.GetPhoneNumberAsync(user),
                TwoFactor         = await _userManager.GetTwoFactorEnabledAsync(user),
                Logins            = await _userManager.GetLoginsAsync(user),
                BrowserRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user),
                UserReferral      = await _context.UserReferral.FirstOrDefaultAsync(x => x.UserId == user.Id)
            };

            if (model.UserReferral == null)
            {
                var userRef = new UserReferral
                {
                    UserId       = user.Id,
                    ReferralCode = $"{user.Email.Split('@')[0]}"
                };
                _context.UserReferral.Add(userRef);

                var refPromo = await _context.Promos.FirstOrDefaultAsync(x => x.Code == userRef.ReferralCode);

                if (refPromo == null)
                {
                    _context.Promos.Add(new PromoModel
                    {
                        Code = userRef.ReferralCode,
                        DiscountPercentage = 5,
                        Enabled            = true
                    });
                }

                await _context.SaveChangesAsync();

                model.UserReferral = userRef;
            }


            ViewData["ReferralUrl"]      = $"http://{HttpContext.Request.Host}/Home/Referral/{model.UserReferral.ReferralCode}";
            ViewData["ReferralEarnings"] = Math.Round(model.UserReferral.Earnings, 2);
            return(View(model));
        }
コード例 #4
0
        public static async Task BonusPayout(BitcornContext dbContext, UserReferral userReferral, Referrer referrer, User user, User referrerUser,
                                             UserStat referrerStat)
        {
            if (userReferral != null &&
                userReferral.SignupReward != null &&
                userReferral.MinimumBalanceDate != null &&
                userReferral.WalletDownloadDate != null &&
                userReferral.SyncDate != null &&
                userReferral.Bonus == null &&
                userReferral.ReferrerBonus == null &&
                userReferral.UserSubscriptionId == null &&
                referrer != null &&
                !user.IsBanned &&
                !referrerUser.IsBanned)
            {
                var subQuery = SubscriptionUtils.GetActiveSubscription(dbContext, user, "BITCORNFarms", 1);
                if (subQuery == null)
                {
                    return;
                }

                var userSubInfo = await subQuery.FirstOrDefaultAsync();

                if (userSubInfo == null)
                {
                    return;
                }

                userReferral.UserSubscriptionId = userSubInfo.UserSubcriptionTierInfo.UserSubscription.UserSubscriptionId;

                var amount      = BONUS_PAYOUT;
                var bonusReward = await TxUtils.SendFromBitcornhub(user, amount, "BITCORNFarms", "Referral bonus reward", dbContext);

                if (IsValidReferrer(referrer))
                {
                    if (bonusReward)
                    {
                        userReferral.Bonus = DateTime.Now;
                        await LogReferralTx(dbContext, user.UserId, amount, "Recruit bonus reward");

                        var referrerBonusReward = await TxUtils.SendFromBitcornhub(referrerUser, amount, "BITCORNFarms", "Referral bonus reward", dbContext);

                        if (referrerBonusReward)
                        {
                            await UpdateYtdTotal(dbContext, referrer, amount);
                            await LogReferralTx(dbContext, referrerUser.UserId, amount, "Referral bonus reward");

                            referrerStat.TotalReferralRewardsCorn += amount;
                            referrerStat.TotalReferralRewardsUsdt += (amount * await ProbitApi.GetCornPriceAsync(dbContext));
                            userReferral.ReferrerBonus             = DateTime.Now;
                        }
                    }
                }
            }
        }
コード例 #5
0
        // GET: /<controller>/
        public async Task <IActionResult> Index()
        {
            var session = HttpContext.Session.GetString(sessionKey);
            var user    = await _userManager.GetUserAsync(HttpContext.User);

            if (session == null)
            {
                return(View(new ShoppingCartViewModel()));
            }
            else
            {
                var cart = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <ShoppingCartViewModel>(session));

                UserReferral referralCookie = null;
                PromoModel   refPromo       = null;
                if (HttpContext.Request.Cookies["Referral"] != null)
                {
                    referralCookie = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <UserReferral>(HttpContext.Request.Cookies["Referral"]));

                    if (referralCookie != null)
                    {
                        refPromo = await _context.Promos.FirstOrDefaultAsync(x => x.Code == referralCookie.ReferralCode);
                    }
                }

                if (user != null)
                {
                    var userRef = await _context.UserReferral.FirstOrDefaultAsync(x => x.UserId == user.Id);

                    cart.UserReferral = userRef;
                }

                if (TempData["StoreCredit"] != null)
                {
                    decimal StoreCredit = decimal.Parse(TempData["StoreCredit"].ToString());
                    decimal total       = 0m;
                    foreach (var product in cart.Products)
                    {
                        total += product.Price;
                    }

                    decimal newTotal = ((total - StoreCredit) <= 0) ? 0.01m : (total - StoreCredit);
                    cart.NewTotal = newTotal;
                }
                else if (TempData["RefPromo"] == null && refPromo != null)
                {
                    if ((user != null && referralCookie.UserId != user.Id) || user == null)
                    {
                        return(RedirectToAction("PromoCode", "ShoppingCart", new { promoCode = refPromo.Code }));
                    }
                }

                return(View(cart));
            }
        }
コード例 #6
0
        public static object SelectUserProperties(User user,
                                                  UserIdentity userIdentity,
                                                  UserWallet userWallet,
                                                  UserStat userStats,
                                                  UserReferral userReferral,
                                                  Referrer referrer,
                                                  bool guestView)
        {
            Dictionary <string, object> output = new Dictionary <string, object>();

            AppendUserOutput(output, new Type[] {
                typeof(int),
                typeof(string),
                typeof(DateTime?),
                typeof(bool)
            }, user, "Username");

            if (!guestView)
            {
                AppendUserOutput(output,
                                 new Type[] { typeof(string) },
                                 userIdentity);
            }
            else
            {
                output.Add("auth0Id", userIdentity.Auth0Id);
                output.Add("auth0Nickname", userIdentity.Auth0Nickname);

                //Auth0Id = userIdentity.Auth0Id,
                //Auth0Nickname = userIdentity.Auth0Nickname,
            }

            if (!guestView)
            {
                AppendUserOutput(output, new Type[] { typeof(decimal?), typeof(int?), typeof(string) }, userWallet);
            }
            if (!guestView)
            {
                AppendUserOutput(output, new Type[] { typeof(decimal?), typeof(int?), typeof(string) }, userStats);
            }
            if (!guestView && referrer != null)
            {
                AppendUserOutput(output, new Type[] { typeof(decimal?), typeof(int?), typeof(string), typeof(DateTime?), typeof(int) }, referrer, "userId");
            }

            if (!guestView && userReferral != null)
            {
                AppendUserOutput(output, new Type[] { typeof(decimal), typeof(int), typeof(string), typeof(int) }, userReferral, "userId");
            }



            return(output);
        }
コード例 #7
0
        public async Task <PromoModel> GetPromoAsync(UserReferral userReferral)
        {
            var refPromo = await _context.Promos.FirstOrDefaultAsync(x => x.Code == userReferral.ReferralCode);

            PromoModel promo = null;

            if (refPromo != null)
            {
                promo = await GetPromoAsync(refPromo.Id);
            }

            return(promo);
        }
コード例 #8
0
        public async Task <IActionResult> AddReferralPaypal(UserReferral model)
        {
            var userReferral = await _context.UserReferral.FirstOrDefaultAsync(x => x.Id == model.Id);

            if (userReferral != null)
            {
                userReferral.PayPalAccount = model.PayPalAccount;
                _context.UserReferral.Update(userReferral);
                await _context.SaveChangesAsync();
            }

            return(RedirectToAction("Index"));
        }
コード例 #9
0
        public void PersistUserReferral()
        {
            var userDataId = 0L;

            // creating   UserDataId   by calling PersistTaxObject
            BusinessObject.Tax1040 tax1040 = new BusinessObject.Tax1040();
            tax1040.UserDataId = 0;
            userDataId         = Utilities.PersistTaxObject(userId, userDataId, tax1040);

            UserDTO userDTO = new UserDTO();

            userDTO.UserDataId = userDataId;
            userDTO.UserId     = userId;

            ReferralRating ReferralRating = new BusinessObject.ReferralRating();
            UserRating     userrating     = new UserRating();

            userrating.Rating  = 4;
            userrating.Comment = "good";

            ReferralRating.UserRating = userrating;

            ReferralRating.UserReferral = new List <UserReferral>();

            UserReferral userreferral = new UserReferral();

            userreferral.ReferralEmailId = "*****@*****.**";
            UserReferral userreferral1 = new UserReferral();

            userreferral1.ReferralEmailId = "*****@*****.**";

            ReferralRating.UserReferral.Add(userreferral);
            ReferralRating.UserReferral.Add(userreferral1);


            mTaxReturnRepository.PersistUserReferral(userDTO, ReferralRating);
        }
コード例 #10
0
        public static async Task ReferralRewards(BitcornContext dbContext, WalletDownload walletDownload, UserReferral userReferral, User referrerUser,
                                                 User user, string type)
        {
            if (user.IsBanned || referrerUser.IsBanned)
            {
                return;
            }

            var referrer = await dbContext.Referrer
                           .FirstOrDefaultAsync(w => w.UserId == walletDownload.ReferralUserId);

            userReferral.WalletDownloadDate = DateTime.Now;

            if (IsValidReferrer(referrer))
            {
                var referralPayoutTotal = await ReferralUtils.TotalReward(dbContext, referrer) + await ReferralUtils.WalletBonusReward(dbContext, referrer, 10);;
                var referrerReward      = await TxUtils.SendFromBitcornhub(referrerUser, referralPayoutTotal, "BITCORNFarms",
                                                                           type, dbContext);

                var referreeReward = await TxUtils.SendFromBitcornhub(user, referrer.Amount + 10, "BITCORNFarms",
                                                                      type, dbContext);

                if (referrerReward && referreeReward)
                {
                    await ReferralUtils.LogReferralTx(dbContext, referrerUser.UserId, referralPayoutTotal,
                                                      type);

                    await ReferralUtils.LogReferralTx(dbContext, user.UserId, referrer.Amount + 10,
                                                      $"Recruit {type}");

                    await ReferralUtils.UpdateYtdTotal(dbContext, referrer, referralPayoutTotal);

                    if (referrerUser.UserStat.TotalReferralRewardsCorn == null)
                    {
                        referrerUser.UserStat.TotalReferralRewardsCorn = 0;
                    }
                    if (referrerUser.UserStat.TotalReferralRewardsUsdt == null)
                    {
                        referrerUser.UserStat.TotalReferralRewardsUsdt = 0;
                    }
                    referrerUser.UserStat.TotalReferralRewardsCorn += referralPayoutTotal;
                    referrerUser.UserStat.TotalReferralRewardsUsdt +=
                        ((referralPayoutTotal) * (await ProbitApi.GetCornPriceAsync(dbContext)));
                    userReferral.WalletDownloadDate = DateTime.Now;
                    await ReferralUtils.BonusPayout(dbContext, userReferral, referrer, user, referrerUser,
                                                    referrerUser.UserStat);
                }
            }
        }
コード例 #11
0
 public static UserReferral Create(Model.User.User user, Model.User.User referral)
 => Find(UserReferral.Create(user, referral));
コード例 #12
0
 public static UserReferral[] GetInvited(Model.User.User user) => UserReferral.GetInvited(user);
コード例 #13
0
 public static UserReferral Find(int id) => UserReferral.Find(id);
コード例 #14
0
        //TODO: depricate this nonsense
        public static FullUserAndReferrer GetFullUserAndReferer(User user, UserIdentity userIdentity, UserWallet userWallet, UserStat userStats, UserReferral userReferral = null, Referrer referrer = null)
        {
            var fullUser = new FullUserAndReferrer()
            {
                Mfa = user.MFA,
                //user
                Username     = userIdentity.Username,
                UserId       = user.UserId,
                Avatar       = user.Avatar,
                Level        = user.Level,
                IsBanned     = user.IsBanned,
                CreationTime = user.CreationTime,
                SubTier      = user.SubTier,

                //UserIdentity
                Auth0Id         = userIdentity.Auth0Id,
                Auth0Nickname   = userIdentity.Auth0Nickname,
                TwitchId        = userIdentity.TwitchId,
                TwitchUsername  = userIdentity.TwitchUsername,
                TwitterUsername = userIdentity.TwitterUsername,
                DiscordUsername = userIdentity.DiscordUsername,
                DiscordId       = userIdentity.DiscordId,
                TwitterId       = userIdentity.TwitterId,
                RedditId        = userIdentity.RedditId,

                //UserWallet
                WalletServer = userWallet.WalletServer,
                CornAddy     = userWallet.CornAddy,
                Balance      = userWallet.Balance,

                //UserStatus
                EarnedIdle                 = userStats.EarnedIdle,
                AmountOfTipsReceived       = userStats.AmountOfTipsReceived,
                TotalReceivedBitcornTips   = userStats.TotalReceivedBitcornTips,
                LargestReceivedBitcornTip  = userStats.LargestReceivedBitcornTip,
                AmountOfTipsSent           = userStats.AmountOfTipsSent,
                TotalSentBitcornViaTips    = userStats.TotalSentBitcornViaTips,
                LargestSentBitcornTip      = userStats.LargestSentBitcornTip,
                AmountOfRainsSent          = userStats.AmountOfRainsSent,
                TotalSentBitcornViaRains   = userStats.TotalSentBitcornViaRains,
                LargestSentBitcornRain     = userStats.LargestSentBitcornRain,
                AmountOfRainsReceived      = userStats.AmountOfRainsReceived,
                TotalReceivedBitcornRains  = userStats.TotalReceivedBitcornRains,
                LargestReceivedBitcornRain = userStats.LargestReceivedBitcornRain,
                TotalReferralRewardsCorn   = userStats.TotalReferralRewardsCorn,
                TotalReferralRewardsUsdt   = userStats.TotalReferralRewardsUsdt,
                TotalReferrals             = userStats.TotalReferrals,
            };

            if (referrer != null)
            {
                fullUser.ReferralId = referrer.ReferralId;
                fullUser.Amount     = referrer.Amount;
                fullUser.Tier       = referrer.Tier;
                fullUser.ETag       = referrer.ETag;
                fullUser.Key        = referrer.Key;
                fullUser.YtdTotal   = referrer.YtdTotal;
            }

            if (userReferral != null)
            {
                fullUser.WalletDownloadDate = userReferral.WalletDownloadDate;
                fullUser.MinimumBalanceDate = userReferral.MinimumBalanceDate;
                fullUser.SyncDate           = userReferral.SyncDate;
                fullUser.SignupReward       = userReferral.SignupReward;
                fullUser.Bonus         = userReferral.Bonus;
                fullUser.ReferrerBonus = userReferral.ReferrerBonus;
            }

            return(fullUser);
        }
コード例 #15
0
        public async Task <IActionResult> UpdateRole(string email, string newRole)
        {
            if (!string.IsNullOrEmpty(email) && !string.IsNullOrEmpty(newRole))
            {
                var user = await _userManager.FindByEmailAsync(email);

                var currentRoles = await _userManager.GetRolesAsync(user);

                var userRef = await _context.UserReferral.FirstOrDefaultAsync(x => x.UserId == user.Id);

                var refPromo = await _context.Promos.FirstOrDefaultAsync(x => x.Code == user.Email.Split('@')[0]);

                if (!currentRoles.Contains(newRole))
                {
                    // Change Roles
                    var removeRoleResult = await _userManager.RemoveFromRolesAsync(user, currentRoles);

                    if (removeRoleResult.Succeeded)
                    {
                        await _userManager.AddToRoleAsync(user, newRole);
                    }
                    await _context.SaveChangesAsync();

                    switch (newRole.ToUpper())
                    {
                    case "SPONSOR":
                        if (userRef == null)
                        {
                            userRef = new UserReferral
                            {
                                UserId             = user.Id,
                                Enabled            = true,
                                ReferralCode       = user.Email.Split('@')[0],
                                PayoutPercent      = 100,
                                StoreCreditPercent = 10
                            };
                        }
                        if (refPromo == null)
                        {
                            refPromo = new PromoModel
                            {
                                Code = userRef.ReferralCode,
                                DiscountPercentage = 3,
                                Enabled            = true
                            };
                        }

                        userRef.Enabled            = true;
                        userRef.PayoutPercent      = 100;
                        userRef.StoreCreditPercent = 3;
                        refPromo.Enabled           = true;

                        await UpsertUserReferralAsync(userRef);
                        await UpsertPromoCodeAsync(refPromo);

                        break;

                    case "DEFAULT":
                    default:
                        if (userRef != null)
                        {
                            userRef.Enabled = false;
                        }
                        if (refPromo != null)
                        {
                            refPromo.Enabled = false;
                        }

                        await UpsertUserReferralAsync(userRef);
                        await UpsertPromoCodeAsync(refPromo);

                        break;
                    }
                }
            }

            return(RedirectToAction("ManageUsers", "Admin"));
        }