/// <summary>
        /// Retrieve a list of reading sites for the inquiring site
        /// </summary>
        /// <param name="siteStationNumber">Site being questioned</param>
        /// <returns>ReadingSiteList object contains all available reading site for the questioned site</returns>
        public ReadingSiteList GetReadingSites(string siteStationNumber)
        {
            Log.Debug("Retrieving reading sites...");

            if (string.IsNullOrWhiteSpace(siteStationNumber))
            {
                Log.Error("Missing parameter: siteStationNumber.");
            }

            string URI = String.Format("pathology/reading/{0}", siteStationNumber);
            IRestResponse response;
            ReadingSiteList result = new ReadingSiteList();
            try
            {
                response = ExecuteGet(URI, VixServiceTypes.Pathology);
                ValidateRestResponse(response);
                result = ResponseParser.ParseGetReadingSiteResponse(response.Content);
            }
            catch (MagVixFailureException vfe)
            {
                Log.Error("Unexpected response.", vfe);
            }
            catch (Exception ex)
            {
                Log.Error("Could not complete request to retrieve reading site list.", ex);
            }

            Log.Debug(result.Items.Count.ToString() + " reading sites retrieved.");
            return result;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConsultationStatusViewModel"/> class with cases
        /// </summary>
        /// <param name="readSites">list of known reading sites</param>
        public ConsultationStatusViewModel(CaseListItem item, ReadingSiteList sitelist)
        {
            this.Sites = new ObservableCollection<SiteConsultationStatusViewModel>();
            this.SelectedSites = new ObservableCollection<SiteConsultationStatusViewModel>();

            this.CancelConsultationCommand = new RelayCommand(CancelConsultation, () => CanCancelConsultation());
            this.RequestConsultationCommand = new RelayCommand(RequestConsultation, () => CanRequestConsultation());
            this.RefuseConsultationCommand = new RelayCommand(RefuseConsultation, () => CanRefuseConsultation());

            this.AccessionNr = item.AccessionNumber;
            this.PatientName = item.PatientName;
            this.PatientID = item.PatientID;

            bool canRequestConsultation = true;
            foreach (ReadingSiteInfo readingSiteInfo in sitelist.Items)
            {
                if ((readingSiteInfo.SiteStationNumber == UserContext.LocalSite.PrimarySiteStationNUmber) && (readingSiteInfo.SiteType == ReadingSiteType.consultation))
                {
                    canRequestConsultation = false;
                    break;
                }
            }

            // process consultation sites
            foreach (ReadingSiteInfo siteInfo in sitelist.Items)
            {
                SiteConsultationStatusViewModel itemVM = new SiteConsultationStatusViewModel();
                itemVM.Item = item;
                itemVM.SiteInfo = siteInfo;
                Site localSite = UserContext.LocalSite;
                itemVM.CanRequestConsultation = canRequestConsultation;

                foreach (CaseConsultation consult in item.ConsultationList.ConsultationList)
                {
                    if ((siteInfo.SiteStationNumber == consult.SiteID) && (consult.Type == "CONSULTATION"))
                    {
                        itemVM.ConsultationID = consult.ConsultationID;

                        if (consult.Status == "PENDING")
                        {
                            itemVM.IsPending = true;

                            // if request pending for current site
                            if ((siteInfo.SiteStationNumber == UserContext.LocalSite.PrimarySiteStationNUmber) &&
                                (consult.SiteID == UserContext.LocalSite.PrimarySiteStationNUmber))
                            {
                                itemVM.CanRefuseConsultation = true;
                            }
                        }
                        else if (consult.Status == "REFUSED")
                        {
                            itemVM.IsRefused = true;
                        }
                        else if (consult.Status == "COMPLETED")
                        {
                            itemVM.IsCompleted = true;
                        }
                    }
                }

                if (!itemVM.IsPending && !itemVM.IsCompleted && !siteInfo.Active)
                {
                    // not active and not pending. ignore this site
                    continue;
                }

                this.Sites.Add(itemVM);
            }

            // process consultation requests for current site
            foreach (CaseConsultation consult in item.ConsultationList.ConsultationList)
            {
                if ((consult.SiteID == UserContext.LocalSite.PrimarySiteStationNUmber) &&
                    (consult.Type == "CONSULTATION") && (consult.Status == "PENDING"))
                {
                    SiteConsultationStatusViewModel itemVM = new SiteConsultationStatusViewModel();
                    itemVM.Item = item;
                    itemVM.SiteInfo = new ReadingSiteInfo
                    {
                        SiteStationNumber = UserContext.LocalSite.PrimarySiteStationNUmber,
                        SiteAbr = UserContext.LocalSite.SiteAbbreviation,
                        SiteName = UserContext.LocalSite.SiteName,
                        Active = true
                    };
                    itemVM.IsCurrentSite = true;
                    itemVM.ConsultationID = consult.ConsultationID;
                    itemVM.IsPending = true;

                    this.Sites.Add(itemVM);
                }
            }
        }