Created methods to order status, points, types, severities and priorities in bulk
parent
ed72b28ba2
commit
ee24fd7da1
|
@ -4,8 +4,10 @@ import uuid
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from rest_framework.permissions import IsAuthenticated, AllowAny
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||||
|
from rest_framework.decorators import list_route
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.decorators import detail_route
|
from rest_framework.decorators import detail_route
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
|
@ -15,6 +17,7 @@ from djmail.template_mail import MagicMailBuilder
|
||||||
|
|
||||||
from greenmine.base import filters
|
from greenmine.base import filters
|
||||||
from greenmine.base import exceptions as exc
|
from greenmine.base import exceptions as exc
|
||||||
|
from greenmine.base.permissions import has_project_perm
|
||||||
from greenmine.base.api import ModelCrudViewSet, ModelListViewSet, RetrieveModelMixin
|
from greenmine.base.api import ModelCrudViewSet, ModelListViewSet, RetrieveModelMixin
|
||||||
from greenmine.base.domains import get_active_domain
|
from greenmine.base.domains import get_active_domain
|
||||||
from greenmine.base.notifications.api import NotificationSenderMixin
|
from greenmine.base.notifications.api import NotificationSenderMixin
|
||||||
|
@ -23,6 +26,7 @@ from greenmine.projects.aggregates.tags import get_all_tags
|
||||||
from . import serializers
|
from . import serializers
|
||||||
from . import models
|
from . import models
|
||||||
from . import permissions
|
from . import permissions
|
||||||
|
from . import services
|
||||||
|
|
||||||
from .aggregates import stats
|
from .aggregates import stats
|
||||||
from .aggregates import filters as filters_aggr
|
from .aggregates import filters as filters_aggr
|
||||||
|
@ -159,6 +163,30 @@ class PointsViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ('project',)
|
filter_fields = ('project',)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_points should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_points = request.DATA.get("bulk_points", None)
|
||||||
|
|
||||||
|
if bulk_points is None:
|
||||||
|
raise exc.BadRequest(_("bulk_points parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_points'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change points."))
|
||||||
|
|
||||||
|
service = services.PointsService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_points)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
class UserStoryStatusViewSet(ModelCrudViewSet):
|
class UserStoryStatusViewSet(ModelCrudViewSet):
|
||||||
model = models.UserStoryStatus
|
model = models.UserStoryStatus
|
||||||
|
@ -167,6 +195,30 @@ class UserStoryStatusViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ('project',)
|
filter_fields = ('project',)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_userstory_statuses should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_userstory_statuses = request.DATA.get("bulk_userstory_statuses", None)
|
||||||
|
|
||||||
|
if bulk_userstory_statuses is None:
|
||||||
|
raise exc.BadRequest(_("bulk_userstory_statuses parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_userstorystatus'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change user_story_statuses."))
|
||||||
|
|
||||||
|
service = services.UserStoryStatusesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_userstory_statuses)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
# Tasks commin ViewSets
|
# Tasks commin ViewSets
|
||||||
|
|
||||||
|
@ -177,6 +229,30 @@ class TaskStatusViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ("project",)
|
filter_fields = ("project",)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_task_statuses should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_task_statuses = request.DATA.get("bulk_task_statuses", None)
|
||||||
|
|
||||||
|
if bulk_task_statuses is None:
|
||||||
|
raise exc.BadRequest(_("bulk_task_statuses parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_taskstatus'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change task_statuses."))
|
||||||
|
|
||||||
|
service = services.TaskStatusesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_task_statuses)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
# Issues common ViewSets
|
# Issues common ViewSets
|
||||||
|
|
||||||
|
@ -187,6 +263,30 @@ class SeverityViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ("project",)
|
filter_fields = ("project",)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_severities should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_severities = request.DATA.get("bulk_severities", None)
|
||||||
|
|
||||||
|
if bulk_severities is None:
|
||||||
|
raise exc.BadRequest(_("bulk_severities parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_severity'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change severities."))
|
||||||
|
|
||||||
|
service = services.SeveritiesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_severities)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
class PriorityViewSet(ModelCrudViewSet):
|
class PriorityViewSet(ModelCrudViewSet):
|
||||||
model = models.Priority
|
model = models.Priority
|
||||||
|
@ -195,6 +295,30 @@ class PriorityViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ("project",)
|
filter_fields = ("project",)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_priorities should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_priorities = request.DATA.get("bulk_priorities", None)
|
||||||
|
|
||||||
|
if bulk_priorities is None:
|
||||||
|
raise exc.BadRequest(_("bulk_priorities parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_priority'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change priorities."))
|
||||||
|
|
||||||
|
service = services.PrioritiesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_priorities)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
class IssueTypeViewSet(ModelCrudViewSet):
|
class IssueTypeViewSet(ModelCrudViewSet):
|
||||||
model = models.IssueType
|
model = models.IssueType
|
||||||
|
@ -203,6 +327,30 @@ class IssueTypeViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ("project",)
|
filter_fields = ("project",)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_issue_types should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_issue_types = request.DATA.get("bulk_issue_types", None)
|
||||||
|
|
||||||
|
if bulk_issue_types is None:
|
||||||
|
raise exc.BadRequest(_("bulk_riorities parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_issuetype'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change issue_types."))
|
||||||
|
|
||||||
|
service = services.IssueTypesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_issue_types)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
class IssueStatusViewSet(ModelCrudViewSet):
|
class IssueStatusViewSet(ModelCrudViewSet):
|
||||||
model = models.IssueStatus
|
model = models.IssueStatus
|
||||||
|
@ -211,6 +359,30 @@ class IssueStatusViewSet(ModelCrudViewSet):
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ("project",)
|
filter_fields = ("project",)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_issue_statuses should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_issue_statuses = request.DATA.get("bulk_issue_statuses", None)
|
||||||
|
|
||||||
|
if bulk_issue_statuses is None:
|
||||||
|
raise exc.BadRequest(_("bulk_riorities parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_issuestatus'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change issue_statuses."))
|
||||||
|
|
||||||
|
service = services.IssueStatusesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_issue_statuses)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
# Questions commin ViewSets
|
# Questions commin ViewSets
|
||||||
|
|
||||||
|
@ -220,3 +392,27 @@ class QuestionStatusViewSet(ModelCrudViewSet):
|
||||||
permission_classes = (IsAuthenticated, permissions.QuestionStatusPermission)
|
permission_classes = (IsAuthenticated, permissions.QuestionStatusPermission)
|
||||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||||
filter_fields = ("project",)
|
filter_fields = ("project",)
|
||||||
|
|
||||||
|
@list_route(methods=["POST"])
|
||||||
|
def bulk_update_order(self, request, **kwargs):
|
||||||
|
# bulk_question_statuses should be:
|
||||||
|
# [[1,1],[23, 2], ...]
|
||||||
|
|
||||||
|
bulk_question_statuses = request.DATA.get("bulk_question_statuses", None)
|
||||||
|
|
||||||
|
if bulk_question_statuses is None:
|
||||||
|
raise exc.BadRequest(_("bulk_question_statuses parameter is mandatory"))
|
||||||
|
|
||||||
|
project_id = request.DATA.get('project', None)
|
||||||
|
if project_id is None:
|
||||||
|
raise exc.BadRequest(_("project parameter ir mandatory"))
|
||||||
|
|
||||||
|
project = get_object_or_404(models.Project, id=project_id)
|
||||||
|
|
||||||
|
if not has_project_perm(request.user, project, 'change_questionstatus'):
|
||||||
|
raise exc.PermissionDenied(_("You don't have permisions to change question_statuses."))
|
||||||
|
|
||||||
|
service = services.QuestionStatusesService()
|
||||||
|
service.bulk_update_order(project, request.user, bulk_question_statuses)
|
||||||
|
|
||||||
|
return Response(data=None, status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from django.db import transaction
|
||||||
|
from django.db import connection
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
class UserStoryStatusesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_userstorystatus set "order" = $1
|
||||||
|
where projects_userstorystatus.id = $2 and
|
||||||
|
projects_userstorystatus.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
|
||||||
|
class PointsService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_points set "order" = $1
|
||||||
|
where projects_points.id = $2 and
|
||||||
|
projects_points.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
class TaskStatusesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_taskstatus set "order" = $1
|
||||||
|
where projects_taskstatus.id = $2 and
|
||||||
|
projects_taskstatus.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
|
||||||
|
class IssueStatusesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_issuestatus set "order" = $1
|
||||||
|
where projects_issuestatus.id = $2 and
|
||||||
|
projects_issuestatus.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
|
||||||
|
class IssueTypesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_issuetype set "order" = $1
|
||||||
|
where projects_issuetype.id = $2 and
|
||||||
|
projects_issuetype.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
|
||||||
|
class PrioritiesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_priority set "order" = $1
|
||||||
|
where projects_priority.id = $2 and
|
||||||
|
projects_priority.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
|
||||||
|
class SeveritiesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_severity set "order" = $1
|
||||||
|
where projects_severity.id = $2 and
|
||||||
|
projects_severity.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
|
||||||
|
class QuestionStatusesService(object):
|
||||||
|
@transaction.atomic
|
||||||
|
def bulk_update_order(self, project, user, data):
|
||||||
|
cursor = connection.cursor()
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
prepare bulk_update_order as update projects_questionstatus set "order" = $1
|
||||||
|
where projects_questionstatus.id = $2 and
|
||||||
|
projects_questionstatus.project_id = $3;
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor.execute(sql)
|
||||||
|
for id, order in data:
|
||||||
|
cursor.execute("EXECUTE bulk_update_order (%s, %s, %s);",
|
||||||
|
(order, id, project.id))
|
||||||
|
cursor.close()
|
Loading…
Reference in New Issue