Ejemplo n.º 1
0
    def delete_related_content(self):
        # NOTE: Remember to update code in taiga.projects.admin.ProjectAdmin.delete_selected
        from taiga.events.apps import (connect_events_signals,
                                       disconnect_events_signals)
        from taiga.projects.tasks.apps import (connect_all_tasks_signals,
                                               disconnect_all_tasks_signals)
        from taiga.projects.userstories.apps import (connect_all_userstories_signals,
                                                     disconnect_all_userstories_signals)
        from taiga.projects.issues.apps import (connect_all_issues_signals,
                                                disconnect_all_issues_signals)
        from taiga.projects.apps import (connect_memberships_signals,
                                         disconnect_memberships_signals)

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        try:
            self.tasks.all().delete()
            self.user_stories.all().delete()
            self.issues.all().delete()
            self.memberships.all().delete()
            self.roles.all().delete()
        finally:
            connect_events_signals()
            connect_all_issues_signals()
            connect_all_tasks_signals()
            connect_all_userstories_signals()
            connect_memberships_signals()
Ejemplo n.º 2
0
    def delete_related_content(self):
        from taiga.events.apps import (connect_events_signals,
                                       disconnect_events_signals)
        from taiga.projects.tasks.apps import (connect_all_tasks_signals,
                                               disconnect_all_tasks_signals)
        from taiga.projects.userstories.apps import (
            connect_all_userstories_signals,
            disconnect_all_userstories_signals)
        from taiga.projects.issues.apps import (connect_all_issues_signals,
                                                disconnect_all_issues_signals)
        from taiga.projects.apps import (connect_memberships_signals,
                                         disconnect_memberships_signals)

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        try:
            self.tasks.all().delete()
            self.user_stories.all().delete()
            self.issues.all().delete()
            self.memberships.all().delete()
            self.roles.all().delete()
        finally:
            connect_events_signals()
            connect_all_issues_signals()
            connect_all_tasks_signals()
            connect_all_userstories_signals()
            connect_memberships_signals()
Ejemplo n.º 3
0
    def delete_selected(self, request, queryset):
        # NOTE: This must be equal to taiga.projects.models.Project.delete_related_content
        from taiga.events.apps import (connect_events_signals,
                                       disconnect_events_signals)
        from taiga.projects.tasks.apps import (connect_all_tasks_signals,
                                               disconnect_all_tasks_signals)
        from taiga.projects.userstories.apps import (
            connect_all_userstories_signals,
            disconnect_all_userstories_signals)
        from taiga.projects.issues.apps import (connect_all_issues_signals,
                                                disconnect_all_issues_signals)
        from taiga.projects.apps import (connect_memberships_signals,
                                         disconnect_memberships_signals)

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        r = admin.actions.delete_selected(self, request, queryset)

        connect_events_signals()
        connect_all_issues_signals()
        connect_all_tasks_signals()
        connect_all_userstories_signals()
        connect_memberships_signals()

        return r
Ejemplo n.º 4
0
    def delete_queryset(self, request, queryset):
        # NOTE: Override delete_queryset so its use the same approach used in
        # taiga.projects.models.Project.delete_related_content.
        #
        # More info https://docs.djangoproject.com/en/2.2/ref/contrib/admin/actions/#admin-actions

        from taiga.events.apps import (connect_events_signals,
                                       disconnect_events_signals)
        from taiga.projects.tasks.apps import (connect_all_tasks_signals,
                                               disconnect_all_tasks_signals)
        from taiga.projects.userstories.apps import (
            connect_all_userstories_signals,
            disconnect_all_userstories_signals)
        from taiga.projects.issues.apps import (connect_all_issues_signals,
                                                disconnect_all_issues_signals)
        from taiga.projects.apps import (connect_memberships_signals,
                                         disconnect_memberships_signals)

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        try:
            super().delete_queryset(request, queryset)
        finally:
            connect_events_signals()
            connect_all_issues_signals()
            connect_all_tasks_signals()
            connect_all_userstories_signals()
            connect_memberships_signals()
Ejemplo n.º 5
0
    def delete_selected(self, request, queryset):
        # NOTE: This must be equal to taiga.projects.models.Project.delete_related_content
        from taiga.events.apps import (connect_events_signals,
                                       disconnect_events_signals)
        from taiga.projects.tasks.apps import (connect_all_tasks_signals,
                                               disconnect_all_tasks_signals)
        from taiga.projects.userstories.apps import (connect_all_userstories_signals,
                                                     disconnect_all_userstories_signals)
        from taiga.projects.issues.apps import (connect_all_issues_signals,
                                                disconnect_all_issues_signals)
        from taiga.projects.apps import (connect_memberships_signals,
                                         disconnect_memberships_signals)

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        r =  admin.actions.delete_selected(self, request, queryset)

        connect_events_signals()
        connect_all_issues_signals()
        connect_all_tasks_signals()
        connect_all_userstories_signals()
        connect_memberships_signals()

        return r
