Add separated methods for bulk update order for: kanban, sprint and backlog.

remotes/origin/enhancement/email-actions
Andrey Antukh 2014-09-13 15:18:14 +02:00
parent f4516ff435
commit d6fb364907
3 changed files with 54 additions and 20 deletions

View File

@ -78,18 +78,47 @@ class UserStoryViewSet(OCCResourceMixin, HistoryResourceMixin, WatchedResourceMi
return response.BadRequest(serializer.errors) return response.BadRequest(serializer.errors)
@list_route(methods=["POST"]) @list_route(methods=["POST"])
def bulk_update_order(self, request, **kwargs): def bulk_update_backlog_order(self, request, **kwargs):
serializer = serializers.UpdateUserStoriesBulkSerializer(data=request.DATA) serializer = serializers.UpdateUserStoriesOrderBulkSerializer(data=request.DATA)
if serializer.is_valid(): if not serializer.is_valid():
data = serializer.data return response.BadRequest(serializer.errors)
project = Project.objects.get(id=data["project_id"])
self.check_permissions(request, 'bulk_update_order', project)
services.update_userstories_order_in_bulk(data["bulk_stories"])
services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user)
return response.NoContent() data = serializer.data
project = get_object_or_404(Project, pk=data["project_id"])
return response.BadRequest(serializer.errors) self.check_permissions(request, "bulk_update_order", project)
services.update_userstories_order_in_bulk(data["bulk_stories"], field="backlog_order")
services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user)
return response.NoContent()
@list_route(methods=["POST"])
def bulk_update_sprint_order(self, request, **kwargs):
serializer = serializers.UpdateUserStoriesOrderBulkSerializer(data=request.DATA)
if not serializer.is_valid():
return response.BadRequest(serializer.errors)
data = serializer.data
project = get_object_or_404(Project, pk=data["project_id"])
self.check_permissions(request, "bulk_update_order", project)
services.update_userstories_order_in_bulk(data["bulk_stories"], field="sprint_order")
services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user)
return response.NoContent()
@list_route(methods=["POST"])
def bulk_update_kanban_order(self, request, **kwargs):
serializer = serializers.UpdateUserStoriesOrderBulkSerializer(data=request.DATA)
if not serializer.is_valid():
return response.BadRequest(serializer.errors)
data = serializer.data
project = get_object_or_404(Project, pk=data["project_id"])
self.check_permissions(request, "bulk_update_order", project)
services.update_userstories_order_in_bulk(data["bulk_stories"], field="kanban_order")
services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user)
return response.NoContent()
@transaction.atomic @transaction.atomic
def create(self, *args, **kwargs): def create(self, *args, **kwargs):

View File

@ -120,12 +120,15 @@ class UserStoriesBulkSerializer(ProjectExistsValidator, UserStoryStatusExistsVal
bulk_stories = serializers.CharField() bulk_stories = serializers.CharField()
class UserStoryOrderBulkSerializer(UserStoryExistsValidator, Serializer): ## Order bulk serializers
class _UserStoryOrderBulkSerializer(UserStoryExistsValidator, Serializer):
us_id = serializers.IntegerField() us_id = serializers.IntegerField()
order = serializers.IntegerField() order = serializers.IntegerField()
class UpdateUserStoriesBulkSerializer(ProjectExistsValidator, UserStoryStatusExistsValidator, class UpdateUserStoriesOrderBulkSerializer(ProjectExistsValidator,
Serializer): UserStoryStatusExistsValidator,
Serializer):
project_id = serializers.IntegerField() project_id = serializers.IntegerField()
bulk_stories = UserStoryOrderBulkSerializer(many=True) bulk_stories = _UserStoryOrderBulkSerializer(many=True)

View File

@ -48,20 +48,22 @@ def create_userstories_in_bulk(bulk_data, callback=None, precall=None, **additio
return userstories return userstories
def update_userstories_order_in_bulk(bulk_data): def update_userstories_order_in_bulk(bulk_data:list, field:str):
"""Update the order of some user stories. """
Update the order of some user stories.
`bulk_data` should be a list of tuples with the following format: `bulk_data` should be a list of tuples with the following format:
[(<user story id>, <new user story order value>), ...] [(<user story id>, {<field>: <value>, ...}), ...]
""" """
user_story_ids = [] user_story_ids = []
new_order_values = [] new_order_values = []
for us_data in bulk_data: for us_data in bulk_data:
user_story_ids.append(us_data['us_id']) user_story_ids.append(us_data["us_id"])
new_order_values.append({"order": us_data['order']}) new_order_values.append({field: us_data["order"]})
db.update_in_bulk_with_ids(user_story_ids, new_order_values, model=models.UserStory) db.update_in_bulk_with_ids(user_story_ids, new_order_values, model=models.UserStory)
def snapshot_userstories_in_bulk(bulk_data, user): def snapshot_userstories_in_bulk(bulk_data, user):
user_story_ids = [] user_story_ids = []
for us_data in bulk_data: for us_data in bulk_data: