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(); } }
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); } }
public static void AddProfitToSundayPool(Money amount) { try { var sundayPoolId = PoolsHelper.GetSundayPoolId(); GlobalPoolManager.AddToPool(sundayPoolId, amount); } catch (Exception ex) { ErrorLogger.Log(ex); } }
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); } }
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); } }
/// <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); }
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); }
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); } }