Add separated methods for bulk update order for: kanban, sprint and backlog.
parent
f4516ff435
commit
d6fb364907
|
@ -78,19 +78,48 @@ 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():
|
||||||
|
return response.BadRequest(serializer.errors)
|
||||||
|
|
||||||
data = serializer.data
|
data = serializer.data
|
||||||
project = Project.objects.get(id=data["project_id"])
|
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"])
|
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)
|
services.snapshot_userstories_in_bulk(data["bulk_stories"], request.user)
|
||||||
|
|
||||||
return response.NoContent()
|
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)
|
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):
|
||||||
response = super().create(*args, **kwargs)
|
response = super().create(*args, **kwargs)
|
||||||
|
|
|
@ -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,
|
||||||
|
UserStoryStatusExistsValidator,
|
||||||
Serializer):
|
Serializer):
|
||||||
project_id = serializers.IntegerField()
|
project_id = serializers.IntegerField()
|
||||||
bulk_stories = UserStoryOrderBulkSerializer(many=True)
|
bulk_stories = _UserStoryOrderBulkSerializer(many=True)
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue