def save(self, *args, **kwargs): qs = self.project.issue_statuses if self.id: qs = qs.exclude(id=self.id) self.slug = slugify_uniquely_for_queryset(self.name, qs) return super().save(*args, **kwargs)
def save(self, *args, **kwargs): if not self.href: wl_qs = self.project.wiki_links.all() self.href = slugify_uniquely_for_queryset(self.title, wl_qs, slugfield="href") super().save(*args, **kwargs)
def save(self, *args, **kwargs): if not self.href: with advisory_lock("wiki-page-creation-{}".format(self.project_id)): wl_qs = self.project.wiki_links.all() self.href = slugify_uniquely_for_queryset(self.title, wl_qs, slugfield="href") super().save(*args, **kwargs) else: super().save(*args, **kwargs)
def update_role_points(self, user_stories=None): RolePoints = apps.get_model("userstories", "RolePoints") Role = apps.get_model("users", "Role") # Get all available roles on this project roles = self.get_roles().filter(computable=True) if roles.count() == 0: return # Iter over all project user stories and create # role point instance for new created roles. if user_stories is None: user_stories = self.user_stories.all() # Get point instance that represent a null/undefined # The current model allows duplicate values. Because # of it, we should get all poins with None as value # and use the first one. # In case of that not exists, creates one for avoid # unexpected errors. none_points = list(self.points.filter(value=None)) if none_points: null_points_value = none_points[0] else: name = slugify_uniquely_for_queryset("?", self.points.all(), slugfield="name") null_points_value = Points.objects.create(name=name, value=None, project=self) for us in user_stories: usroles = Role.objects.filter( role_points__in=us.role_points.all()).distinct() new_roles = roles.exclude(id__in=usroles) new_rolepoints = [ RolePoints(role=role, user_story=us, points=null_points_value) for role in new_roles ] RolePoints.objects.bulk_create(new_rolepoints) # Now remove rolepoints associated with not existing roles. rp_query = RolePoints.objects.filter( user_story__in=self.user_stories.all()) rp_query = rp_query.exclude( role__id__in=roles.values_list("id", flat=True)) rp_query.delete()
def update_role_points(self, user_stories=None): RolePoints = apps.get_model("userstories", "RolePoints") Role = apps.get_model("users", "Role") # Get all available roles on this project roles = self.get_roles().filter(computable=True) if roles.count() == 0: return # Iter over all project user stories and create # role point instance for new created roles. if user_stories is None: user_stories = self.user_stories.all() # Get point instance that represent a null/undefined # The current model allows duplicate values. Because # of it, we should get all poins with None as value # and use the first one. # In case of that not exists, creates one for avoid # unexpected errors. none_points = list(self.points.filter(value=None)) if none_points: null_points_value = none_points[0] else: name = slugify_uniquely_for_queryset("?", self.points.all(), slugfield="name") null_points_value = Points.objects.create(name=name, value=None, project=self) for us in user_stories: usroles = Role.objects.filter(role_points__in=us.role_points.all()).distinct() new_roles = roles.exclude(id__in=usroles) new_rolepoints = [RolePoints(role=role, user_story=us, points=null_points_value) for role in new_roles] RolePoints.objects.bulk_create(new_rolepoints) # Now remove rolepoints associated with not existing roles. rp_query = RolePoints.objects.filter(user_story__in=self.user_stories.all()) rp_query = rp_query.exclude(role__id__in=roles.values_list("id", flat=True)) rp_query.delete()