public static void RejectRequest(int creditLineRequestId) { CreditLineRequest request = new CreditLineRequest(creditLineRequestId); request.Status = CreditLineRequestStatus.Rejected; request.Save(); }
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 TrySendRequest(Member user, Money amount) { if ((AppSettings.ServerTime - user.Registered).TotalDays < AppSettings.CreditLine.MinimumRegisterDays) { throw new MsgException(string.Format(U6008.NOTENOUGHDAYS, AppSettings.CreditLine.MinimumRegisterDays)); } var numberOfPendingRequests = GetNumberOfUsersRequests(user.Id, CreditLineRequestStatus.Pending); if (numberOfPendingRequests > 0) { throw new MsgException(U5007.CANONLYSENDONEREQUEST); } var loans = GetUsersLoans(user.Id, false); if (loans.Count > 0) { throw new MsgException("You must repay your debt first."); } var maxAmount = GetMaxPossibleRequest(user); if (amount > maxAmount) { throw new MsgException(string.Format("The maximum amount you can borrow is {0}", maxAmount)); } CreditLineRequest request = new CreditLineRequest(); request.UserId = user.Id; request.LoanRequested = amount; request.RequestDate = AppSettings.ServerTime; request.Status = CreditLineRequestStatus.Pending; request.Save(); }
public ArrangementRequest GetForArrangementKind(ArrangementRequestInitializationParameters parameters, ArrangementKind?arrangementKind, ProductSnapshot productData = null) { var arrangementRequest = new ArrangementRequest(); switch (arrangementKind) { case ArrangementKind.TermLoan: var termLoanRequest = new TermLoanRequest { Amount = parameters.Amount ?? 0, Currency = parameters.Currency, Term = parameters.Term, Annuity = parameters.Annuity ?? 0, DownpaymentAmount = parameters.DownpaymentAmount ?? 0, Napr = parameters.InterestRate ?? 0, RepaymentPeriod = parameters.RepaymentPeriod, RepaymentPeriodStartDate = parameters.RepaymentPeriodStartDate, GracePeriod = parameters.GracePeriod, GracePeriodStartDate = parameters.GracePeriodStartDate, DrawdownPeriod = parameters.DrawdownPeriod, DrawdownPeriodStartDate = parameters.DrawdownPeriodStartDate, MaturityDate = parameters.MaturityDate, DownpaymentPercentage = parameters.DownpaymentPercentage, InvoiceAmount = parameters.InvoiceAmount ?? 0, IsRefinancing = parameters.IsRefinancing ?? false, RepaymentType = parameters.RepaymentType, InstallmentScheduleDayOfMonth = parameters.InstallmentScheduleDayOfMonth }; arrangementRequest = termLoanRequest; break; case ArrangementKind.CardAccessArrangement: arrangementRequest = new CardAccessArrangementRequest(); break; case ArrangementKind.CreditCardFacility: var creditCardFacilityRequest = new CreditCardFacilityRequest { Amount = parameters.Amount ?? 0, Currency = parameters.Currency, Napr = parameters.InterestRate ?? 0, Term = Utility.GetMonthsFromPeriod(parameters.Term).ToString(), MaturityDate = parameters.MaturityDate, RevolvingPercentage = parameters.RevolvingPercentage ?? 0, MinimalRepaymentPercentage = productData?.MinimalRepaymentPercentage ?? 0, MinimalRepaymentAmount = new Currency { Amount = productData?.MinimalRepaymentAmount?.Amount ?? 0, Code = productData?.MinimalRepaymentAmount?.Code ?? "EUR" }, RepaymentType = parameters.RepaymentType, InstallmentScheduleDayOfMonth = parameters.InstallmentScheduleDayOfMonth }; arrangementRequest = creditCardFacilityRequest; break; case ArrangementKind.CreditFacility: var creditFacilityRequest = new CreditFacilityRequest { Amount = parameters.Amount ?? 0, Currency = parameters.Currency, Napr = parameters.InterestRate ?? 0, MaturityDate = parameters.MaturityDate, MinimalRepaymentAmount = new Currency { Amount = productData?.MinimalRepaymentAmount?.Amount ?? 0, Code = productData?.MinimalRepaymentAmount?.Code ?? "EUR" } }; arrangementRequest = creditFacilityRequest; break; case ArrangementKind.CurrentAccount: var currentAccountRequest = new CurrentAccountRequest { Currency = parameters.Currency, Napr = parameters.InterestRate ?? 0 }; arrangementRequest = currentAccountRequest; break; case ArrangementKind.DemandDeposit: var demandDepositRequest = new DemandDepositRequest { Currency = parameters.Currency, Napr = parameters.InterestRate ?? 0 }; arrangementRequest = demandDepositRequest; break; case ArrangementKind.ElectronicAccessArrangement: arrangementRequest = new ElectronicAccessArrangementRequest(); break; case ArrangementKind.OtherProductArrangement: arrangementRequest = new OtherProductArrangementRequest(); break; case ArrangementKind.OverdraftFacility: var overdraftFacilityRequest = new OverdraftFacilityRequest { Amount = parameters.Amount ?? 0, Currency = parameters.Currency, Term = Utility.GetMonthsFromPeriod(parameters.Term).ToString(), Napr = parameters.InterestRate ?? 0, MaturityDate = parameters.MaturityDate, RepaymentType = parameters.RepaymentType, InstallmentScheduleDayOfMonth = parameters.InstallmentScheduleDayOfMonth }; arrangementRequest = overdraftFacilityRequest; break; case ArrangementKind.SecuritiesArrangement: arrangementRequest = new SecuritiesArrangementRequest(); break; case ArrangementKind.TermDeposit: var termDepositRequest = new TermDepositRequest { Amount = parameters.Amount ?? 0, Currency = parameters.Currency, Term = parameters.Term, Napr = parameters.InterestRate ?? 0, MaturityDate = parameters.MaturityDate }; arrangementRequest = termDepositRequest; break; case ArrangementKind.Abstract: arrangementRequest = new AbstractArrangementRequest { IsAbstractOrigin = true }; break; case ArrangementKind.CreditLine: var creditLineRequest = new CreditLineRequest { Amount = parameters.Amount ?? 0, Currency = parameters.Currency, Term = parameters.Term }; arrangementRequest = creditLineRequest; break; default: arrangementRequest = new ArrangementRequest(); break; } arrangementRequest.Conditions = parameters.Conditions; arrangementRequest.Periods = parameters.ScheduledPeriods; arrangementRequest.CalculationDate = parameters.CalculationDate; return(arrangementRequest); }