protected void loadDataFromConcierge()
    {
        Search       sLeaders  = GetOrganizationalLayerLeaderSearch(targetOrganizationalLayer.ID);
        SearchResult srLeaders = APIExtensions.GetSearchResult(sLeaders, 0, 1);

        leader = ConvertLeaderSearchResult(srLeaders);
    }
예제 #2
0
    protected bool isModerator(IConciergeAPIService proxy)
    {
        if (hasLeaderSearchBeenRun)
        {
            return(leader != null && leader.CanModerateDiscussions);
        }

        if (targetChapter != null)
        {
            Search       sChapterLeader  = GetChapterLeaderSearch(targetChapter.ID);
            SearchResult srChapterLeader = proxy.GetSearchResult(sChapterLeader, 0, 1);
            leader = ConvertLeaderSearchResult(srChapterLeader);
            hasLeaderSearchBeenRun = true;
        }

        if (targetSection != null)
        {
            Search       sSectionLeader  = GetSectionLeaderSearch(targetSection.ID);
            SearchResult srSectionLeader = proxy.GetSearchResult(sSectionLeader, 0, 1);
            leader = ConvertLeaderSearchResult(srSectionLeader);
            hasLeaderSearchBeenRun = true;
        }

        if (targetOrganizationalLayer != null)
        {
            Search       sOrganizationalLayerLeader  = GetOrganizationalLayerLeaderSearch(targetOrganizationalLayer.ID);
            SearchResult srOrganizationalLayerLeader = proxy.GetSearchResult(sOrganizationalLayerLeader, 0, 1);
            leader = ConvertLeaderSearchResult(srOrganizationalLayerLeader);
            hasLeaderSearchBeenRun = true;
        }

        return(leader != null && leader.CanModerateDiscussions);
    }
예제 #3
0
    protected void getLeader()
    {
        Search       sLeaders  = GetChapterLeaderSearch(targetChapter.ID);
        SearchResult srLeaders = APIExtensions.GetSearchResult(sLeaders, 0, 1);

        leader = ConvertLeaderSearchResult(srLeaders);
    }
    /// <summary>
    /// Initializes the target object for the page
    /// </summary>
    /// <remarks>Many pages have "target" objects that the page operates on. For instance, when viewing
    /// an event, the target object is an event. When looking up a directory, that's the target
    /// object. This method is intended to be overriden to initialize the target object for
    /// each page that needs it.</remarks>
    protected override void InitializeTargetObject()
    {
        base.InitializeTargetObject();

        targetSection = LoadObjectFromAPI <msSection>(ContextID);

        if (targetSection == null)
        {
            GoToMissingRecordPage();
            return;
        }

        targetSectionLeader = targetSection.Leaders.Find(x => x.Individual == CurrentEntity.ID);

        if (targetSectionLeader == null)
        {
            GoToMissingRecordPage();
            return;
        }

        targetMembershipOrganization = LoadObjectFromAPI <msMembershipOrganization>(targetSection.MembershipOrganization);

        if (targetMembershipOrganization == null)
        {
            GoToMissingRecordPage();
            return;
        }

        targetSearchManifest = MultiStepWizards.ViewSectionMembers.SearchManifest;

        if (targetSearchManifest == null || targetSearchManifest.DefaultSelectedFields.Count == 0)
        {
            targetSearchManifest = buildSearchManifest();
            MultiStepWizards.ViewSectionMembers.SearchManifest = targetSearchManifest;
        }

        using (IConciergeAPIService proxy = GetConciegeAPIProxy())
        {
            List <string> availableFields = defaultFieldFullPaths;

            //If the Membership Organization has defined criteria fields available to leaders use them but prefix with "Membership." because the settings are based on the Membership search
            //while this is a section membership search
            if (targetMembershipOrganization.LeaderSearchFields != null)
            {
                availableFields = (from field in targetMembershipOrganization.LeaderSearchFields select "Membership." + field).ToList();
            }

            targetCriteriaFields = proxy.GetSearchFieldMetadataFromFullPath(msSectionMembership.CLASS_NAME, null, availableFields).ResultValue;
        }
    }
