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.utils.translation import ugettext_lazy as _
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from rest_framework.permissions import IsAuthenticated, AllowAny
|
||||
from rest_framework.decorators import list_route
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import detail_route
|
||||
from rest_framework import viewsets
|
||||
|
@ -15,6 +17,7 @@ from djmail.template_mail import MagicMailBuilder
|
|||
|
||||
from greenmine.base import filters
|
||||
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.domains import get_active_domain
|
||||
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 models
|
||||
from . import permissions
|
||||
from . import services
|
||||
|
||||
from .aggregates import stats
|
||||
from .aggregates import filters as filters_aggr
|
||||
|
@ -159,6 +163,30 @@ class PointsViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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):
|
||||
model = models.UserStoryStatus
|
||||
|
@ -167,6 +195,30 @@ class UserStoryStatusViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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
|
||||
|
||||
|
@ -177,6 +229,30 @@ class TaskStatusViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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
|
||||
|
||||
|
@ -187,6 +263,30 @@ class SeverityViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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):
|
||||
model = models.Priority
|
||||
|
@ -195,6 +295,30 @@ class PriorityViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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):
|
||||
model = models.IssueType
|
||||
|
@ -203,6 +327,30 @@ class IssueTypeViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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):
|
||||
model = models.IssueStatus
|
||||
|
@ -211,6 +359,30 @@ class IssueStatusViewSet(ModelCrudViewSet):
|
|||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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
|
||||
|
||||
|
@ -220,3 +392,27 @@ class QuestionStatusViewSet(ModelCrudViewSet):
|
|||
permission_classes = (IsAuthenticated, permissions.QuestionStatusPermission)
|
||||
filter_backends = (filters.IsProjectMemberFilterBackend,)
|
||||
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