diff --git a/kolibri/core/auth/api.py b/kolibri/core/auth/api.py index 8ae21ff0858..70f1ed52b20 100644 --- a/kolibri/core/auth/api.py +++ b/kolibri/core/auth/api.py @@ -990,38 +990,53 @@ def consolidate(self, items, queryset): ] ) ) + soft_deleted_user_ids = list( + FacilityUser.soft_deleted_objects.all().values_list("id", flat=True) + ) + active_coach_ids = [ + coach_id for coach_id in coach_ids if coach_id not in soft_deleted_user_ids + ] facility_roles = { obj.pop("user"): obj for obj in Role.objects.filter( - user_id__in=coach_ids, collection__kind=collection_kinds.FACILITY + user_id__in=active_coach_ids, collection__kind=collection_kinds.FACILITY ).values("user", "kind", "collection", "id") } + for key, group in groupby(items, lambda x: x["id"]): coaches = [] - for item in group: - user_id = item.pop("role__user__id") - if ( - user_id in facility_roles - and facility_roles[user_id]["collection"] == item["parent"] - ): - roles = [facility_roles[user_id]] - else: + group_list = list(group) + base_item = group_list[0] + + for item in group_list: + user_id = item.get("role__user__id") + if user_id in active_coach_ids: roles = [] - coach = { - "id": user_id, - "facility": item["parent"], - # Coerce to bool if None - "is_superuser": bool( - item.pop("role__user__devicepermissions__is_superuser") - ), - "full_name": item.pop("role__user__full_name"), - "username": item.pop("role__user__username"), - "roles": roles, - } - if coach["id"]: + if user_id in facility_roles and facility_roles[user_id][ + "collection" + ] == item.get("parent"): + roles.append(facility_roles[user_id]) + + coach = { + "id": user_id, + "facility": item.get("parent"), + "is_superuser": bool( + item.get("role__user__devicepermissions__is_superuser") + ), + "full_name": item.get("role__user__full_name"), + "username": item.get("role__user__username"), + "roles": roles, + } coaches.append(coach) - item["coaches"] = coaches - output.append(item) + consolidated_item = { + "id": base_item.get("id"), + "name": base_item.get("name"), + "parent": base_item.get("parent"), + "learner_count": base_item.get("learner_count"), + "coaches": coaches, + } + output.append(consolidated_item) + return output diff --git a/kolibri/plugins/facility/assets/src/views/users/common/MoveToTrashModal.vue b/kolibri/plugins/facility/assets/src/views/users/common/MoveToTrashModal.vue index 22be477beb3..dc26937b1c6 100644 --- a/kolibri/plugins/facility/assets/src/views/users/common/MoveToTrashModal.vue +++ b/kolibri/plugins/facility/assets/src/views/users/common/MoveToTrashModal.vue @@ -1,7 +1,28 @@