public async Task <IActionResult> SetApprovedLimits([FromRoute] long applicationNumber, [FromRoute] int arrangementRequestId, [FromBody] ApprovedLimits command)
        {
            try
            {
                var application = await _applicationRepository.GetAsync(applicationNumber);

                if (application == null)
                {
                    return(NotFound());
                }
                var setApprovedLimits = await _arrangementRequestRepository
                                        .SetApprovedLimits(applicationNumber, arrangementRequestId, command, application);

                if (setApprovedLimits == null)
                {
                    return(NotFound());
                }
                return(Ok());
            }
            catch (KeyNotFoundException e)
            {
                this._logger.LogError(e, "An error occurred while updating Arrangement Request for arrangementRequestId {arrangementRequestId} on application {ApplicationNumber}", arrangementRequestId, applicationNumber);
                return(BadRequest(new { message = e.Message }));
            }
            catch (Exception e)
            {
                this._logger.LogError(e, "An error occurred while updating Arrangement Request for arrangementRequestId {arrangementRequestId} on application {ApplicationNumber}", arrangementRequestId, applicationNumber);
                return(StatusCode(500));
            }
        }
Example #2
0
        public async Task <ArrangementRequest> SetApprovedLimits(long applicationNumber, int arrangementRequestId,
                                                                 ApprovedLimits command, Application application)
        {
            var arrRequest = GetArrangementRequest(applicationNumber, arrangementRequestId);

            if (arrRequest == null)
            {
                return(null);
            }

            //set requested parameters
            if (arrRequest.ApprovedLimits is null)
            {
                RequestedValues requestedValues = new RequestedValues();

                if (arrRequest is TermLoanRequest termLoan)
                {
                    requestedValues.Annuity = termLoan.Annuity;

                    if (command.InvoiceAmount != null)
                    {
                        requestedValues.DownpaymentAmount     = termLoan.DownpaymentAmount;
                        requestedValues.DownpaymentPercentage = termLoan.DownpaymentPercentage.Value;
                        requestedValues.InvoiceAmount         = termLoan.InvoiceAmount;
                    }
                }
                if (arrRequest is FinanceServiceArrangementRequest fsaData)
                {
                    requestedValues.Amount = fsaData.Amount;
                    requestedValues.Term   = Utility.GetMonthsFromPeriod(fsaData.Term).ToString();
                    requestedValues.Napr   = fsaData.Napr;
                }

                arrRequest.RequestedValues = requestedValues;
            }

            //set initial parameteres
            if (arrRequest is TermLoanRequest tlr)
            {
                tlr.Annuity = command.Annuity;
                if (command.InvoiceAmount != null)
                {
                    tlr.InvoiceAmount         = command.InvoiceAmount.Value;
                    tlr.DownpaymentPercentage = command.DownpaymentPercentage.Value;
                    tlr.DownpaymentAmount     = command.DownpaymentAmount.Value;
                }
            }

            if (arrRequest is FinanceServiceArrangementRequest fsa)
            {
                fsa.Amount = command.Amount;
                fsa.Term   = Utility.GetMonthsFromPeriod(command.Term).ToString();
            }

            arrRequest.ApprovedLimits = command;
            var conversionMethod = _configurationService.GetEffective("offer/fee-currency-conversion-method", "Buy to middle").Result;

            arrRequest.CalculateOffer(application, _priceCalculator, conversionMethod);
            await _context.SaveEntitiesAsync();

            return(arrRequest);
        }