public static void CRON()
    {
        if (AppSettings.RevShare.IsRevShareEnabled && !TitanFeatures.IsEpadilla &&
            (AppSettings.RevShare.DistributionTime != DistributionTimePolicy.EveryWeek ||
             AppSettings.ServerTime.DayOfWeek == AppSettings.RevShare.DayOfWeekDistribution))
        {
            AppSettings.RevShare.Reload();

            if (AppSettings.Misc.SpilloverEnabled)
            {
                AdPackManager.FinishAdPacksIfNotUpgradedFor(7);
            }

            if (TitanFeatures.StringSawSundayPool.HasValue && AppSettings.ServerTime.DayOfWeek == DayOfWeek.Sunday)
            {
                StringSawSundayPool.CreditFromSundayPool();
            }

            DailyDistribution(false, AppSettings.RevShare.DistributionTime == DistributionTimePolicy.EveryHour);

            AppSettings.RevShare.HourlyDistributionsMadeToday = 0;
            AppSettings.RevShare.Save();

            TableHelper.ExecuteRawCommandNonQuery("UPDATE AdPackTypes SET FixedDistributionValuePercent = FixedDistributionValuePercent2;");
            RevShareManager.RemoveOldPercentageValuesFromDatabase();

            if (TitanFeatures.IsTradeOwnSystem)
            {
                string AdPackConditionForTradeOwnSystem = @"
                    WITH CTE AS(
                        SELECT
                            UserId AS UserId, purchasedate AS purchasedate, ROW_NUMBER()OVER(PARTITION BY userId ORDER BY purchasedate) AS rownumber
                        FROM AdPacks
                        WHERE
                            MoneyToReturn > MoneyReturned
                    )
                    UPDATE Users SET FirstActiveDayOfAdPacks = GETDATE(), AdPackViewedCounter = 0 WHERE Users.UserId NOT IN (SELECT UserId from CTE);";

                TableHelper.ExecuteRawCommandNonQuery(AdPackConditionForTradeOwnSystem);
            }

            //RevShare Income Statistics
            //WEEKLY
            if (AppSettings.ServerTime.DayOfWeek == DayOfWeek.Sunday)
            {
                TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET StatsRevShareLastWeekIncome = StatsRevShareCurrentWeekIncome, StatsRevShareCurrentWeekIncome = 0");
            }
            //MONTHLY
            if (AppSettings.ServerTime.Day == DateTime.DaysInMonth(AppSettings.ServerTime.Year, AppSettings.ServerTime.Month))
            {
                TableHelper.ExecuteRawCommandNonQuery("UPDATE Users SET StatsRevShareLastMonthIncome = StatsRevShareCurrentMonthIncome, StatsRevShareCurrentMonthIncome = 0");
            }
        }
    }
예제 #2
0
 public static string GetJsonWithInstantAccrualsValues()
 {
     return RevShareManager.GetJsonWithInstantAccrualsValues(Member.CurrentId);       
 }
    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();
        }
    }