Ejemplo n.º 1
0
    public static void TryRepayDebt(Money amount, Member user, out Money repaidAmound)
    {
        repaidAmound = Money.Zero;
        var loan = GetUsersLoans(user.Id, false).FirstOrDefault();

        if (loan != null)
        {
            if (amount <= Money.Zero)
            {
                throw new MsgException("Amount must be higher than 0");
            }

            if (amount > user.PurchaseBalance)
            {
                throw new MsgException(U6012.CREDITLINEPURCHASEBALANCEERROR);
            }

            repaidAmound = loan.Loaned - loan.Repaid;
            if (amount > repaidAmound)
            {
                amount = repaidAmound;
            }
            else
            {
                repaidAmound = amount;
            }

            loan.Repaid += amount;
            loan.Save();
            GlobalPoolManager.AddToPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.CreditLine), amount);
            user.SubtractFromPurchaseBalance(amount, "Credit Line", BalanceLogType.CreditLine);
            user.SaveBalances();
        }
    }
Ejemplo n.º 2
0
    public static void CreditFromSundayPool()
    {
        try
        {
            var sundayPool  = GlobalPool.Get(PoolsHelper.GetSundayPoolId());
            var poolPercent = TitanFeatures.StringSawSundayPool.Value;
            if (Money.MultiplyPercent(sundayPool.SumAmount, poolPercent) > Money.Zero)
            {
                var users        = TableHelper.GetListFromRawQuery <Member>(string.Format(@"SELECT * FROM Users WHERE AccountStatusInt = {0} AND UpgradeId != {1} 
            AND UserId IN (SELECT DISTINCT UserId FROM AdPacks WHERE MoneyToReturn > MoneyReturned)", (int)MemberStatus.Active, Membership.Standard.Id));
                var toDistribute = Money.MultiplyPercent(sundayPool.SumAmount, poolPercent);
                var perUser      = Money.Zero;

                if (users.Count > 0)
                {
                    perUser = toDistribute / users.Count;
                }

                if (perUser > Money.Zero)
                {
                    foreach (var user in users)
                    {
                        user.AddToMainBalance(perUser, "Sunday AdPack Distribution");
                        user.SaveBalances();
                    }
                    GlobalPoolManager.SubtractFromPool(sundayPool.GlobalPoolType, toDistribute);
                }
            }
        }
        catch (Exception ex)
        {
            ErrorLogger.Log(ex);
        }
    }
Ejemplo n.º 3
0
 public static void AddProfitToSundayPool(Money amount)
 {
     try
     {
         var sundayPoolId = PoolsHelper.GetSundayPoolId();
         GlobalPoolManager.AddToPool(sundayPoolId, amount);
     }
     catch (Exception ex)
     {
         ErrorLogger.Log(ex);
     }
 }
Ejemplo n.º 4
0
 public static void AddProfit(ProfitSource source, Money amount, ProfitPoolDistribution targetPool)
 {
     if (targetPool.Pool == PoolsHelper.GetBuiltInProfitPoolId(Pools.AdPackRevenueReturn))
     {
         //Daily pool
         DailyPoolManager.AddToPool(targetPool.Pool, DateTime.Now, amount);
         AdPackProfitDistributionHistory.Add(amount);
     }
     else
     {
         //Global pool
         GlobalPoolManager.AddToPool(targetPool.Pool, amount);
     }
 }
Ejemplo n.º 5
0
        public void CreditWin(Money cashWon)
        {
            base.CreditMainBalance(cashWon, "PvpJackpot Win", BalanceLogType.PvpJackpotWin);
            User.Save();


            if (TitanFeatures.IsNightwolf && PoolDistributionManager.GetGlobalPoolSumInMoney(PoolsHelper.GetBuiltInProfitPoolId(Pools.PvpJackpotGamePool)) < cashWon)
            {
                GlobalPoolManager.SubtractFromPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.AdministratorProfit), cashWon);
            }
            else
            {
                GlobalPoolManager.SubtractFromPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.PvpJackpotGamePool), cashWon);
            }
        }
Ejemplo n.º 6
0
    /// <summary>
    /// Distributes the money from the Profit Source properly
    /// </summary>
    /// <param name="source"></param>
    /// <param name="amount"></param>
    public static bool AddProfit(ProfitSource source, Money amount)
    {
        if (amount != Money.Zero)
        {
            var where = TableHelper.MakeDictionary(ProfitPoolDistribution.Columns.ProfitSource, (int)source);
            var targetPools = TableHelper.SelectRows <ProfitPoolDistribution>(where);

            Money distributed = new Money(0);

            for (int i = 0; i < targetPools.Count; i++)
            {
                var   poolRule     = targetPools[i];
                Money toDistribute = new Money(0);

                //Last pool rule
                if (i == (targetPools.Count - 1))
                {
                    toDistribute = (amount - distributed);
                }
                else
                {
                    toDistribute = Money.MultiplyPercent(amount, poolRule.ProfitPoolPercent);
                    distributed += toDistribute;
                }

                if (poolRule.Pool == PoolsHelper.GetBuiltInProfitPoolId(Pools.AdPackRevenueReturn))
                {
                    //Daily pool
                    DailyPoolManager.AddToPool(poolRule.Pool, AppSettings.ServerTime, toDistribute);
                    AdPackProfitDistributionHistory.Add(toDistribute);
                }
                else
                {
                    //Global pool
                    GlobalPoolManager.AddToPool(poolRule.Pool, toDistribute);
                }
            }
            return(distributed != Money.Zero);
        }
        return(false);
    }
