public ActionResult CreateAppointment()
        {
            var vm        = new CreateAppointmentVM();
            var input     = new ProviderSearchInput();
            var providers = providerService.Search(input);

            vm.ProviderIDs = ProviderMapper.MapProviderSearchResult_ProviderIds(providers);

            return(View(vm));
        }
        /// <summary>
        /// Retrieves Provider details matching search criteria contained within the request.
        /// </summary>
        /// <param name="request">ProviderSearchInput request object containing search criteria.</param>
        /// <exception cref="CourseSearchServiceException">The exception details of the error that has occurred.</exception>
        /// <returns>ProviderSearchOutput object populated with matching Provider details.</returns>
        public ProviderSearchOutput ProviderSearch(ProviderSearchInput request)
        {
            ProviderSearchOutput pso;

            try
            {
                pso = _providerService.GetProviders(request);
            }
            catch (Exception ex)
            {
                CourseSearchServiceException exc = new CourseSearchServiceException("An error has occured in the CourseSearchService", ex);
                throw exc;
            }

            return(pso);
        }
        /// <summary>
        /// On clicking ProviderSearch button, calls CourseSearchService ProviderSearch() method wtih test data.
        /// </summary>
        private void btnProviderSearch_Click(object sender, EventArgs e)
        {
            txtResult.Text = "Processing ...";

            ServiceInterface client = new ServiceInterfaceClient("CourseSearch");

            ProviderSearchInput request = new ProviderSearchInput(new ProviderSearchRequestStructure());

            request.ProviderSearchRequest.ProviderKeyword = "Cardiff";

            try
            {
                ProviderSearchOutput response = client.ProviderSearch(request);
                StringBuilder        sb       = new StringBuilder();
                sb.Append("Request details:");
                sb.Append("\nProvider Keyword = " +
                          response.ProviderSearchResponse.RequestDetails.ProviderSearch.ProviderKeyword);

                sb.Append("\n\n");

                if (response.ProviderSearchResponse != null && response.ProviderSearchResponse.ProviderDetails != null)
                {
                    sb.Append("Provider details:");
                    foreach (ProviderStructure providerDetail in response.ProviderSearchResponse.ProviderDetails)
                    {
                        sb.Append("\n" + providerDetail.Provider.ProviderID);
                        sb.Append("\n" + providerDetail.Provider.ProviderName);
                        sb.Append("\n");
                    }
                }

                txtResult.Text = sb.ToString();
            }
            catch (Exception ex)
            {
                txtResult.Text = ex.Message;
            }
        }
        /// <summary>
        /// Executes a search for Providers matching the search keyword.
        /// </summary>
        /// <param name="request">ProviderSearchInput request object.</param>
        /// <returns>A ProviderSearchOuput object.</returns>
        public ProviderSearchOutput GetProviders(ProviderSearchInput request)
        {
            ProviderSearchOutput providerSearchOutput = new ProviderSearchOutput(new ProviderSearchResponseStructure());

            providerSearchOutput.ProviderSearchResponse.RequestDetails = new ProviderSearchResponseStructureRequestDetails();
            providerSearchOutput.ProviderSearchResponse.RequestDetails.ProviderSearch = request.ProviderSearchRequest;

            List <Provider> providers =
                _providerQuery.GetProviders(request.ProviderSearchRequest.ProviderKeyword, request.ProviderSearchRequest.APIKey);

            List <ProviderStructure> providerStructures = new List <ProviderStructure>();

            foreach (Provider provider in providers)
            {
                ProviderStructure providerStructure = new ProviderStructure();
                providerStructure.Provider = BuildProviderDetail(provider);

                providerStructures.Add(providerStructure);
            }

            providerSearchOutput.ProviderSearchResponse.ProviderDetails = providerStructures.ToArray();

            return(providerSearchOutput);
        }
        /// <summary>
        /// Gets the results from the web service.
        /// </summary>
        /// <param name="criteria">The course search criteria.</param>
        /// <returns>A list of found courses.</returns>
        private ProviderSearchOutput GetResults(SearchCriteriaStructure criteria)
        {
            ProviderSearchOutput output = new ProviderSearchOutput();
            ServiceInterface     client = new ServiceInterfaceClient("CourseSearchService");

            ProviderSearchRequestStructure listRequestStructure = new ProviderSearchRequestStructure
            {
                APIKey          = criteria.APIKey,
                ProviderKeyword = criteria.ProviderKeyword
            };

            ProviderSearchInput request = new ProviderSearchInput(listRequestStructure);

            try
            {
                output = client.ProviderSearch(request);
            }
            catch (Exception ex)
            {
                ResultsOverviewLabel.Text = ex.Message + "\n" + ex.StackTrace;
            }

            return(output);
        }