예제 #5
0
    /// <summary>
    /// Initializes the target object for the page
    /// </summary>
    /// <remarks>Many pages have "target" objects that the page operates on. For instance, when viewing
    /// an event, the target object is an event. When looking up a directory, that's the target
    /// object. This method is intended to be overriden to initialize the target object for
    /// each page that needs it.</remarks>
    protected override void InitializeTargetObject()
    {
        base.InitializeTargetObject();

        //Load the chapter and individual from the context id in the query string
        targetChapter = LoadObjectFromAPI <msChapter>(ContextID);

        if (targetChapter == null)
        {
            GoToMissingRecordPage();
            return;
        }

        if (targetChapter.Leaders == null)
        {
            targetChapter.Leaders = new List <msMembershipLeader>();
        }

        if (string.IsNullOrWhiteSpace(IndividualID))
        {
            targetLeader = new msMembershipLeader();
        }
        else
        {
            //Check the individual ID - if it's specified then this is an edit command and load the individual
            targetIndividual = LoadObjectFromAPI <msIndividual>(IndividualID);
            targetLeader     = targetChapter.Leaders.Where(x => x.Individual == IndividualID).SingleOrDefault();

            if (targetIndividual == null)
            {
                GoToMissingRecordPage();
                return;
            }

            IsInEditMode = true;
        }

        if (targetLeader == null)
        {
            GoToMissingRecordPage();
            return;
        }

        currentLeader = targetChapter.Leaders.Find(x => x.Individual == CurrentEntity.ID);
    }
예제 #6
0
    protected void loadDataFromConcierge()
    {
        var searches = new List <Search>();

        // Get all the chapters for the chapter & member counts
        // Setup the clause to recursively find chapters that are somewhere nested under the current organizational layer
        var organizationalLayerChapterClause = new SearchOperationGroup {
            GroupType = SearchOperationGroupType.Or
        };

        organizationalLayerChapterClause.Criteria.Add(Expr.Equals("Layer", ContextID));

        // Add the recursive query for all the parent organizational layers
        var sbChapter = new StringBuilder("Layer");

        // Add Organizational Layers
        for (int i = 0; i < PortalConfiguration.OrganizationalLayerTypes.Rows.Count - 1; i++)
        {
            sbChapter.Append(".{0}");
            organizationalLayerChapterClause.Criteria.Add(Expr.Equals(string.Format(sbChapter.ToString(), "ParentLayer"), ContextID));
        }

        var sChapters = new Search(msChapter.CLASS_NAME)
        {
            ID = msChapter.CLASS_NAME
        };

        sChapters.AddOutputColumn("ID");
        sChapters.AddOutputColumn("Name");
        sChapters.AddOutputColumn("LinkedOrganization._Preferred_Address");
        sChapters.AddCriteria(organizationalLayerChapterClause);
        sChapters.AddSortColumn("Name");
        searches.Add(sChapters);

        var sLeaders = GetOrganizationalLayerLeaderSearch(targetOrganizationalLayer.ID);

        searches.Add(sLeaders);

        var searchResults = APIExtensions.GetMultipleSearchResults(searches, 0, null);

        dvChapters = new DataView(searchResults.Single(x => x.ID == msChapter.CLASS_NAME).Table);

        leader = ConvertLeaderSearchResult(searchResults.Single(x => x.ID == "OrganizationalLayerLeader"));
    }
