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); }
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); }
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)); }