private List<Field> PopulateLocationsFieldData(ModuleInstanceView parent, MEDSEEK.eHealth.ecoSystemSP.Common.Services.ServiceDto service, Field templateField, IDictionary<string, string> parameters)
        {
            var locationsFields = new List<Field>();
            var request = new ReadServiceByIdRequest() { ServiceId = service.Id };
            var response = parent.ProcessRequest<ReadServiceByIdResponse>(request);
            var seoHelper = new SeoHelper(parent, parameters);

            foreach (var location in response.Service.Serviceorgunits)
            {
                var locationField = (Field)templateField.Clone();

                if(string.IsNullOrEmpty(_viewSettings.SeoSchema))
                    _viewSettings.SeoSchema = seoHelper.BuildSeoSchemaField(location);

                foreach (var column in locationField.FieldColumns)
                {
                    foreach (var field in column.Fields)
                    {
                        switch (field.FieldName)
                        {
                            case "LocationName":
                                field.Value = location.Name;
                                break;
                            case "LocationAddress":
                                var sb = new StringBuilder();
                                sb.Append(location.Address1 + "<br />");
                                if (!string.IsNullOrEmpty(location.Address2))
                                    sb.Append(location.Address2 + "<br />");
                                sb.AppendFormat("{0}, {1} {2}", location.City, location.State, location.Zip);
                                field.Value = sb.ToString();
                                break;
                            case "Phone":
                                field.Value = location.PhoneNumber;
                                break;
                            case "Fax":
                                field.Value = location.Fax;
                                break;
                            case "Hours":
                                field.Values.Clear();
                                foreach (var schedule in location.Schedule)
                                    field.Values.Add(string.Format("{0} {1}-{2}", schedule.Day, schedule.Open, schedule.Close));
                                break;
                            case "Map":
                                field.Value = "mapDiv_" + location.Id;
                                field.MappingProvider = _mappingSettings.MappingProvider.ToString().ToUpperInvariant();
                                field.MapItem = new MapItem()
                                {
                                    Title = location.Name,
                                    Latitude = location.Latitude.ToString(),
                                    Longitude = location.Longitude.ToString(),
                                    LocationAddress = location.MappingAddress,
                                    LocationPhoneNum = location.PhoneNumber
                                };
                                break;
                        }
                    }
                }

                locationsFields.Add(locationField);
            }

            return locationsFields;
        }
        private DetailView BuildPublicSettingsView(ModuleInstanceView parent, DetailView settingsData, IDictionary<string, string> parameters)
        {
            string serviceId;
            if (parameters.TryGetValue("ServiceId", out serviceId))
            {
                var request = new ReadServiceByIdRequest() { ServiceId = int.Parse(serviceId) };
                var service = parent.ProcessRequest<ReadServiceByIdResponse>(request).Service;

                foreach (var zone in settingsData.StaticPageZones.Select(z => z.Value).Union(settingsData.DynamicPageZones))
                {
                    foreach (var column in zone.FieldColumns)
                    {
                        List<Field> locationsFieldList = null;
                        foreach (var field in column.Fields)
                        {
                            if (field.FieldName == "Locations")
                            {
                                locationsFieldList = PopulateLocationsFieldData(parent, service, field, parameters);
                                field.FieldName = "ReplaceMe";
                            }
                            else
                            {
                                PopulateFieldData(parent, service, field);
                            }
                        }

                        //Replace Locations Complex Field with correct field list
                        if (locationsFieldList != null)
                        {
                            var index = column.Fields.IndexOf(column.Fields.First(f => f.FieldName == "ReplaceMe"));
                            column.Fields.InsertRange(index, locationsFieldList);
                            index = column.Fields.IndexOf(column.Fields.First(f => f.FieldName == "ReplaceMe"));
                            column.Fields.RemoveAt(index);
                        }
                    }
                }

                // Add SEO data to the response
                PopulateSeoData(parent, service, parameters);
            }

            return settingsData;
        }
 /// <summary>
 /// Determines whether the specified <see cref="ServicesSearchRequest" /> is equal to this instance.
 /// </summary>
 /// <param name="other">The other.</param>      
 public bool Equals(ReadServiceByIdRequest other)
 {
     return base.Equals(other) && ServiceId == other.ServiceId;
 }