Ejemplo n.º 6
0
    def delete_related_content(self):
        from taiga.events.apps import connect_events_signals, disconnect_events_signals
        from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals
        from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals
        from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals
        from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals
        
        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        try:
            self.tasks.all().delete()
            self.user_stories.all().delete()
            self.issues.all().delete()
            self.memberships.all().delete()
            self.roles.all().delete()
        finally:
            connect_events_signals()
            connect_all_issues_signals()
            connect_all_tasks_signals()
            connect_all_userstories_signals()
            connect_memberships_signals()
Ejemplo n.º 7
0
    def destroy(self, request, *args, **kwargs):
        from taiga.events.apps import connect_events_signals, disconnect_events_signals
        from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals
        from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals
        from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals
        from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals

        obj = self.get_object_or_none()
        self.check_permissions(request, 'destroy', obj)

        if obj is None:
            raise Http404

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        try:
            obj.tasks.all().delete()
            obj.user_stories.all().delete()
            obj.issues.all().delete()
            obj.memberships.all().delete()
            obj.roles.all().delete()
        finally:
            connect_events_signals()
            connect_all_issues_signals()
            connect_all_tasks_signals()
            connect_all_userstories_signals()
            connect_memberships_signals()

        self.pre_delete(obj)
        self.pre_conditions_on_delete(obj)
        obj.delete()
        self.post_delete(obj)
        return response.NoContent()
Ejemplo n.º 8
0
    def destroy(self, request, *args, **kwargs):
        from taiga.events.apps import connect_events_signals, disconnect_events_signals
        from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals
        from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals
        from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals
        from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals

        obj = self.get_object_or_none()
        self.check_permissions(request, 'destroy', obj)

        if obj is None:
            raise Http404

        disconnect_events_signals()
        disconnect_all_issues_signals()
        disconnect_all_tasks_signals()
        disconnect_all_userstories_signals()
        disconnect_memberships_signals()

        try:
            obj.tasks.all().delete()
            obj.user_stories.all().delete()
            obj.issues.all().delete()
            obj.memberships.all().delete()
            obj.roles.all().delete()
        finally:
            connect_events_signals()
            connect_all_issues_signals()
            connect_all_tasks_signals()
            connect_all_userstories_signals()
            connect_memberships_signals()

        self.pre_delete(obj)
        self.pre_conditions_on_delete(obj)
        obj.delete()
        self.post_delete(obj)
        return response.NoContent()
Ejemplo n.º 9
0
    def handle(self, *args, **options):
        # Prevent events emission when sample data is running
        disconnect_events_signals()

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(self.create_user(username=username, full_name=full_name, email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))

        # create project
        for x in range(NUM_PROJECTS + NUM_EMPTY_PROJECTS):
            project = self.create_project(x, is_private=(x in [2, 4] or self.sd.boolean()))

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          is_owner=self.sd.boolean(),
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            # added invitations
            for i in range(NUM_INVITATIONS):
                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=self.sd.email(),
                                          project=project,
                                          role=role,
                                          is_owner=self.sd.boolean(),
                                          token=''.join(random.sample('abcdef0123456789', 10)))

                if role.computable:
                    computable_project_roles.add(role)

            # added custom attributes
            if self.sd.boolean:
                for i in range(1, 4):
                    UserStoryCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                            description=self.sd.words(3, 12),
                                                            type=self.sd.choice(TYPES_CHOICES)[0],
                                                            project=project,
                                                            order=i)
            if self.sd.boolean:
                for i in range(1, 4):
                    TaskCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                       description=self.sd.words(3, 12),
                                                       type=self.sd.choice(TYPES_CHOICES)[0],
                                                       project=project,
                                                       order=i)
            if self.sd.boolean:
                for i in range(1, 4):
                    IssueCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                        description=self.sd.words(3, 12),
                                                        type=self.sd.choice(TYPES_CHOICES)[0],
                                                        project=project,
                                                        order=i)


            if x < NUM_PROJECTS:
                start_date = now() - datetime.timedelta(55)

                # create milestones
                for y in range(self.sd.int(*NUM_MILESTONES)):
                    end_date = start_date + datetime.timedelta(15)
                    milestone = self.create_milestone(project, start_date, end_date)

                    # create uss asociated to milestones
                    for z in range(self.sd.int(*NUM_USS)):
                        us = self.create_us(project, milestone, computable_project_roles)

                        # create tasks
                        rang = NUM_TASKS_FINISHED if start_date <= now() and end_date <= now() else NUM_TASKS
                        for w in range(self.sd.int(*rang)):
                            if start_date <= now() and end_date <= now():
                                task = self.create_task(project, milestone, us, start_date,
                                                        end_date, closed=True)
                            elif start_date <= now() and end_date >= now():
                                task = self.create_task(project, milestone, us, start_date,
                                                        now())
                            else:
                                # No task on not initiated milestones
                                pass

                    start_date = end_date

                # created unassociated uss.
                for y in range(self.sd.int(*NUM_USS_BACK)):
                    us = self.create_us(project, None, computable_project_roles)

                # create bugs.
                for y in range(self.sd.int(*NUM_ISSUES)):
                    bug = self.create_bug(project)

                # create a wiki page
                wiki_page = self.create_wiki(project, "home")

            # Set a value to total_story_points to show the deadline in the backlog
            project_stats = get_stats_for_project(project)
            defined_points = project_stats["defined_points"]
            project.total_story_points = int(defined_points * self.sd.int(5,12) / 10)
            project.save()

            self.create_likes(project)
