def delete_families_handler(request, project_guid): """Edit or delete one or more Individual records. Args: project_guid (string): GUID of project that contains these individuals. """ project = get_project_and_check_pm_permissions(project_guid, request.user) request_json = json.loads(request.body) families_to_delete = request_json.get('families') if families_to_delete is None: return create_json_response( {}, status=400, reason="'recordIdsToDelete' not specified") family_guids_to_delete = [f['familyGuid'] for f in families_to_delete] # delete individuals 1st individual_guids_to_delete = [i.guid for i in Individual.objects.filter( family__project=project, family__guid__in=family_guids_to_delete)] delete_individuals(project, individual_guids_to_delete, request.user) # delete families Family.bulk_delete(request.user, project=project, guid__in=family_guids_to_delete) # send response return create_json_response({ 'individualsByGuid': { individual_guid: None for individual_guid in individual_guids_to_delete }, 'familiesByGuid': { family_guid: None for family_guid in family_guids_to_delete }, })
def delete_individuals_handler(request, project_guid): """Delete one or more Individual records. Args: request (object): Django HTTP Request object. project_guid (string): GUID of project that contains these individuals. Request: body should be a json dictionary that contains a 'recordIdsToDelete' list of individual GUIDs to delete - for example: { 'form': { 'recordIdsToDelete': [ <individualGuid1>, <individualGuid2>, ... } } } Response: json dictionary with the deleted GUIDs mapped to None: { <individualGuid1> : None, <individualGuid2> : None, ... } """ # validate request project = get_project_and_check_permissions(project_guid, request.user, CAN_EDIT) request_json = json.loads(request.body) individuals_list = request_json.get('individuals') if individuals_list is None: return create_json_response( {}, status=400, reason="Invalid request: 'individuals' not in request_json") logger.info("delete_individuals_handler %s", request_json) individual_guids_to_delete = [ind['individualGuid'] for ind in individuals_list] # delete the individuals families_with_deleted_individuals = delete_individuals(project, individual_guids_to_delete) deleted_individuals_by_guid = { individual_guid: None for individual_guid in individual_guids_to_delete } families_by_guid = { family.guid: _get_json_for_family(family, request.user, add_individual_guids_field=True) for family in families_with_deleted_individuals } # families whose list of individuals may have changed # send response return create_json_response({ 'individualsByGuid': deleted_individuals_by_guid, 'familiesByGuid': families_by_guid, })