@@ -220,11 +220,9 @@ def update_event(
220220
221221 return True
222222
223- def get_event_services_counts_ajax (self , eventId : int , ** kwargs : dict ) -> dict :
223+ def get_event_services_counts (self , eventId : int , ** kwargs : dict ) -> dict :
224224 """Retrieve the number of services currently set for one specific event id.
225225
226- optionally get the number of services for one specific id on that event only.
227-
228226 Arguments:
229227 eventId: id number of the calendar event
230228 **kwargs: keyword arguments as listed below
@@ -236,32 +234,32 @@ def get_event_services_counts_ajax(self, eventId: int, **kwargs: dict) -> dict:
236234 Returns:
237235 dict of service types and the number of services required for this event
238236 """
239- event = self .get_events (eventId = eventId )[0 ]
240-
237+ serviceGroupServiceIds = None
241238 if "serviceId" in kwargs and "serviceGroupId" not in kwargs :
242- service_count = 0
243- for service in event ["eventServices" ]:
244- if service ["serviceId" ] == kwargs ["serviceId" ]:
245- service_count += 1
246- return {kwargs ["serviceId" ]: service_count }
239+ serviceGroupServiceIds = [kwargs ["serviceId" ]]
240+
247241 if "serviceId" not in kwargs and "serviceGroupId" in kwargs :
248242 all_services = self .get_services ()
249243 serviceGroupServiceIds = [
250244 service ["id" ]
251245 for service in all_services
252246 if service ["serviceGroupId" ] == kwargs ["serviceGroupId" ]
253247 ]
248+ if serviceGroupServiceIds :
249+ event_detail = self .get_events (eventId = eventId , include = "EventServices" )[0 ]
250+ result = {}
251+ for serviceId in serviceGroupServiceIds :
252+ result .update (
253+ {
254+ serviceId : sum (
255+ 1
256+ for service in event_detail ["eventServices" ]
257+ if service ["serviceId" ] == serviceId
258+ )
259+ }
260+ )
261+ return result
254262
255- services = {}
256- for service in event ["eventServices" ]:
257- serviceId = service ["serviceId" ]
258- if serviceId in serviceGroupServiceIds :
259- if serviceId in services :
260- services [serviceId ] += 1
261- else :
262- services [serviceId ] = 1
263-
264- return services
265263 logger .warning ("Illegal combination of kwargs - check documentation either" )
266264 return None
267265
@@ -281,12 +279,21 @@ def set_event_services_counts_ajax(
281279 headers = {"accept" : "application/json" }
282280 params = {"q" : "churchservice/ajax" }
283281
282+ # TODO@bensteUEM: legacy API is obsolete once correct endpoint is publishd
283+ # CT API already includes ability to change count therefore endpoint exists
284+ # CT Support issue - 147953
285+ # https://github.com/bensteUEM/ChurchToolsAPI/issues/149
286+ logging .warning (
287+ "Using undocumented AJAX API because "
288+ "function does not exist as REST endpoint"
289+ )
290+
284291 # restore other ServiceGroup assignments required for request form data
285292
286293 services = self .get_services (returnAsDict = True )
287294 serviceGroupId = services [serviceId ]["serviceGroupId" ]
288- servicesOfServiceGroup = self .get_event_services_counts_ajax (
289- eventId ,
295+ servicesOfServiceGroup = self .get_event_services_counts (
296+ eventId = eventId ,
290297 serviceGroupId = serviceGroupId ,
291298 )
292299 # set new assignment
@@ -305,27 +312,28 @@ def set_event_services_counts_ajax(
305312
306313 response = self .session .post (url = url , headers = headers , params = params , data = data )
307314
308- if response .status_code == requests .codes .ok :
309- response_content = json .loads (response .content )
310- response_success = response_content ["status" ] == "success"
311-
312- number_match = (
313- self .get_event_services_counts_ajax (eventId , serviceId = serviceId )[
314- serviceId
315- ]
316- == servicesCount
317- )
318- if number_match and response_success :
319- return True
320- logger .warning (
321- "Request was successful but serviceId %s not changed to count %s " ,
322- serviceId ,
323- servicesCount ,
315+ if response .status_code != requests .codes .ok :
316+ logger .info (
317+ "set_event_services_counts_ajax not successful: %s" ,
318+ response .status_code ,
324319 )
325320 return False
326- logger .info (
327- "set_event_services_counts_ajax not successful: %s" ,
328- response .status_code ,
321+
322+ response_content = json .loads (response .content )
323+ response_success = response_content ["status" ] == "success"
324+
325+ number_match = (
326+ self .get_event_services_counts (eventId = eventId , serviceId = serviceId )[
327+ serviceId
328+ ]
329+ == servicesCount
330+ )
331+ if number_match and response_success :
332+ return True
333+ logger .warning (
334+ "Request was successful but serviceId %s not changed to count %s " ,
335+ serviceId ,
336+ servicesCount ,
329337 )
330338 return False
331339
0 commit comments