Ejemplo n.º 10
0
    def handle(self, *args, **options):
        # Prevent events emission when sample data is running
        disconnect_events_signals()

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(
                    self.create_user(username=username,
                                     full_name=full_name,
                                     email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))

        # create project
        projects_range = range(NUM_PROJECTS + NUM_EMPTY_PROJECTS +
                               NUM_BLOCKED_PROJECTS)
        empty_projects_range = range(NUM_PROJECTS,
                                     NUM_PROJECTS + NUM_EMPTY_PROJECTS)
        blocked_projects_range = range(
            NUM_PROJECTS + NUM_EMPTY_PROJECTS,
            NUM_PROJECTS + NUM_EMPTY_PROJECTS + NUM_BLOCKED_PROJECTS)

        for x in projects_range:
            project = self.create_project(
                x,
                is_private=x in [2, 4],
                blocked_code=BLOCKED_BY_STAFF
                if x in (blocked_projects_range) else None)

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          is_admin=self.sd.boolean(),
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            # Delete a random member so all the projects doesn't have the same team
            Membership.objects.filter(project=project).exclude(
                user=project.owner).order_by("?").first().delete()

            # added invitations
            for i in range(NUM_INVITATIONS):
                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=self.sd.email(),
                                          project=project,
                                          role=role,
                                          is_admin=self.sd.boolean(),
                                          token=self.sd.hex_chars(10, 10))

                if role.computable:
                    computable_project_roles.add(role)

            # If the project isn't empty
            if x not in empty_projects_range:
                # added custom attributes
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    EpicCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    UserStoryCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    TaskCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    IssueCustomAttribute.objects.create(
                        name=name,
                        description=self.sd.words(3, 12),
                        type=self.sd.choice(TYPES_CHOICES)[0],
                        project=project,
                        order=i)

                start_date = now() - datetime.timedelta(55)

                # create milestones
                for y in range(self.sd.int(*NUM_MILESTONES)):
                    end_date = start_date + datetime.timedelta(15)
                    milestone = self.create_milestone(project, start_date,
                                                      end_date)

                    # create uss asociated to milestones
                    for z in range(self.sd.int(*NUM_USS)):
                        us = self.create_us(project, milestone,
                                            computable_project_roles)

                        # create tasks
                        rang = NUM_TASKS_FINISHED if start_date <= now(
                        ) and end_date <= now() else NUM_TASKS
                        for w in range(self.sd.int(*rang)):
                            if start_date <= now() and end_date <= now():
                                task = self.create_task(project,
                                                        milestone,
                                                        us,
                                                        start_date,
                                                        end_date,
                                                        closed=True)
                            elif start_date <= now() and end_date >= now():
                                task = self.create_task(
                                    project, milestone, us, start_date, now())
                            else:
                                # No task on not initiated milestones
                                pass

                    start_date = end_date

                # created unassociated uss.
                for y in range(self.sd.int(*NUM_USS_BACK)):
                    us = self.create_us(project, None,
                                        computable_project_roles)

                # create bugs.
                for y in range(self.sd.int(*NUM_ISSUES)):
                    bug = self.create_bug(project)

                # create a wiki pages and wiki links
                wiki_page = self.create_wiki_page(project, "home")

                for y in range(self.sd.int(*NUM_WIKI_LINKS)):
                    wiki_link = self.create_wiki_link(project)
                    if self.sd.boolean():
                        self.create_wiki_page(project, wiki_link.href)

                # create epics
                for y in range(self.sd.int(*NUM_EPICS)):
                    epic = self.create_epic(project)

            project.refresh_from_db()

            # Set color for some tags:
            for tag in project.tags_colors:
                if self.sd.boolean():
                    tag[1] = self.generate_color(tag[0])

            # Set a value to total_story_points to show the deadline in the backlog
            project_stats = get_stats_for_project(project)
            defined_points = project_stats["defined_points"]
            project.total_story_points = int(defined_points *
                                             self.sd.int(5, 12) / 10)
            project.save()

            self.create_likes(project)
