public void RaiseDirectDebitEvent_PlanSetUp(DirectDebitPlanOverviewVm vm, string userId, string planType)
 {
     vm.GtmEvents.Add(new GtmEvent()
     {
         gtm_event             = GtmEvents.PaymentEvent,
         step                  = PaymentSteps.step4PlanSetUp,
         payment_type          = "Direct Debit Plan",
         payment_amount        = vm.PaymentAmount,
         payment_detail        = vm.PaymentFrequency,
         discount_available    = vm.DiscountAvailable ? "Discount available" : "No discount available",
         balance_selected      = vm.DiscountAccepted ? "Discounted Balance" : "Full Balance",
         plan_type             = planType,
         plan_status           = "New Plan",
         guid                  = String.IsNullOrEmpty(userId) ? null : userId,
         user_status           = String.IsNullOrEmpty(userId) ? "Not Logged In" : "Logged In",
         source_of_funds       = null,
         payment_option_chosen = ConvertPlanSetupOption(vm.SelectedPlanSetupOption)
     });
 }
        public DirectDebitPlanOverviewVm Build(PaymentOptionsVm accountVm, DirectDebitDetailsVm directDebitDetailsVm)
        {
            // Should never be null, as validated with Fluent
            Debug.Assert(accountVm.DirectDebitAmount != null, "accountVm.DirectDebitPayment.Amount != null");

            int totalMonths = _directDebitTermCalculator.CalculateTermInMonths(
                accountVm.FullPaymentAmountDerived, accountVm.DirectDebitAmount.Value,
                accountVm.DirectDebitSelectedFrequency);
            int years  = totalMonths / 12;
            int months = totalMonths % 12;

            DirectDebitPlanOverviewVm directDebitPlanOverview = new DirectDebitPlanOverviewVm()
            {
                SortCode           = directDebitDetailsVm.SortCode,
                AccountNumber      = directDebitDetailsVm.AccountNumber,
                AccountHoldersName = directDebitDetailsVm.AccountHoldersName,
                ClientName         = accountVm.ClientName,
                LowellReference    = accountVm.LowellReference,
                PaymentAmount      = accountVm.DirectDebitAmount.Value,
                PaymentType        = AccountMessages.DirectDebit,
                StartDate          = accountVm.DirectDebitSelectedStartDate,
                Frequency          =
                    _directDebitFrequencyTranslator.TranslateClientScriptCompatibleValueToDescription(
                        accountVm.DirectDebitSelectedFrequency),
                GuaranteeRead = directDebitDetailsVm.AcceptDirectDebitGuarantee,
                PlanTotal     = accountVm.DiscountedBalancePreviouslyAccepted
                    ? accountVm.DiscountedBalance
                    : accountVm.OutstandingBalance,
                DiscountAccepted        = accountVm.DiscountAccepted,
                DiscountAmount          = accountVm.DiscountAmount,
                EmailAddress            = accountVm.DirectDebitEmailAddress,
                DiscountAvailable       = directDebitDetailsVm.DiscountAvailable,
                PaymentFrequency        = directDebitDetailsVm.PaymentFrequency,
                TermYears               = years,
                TermMonths              = months,
                SelectedPlanSetupOption = directDebitDetailsVm.SelectedPlanSetupOption
            };

            return(directDebitPlanOverview);
        }
Beispiel #3
0
        public DirectDebitPaymentDto BuildDirectDebitPlanDto(DirectDebitPlanOverviewVm directDebitPlanOverviewVm)
        {
            var dto = new DirectDebitPaymentDto()
            {
                SortCode           = directDebitPlanOverviewVm.SortCode,
                AccountNumber      = directDebitPlanOverviewVm.AccountNumber,
                AccountHoldersName = directDebitPlanOverviewVm.AccountHoldersName,
                LowellReference    = directDebitPlanOverviewVm.LowellReference,
                PaymentType        = directDebitPlanOverviewVm.PaymentType,
                StartDate          = directDebitPlanOverviewVm.StartDate,
                PaymentAmount      = directDebitPlanOverviewVm.PaymentAmount,
                Frequency          = directDebitPlanOverviewVm.Frequency,
                GuaranteeRead      = directDebitPlanOverviewVm.GuaranteeRead,
                PlanTotal          = directDebitPlanOverviewVm.PlanTotal,
                DiscountAccepted   = directDebitPlanOverviewVm.DiscountAccepted,
                DiscountAmount     = directDebitPlanOverviewVm.DiscountAmount,
                EmailAddress       = directDebitPlanOverviewVm.EmailAddress,
                User = directDebitPlanOverviewVm.UserLoggedIn ? "WebUser" : "WebAnon"
            };

            return(dto);
        }
        public void BuildDirectDebitPlanDto_PopulatesDtoFromViewModel(
            bool testGuaranteeRead, bool testDiscountAccepted)
        {
            DirectDebitPlanOverviewVm directDebitPlanOverviewVm = new DirectDebitPlanOverviewVm()
            {
                LowellReference    = "*LowellRef",
                PaymentAmount      = 123.01m,
                StartDate          = "*StartDate",
                PaymentType        = "*PaymentType",
                AccountHoldersName = "Bobbert",
                AccountNumber      = "12345678",
                SortCode           = "123456",
                PlanTotal          = 1123.45m,
                Frequency          = "*freq",
                GuaranteeRead      = testGuaranteeRead,
                DiscountAccepted   = testDiscountAccepted,
                DiscountAmount     = 17.50m,
                EmailAddress       = "*****@*****.**"
            };

            DirectDebitPaymentDto directDebitPaymentDto = _buildDirectDebitPlanDtoProcess.BuildDirectDebitPlanDto(directDebitPlanOverviewVm);

            Assert.AreEqual("*LowellRef", directDebitPaymentDto.LowellReference);
            Assert.AreEqual(123.01m, directDebitPaymentDto.PaymentAmount);
            Assert.AreEqual("*StartDate", directDebitPaymentDto.StartDate);
            Assert.AreEqual("*PaymentType", directDebitPaymentDto.PaymentType);
            Assert.AreEqual("Bobbert", directDebitPaymentDto.AccountHoldersName);
            Assert.AreEqual("12345678", directDebitPaymentDto.AccountNumber);
            Assert.AreEqual("123456", directDebitPaymentDto.SortCode);
            Assert.AreEqual(1123.45m, directDebitPaymentDto.PlanTotal);
            Assert.AreEqual("*freq", directDebitPaymentDto.Frequency);
            Assert.AreEqual(testGuaranteeRead, directDebitPaymentDto.GuaranteeRead);
            Assert.AreEqual(testDiscountAccepted, directDebitPaymentDto.DiscountAccepted);
            Assert.AreEqual(17.50m, directDebitPaymentDto.DiscountAmount);
            Assert.AreEqual("*****@*****.**", directDebitPaymentDto.EmailAddress);
        }
 public async Task CreateDirectDebitPlan(DirectDebitPlanOverviewVm directDebitPlanOverviewVm)
 {
     var directDebitPaymentDto = _directDebitPlanDtoProcess.BuildDirectDebitPlanDto(directDebitPlanOverviewVm);
     await _sendDirectDebitPlanProcess.SendDirectDebitPlanAsync(directDebitPaymentDto);
 }
Beispiel #6
0
        private async Task <IActionResult> ProcessDirectDebitDetailsPost(Guid lowellReferenceSurrogateKey,
                                                                         DirectDebitDetailsVm directDebitDetailsVmWithUserEntries)
        {
            if (!ModelState.IsValid)
            {
                Debug.Assert(directDebitDetailsVmWithUserEntries.InitialState != null,
                             "Initial state must be stashed to re-create view on round-trip");
                return(View(directDebitDetailsVmWithUserEntries));
            }

            //TODO: Change to async
            var result =
                await _directDebitPlanSetupService.CheckDirectDebitDetails(directDebitDetailsVmWithUserEntries);

            // Restore Payment Options from state embedded in Direct Debit VM
            PaymentOptionsVm paymentOptionsVm = DeserialiseModel <PaymentOptionsVm>(directDebitDetailsVmWithUserEntries.PaymentOptionsFilledInState);

            Debug.Assert(paymentOptionsVm.InitialState == null, "Serialisation Loop Detected - a previous step must have serialised a model that already contains InitialState");

            if (!result.IsSuccessful)
            {
                directDebitDetailsVmWithUserEntries.MessageForUser = result.MessageForUser;

                if (ApplicationSessionState.LogSetUpPlanResult)
                {
                    if (directDebitDetailsVmWithUserEntries.DiscountSelected)
                    {
                        await LogDiscountDirectDebitCompleteFailure(paymentOptionsVm);
                    }
                    else
                    {
                        await LogDirectDebitCompleteFailure(paymentOptionsVm);
                    }

                    ApplicationSessionState.LogSetUpPlanResult = false;
                }

                return(View(directDebitDetailsVmWithUserEntries));
            }

            DirectDebitPlanOverviewVm directDebitPlanOverview = _buildDirectDebitPlanOverviewVmService.Build(paymentOptionsVm, directDebitDetailsVmWithUserEntries);

            // Need to stash direct debit model, so that we can round-trip when 'change' options are selected on confirmation screen.
            Debug.Assert(!string.IsNullOrEmpty(directDebitDetailsVmWithUserEntries.PaymentOptionsFilledInState),
                         "Stashed model MUST contain stashed payment options model, so that it can be round-tripped back to Payment Options if choose to change that");

            directDebitPlanOverview.DirectDebitDetailsFilledInState =
                SerialiseModel(directDebitDetailsVmWithUserEntries);

            _gtmService.RaiseDirectDebitEvent_BankDetails(directDebitPlanOverview, LoggedInUserId, "Direct Debit Plan");

            if (directDebitDetailsVmWithUserEntries.DiscountSelected)
            {
                await LogDiscountDirectDebitDetailsEntered(paymentOptionsVm);
            }
            else
            {
                await LogDirectDebitDetailsEntered(paymentOptionsVm);
            }



            return(View("DirectDebitConfirm", directDebitPlanOverview));
        }