コード例 #1
0
    private Money CalculatePackCost(Member user, ReferralPackage pack)
    {
        Money membershipSingleRefPrice = user.Membership.ReferralRentCost;
        int   currentRefs = new RentReferralsSystem(user.Name, user.Membership).GetUserRentedReferralsCount();

        Money singleRefPrice = RentedReferralRangePrice.GetPriceForSingleRef(membershipSingleRefPrice, currentRefs + pack.RefsInPackage);

        return(Money.MultiplyPercent(singleRefPrice * pack.RefsInPackage, pack.PercentValue));
    }
コード例 #2
0
    public static void Create(int minReferrals, int maxReferrals, Money pricePerReferralEnlargedBy, Money autopayPriceEnlargedBy)
    {
        if (minReferrals >= maxReferrals)
        {
            throw new MsgException("Max Referrals must be greater than MinReferrals");
        }

        var allRanges = GetAll();

        if (allRanges.Any(x => x.MinReferrals == minReferrals && x.MaxReferrals == maxReferrals))
        {
            throw new MsgException("Range already exists");
        }


        var newRange = new RentedReferralRangePrice(minReferrals, maxReferrals, pricePerReferralEnlargedBy, autopayPriceEnlargedBy);

        newRange.Save();
    }
コード例 #3
0
ファイル: RentReferralsSystem.cs プロジェクト: dovanduy/titan
        /// <summary>
        /// Run this script everyday to manage referrals: delete expired, proceed autopay, recalculate statistics on RentedReferrals and renew BOT firedby
        /// NOTE: This script may take a while to complete
        /// NOTE: Run it before the Member Statistics recount !!!!!!!!!!!!!
        /// </summary>
        public static void CRON()
        {
            using (var bridge = ParserPool.Acquire(Database.Client))
            {
                Parser parser = bridge.Instance;

                random = new Random();

                //Expirations
                DataTable ExpiredNormal = parser.ExecuteRawCommandToDataTable(
                    TableHelper.GetSqlCommand("SELECT * FROM RentedReferrals WHERE ExpireDate <= @DATE AND BotClass = -1", DateTime.Now));

                var ExpiredNormalList = TableHelper.GetListFromDataTable <RentedReferral>(ExpiredNormal, 100, true);
                foreach (RentedReferral referral in ExpiredNormalList)
                {
                    parser.ExecuteRawCommandNonQuery("UPDATE Users SET Referer = '', IsRented = 'false', LastPointableActivity = null, PointsEarnedToReferer = 0 WHERE Username = '******'");
                }
                string Command = "DELETE FROM RentedReferrals WHERE ExpireDate <= @DATE";
                parser.ExecuteRawCommandNonQuery(TableHelper.GetSqlCommand(Command, DateTime.Now));

                var fullRentedList = TableHelper.SelectAllRows <RentedReferral>();
                AcquireActiveUsersList(fullRentedList.Count);
                activeUsersIndex = 0;
                bool areWeLoweringClasses = false;

                //With probablility 1/8 lower all bot classes
                if (random.Next(0, 8) == 2)
                {
                    areWeLoweringClasses = true;
                }


                foreach (RentedReferral referral in fullRentedList)
                {
                    //AutoPay managementd
                    if (referral.HasAutoPay)
                    {
                        //Clicked => Renew for 1 day, take money from owner
                        Member Owner        = new Member(referral.OwnerUsername);
                        int    numberOfRefs = fullRentedList.Count(x => x.OwnerUsername == Owner.Name);
                        Money  autopayPrice = RentedReferralRangePrice.GetPriceForAutopay(Owner.Membership.DailyAutoPayCost, numberOfRefs);

                        if (referral.ClicksStatsList[0] > 0 && Owner.PurchaseBalance >= autopayPrice)
                        {
                            referral.ExpireDate = referral.ExpireDate.AddDays(1);
                            Owner.SubtractFromPurchaseBalance(autopayPrice, "AutoPay", BalanceLogType.Other);
                            Owner.Save();
                        }
                        else if (AppSettings.Referrals.RentedRefAutopayPolicy == AppSettings.Referrals.AutopayPolicy.UserChooses)
                        {
                            referral.HasAutoPay = false;
                        }

                        referral.Save();
                    }
                }

                //Recount clicks stats
                bridge.Instance.ExecuteRawCommandNonQuery(TableHelper.GetRawRecalculateCommand("RentedReferrals", "ClicksStats", false));

                //Append new active FiredBy
                Command = @";WITH CTE_CARS AS (SELECT FiredBy, ROW_NUMBER() OVER (ORDER BY RefId) AS RN FROM RentedReferrals WHERE BotClass > 0)
                                ,CTE_ENGINES AS (SELECT Username, ROW_NUMBER() OVER (ORDER BY NEWID()) AS RN FROM Users WHERE LastActivityDate2 > DATEADD(day, -2, GETDATE()) AND TotalClicks > 3)

                                UPDATE CTE_CARS SET CTE_CARS.FiredBy = CTE_ENGINES.Username
                                FROM CTE_CARS JOIN CTE_ENGINES ON (CTE_CARS.RN - CTE_ENGINES.RN) % (SELECT COUNT(1) FROM CTE_ENGINES) = 0";
                bridge.Instance.ExecuteRawCommandNonQuery(Command);

                //Lower classes
                if (areWeLoweringClasses)
                {
                    Command = "UPDATE RentedReferrals SET BotClass = BotClass - 1 WHERE BotClass > 0";
                    bridge.Instance.ExecuteRawCommandNonQuery(Command);
                }
            }
        }