Esempio n. 1
0
        public void TestIndexHappyPath()
        {
            var expectedViewModel = new AdvisorDetailViewModel()
            {
                attr1 = "value1",
                attr2 = "value2"
            };

            var controller = new AdvisorsController();
            var response   = controller.Index(this.validConsumerId);


            // In order to maintain this simple test,
            // an evaluation of each attribute is carried out,
            // but when it is necessary to evaluate complex objects it is advisable to serialize both objects,
            // the expected value and the current value and the Equal Assertion is made with both serialized values
            Assert.AreEqual(expectedViewModel.attr1, (response as ViewResult).Model.attr1);
            Assert.AreEqual(expectedViewModel.attr2, (response as ViewResult).Model.attr2);
            Assert.IsInstanceOfType(response, typeof(ViewResult));
        }
        public ActionResult Index(int id = 0)
        {
            if (id == 0)
            {
                return(PageNotFoundActionResult());
            }
            if (SecurityRules.IsConsumerViewingOtherAdvisorProfile(id))
            {
                return(Request.Url != null?Redirect(AdvisorHelper.GetMyAdvisorUri + Request.Url.Query) : PageForbiddenActionResult());
            }
            string url = SeoHelper.ValidateSlug(id, Request.RawUrl);

            if (!string.IsNullOrWhiteSpace(url))
            {
                return(new RedirectResult(url, true));
            }
            var manager = new AdvisorViewManager();

            if (string.IsNullOrEmpty(ViewBag.canonicalUrl) && Request.Url != null)
            {
                ViewBag.canonicalUrl = TouchPoints.Services.HelperClasses.Url.BuildCanonicalUrl(Request.Url, Config.AppSettings.CanonicalScheme, Config.AppSettings.CanonicalHostname);
            }

            AdvisorDetailViewModel viewModel = manager.BuildAdvisorViewModel(id);

            if (viewModel == null)
            {
                return(PageNotFoundActionResult());
            }
            viewModel.InitializeBreadcrumb();


            viewModel.LoadSecurity("advisors-index", viewModel);
            GetEditBadgeSettings(viewModel);
            return(View(viewModel));
        }
        public AdvisorDetailViewModel GetAdvisorDetailViewModel(int advisorId, bool isEdit)
        {
            var manager    = new AdvisorManager();
            var detailInfo = manager.GetProductDetailInfo(advisorId);

            if (detailInfo == null)
            {
                return(null);
            }

            detailInfo.IsEditable             = AdvisorIsEditable(detailInfo.AdvisorMasterEntityId, detailInfo.AdvisorCompanyMasterEntityId, detailInfo.AdvisorCompanyParentMasterEntityId);
            detailInfo.IsPreview              = false;
            detailInfo.AdvisorStatus          = TypeChanger.DoEnum(detailInfo.Status, ProfileStatus.Unknown);
            detailInfo.Certifications         = AdvisorInfoManager.GetAdvisorCertifications(detailInfo.AdvisorCertificationsXml);
            detailInfo.VisitedPlaces          = AdvisorInfoManager.GetVisitedPlaces(detailInfo.AdvisorPlacesVisitedXml);
            detailInfo.Interests              = BaseDetailInfoHelpers.GetTravelElements(detailInfo.AdvisorInterestTypesXml);
            detailInfo.SpecialtyDestinations  = BaseDetailInfoHelpers.GetTravelElements(detailInfo.AdvisorSpecialtyCountriesXml);
            detailInfo.Languages              = BaseDetailInfoHelpers.GetTravelElements(detailInfo.AdvisorLanguagesXml);
            detailInfo.AlliancePrograms       = BaseDetailInfoHelpers.GetTravelElements(detailInfo.AdvisorAllianceProgramsXml);
            detailInfo.ConditionalLeadsName   = AdvisorInfoManager.GetConditionalLeadsName(detailInfo.AlliancePrograms);
            detailInfo.AdvisorPrimarydAddress = ProfileContactInfoManagerBase.GetPrimaryAddress(detailInfo.ProfileAddressXml);
            ProfileAddressManager.DisambiguateAddressCity(detailInfo.AdvisorPrimarydAddress, isEdit);
            if (HttpContext.Current.Request.QueryString["consumer"] == "1")
            {
                detailInfo.IsEditable = false;
                detailInfo.IsPreview  = true;
            }

            var user      = FederatedLoginClient.User;
            var viewModel = new AdvisorDetailViewModel
            {
                AdvisorMasterEntityId = detailInfo.AdvisorMasterEntityId,
                Status      = detailInfo.AdvisorStatus,
                AdvisorName = string.Format("{0} {1}", detailInfo.AdvisorFirstName, detailInfo.AdvisorLastName)
            };

            viewModel.ShowReviewsTab = ReviewHelper.ShowReview(detailInfo.TotalCompletedReviews, detailInfo.TotalBlockedReviews, detailInfo.TotalActiveReviews);
            if (viewModel.ShowReviewsTab)
            {
                viewModel.ReviewsInfoJson = new RatingAndReviewManager().GetReviewsInfoJsonForAdvisor(detailInfo);
            }

            viewModel.HeaderInfoPlus = new AdvisorHeaderInfoPlus
            {
                Header = new AdvisorHeaderInfoViewModel {
                    AdvisorHeaderInfo = AdvisorInfoManager.BuildHeaderInfo(detailInfo)
                },
                ContactAdvisor = GetContactAdvisor(detailInfo),
                ReviewBadge    = ReviewHelper.BuildBadgeModelForAdvisorDetailPage(detailInfo)
            };

            viewModel.AboutMePlus = new AdvisorAboutMePlus
            {
                Alliances             = AdvisorInfoManager.BuildAboutMe(detailInfo),
                Overview              = GetProfileOverviewInfo(detailInfo),
                IsActive              = detailInfo.AdvisorIsActive,
                CompanyIsActive       = detailInfo.AdvisorCompanyIsActive,
                AdvisorMasterEntityId = advisorId
            };

            if (user.IsComposerUser)
            {
                AddCommunityInfoForAdvisor(viewModel.AboutMePlus);
            }

            viewModel.DetailInfo  = detailInfo;
            viewModel.ContactInfo = AdvisorContactInfoManager.BuildContactInfo(detailInfo);
            viewModel.CobrandInfo = new AdvisorCobrandInfoViewModel
            {
                AdvisorCobrandInfo = AdvisorCobrandAndSettingsManager.BuildCobrandInfo(detailInfo)
            };
            ProfileAddressManager.DisambiguateAddressCity(viewModel.ContactInfo.PrimaryAddress, isEdit);
            ProfileAddressManager.DisambiguateAddressCities(viewModel.ContactInfo.Addresses, isEdit);

            // note that if an advisor is using the agency default personalization, the advisor personalized address will be null
            var personalizedAddress = TouchPoints.Framework.Utilities.Xml.Deserialize <PersonalizationAddress>(detailInfo.AdvisorPersonalizedAddressXml) ?? new PersonalizationAddress();

            detailInfo.AdvisorPersonalizedAddress = personalizedAddress;
            viewModel.AdvisorPersonalization      = new AdvisorPersonalizationInfo
            {
                AdvisorName                     = detailInfo.AdvisorPersonalizedName,
                AgencyName                      = detailInfo.AgencyPersonalizedName,
                DoingBusinessAs                 = detailInfo.AdvisorPersonalizedDoingBusinessAs,
                AddressLine1                    = personalizedAddress.AddressLine1,
                AddressLine2                    = personalizedAddress.AddressLine2,
                City                            = personalizedAddress.City,
                RegionNameEng                   = personalizedAddress.State,
                RegionId                        = personalizedAddress.RegionId,
                RegionCode                      = personalizedAddress.RegionCode,
                CountryNameEng                  = personalizedAddress.Country,
                CountryId                       = personalizedAddress.CountryId,
                PostalCode                      = personalizedAddress.PostalCode,
                Phone                           = detailInfo.AdvisorPersonalizedPrimaryPhone,
                SecondPhone                     = detailInfo.AdvisorPersonalizedSecondaryPhone,
                WebAddress                      = detailInfo.AdvisorPersonalizedWebsite,
                Email                           = detailInfo.AdvisorPersonalizedEmail,
                StateOfSellerId                 = detailInfo.AdvisorPersonalizedStateOfSellerId,
                LogoUrl                         = detailInfo.AdvisorCompanyLogo,
                AssociatedMasterEntityId        = detailInfo.AdvisorMasterEntityId,
                AssociatedParentMasterEntityId  = detailInfo.AdvisorCompanyParentMasterEntityId,
                UseAgencyDefaultPersonalization = detailInfo.UseAgencyDefaultPersonalization
            };

            personalizedAddress             = Xml.Deserialize <PersonalizationAddress>(detailInfo.AgencyPersonalizedAddressXml) ?? new PersonalizationAddress();
            viewModel.AgencyPersonalization = new AgencyPersonalizationInfo
            {
                AgencyName                     = detailInfo.AgencyPersonalizedName,
                AddressLine1                   = personalizedAddress.AddressLine1,
                AddressLine2                   = personalizedAddress.AddressLine2,
                City                           = personalizedAddress.City,
                RegionNameEng                  = personalizedAddress.State,
                RegionId                       = personalizedAddress.RegionId,
                RegionCode                     = personalizedAddress.RegionCode,
                CountryNameEng                 = personalizedAddress.Country,
                CountryId                      = personalizedAddress.CountryId,
                PostalCode                     = personalizedAddress.PostalCode,
                Phone                          = detailInfo.AgencyPersonalizedPrimaryPhone,
                SecondPhone                    = detailInfo.AgencyPersonalizedSecondaryPhone,
                WebAddress                     = detailInfo.AgencyPersonalizedWebsite,
                Email                          = detailInfo.AgencyPersonalizedEmail,
                StateOfSellerId                = detailInfo.AgencyPersonalizedStateOfSellerId,
                LogoUrl                        = detailInfo.LogoUrl,
                AssociatedMasterEntityId       = detailInfo.AdvisorCompanyMasterEntityId,
                AssociatedParentMasterEntityId = detailInfo.AdvisorCompanyParentMasterEntityId,
            };
            viewModel.Information = new AdvisorInformationViewModel
            {
                AdvisorInformation = AdvisorInfoManager.BuildAdminInfo(detailInfo)
            };
            viewModel.Specialties = new AdvisorTravelSpecialtiesViewModel
            {
                AdvisorTravelSpecialties = AdvisorInfoManager.BuildTravelSpecialties(detailInfo)
            };

            // fill in personalization IC status, since the value in DetailInfo may be unreliable
            viewModel.AdvisorPersonalization.IsIndependentContractor = (viewModel.Information.AdvisorType.TypeId == AdvisorInfoManager.IndependentContractorTypeId);

            // TODO: only need these for edit by certain people with permissions
            if (null != viewModel.Specialties)
            {
                viewModel.Specialties.SpecialtyCountriesLookup = SpecialtyDestinations.Get(null, ProfileType.Advisor);
            }

            viewModel.OutOfOffice = new AdvisorOutOfOffice();
            viewModel.Settings    = AdvisorCobrandAndSettingsManager.BuildAdvisorSettings(detailInfo);
            AgencyViewManager.CalculateFieldLevelPermissions(viewModel.Settings, user);

            viewModel.SupplierMarketingOptions =
                new SupplierMarketingOptionsViewManager().GetSupplierMarketingOptionsForMember(advisorId);

            viewModel.SupplierMarketingOptions.MemberHasOverrideRole = detailInfo.OverrideAgencySupplierMarketing;
            viewModel.SupplierMarketingOptions.AgencyMeid            = detailInfo.AdvisorCompanyMasterEntityId;

            viewModel.ConsumerNotifications = new ConsumerNotificationsViewManager().GetNotificationsForAdvisor(advisorId, viewModel.Settings.Meid, viewModel.Settings.ParentMeid);

            viewModel.SecurityData = new AdvisorProfileSecurityData();

            var securityModel = TouchPoints.Framework.Utilities.Xml.Deserialize <StaffSecurityModelXml>(detailInfo.ProfileRolesXml);

            viewModel.AdvisorSecurity = SecurityManager.BuildAdvisorSecurity(securityModel);
            viewModel.HotelBooking    = new AdvisorHotelBookingViewModel();

            viewModel.HotelBooking.HotelBooking = new AdvisorHotelBooking
            {
                AdvisorMasterEntityId = viewModel.AdvisorMasterEntityId,
                AgentId = detailInfo.AgentId,
                BookingPrefatoryCode  = detailInfo.BookingPrefatoryCode,
                BookingPseudoCityCode = detailInfo.BookingPseudoCityCode,
                BookingQueueNumber    = detailInfo.BookingQueueNumber,
                AgentInterfaceId      = detailInfo.AgentInterfaceId,
                SameAsAgency          = detailInfo.IsBookingSameAsAgency
            };

            viewModel.AdvisorLogoExists            = !String.IsNullOrEmpty(viewModel.AdvisorPersonalization.LogoUrl);
            viewModel.AgencyDefaultLogoExists      = !String.IsNullOrEmpty(viewModel.AgencyPersonalization.LogoUrl);
            viewModel.PersonalizationGuidelinesUrl = Config.AppSettings.PersonalizationGuidelinesUrl;

            return(viewModel);
        }
 private ActionResult Personalization(AdvisorDetailViewModel viewModel, bool isEditMode)
 {
     viewModel.LoadSecurity("advisors-index", viewModel);
     return(PartialView(isEditMode ? "EditorTemplates/PersonalizationInfo" : "DisplayTemplates/PersonalizationInfo", viewModel));
 }