예제 #7
0
    protected void loadLeaders()
    {
        //If there's no chapters on this membership then the owner can't be a chapter leader
        if (dvChapterMembership.Count == 0)
        {
            leaders = new Dictionary <string, msMembershipLeader>();
            return;
        }

        Search sLeaders = GetChapterLeaderSearch(null);

        sLeaders.AddOutputColumn("Chapter");
        sLeaders.Criteria.Clear();
        sLeaders.AddCriteria(Expr.Equals("Individual", ConciergeAPI.CurrentEntity.ID));

        SearchOperationGroup chapterGroup = new SearchOperationGroup();

        chapterGroup.FieldName = "Chapter";
        chapterGroup.GroupType = SearchOperationGroupType.Or;

        foreach (DataRowView drvChapterMembership in dvChapterMembership)
        {
            chapterGroup.Criteria.Add(Expr.Equals("Chapter", drvChapterMembership["Chapter"].ToString()));
        }

        sLeaders.AddCriteria(chapterGroup);

        SearchResult srLeaders = APIExtensions.GetSearchResult(sLeaders, 0, null);

        leaders = new Dictionary <string, msMembershipLeader>();
        foreach (DataRow drLeader in srLeaders.Table.Rows)
        {
            //Store and clear the chapter to avoid a casting exception
            string chapterId = drLeader["Chapter"].ToString();
            drLeader["Chapter"] = DBNull.Value;

            msMembershipLeader leader = MemberSuiteObject.FromDataRow(drLeader).ConvertTo <msMembershipLeader>();
            leaders[chapterId] = leader;
        }
    }
예제 #8
0
    protected void loadDataFromConcierge()
    {
        var searches = new List <Search>();

        // Search for the chapter to get aggregate information
        var sChapter = new Search {
            Type = msChapter.CLASS_NAME, ID = msChapter.CLASS_NAME
        };

        sChapter.AddOutputColumn("ActiveMemberCount");
        sChapter.AddOutputColumn("TotalMemberCount");
        sChapter.AddOutputColumn("LocalID");
        sChapter.AddOutputColumn("Name");
        sChapter.AddOutputColumn("Description");
        sChapter.AddOutputColumn("Layer");
        sChapter.AddOutputColumn("Layer.Name");
        sChapter.AddOutputColumn("Layer.Type.Name");
        sChapter.AddCriteria(Expr.Equals("ID", ContextID));
        searches.Add(sChapter);

        // Search for related committees
        var sChapterCommittees = new Search {
            Type = msCommittee.CLASS_NAME, ID = msCommittee.CLASS_NAME
        };

        sChapterCommittees.AddOutputColumn("ID");
        sChapterCommittees.AddOutputColumn("Name");
        sChapterCommittees.AddOutputColumn("CurrentMemberCount");
        sChapterCommittees.AddCriteria(Expr.Equals("Chapter.ID", ContextID));
        sChapterCommittees.AddCriteria(Expr.Equals("ShowInPortal", true));
        searches.Add(sChapterCommittees);

        // Search for related events
        var sChapterEvents = new Search {
            Type = msEvent.CLASS_NAME, ID = msEvent.CLASS_NAME
        };

        sChapterEvents.AddOutputColumn("ID");
        sChapterEvents.AddOutputColumn("Name");
        sChapterEvents.AddOutputColumn("StartDate");
        sChapterEvents.AddOutputColumn("EndDate");
        sChapterEvents.AddCriteria(Expr.Equals("Chapter.ID", targetChapter.ID));
        sChapterEvents.AddCriteria(Expr.Equals("VisibleInPortal", true));
        sChapterEvents.AddSortColumn("StartDate");
        sChapterEvents.AddSortColumn("EndDate");
        sChapterEvents.AddSortColumn("Name");
        searches.Add(sChapterEvents);

        //Search for the linked organization
        if (!string.IsNullOrWhiteSpace(targetChapter.LinkedOrganization))
        {
            var sLinkedOrganizaition = new Search(msOrganization.CLASS_NAME)
            {
                ID = msOrganization.CLASS_NAME
            };
            sLinkedOrganizaition.AddOutputColumn("ID");
            sLinkedOrganizaition.AddOutputColumn("Name");
            sLinkedOrganizaition.AddOutputColumn("Invoices_OpenInvoiceBalance");
            sLinkedOrganizaition.AddOutputColumn("_Preferred_Address_Line1");
            sLinkedOrganizaition.AddOutputColumn("_Preferred_Address_Line2");
            sLinkedOrganizaition.AddOutputColumn("_Preferred_Address_City");
            sLinkedOrganizaition.AddOutputColumn("_Preferred_Address_State");
            sLinkedOrganizaition.AddOutputColumn("_Preferred_Address_PostalCode");
            sLinkedOrganizaition.AddCriteria(Expr.Equals("ID", targetChapter.LinkedOrganization));
            searches.Add(sLinkedOrganizaition);
        }

        var sLeader = GetChapterLeaderSearch(targetChapter.ID);

        searches.Add(sLeader);

        var searchResults = APIExtensions.GetMultipleSearchResults(searches, 0, null);

        if (searchResults.Single(x => x.ID == msChapter.CLASS_NAME).TotalRowCount == 0)
        {
            GoToMissingRecordPage();
        }

        drTargetChapter     = searchResults.Single(x => x.ID == msChapter.CLASS_NAME).Table.Rows[0];
        dvChapterCommittees = new DataView(searchResults.Single(x => x.ID == msCommittee.CLASS_NAME).Table);
        dvChapterEvents     = new DataView(searchResults.Single(x => x.ID == msEvent.CLASS_NAME).Table);

        var srLinkedOrganization = searchResults.FirstOrDefault(x => x.ID == msOrganization.CLASS_NAME);

        if (srLinkedOrganization != null)
        {
            drLinkedOrganization = srLinkedOrganization.Table.Rows[0];
        }

        var srLeader = searchResults.Single(x => x.ID == "ChapterLeader");

        if (srLeader != null)
        {
            leader = ConvertLeaderSearchResult(srLeader);
        }
    }