Ejemplo n.º 11
0
    def handle(self, *args, **options):
        # Prevent events emission when sample data is running
        disconnect_events_signals()

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(self.create_user(username=username, full_name=full_name, email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))

        # create project
        for x in range(NUM_PROJECTS + NUM_EMPTY_PROJECTS):
            project = self.create_project(x)

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          is_owner=self.sd.boolean(),
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            # added invitations
            for i in range(NUM_INVITATIONS):
                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=self.sd.email(),
                                          project=project,
                                          role=role,
                                          is_owner=self.sd.boolean(),
                                          token=''.join(random.sample('abcdef0123456789', 10)))

                if role.computable:
                    computable_project_roles.add(role)

            # added custom attributes
            if self.sd.boolean:
                for i in range(1, 4):
                    UserStoryCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                            description=self.sd.words(3, 12),
                                                            project=project,
                                                            order=i)
            if self.sd.boolean:
                for i in range(1, 4):
                    TaskCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                       description=self.sd.words(3, 12),
                                                       project=project,
                                                       order=i)
            if self.sd.boolean:
                for i in range(1, 4):
                    IssueCustomAttribute.objects.create(name=self.sd.words(1, 3),
                                                        description=self.sd.words(3, 12),
                                                        project=project,
                                                        order=i)


            if x < NUM_PROJECTS:
                start_date = now() - datetime.timedelta(55)

                # create milestones
                for y in range(self.sd.int(*NUM_MILESTONES)):
                    end_date = start_date + datetime.timedelta(15)
                    milestone = self.create_milestone(project, start_date, end_date)

                    # create uss asociated to milestones
                    for z in range(self.sd.int(*NUM_USS)):
                        us = self.create_us(project, milestone, computable_project_roles)

                        # create tasks
                        rang = NUM_TASKS_FINISHED if start_date <= now() and end_date <= now() else NUM_TASKS
                        for w in range(self.sd.int(*rang)):
                            if start_date <= now() and end_date <= now():
                                task = self.create_task(project, milestone, us, start_date,
                                                        end_date, closed=True)
                            elif start_date <= now() and end_date >= now():
                                task = self.create_task(project, milestone, us, start_date,
                                                        now())
                            else:
                                # No task on not initiated milestones
                                pass

                    start_date = end_date

                # created unassociated uss.
                for y in range(self.sd.int(*NUM_USS_BACK)):
                    us = self.create_us(project, None, computable_project_roles)

                # create bugs.
                for y in range(self.sd.int(*NUM_ISSUES)):
                    bug = self.create_bug(project)

                # create a wiki page
                wiki_page = self.create_wiki(project, "home")

            # Set a value to total_story_points to show the deadline in the backlog
            defined_points = sum(project.defined_points.values())
            project.total_story_points = int(defined_points * self.sd.int(5,12) / 10)
            project.save()
