Vom Calendar Objekt zum zugehörigen Event kommen?
- 
					
					
					
					
 Hallo, 
 wahrscheinlich oute ich mich mit dieser Frage als ziemlicher Neuling. Aber mir ist es leider nicht gelungen, hier dafür eine Antwort zu finden.
 Ich ermittle mittels PHP Daten aus Kalendern:
 $appointments = AppointmentRequest::forCalendars([2,3])
 ?->where("from", "2023-04-01")
 ?->where("to", "2023-05-01")
 ?->get() ?? [];und kann z.B. durch iterieren und Infos anzeigen: 
 foreach ($appointments as $curAppointment)
 {
 $gsd = $curAppointment->getStartDate();
 echo ...
 ...Gibt es auch eine Funktion, um ein evtl. zugehöriges Event Objekt zu ermitteln und so die dort "Diensthabenden" zu ermitteln? Vielen Dank & Grüße 
 Erwin
- 
					
					
					
					
 @erwincramer Tust Du nicht  Ich beziehe mich im folgenden auf die Nomenklatur der RestAPI, wie das bei Dir in php mußt Du noch rausfinden. Du holst ja die Termineliste über /calendars/appointments - bei Dir AppointmentRequest::forCalendars 
 Ergebnis eines Eintrages is z.B.:
 ...
 {
 "base": {
 "id": 432065,
 "caption": "Gottesdienst",
 ...
 "calendar": {
 "id": 2,
 "name": "Gottesdienste & Andachten",
 "nameTranslated": "Gottesdienste & Andachten",
 ...
 }
 },
 "information": "mit Pfr. Ralf Bürzele. ...",
 ...
 "startDate": "2023-03-26T07:15:00Z",
 ...
 },
 "onBehalfOfPid": null
 },
 "calculated": {
 "startDate": "2023-03-26T07:15:00Z",
 "endDate": "2023-03-26T08:15:00Z"
 }
 },Leider enthält diese Liste zunächst nicht den eventurl. Diesen bekommt man dann über 
 /calendars/{calendarId}/appointments/{appointmentId}/{startDate}
 d.h. aus dem geholten Eintrag calenderID, appointmentId und startDate (ohne Uhrzeit!!) auslesen und dann diese Funktion aufrufen. Ergebnis für diesen Eintrag sieht dann so aus:{ 
 "data": {
 "appointment": {
 "base": {
 "id": 432068,
 "caption": "Gottesdienst",
 ...
 },
 "information": "mit Pfr. Ralf Bürzele. ...",
 ...
 "startDate": "2023-03-26T08:15:00Z",
 ...
 },
 "event": {
 "title": "Gottesdienst",
 "domainType": "event",
 "domainIdentifier": "677",
 "apiUrl": "https://elkw0303.krz.tools/api/events/677",
 "frontendUrl": "https://elkw0303.krz.tools/?q=churchservice#ListView/searchEntry:%23677/",
 "imageUrl": null,
 "icon": "calendar-day",
 "domainAttributes": []
 },
 ...
 }Mit der apiUrl kommt man dann direkt zum gewünschten Event - so vorhanden. Die Dienste haben dort aber nur eine numerische Id, d.h. die muß man ggf. über /event/masterdata Ich kann DIr leider kein Code-Snippet geben, da ich bisher nur Zeit hatte, das von Hand auszuprobieren und noch nicht, was dazuzuprogrammieren. Und php wär's eh nicht. HTH! 
- 
					
					
					
					
 Ja, die Verbindung zwischen Termin und Event könnte durchaus etwas einfacher sein. Ich mache es noch etwas anders: Zu den Terminen in einem gegebenen Zeitfenster hole ich mir gleich noch alle Events mit /api/events?direction=forward&include=eventServices&from=" + str(from_date) + "&to=" + str(to_date)und suche dann jeweils nach der appointmentId unter diesen Events. Dadurch kann ich die Zahl der REST-Requests erheblich reduzieren. 
- 
					
					
					
					
 @thommyb Ah, das ist eine gute Idee. Grundsätzlich könnte /calendars/appointments auch gleich die url zum Event ausspucken - das wär fein. 
- 
					
					
					
					
 @ralf-bürzele Vielen Dank für die prompte Hilfe, ich werde beide Ansätze mal ausprobieren. 
- 
					
					
					
					
 @erwincramer Hi Erwin, wenn ich das richtig interpretiert habe nutzt du den ChurchTools-API Wrapper von unserem Team hier (https://github.com/5pm-HDH/churchtools-api)? Ich hab die Verbindung zwischen Appointment und Event bisher nicht berücksichtigt, weil wie auch @thommyb schreibt, gibt es bisher keine geeignete API-Route dazu. Hier mal ein Code-Beispiel im Stile des API-Wrappers: $appointment = AppointmentRequest::forCalendar(54)->get()[0]; // Rufe alle Events für den Appointment Tag ab. $events = EventRequest::where("from", date("Y-m-d", strtotime($appointment->getStartDate()))) ->where("to", date("Y-m-d", strtotime($appointment->getEndDate() . " + 1 day"))) ->get(); // Filter Events nach Titel $events = array_filter($events, function(Event $event) use ($appointment){ return $appointment->getCaption() == $event->getName(); }); // Wenn wir nur ein Element im Array erwarten, können wir über die "end"-Methode das letzte Element auswählen. $firstEvent = end($events); print_r($firstEvent);
- 
					
					
					
					
 Update Sept. 2023: Es gibt mittlerweile einen eigenen API Endpunkt, mit dem sich zu einem Termin (Appointment) die zugehörigen Buchungen und das Event abrufen lassen: /calendars/{calendarId}/appointments/{appointmentId}/{startDate} @aschild Hat den Endpunkt auch für den ChurchTools-API Wrapper umgesetzt: $calendarId = 2; $appointmentId = 13; $combinedAppointment = CombinedAppointmentRequest::forAppointment($calendarId, $appointmentId, "2023-10-01")->get(); $appointment = $combinedAppointment->getAppointment(); // see Appointment-Model $event = $combinedAppointment->getEvent(); // see Event-Model $bookings = $combinedAppointment->getBookings(); // see Booking-ModelSiehe Dokumentation. 
- 
	 A aschild hat am  auf dieses Thema verwiesen A aschild hat am  auf dieses Thema verwiesen


