Beispiel #1
0
    public static void RejectRequest(int creditLineRequestId)
    {
        CreditLineRequest request = new CreditLineRequest(creditLineRequestId);

        request.Status = CreditLineRequestStatus.Rejected;
        request.Save();
    }
Beispiel #2
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);
    }
Beispiel #3
0
    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();
    }
Beispiel #4
0
        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);
        }