@@ -128,3 +128,107 @@ def get_persons_masterdata(
128128 response .content ,
129129 )
130130 return None
131+
132+ def create_person (self , person_data : dict ) -> dict | None :
133+ """Function to create a person to ChurchTools.
134+
135+ Arguments:
136+ person_data: dict with person data according to CT API
137+ firstName
138+ lastName
139+ email
140+
141+ and additional optional fields using the following deafults:
142+ * departmentIds defaults to 0
143+ * statusId defaults to 0 (unknown)
144+ * campusId defaults to 0 (first campus)
145+ * privacyPolicyAgreementTypeId defaults to 1 (Gruppenanmeldeforumular)
146+ * privacyPolicyAgreementWhoId defaults to 1 (Person selbst)
147+ * privacyPolicyAgreementDate defaults to "1900-01-01"
148+
149+ Permissions:
150+ create person
151+
152+ Returns:
153+ dict with created person data including new ID
154+ """
155+ # add default keys if not provided
156+ required_keys = ["firstName" , "lastName" , "email" ]
157+ if not all (key in person_data for key in required_keys ):
158+ logger .error (
159+ "Person creation failed: missing required keys in person_data: %s" ,
160+ required_keys ,
161+ )
162+ return None
163+
164+ default_keys = {
165+ "departmentIds" : [1 ],
166+ "statusId" : 0 , # Unkonwn
167+ "campusId" : 0 , # First Campus
168+ "email" : "no-mail@nomail.xx" ,
169+ "privacyPolicyAgreementTypeId" : 1 , # Gruppenanmeldeforumular
170+ "privacyPolicyAgreementWhoId" : 1 , # Person selbst
171+ "privacyPolicyAgreementDate" : "1900-01-01" ,
172+ }
173+
174+ for key in default_keys :
175+ if key not in person_data :
176+ person_data [key ] = default_keys [key ]
177+
178+ # prepare request
179+
180+ url = self .domain + "/api/persons"
181+
182+ headers = {
183+ "accept" : "application/json" ,
184+ "Content-Type" : "application/json" ,
185+ }
186+
187+ response = self .session .post (
188+ url = url , headers = headers , data = json .dumps (person_data )
189+ )
190+
191+ # use reposonse
192+
193+ if response .status_code == requests .codes .created :
194+ response_content = json .loads (response .content )
195+ response_data = response_content ["data" ].copy ()
196+
197+ logger .debug ("Person creation successful id=%s" , response_data .get ("id" ))
198+ return response_data
199+ logger .warning (
200+ "Person creation failed: %s %s" ,
201+ response .status_code ,
202+ response .content ,
203+ )
204+ return None
205+
206+ def delete_person (self , personId : int ) -> bool :
207+ """Function to delete a person from ChurchTools.
208+
209+ Arguments:
210+ personId: ID of the person to delete
211+
212+ Permissions:
213+ delete person
214+
215+ Returns:
216+ bool indicating success
217+ """
218+ url = self .domain + f"/api/persons/{ personId } "
219+
220+ headers = {
221+ "accept" : "application/json" ,
222+ }
223+ response = self .session .delete (url = url , headers = headers )
224+
225+ if response .status_code == requests .codes .no_content :
226+ logger .debug ("Person deletion successful id=%s" , personId )
227+ return True
228+ logger .warning (
229+ "Person deletion failed id=%s: %s %s" ,
230+ personId ,
231+ response .status_code ,
232+ response .content ,
233+ )
234+ return False
0 commit comments