예제 #9
0
    protected void loadDataFromConcierge()
    {
        var searches = new List <Search>();

        // Search for the section to get aggregate information
        var sSection = new Search {
            Type = msSection.CLASS_NAME, ID = msSection.CLASS_NAME
        };

        sSection.AddOutputColumn("ActiveMemberCount");
        sSection.AddOutputColumn("TotalMemberCount");
        sSection.AddOutputColumn("LocalID");
        sSection.AddOutputColumn("Name");
        sSection.AddOutputColumn("Description");
        sSection.AddCriteria(Expr.Equals("ID", ContextID));
        searches.Add(sSection);

        // Search for related committees
        var sSectionCommittees = new Search {
            Type = msCommittee.CLASS_NAME, ID = msCommittee.CLASS_NAME
        };

        sSectionCommittees.AddOutputColumn("ID");
        sSectionCommittees.AddOutputColumn("Name");
        sSectionCommittees.AddOutputColumn("CurrentMemberCount");
        sSectionCommittees.AddCriteria(Expr.Equals("Section.ID", ContextID));
        sSectionCommittees.AddCriteria(Expr.Equals("ShowInPortal", true));

        searches.Add(sSectionCommittees);

        // Search for related events
        var sSectionEvents = new Search {
            Type = msEvent.CLASS_NAME, ID = msEvent.CLASS_NAME
        };

        sSectionEvents.AddOutputColumn("ID");
        sSectionEvents.AddOutputColumn("Name");
        sSectionEvents.AddOutputColumn("StartDate");
        sSectionEvents.AddOutputColumn("EndDate");
        sSectionEvents.AddCriteria(Expr.Equals("Section.ID", targetSection.ID));
        sSectionEvents.AddCriteria(Expr.Equals("VisibleInPortal", true));
        sSectionEvents.AddSortColumn("StartDate");
        sSectionEvents.AddSortColumn("EndDate");
        sSectionEvents.AddSortColumn("Name");
        searches.Add(sSectionEvents);

        var sLeader = GetSectionLeaderSearch(targetSection.ID);

        searches.Add(sLeader);

        var searchResults = APIExtensions.GetMultipleSearchResults(searches, 0, null);

        var srSection = searchResults.Single(x => x.ID == msSection.CLASS_NAME);

        if (srSection.TotalRowCount == 0)
        {
            GoToMissingRecordPage();
        }

        drTargetSection     = srSection.Table.Rows[0];
        dvSectionCommittees = new DataView(searchResults.Single(x => x.ID == msCommittee.CLASS_NAME).Table);
        dvSectionEvents     = new DataView(searchResults.Single(x => x.ID == msEvent.CLASS_NAME).Table);

        var srLeader = searchResults.Single(x => x.ID == "SectionLeader");

        if (srLeader != null)
        {
            leader = ConvertLeaderSearchResult(srLeader);
        }
    }
    protected void loadDataFromConcierge()
    {
        var searches = new List <Search>();

        // Search for the organizational layer to get aggregate information
        var sOrganizationalLayer = new Search
        {
            Type = msOrganizationalLayer.CLASS_NAME,
            ID   = targetOrganizationalLayer.ID
        };

        sOrganizationalLayer.AddOutputColumn("LocalID");
        sOrganizationalLayer.AddOutputColumn("Name");
        sOrganizationalLayer.AddOutputColumn("Description");
        sOrganizationalLayer.AddOutputColumn("ParentLayer");
        sOrganizationalLayer.AddOutputColumn("ParentLayer.Name");
        sOrganizationalLayer.AddOutputColumn("ParentLayer.Type.Name");
        sOrganizationalLayer.AddCriteria(Expr.Equals("ID", ContextID));
        searches.Add(sOrganizationalLayer);

        // Search for related committees
        var sOrganizationalLayerCommittees = new Search {
            Type = msCommittee.CLASS_NAME, ID = msCommittee.CLASS_NAME
        };

        sOrganizationalLayerCommittees.AddOutputColumn("ID");
        sOrganizationalLayerCommittees.AddOutputColumn("Name");
        sOrganizationalLayerCommittees.AddOutputColumn("CurrentMemberCount");
        sOrganizationalLayerCommittees.AddCriteria(Expr.Equals("OrganizationalLayer.ID", ContextID));
        sOrganizationalLayerCommittees.AddCriteria(Expr.Equals("ShowInPortal", true));
        searches.Add(sOrganizationalLayerCommittees);

        // Search for related events
        var sOrganizationalLayerEvents = new Search {
            Type = msEvent.CLASS_NAME, ID = msEvent.CLASS_NAME
        };

        sOrganizationalLayerEvents.AddOutputColumn("ID");
        sOrganizationalLayerEvents.AddOutputColumn("Name");
        sOrganizationalLayerEvents.AddOutputColumn("StartDate");
        sOrganizationalLayerEvents.AddOutputColumn("EndDate");
        sOrganizationalLayerEvents.AddCriteria(Expr.Equals("OrganizationalLayer.ID", targetOrganizationalLayer.ID));
        sOrganizationalLayerEvents.AddCriteria(Expr.Equals("VisibleInPortal", true));
        sOrganizationalLayerEvents.AddSortColumn("StartDate");
        sOrganizationalLayerEvents.AddSortColumn("EndDate");
        sOrganizationalLayerEvents.AddSortColumn("Name");
        searches.Add(sOrganizationalLayerEvents);

        // Get all the chapters for the chapter & member counts
        // Setup the clause to recursively find chapters that are somewhere nested under the current organizational layer
        var organizationalLayerChapterClause = new SearchOperationGroup {
            GroupType = SearchOperationGroupType.Or
        };

        organizationalLayerChapterClause.Criteria.Add(Expr.Equals("Layer", ContextID));

        // Add the recursive query for all the parent organizational layers
        var sbChapter = new StringBuilder("Layer");

        // Add Organizational Layers
        for (int i = 0; i < PortalConfiguration.OrganizationalLayerTypes.Rows.Count - 1; i++)
        {
            sbChapter.Append(".{0}");
            organizationalLayerChapterClause.Criteria.Add(Expr.Equals(string.Format(sbChapter.ToString(), "ParentLayer"), ContextID));
        }

        var sChapters = new Search(msChapter.CLASS_NAME)
        {
            ID = msChapter.CLASS_NAME
        };

        sChapters.AddOutputColumn("ID");
        sChapters.AddOutputColumn("Name");
        sChapters.AddOutputColumn("ActiveMemberCount");
        sChapters.AddOutputColumn("TotalMemberCount");
        sChapters.AddCriteria(organizationalLayerChapterClause);
        sChapters.AddSortColumn("Name");
        searches.Add(sChapters);

        // Search for child layers
        var sOrganizationalLayers = new Search(msOrganizationalLayer.CLASS_NAME)
        {
            ID = msOrganizationalLayer.CLASS_NAME
        };

        sOrganizationalLayers.AddOutputColumn("ID");
        sOrganizationalLayers.AddOutputColumn("Name");
        sOrganizationalLayers.AddOutputColumn("Type");
        sOrganizationalLayers.AddOutputColumn("Type.Name");
        sOrganizationalLayers.AddCriteria(Expr.Equals("ParentLayer", ContextID));
        sOrganizationalLayers.AddSortColumn("Type.ParentType.Name");
        sOrganizationalLayers.AddSortColumn("Name");
        searches.Add(sOrganizationalLayers);

        // Search for leaders (by searching it will include inherited leaders not included in the targetOrganizationalLayer.Leaders property)
        var sLeaders = GetOrganizationalLayerLeaderSearch(targetOrganizationalLayer.ID);

        searches.Add(sLeaders);

        var searchResults = APIExtensions.GetMultipleSearchResults(searches, 0, null);

        var targetOrganizationalLayerSearchResult = searchResults.Single(x => x.ID == targetOrganizationalLayer.ID);

        if (targetOrganizationalLayerSearchResult.TotalRowCount == 0)
        {
            GoToMissingRecordPage();
        }
        drTargetOrganizationalLayer = targetOrganizationalLayerSearchResult.Table.Rows[0];

        dvOrganizationalLayerCommittees = new DataView(searchResults.Single(x => x.ID == msCommittee.CLASS_NAME).Table);
        dvOrganizationalLayerEvents     = new DataView(searchResults.Single(x => x.ID == msEvent.CLASS_NAME).Table);

        // Determine chapter counts
        var chapterSearchResult = searchResults.Single(x => x.ID == msChapter.CLASS_NAME);

        chapterCount = chapterSearchResult.Table.Rows.Count;

        // Determine member counts
        foreach (DataRow chapterRow in chapterSearchResult.Table.Rows)
        {
            activeMemberCount += !chapterRow.Table.Columns.Contains("ActiveMemberCount") || chapterRow["ActiveMemberCount"] == DBNull.Value ? 0 : (int)chapterRow["ActiveMemberCount"];
            memberCount       += !chapterRow.Table.Columns.Contains("TotalMemberCount") || chapterRow["TotalMemberCount"] == DBNull.Value ? 0 : (int)chapterRow["TotalMemberCount"];
        }

        childOrganizationalLayers = new Dictionary <string, List <DataRow> >();
        foreach (DataRow drOrganizationalLayer in searchResults.Single(x => x.ID == msOrganizationalLayer.CLASS_NAME).Table.Rows)
        {
            string typeName = (string)drOrganizationalLayer["Type.Name"];

            if (!childOrganizationalLayers.ContainsKey(typeName))
            {
                childOrganizationalLayers.Add(typeName, new List <DataRow>());
            }

            childOrganizationalLayers[typeName].Add(drOrganizationalLayer);
        }

        leader = ConvertLeaderSearchResult(searchResults.Single(x => x.ID == "OrganizationalLayerLeader"));
    }