Ejemplo n.º 12
0
    def handle(self, *args, **options):
        # Prevent events emission when sample data is running
        disconnect_events_signals()

        self.users = [User.objects.get(is_superuser=True)]

        # create users
        if BASE_USERS:
            for username, full_name, email in BASE_USERS:
                self.users.append(self.create_user(username=username, full_name=full_name, email=email))
        else:
            for x in range(NUM_USERS):
                self.users.append(self.create_user(counter=x))

        # create project
        projects_range = range(NUM_PROJECTS + NUM_EMPTY_PROJECTS + NUM_BLOCKED_PROJECTS)
        empty_projects_range = range(NUM_PROJECTS, NUM_PROJECTS + NUM_EMPTY_PROJECTS )
        blocked_projects_range = range(
            NUM_PROJECTS + NUM_EMPTY_PROJECTS,
            NUM_PROJECTS + NUM_EMPTY_PROJECTS + NUM_BLOCKED_PROJECTS
        )

        for x in projects_range:
            project = self.create_project(
                x,
                is_private=x in [2, 4],
                blocked_code = BLOCKED_BY_STAFF if x in(blocked_projects_range) else None
            )

            # added memberships
            computable_project_roles = set()
            for user in self.users:
                if user == project.owner:
                    continue

                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=user.email,
                                          project=project,
                                          role=role,
                                          is_admin=self.sd.boolean(),
                                          user=user)

                if role.computable:
                    computable_project_roles.add(role)

            # Delete a random member so all the projects doesn't have the same team
            Membership.objects.filter(project=project).exclude(user=project.owner).order_by("?").first().delete()

            # added invitations
            for i in range(NUM_INVITATIONS):
                role = self.sd.db_object_from_queryset(project.roles.all())

                Membership.objects.create(email=self.sd.email(),
                                          project=project,
                                          role=role,
                                          is_admin=self.sd.boolean(),
                                          token=self.sd.hex_chars(10,10))

                if role.computable:
                    computable_project_roles.add(role)

            # If the project isn't empty
            if x not in empty_projects_range:
                # added custom attributes
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    EpicCustomAttribute.objects.create(name=name,
                                                       description=self.sd.words(3, 12),
                                                       type=self.sd.choice(TYPES_CHOICES)[0],
                                                       project=project,
                                                       order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    UserStoryCustomAttribute.objects.create(name=name,
                                                            description=self.sd.words(3, 12),
                                                            type=self.sd.choice(TYPES_CHOICES)[0],
                                                            project=project,
                                                            order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    TaskCustomAttribute.objects.create(name=name,
                                                       description=self.sd.words(3, 12),
                                                       type=self.sd.choice(TYPES_CHOICES)[0],
                                                       project=project,
                                                       order=i)
                names = set([self.sd.words(1, 3) for i in range(1, 6)])
                for name in names:
                    IssueCustomAttribute.objects.create(name=name,
                                                        description=self.sd.words(3, 12),
                                                        type=self.sd.choice(TYPES_CHOICES)[0],
                                                        project=project,
                                                        order=i)

                start_date = now() - datetime.timedelta(55)

                # create milestones
                for y in range(self.sd.int(*NUM_MILESTONES)):
                    end_date = start_date + datetime.timedelta(15)
                    milestone = self.create_milestone(project, start_date, end_date)

                    # create uss asociated to milestones
                    for z in range(self.sd.int(*NUM_USS)):
                        us = self.create_us(project, milestone, computable_project_roles)

                        # create tasks
                        rang = NUM_TASKS_FINISHED if start_date <= now() and end_date <= now() else NUM_TASKS
                        for w in range(self.sd.int(*rang)):
                            if start_date <= now() and end_date <= now():
                                task = self.create_task(project, milestone, us, start_date,
                                                        end_date, closed=True)
                            elif start_date <= now() and end_date >= now():
                                task = self.create_task(project, milestone, us, start_date,
                                                        now())
                            else:
                                # No task on not initiated milestones
                                pass

                    start_date = end_date

                # created unassociated uss.
                for y in range(self.sd.int(*NUM_USS_BACK)):
                    us = self.create_us(project, None, computable_project_roles)

                # create bugs.
                for y in range(self.sd.int(*NUM_ISSUES)):
                    bug = self.create_bug(project)

                # create a wiki pages and wiki links
                wiki_page = self.create_wiki_page(project, "home")

                for y in range(self.sd.int(*NUM_WIKI_LINKS)):
                    wiki_link = self.create_wiki_link(project)
                    if self.sd.boolean():
                        self.create_wiki_page(project, wiki_link.href)

                # create epics
                for y in range(self.sd.int(*NUM_EPICS)):
                    epic = self.create_epic(project)

            project.refresh_from_db()

            # Set color for some tags:
            for tag in project.tags_colors:
                if self.sd.boolean():
                    tag[1] = self.generate_color(tag[0])

            # Set a value to total_story_points to show the deadline in the backlog
            project_stats = get_stats_for_project(project)
            defined_points = project_stats["defined_points"]
            project.total_story_points = int(defined_points * self.sd.int(5,12) / 10)
            project.save()

            self.create_likes(project)