Removing base/services.py now not needed
parent
91aeb00297
commit
3fc0a9de67
|
@ -29,8 +29,7 @@ class UserAdmin(DjangoUserAdmin):
|
||||||
(None, {'fields': ('username', 'password')}),
|
(None, {'fields': ('username', 'password')}),
|
||||||
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'description', 'photo')}),
|
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'description', 'photo')}),
|
||||||
(_('Extra info'), {'fields': ('color', 'default_language', 'default_timezone', 'token', 'colorize_tags')}),
|
(_('Extra info'), {'fields': ('color', 'default_language', 'default_timezone', 'token', 'colorize_tags')}),
|
||||||
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
|
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',)}),
|
||||||
'groups', 'user_permissions')}),
|
|
||||||
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
|
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
|
||||||
)
|
)
|
||||||
form = UserChangeForm
|
form = UserChangeForm
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
|
|
||||||
from greenmine.scrum.models import Project
|
|
||||||
from greenmine.base.models import Role
|
|
||||||
|
|
||||||
|
|
||||||
class RoleGroupsService(object):
|
|
||||||
def replicate_role_on_all_projects(self, role):
|
|
||||||
for group in role.groups.all():
|
|
||||||
self._replicate_role_permissions_on_group(role, group)
|
|
||||||
for project in Project.objects.all():
|
|
||||||
self._replicate_role_on_project_if_needed(role, project)
|
|
||||||
|
|
||||||
def replicate_all_roles_on_one_project(self, project):
|
|
||||||
for role in Role.objects.all():
|
|
||||||
group = Group(name="p%d-r%d" % (project.pk, role.pk), role=role, project=project)
|
|
||||||
group.save()
|
|
||||||
self._replicate_role_permissions_on_group(role, group)
|
|
||||||
|
|
||||||
def _replicate_role_on_project_if_needed(self, role, project):
|
|
||||||
if project.groups.filter(role=role).count() == 0:
|
|
||||||
group = Group(name="p%d-r%d" % (project.pk, role.pk), role=role, project=project)
|
|
||||||
group.save()
|
|
||||||
self._replicate_role_permissions_on_group(role, group)
|
|
||||||
|
|
||||||
def _replicate_role_permissions_on_group(self, role, group):
|
|
||||||
group.permissions.clear()
|
|
||||||
for permission in role.permissions.all():
|
|
||||||
group.permissions.add(permission)
|
|
||||||
group.save()
|
|
|
@ -10,9 +10,10 @@ from django.contrib.contenttypes import generic
|
||||||
from picklefield.fields import PickledObjectField
|
from picklefield.fields import PickledObjectField
|
||||||
|
|
||||||
from greenmine.base.utils.slug import slugify_uniquely, ref_uniquely
|
from greenmine.base.utils.slug import slugify_uniquely, ref_uniquely
|
||||||
from greenmine.base.fields import DictField
|
|
||||||
from greenmine.base.utils import iter_points
|
from greenmine.base.utils import iter_points
|
||||||
from greenmine.scrum.choices import *
|
from greenmine.scrum.choices import (ISSUESTATUSES, TASKSTATUSES, USSTATUSES,
|
||||||
|
POINTS_CHOICES, SEVERITY_CHOICES,
|
||||||
|
ISSUETYPES, TASK_CHANGE_CHOICES)
|
||||||
|
|
||||||
|
|
||||||
class Severity(models.Model):
|
class Severity(models.Model):
|
||||||
|
@ -113,6 +114,7 @@ class Membership(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('user', 'project')
|
unique_together = ('user', 'project')
|
||||||
|
|
||||||
|
|
||||||
class Project(models.Model):
|
class Project(models.Model):
|
||||||
uuid = models.CharField(max_length=40, unique=True, blank=True)
|
uuid = models.CharField(max_length=40, unique=True, blank=True)
|
||||||
name = models.CharField(max_length=250, unique=True)
|
name = models.CharField(max_length=250, unique=True)
|
||||||
|
@ -239,7 +241,6 @@ class UserStory(models.Model):
|
||||||
('can_add_userstory_to_milestones', 'Can add user stories to milestones'),
|
('can_add_userstory_to_milestones', 'Can add user stories to milestones'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return u"<UserStory %s>" % (self.id)
|
return u"<UserStory %s>" % (self.id)
|
||||||
|
|
||||||
|
@ -313,7 +314,7 @@ class Task(models.Model):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('ref', 'project')
|
unique_together = ('ref', 'project')
|
||||||
permissions = [
|
permissions = (
|
||||||
('can_comment_task', 'Can comment tasks'),
|
('can_comment_task', 'Can comment tasks'),
|
||||||
('can_change_owned_task', 'Can modify owned tasks'),
|
('can_change_owned_task', 'Can modify owned tasks'),
|
||||||
('can_change_assigned_task', 'Can modify assigned tasks'),
|
('can_change_assigned_task', 'Can modify assigned tasks'),
|
||||||
|
@ -321,8 +322,7 @@ class Task(models.Model):
|
||||||
('can_assign_task_to_myself', 'Can assign tasks to myself'),
|
('can_assign_task_to_myself', 'Can assign tasks to myself'),
|
||||||
('can_change_task_state', 'Can change the task state'),
|
('can_change_task_state', 'Can change the task state'),
|
||||||
('can_add_task_to_us', 'Can add tasks to a user story'),
|
('can_add_task_to_us', 'Can add tasks to a user story'),
|
||||||
]
|
)
|
||||||
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.subject
|
return self.subject
|
||||||
|
@ -371,14 +371,14 @@ class Issue(models.Model):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('ref', 'project')
|
unique_together = ('ref', 'project')
|
||||||
permissions = [
|
permissions = (
|
||||||
('can_comment_issue', 'Can comment issues'),
|
('can_comment_issue', 'Can comment issues'),
|
||||||
('can_change_owned_issue', 'Can modify owned issues'),
|
('can_change_owned_issue', 'Can modify owned issues'),
|
||||||
('can_change_assigned_issue', 'Can modify assigned issues'),
|
('can_change_assigned_issue', 'Can modify assigned issues'),
|
||||||
('can_assign_issue_to_other', 'Can assign issues to others'),
|
('can_assign_issue_to_other', 'Can assign issues to others'),
|
||||||
('can_assign_issue_to_myself', 'Can assign issues to myself'),
|
('can_assign_issue_to_myself', 'Can assign issues to myself'),
|
||||||
('can_change_issue_state', 'Can change the issue state'),
|
('can_change_issue_state', 'Can change the issue state'),
|
||||||
]
|
)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.subject
|
return self.subject
|
||||||
|
@ -396,26 +396,21 @@ class Issue(models.Model):
|
||||||
# Model related signals handlers
|
# Model related signals handlers
|
||||||
@receiver(models.signals.post_save, sender=Project, dispatch_uid="project_post_save")
|
@receiver(models.signals.post_save, sender=Project, dispatch_uid="project_post_save")
|
||||||
def project_post_save(sender, instance, created, **kwargs):
|
def project_post_save(sender, instance, created, **kwargs):
|
||||||
from greenmine.base.services import RoleGroupsService
|
|
||||||
|
|
||||||
if not created:
|
if not created:
|
||||||
return
|
return
|
||||||
|
|
||||||
RoleGroupsService().replicate_all_roles_on_one_project(instance)
|
|
||||||
|
|
||||||
# Populate new project dependen default data
|
# Populate new project dependen default data
|
||||||
|
|
||||||
for order, name, is_closed in ISSUESTATUSES:
|
for order, name, is_closed in ISSUESTATUSES:
|
||||||
IssueStatus.objects.create(name=name, order=order,
|
IssueStatus.objects.create(name=name, order=order,
|
||||||
is_closed=is_closed, project=instance)
|
is_closed=is_closed, project=instance)
|
||||||
|
|
||||||
for order, name, is_closed, color in TASKSTATUSES:
|
for order, name, is_closed, color in TASKSTATUSES:
|
||||||
TaskStatus.objects.create(name=name, order=order, color=color,
|
TaskStatus.objects.create(name=name, order=order, color=color,
|
||||||
is_closed=is_closed, project=instance)
|
is_closed=is_closed, project=instance)
|
||||||
|
|
||||||
for order, name, is_closed in USSTATUSES:
|
for order, name, is_closed in USSTATUSES:
|
||||||
UserStoryStatus.objects.create(name=name, order=order,
|
UserStoryStatus.objects.create(name=name, order=order,
|
||||||
is_closed=is_closed, project=instance)
|
is_closed=is_closed, project=instance)
|
||||||
|
|
||||||
for order, name in POINTS_CHOICES:
|
for order, name in POINTS_CHOICES:
|
||||||
Priority.objects.create(project=instance, name=name, order=order)
|
Priority.objects.create(project=instance, name=name, order=order)
|
||||||
|
|
|
@ -4,13 +4,10 @@ from django.dispatch import receiver
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.db.models.signals import post_save
|
|
||||||
|
|
||||||
from greenmine.base import signals
|
from greenmine.base import signals
|
||||||
from greenmine.base.utils.auth import set_token
|
from greenmine.base.utils.auth import set_token
|
||||||
from greenmine.base.mail.tasks import send_mail, send_bulk_mail
|
from greenmine.base.mail.tasks import send_mail, send_bulk_mail
|
||||||
from greenmine.scrum.models import Project
|
|
||||||
from greenmine.base.services import RoleGroupsService
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(signals.mail_new_user)
|
@receiver(signals.mail_new_user)
|
||||||
|
|
Loading…
Reference in New Issue