From 02558ed15fe86a796f5702ad0f3c98f0d47ca038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Hermida?= Date: Sun, 10 Jun 2018 22:43:33 +0200 Subject: [PATCH] Add create default due dates view --- taiga/projects/api.py | 41 +++++++++++++++++++++++++++++++++++- taiga/projects/validators.py | 4 ++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/taiga/projects/api.py b/taiga/projects/api.py index 0a4189b7..3448c9e6 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -372,7 +372,7 @@ class ProjectViewSet(LikedResourceMixin, HistoryResourceMixin, try: user = user_model.objects.get(id=user_id) except user_model.DoesNotExist: - return response.BadRequest(_("The user doesn't exist")) + return response.BadRequest(_("Project already have due dates")) # Check the user is a membership from the project if not project.memberships.filter(user=user).exists(): @@ -599,6 +599,45 @@ class UserStoryDueDateViewSet(BlockedByProjectMixin, ModelCrudViewSet): with advisory_lock("user-story-due-date-creation-{}".format(project_id)): return super().create(request, *args, **kwargs) + def pre_delete(self, obj): + if obj.by_default: + raise exc.BadRequest(_("You can't delete by default due date")) + + @list_route(methods=["POST"]) + def create_default(self, request, **kwargs): + context = { + "request": request + } + validator = validators.DueDatesCreationValidator(data=request.DATA, + context=context) + if not validator.is_valid(): + return response.BadRequest(validator.errors) + + project_id = request.DATA.get('project_id') + project = models.Project.objects.get(id=project_id) + + if project.us_duedates.all(): + raise exc.BadRequest(_("Project already have due dates")) + + project_template = models.ProjectTemplate.objects.get( + id=project.creation_template.id) + + for us_duedate in project_template.us_duedates: + models.UserStoryDueDate.objects.create( + name=us_duedate["name"], + slug=us_duedate["slug"], + by_default=us_duedate["by_default"], + color=us_duedate["color"], + days_to_due=us_duedate["days_to_due"], + order=us_duedate["order"], + project=project + ) + project.save() + + serializer = self.get_serializer(project.us_duedates.all(), many=True) + + return response.Ok(serializer.data) + class TaskStatusViewSet(MoveOnDestroyMixin, BlockedByProjectMixin, ModelCrudViewSet, BulkUpdateOrderMixin): diff --git a/taiga/projects/validators.py b/taiga/projects/validators.py index 87035464..b3abe1e6 100644 --- a/taiga/projects/validators.py +++ b/taiga/projects/validators.py @@ -124,6 +124,10 @@ class IssueDueDateValidator(DuplicatedNameInProjectValidator, validators.ModelVa model = models.IssueDueDate +class DueDatesCreationValidator(ProjectExistsValidator, validators.Validator): + project_id = serializers.IntegerField() + + ###################################################### # Members ######################################################