Ejemplo n.º 7
0
    public static void AcceptRequest(int creditLineRequestId)
    {
        Money maxLoan = GlobalPool.Get(PoolsHelper.GetBuiltInProfitPoolId(Pools.CreditLine)).SumAmount;

        CreditLineRequest request = new CreditLineRequest(creditLineRequestId);

        if (request.LoanRequested > maxLoan)
        {
            request.Status = CreditLineRequestStatus.Rejected;
            request.Save();
            throw new MsgException("There is not enough money in the pool. The request has been rejected.");
        }

        request.Status = CreditLineRequestStatus.Accepted;
        request.Save();

        Member         user = new Member(request.UserId);
        DateTime       now  = AppSettings.ServerTime;
        CreditLineLoan loan = new CreditLineLoan();

        loan.UserId                    = user.Id;
        loan.Loaned                    = request.LoanRequested;
        loan.FirstDeadline             = now.AddDays(AppSettings.CreditLine.FirstDeadlineDays);
        loan.SecondDeadline            = now.AddDays(AppSettings.CreditLine.SecondDeadlineDays);
        loan.FinalDeadline             = now.AddDays(AppSettings.CreditLine.FinalDeadlineDays);
        loan.AmounBeforeFirstDeadline  = Money.MultiplyPercent(request.LoanRequested, AppSettings.CreditLine.FirstRepayPercent);
        loan.AmounBeforeSecondDeadline = Money.MultiplyPercent(request.LoanRequested, AppSettings.CreditLine.SecondRepayPercent);
        loan.BorrowDate                = now;
        loan.Repaid                    = Money.Zero;
        loan.Save();

        var moneyWithoutFee = Money.MultiplyPercent(request.LoanRequested, 100 - AppSettings.CreditLine.Fee);

        GlobalPoolManager.SubtractFromPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.CreditLine), moneyWithoutFee);

        user.AddToPurchaseBalance(moneyWithoutFee, "Credit Line", BalanceLogType.CreditLine);
        user.SaveBalances();

        Mailer.SendNewCreditLineMessage(user.Email, request.LoanRequested);
    }
Ejemplo n.º 8
0
    public static void AutomaticRepay(Member user, DateTime now)
    {
        List <CreditLineLoan> loans = GetUsersLoans(user.Id, false);
        Money debt = GetUsersDebt(loans, now, user.Name, true);

        if (debt <= Money.Zero)
        {
            return;
        }

        var availableMoney = Money.Zero;
        var adBalance      = user.PurchaseBalance;

        if (adBalance <= debt)
        {
            availableMoney = adBalance;
        }
        else
        {
            availableMoney = debt;
        }
        user.SubtractFromPurchaseBalance(availableMoney, "Credit Line", BalanceLogType.CreditLine);

        //Subtract rest of the debt from Main Balance, balance can go to negative
        var debtLeft = debt - availableMoney;

        if (debtLeft > Money.Zero)
        {
            user.SubtractFromMainBalance(debtLeft, "Credit Line", BalanceLogType.CreditLine);
            availableMoney += debtLeft;
        }
        user.SaveBalances();

        Money moneyForPool = Money.Zero;

        foreach (var loan in loans)
        {
            if (availableMoney <= Money.Zero)
            {
                return;
            }

            var toPay = Money.Zero;

            if (loan.FinalDeadline < now)
            {
                toPay = loan.Loaned - loan.Repaid;
            }
            else if (loan.SecondDeadline < now)
            {
                toPay = loan.AmounBeforeSecondDeadline - loan.Repaid;
            }
            else if (loan.FirstDeadline < now)
            {
                toPay = loan.AmounBeforeFirstDeadline - loan.Repaid;
            }

            if (toPay > Money.Zero)
            {
                if (toPay > availableMoney)
                {
                    loan.Repaid    += availableMoney;
                    moneyForPool   += availableMoney;
                    availableMoney -= availableMoney;
                }
                else
                {
                    loan.Repaid    += toPay;
                    moneyForPool   += toPay;
                    availableMoney -= toPay;
                }
            }
            loan.Save();
        }
        if (moneyForPool > Money.Zero)
        {
            GlobalPoolManager.AddToPool(PoolsHelper.GetBuiltInProfitPoolId(Pools.CreditLine), moneyForPool);
        }
    }