Skip to content

Commit b08205c

Browse files
committed
Add methods to OrganizationServices
get_individuals_for_primary_organization() and get_stars_liaison_for_organization().
1 parent 7c54ebb commit b08205c

1 file changed

Lines changed: 45 additions & 5 deletions

File tree

membersuite_api_client/organizations/services.py

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,22 @@
44
http://api.docs.membersuite.com/#References/Objects/Organization.htm
55
66
"""
7+
import datetime
78

9+
from ..exceptions import ExecuteMSQLError
810
from ..mixins import ChunkQueryMixin
11+
from ..security.models import Individual
12+
from ..utils import convert_ms_object, get_new_client
913
from .models import Organization, OrganizationType
10-
from ..utils import convert_ms_object
11-
from zeep.exceptions import TransportError
12-
import datetime
1314

1415

1516
class OrganizationService(ChunkQueryMixin, object):
1617

17-
def __init__(self, client):
18+
def __init__(self, client=None):
1819
"""
1920
Accepts a ConciergeClient to connect with MemberSuite
2021
"""
21-
self.client = client
22+
self.client = client or get_new_client(request_session=True)
2223

2324
def get_orgs(
2425
self, limit_to=100, max_calls=None, parameters=None,
@@ -104,3 +105,42 @@ def package_org_types(self, obj_list):
104105
org = OrganizationType(sane_obj)
105106
org_type_list.append(org)
106107
return org_type_list
108+
109+
def get_individuals_for_primary_organization(self, organization):
110+
"""
111+
Returns all Individuals that have `organization` as a primary org.
112+
113+
"""
114+
if not self.client.session_id:
115+
self.client.request_session()
116+
117+
query = ("SELECT Objects() FROM Individual WHERE "
118+
"PrimaryOrganization = '{}'".format(
119+
organization.membersuite_account_num))
120+
121+
result = self.client.runSQL(query)
122+
123+
msql_result = result["body"]["ExecuteMSQLResult"]
124+
125+
if msql_result["Success"]:
126+
membersuite_objects = (msql_result["ResultValue"]
127+
["ObjectSearchResult"]
128+
["Objects"])
129+
else:
130+
raise ExecuteMSQLError(result=result)
131+
132+
individuals = []
133+
134+
for membersuite_object in membersuite_objects["MemberSuiteObject"]:
135+
individuals.append(
136+
Individual(membersuite_object_data=membersuite_object))
137+
138+
return individuals
139+
140+
def get_stars_liaison_for_organization(self, organization):
141+
candidates = self.get_individuals_for_primary_organization(
142+
organization=organization)
143+
for candidate in candidates:
144+
if "StarsPrimaryContact__rt" in candidate.fields:
145+
return candidate
146+
return None

0 commit comments

Comments
 (0)