/// <summary>
        /// Converts from.
        /// </summary>
        /// <param name="contractModel">The contract model.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">contractModel</exception>
        public ContractProductListViewModel ConvertFrom(ContractModel contractModel)
        {
            if (contractModel == null)
            {
                throw new ArgumentNullException(nameof(contractModel));
            }

            ContractProductListViewModel viewModel = new ContractProductListViewModel
            {
                Description      = contractModel.Description,
                ContractId       = contractModel.ContractId,
                ContractProducts = new List <ContractProductViewModel>()
            };

            if (contractModel.ContractProducts != null && contractModel.ContractProducts.Any())
            {
                contractModel.ContractProducts.ForEach(c =>
                {
                    viewModel.ContractProducts.Add(new ContractProductViewModel
                    {
                        EstateId                = contractModel.EstateId,
                        ContractId              = contractModel.ContractId,
                        ContractProductId       = c.ContractProductId,
                        DisplayText             = c.DisplayText,
                        ProductName             = c.ProductName,
                        Value                   = c.Value.HasValue ? c.Value.Value.ToString() : "Variable",
                        NumberOfTransactionFees = c.ContractProductTransactionFees.Count
                    });
                });
            }

            return(viewModel);
        }
        public async Task <IActionResult> GetContractProductsList([FromQuery] Guid contractId,
                                                                  CancellationToken cancellationToken)
        {
            try
            {
                String accessToken = await this.HttpContext.GetTokenAsync("access_token");

                ContractModel contract = await this.ApiClient.GetContract(accessToken, this.User.Identity as ClaimsIdentity, contractId, cancellationToken);

                ContractProductListViewModel viewModel = this.ViewModelFactory.ConvertFrom(contract);

                return(this.View("ContractProductsList", viewModel));
            }
            catch (Exception e)
            {
                return(this.View("ContractProductsList", new ContractProductListViewModel())
                       .WithWarning("Contract Products", Helpers.BuildUserErrorMessage("Error getting a list of products for Contract")));
            }
        }
        public async Task <IActionResult> GetContractProductsListAsJson([FromQuery] Guid contractId,
                                                                        CancellationToken cancellationToken)
        {
            try
            {
                // Search Value from (Search box)
                String searchValue = this.HttpContext.Request.Form["search[value]"].FirstOrDefault();

                String accessToken = await this.HttpContext.GetTokenAsync("access_token");

                ContractModel contract = await this.ApiClient.GetContract(accessToken, this.User.Identity as ClaimsIdentity, contractId, cancellationToken);

                ContractProductListViewModel contractProductListViewModel = this.ViewModelFactory.ConvertFrom(contract);

                Expression <Func <ContractProductViewModel, Boolean> > whereClause = c => c.ProductName.Contains(searchValue, StringComparison.OrdinalIgnoreCase) ||
                                                                                     c.DisplayText.Contains(searchValue, StringComparison.OrdinalIgnoreCase);

                return(this.Json(Helpers.GetDataForDataTable(this.Request.Form, contractProductListViewModel.ContractProducts, whereClause)));
            }
            catch (Exception e)
            {
                return(this.Json(Helpers.GetErrorDataForDataTable <String>(Helpers.BuildUserErrorMessage("Error getting contract product list"))));
            }
        }