Example #1
0
    def restore(self, user):
        group_dashboard_mappings = DomainMapping.objects.get_group_dashboard_mappings(
            self.default_group.id)

        group_dashboard_clone_mappings = DomainMapping.objects. \
            get_group_dashboard_clone_mappings(group_dashboard_mappings)

        user_dashboards_for_group = Dashboard.objects.filter(pk__in=list(
            group_dashboard_clone_mappings.values_list("src_id", flat=True)),
                                                             user=user)

        for user_dashboard in user_dashboards_for_group:
            Dashboard.restore(user_dashboard)

        group_dashboard_ids = group_dashboard_mappings.values_list("dest_id",
                                                                   flat=True)

        user_cloned_dashboards_ids_for_group = DomainMapping.objects.filter(
            src_id__in=list(
                user_dashboards_for_group.values_list("id", flat=True)),
            src_type=MappingType.dashboard,
            relationship_type=RelationshipType.cloneOf,
            dest_type=MappingType.dashboard).values_list("dest_id", flat=True)

        # Create missing dashboards
        # TODO: extract this into a method for reuse. Same logic exists in people/models.py
        # TODO: modify this to use .exclude(). This was originally refactored, because of issues
        #       using .difference() on querysets with mysql.
        missing_dashboard_ids = []
        for group_dashboard_id in group_dashboard_ids:
            if group_dashboard_id not in user_cloned_dashboards_ids_for_group:
                missing_dashboard_ids.append(group_dashboard_id)
        Dashboard.create_missing_dashboards_for_user(user,
                                                     missing_dashboard_ids)