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

                    AddTransactionFeeToContractProductModel addTransactionFeeToContractProductModel = this.ViewModelFactory.ConvertFrom(viewModel);

                    // All good with model, call the client
                    AddTransactionFeeToContractProductResponseModel addTransactionFeeToContractProductResponse =
                        await this.ApiClient.AddTransactionFeeToContractProduct(accessToken,
                                                                                this.User.Identity as ClaimsIdentity,
                                                                                viewModel.ContractId,
                                                                                viewModel.ContractProductId,
                                                                                addTransactionFeeToContractProductModel,
                                                                                cancellationToken);

                    // Transaction Fee Created, redirect to the Transaction Fee List screen
                    return(this.RedirectToAction("GetContractProductTransactionFeesList",
                                                 "Contract",
                                                 new
                    {
                        contractId = addTransactionFeeToContractProductResponse.ContractId,
                        contractProductId = addTransactionFeeToContractProductResponse.ProductId
                    }).WithSuccess("Transaction Fee Created Successful", $"Transaction Fee {viewModel.FeeDescription} successfully created"));
                }
                catch (Exception ex)
                {
                    // Something went wrong creating the Product
                    return(this.View("CreateContractProductTransactionFee").WithWarning("New Contract Product Transaction Fee",
                                                                                        Helpers
                                                                                        .BuildUserErrorMessage("Error creating the contract product transaction fee")));
                }
            }

            // If we got this far, something failed, redisplay form
            return(this.View("CreateContractProductTransactionFee", viewModel));
        }
        /// <summary>
        /// Converts from.
        /// </summary>
        /// <param name="createContractProductTransactionFeeViewModel">The create contract product transaction fee view model.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">createContractProductTransactionFeeViewModel</exception>
        public AddTransactionFeeToContractProductModel ConvertFrom(CreateContractProductTransactionFeeViewModel createContractProductTransactionFeeViewModel)
        {
            if (createContractProductTransactionFeeViewModel == null)
            {
                throw new ArgumentNullException(nameof(createContractProductTransactionFeeViewModel));
            }

            AddTransactionFeeToContractProductModel addTransactionFeeToContractProductModel = new AddTransactionFeeToContractProductModel();

            addTransactionFeeToContractProductModel.Value = createContractProductTransactionFeeViewModel.Value;

            Int32 calculationType = createContractProductTransactionFeeViewModel.CalculationType - 1;

            addTransactionFeeToContractProductModel.CalculationType = (CalculationType)calculationType;
            addTransactionFeeToContractProductModel.Description     = createContractProductTransactionFeeViewModel.FeeDescription;
            Int32 feeType = createContractProductTransactionFeeViewModel.FeeType - 1;

            addTransactionFeeToContractProductModel.FeeType = (FeeType)feeType;

            return(addTransactionFeeToContractProductModel);
        }