public async Task <IActionResult> CreateMerchant(CreateMerchantViewModel viewModel,
                                                         CancellationToken cancellationToken)
        {
            // Validate the model
            if (this.ValidateModel(viewModel))
            {
                try
                {
                    String accessToken = await this.HttpContext.GetTokenAsync("access_token");

                    CreateMerchantModel createMerchantModel = this.ViewModelFactory.ConvertFrom(viewModel);

                    // All good with model, call the client to create the merchant
                    CreateMerchantResponseModel createMerchantResponse =
                        await this.ApiClient.CreateMerchant(accessToken, this.User.Identity as ClaimsIdentity, createMerchantModel, cancellationToken);

                    // TODO: Investigate some kind of spinner...
                    await Task.Delay(TimeSpan.FromSeconds(30));

                    // Merchant Created, redirect to the Merchant List screen
                    return(this.RedirectToAction("GetMerchant",
                                                 "Merchant",
                                                 new
                    {
                        merchantId = createMerchantResponse.MerchantId
                    }));
                }
                catch (Exception e)
                {
                    // Something went wrong creating the contract
                    return(this.View("CreateMerchant").WithWarning("New Merchant", Helpers.BuildUserErrorMessage("Error creating the merchant")));
                }
            }

            // If we got this far, something failed, redisplay form
            return(this.View("CreateMerchant", viewModel));
        }
        /// <summary>
        /// Converts from.
        /// </summary>
        /// <param name="createMerchantViewModel">The create merchant view model.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">createMerchantViewModel</exception>
        public CreateMerchantModel ConvertFrom(CreateMerchantViewModel createMerchantViewModel)
        {
            if (createMerchantViewModel == null)
            {
                throw new ArgumentNullException(nameof(createMerchantViewModel));
            }

            CreateMerchantModel createMerchantModel = new CreateMerchantModel
            {
                Address = new AddressModel
                {
                    AddressLine1 = createMerchantViewModel.AddressLine1,
                    AddressLine2 = createMerchantViewModel.AddressLine2,
                    AddressLine3 = createMerchantViewModel.AddressLine3,
                    AddressLine4 = createMerchantViewModel.AddressLine4,
                    Country      = createMerchantViewModel.Country,
                    PostalCode   = createMerchantViewModel.PostalCode,
                    Region       = createMerchantViewModel.Region,
                    Town         = createMerchantViewModel.Town,
                },
                Contact = new ContactModel
                {
                    ContactPhoneNumber  = createMerchantViewModel.ContactPhoneNumber,
                    ContactName         = createMerchantViewModel.ContactName,
                    ContactEmailAddress = createMerchantViewModel.ContactEmailAddress
                },
                MerchantName       = createMerchantViewModel.MerchantName,
                SettlementSchedule = createMerchantViewModel.SettlementSchedule switch {
                    0 => SettlementSchedule.Immediate,
                    1 => SettlementSchedule.Weekly,
                    2 => SettlementSchedule.Monthly
                }
            };

            return(createMerchantModel);
        }
        public async Task <IActionResult> CreateMerchant(CancellationToken cancellationToken)
        {
            CreateMerchantViewModel viewModel = new CreateMerchantViewModel();

            return(this.View("CreateMerchant", viewModel));
        }
 /// <summary>
 /// Validates the model.
 /// </summary>
 /// <param name="viewModel">The view model.</param>
 /// <returns></returns>
 private Boolean ValidateModel(CreateMerchantViewModel viewModel)
 {
     return(this.ModelState.IsValid);
 }