Example #1
0
class SprintEndView(UpdateView):
    model = Sprint
    template_name = "scrum_sprint_end.html"

    @method_decorator(employee_role_required("scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(SprintEndView, self).dispatch(*args, **kwargs)
    
    def get(self, *args, **kwargs):
        instance = self.get_object()
        if instance.sprint_end:
            message = 'Sprint Already Ended'
            return redirect(self.get_success_url(message))
        instance.updated_by = self.request.user.employee
        instance.sprint_end = timezone.now()
        instance.save()
        return redirect(self.get_success_url())

    def get_success_url(self, message='Sprint successfully Ended'):
        messages.add_message(self.request, messages.SUCCESS, \
            message
        )       
        success_url = reverse_lazy('scrum_product_backlog',
            args = [self.get_object().release_backlog.product_backlog.id]
        )
        return success_url
class DevelopmentTaskDetailView(DetailView):
    model = UserStory
    template_name = "emptask/development_task_detail.html"

    @method_decorator(employee_role_required("developer"))
    def dispatch(self, *args, **kwargs):
        return super(DevelopmentTaskDetailView, self).dispatch(*args, **kwargs)

    def get(self, *args, **kwargs):
        instance = self.get_object()
        if not instance.assiged_developer == self.request.user.employee:
            raise PermissionDenied
        return super(DevelopmentTaskDetailView, self).get(*args, **kwargs)

    def get_context_data(self, *args, **kwargs):
        today = timezone.now().date
        development_worklog = WorkLogService.developer_worklogs(
            self.request.user.employee.id).filter(user_story=self.get_object(),
                                                  log_type="development")
        context = super(DevelopmentTaskDetailView,
                        self).get_context_data(*args, **kwargs)
        context['today'] = today
        context['development_worklog'] = development_worklog
        context['log_exists_for_today'] = development_worklog.filter(
            date=today).exists()
        context['user_story'] = self.get_object()
        return context
Example #3
0
class SprintUpdateView(UpdateView):
    model = Sprint
    fields = ('name', )

    @method_decorator(employee_role_required("scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(SprintUpdateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        return super(SprintUpdateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(SprintUpdateView, self).get_context_data(**kwargs)
        context['release_backlog'] = self.get_object().release_backlog
        return context

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'Sprint successfully Updated'
        )
        success_url = reverse_lazy(
            'scrum_product_backlog',
            args=[self.get_object().release_backlog.product_backlog.id])
        return success_url
class ReleaseBacklogAssignScrumMasterView(UpdateView):
    form_class = ScrumMasterForm
    model = ReleaseBacklog
    template_name = "scrum/releasebacklog_assign_form.html"

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(ReleaseBacklogAssignScrumMasterView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        employee = form.instance.scrum_master
        scrum_master = Role.objects.get(code="scrum_master")
        employee.roles.add(scrum_master)
        employee.save()
        return super(ReleaseBacklogAssignScrumMasterView, self).form_valid(form)

    def get_success_url(self):
        messages.add_message(
            self.request, messages.SUCCESS, \
            'Scrum Master Successfully Assigned to the {0}'\
            .format(self.get_object().name)
        )
        return reverse_lazy('scrum_product_backlog_detail',\
            args = [self.get_object().product_backlog.id])
class UserStoryDetailView(DetailView):
    model = UserStory

    @method_decorator(employee_role_required("product_owner", "scrum_master"))
    def dispatch(self, *args, **kwargs):
    	print 'here'
        return super(UserStoryDetailView, self).dispatch(*args, **kwargs)
Example #6
0
class TestEstimateView(UpdateView):
    model = UserStory
    template_name = "emptask/testing_estimate_form.html"
    fields = ('tester_effort', )

    @method_decorator(employee_role_required("tester"))
    def dispatch(self, *args, **kwargs):
        print 'here'

        return super(TestEstimateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        worklog, created = WorkLog.objects.get_or_create(
            employee=self.request.user.employee,
            user_story=self.get_object(),
            date=timezone.now(),
            log_type='test')
        # import pdb;
        # pdb.set_trace()
        if created:
            worklog.updated_by = self.request.user.employee
        worklog.work_remaining = form.cleaned_data['tester_effort']
        worklog.work_done = 0
        worklog.description = "User Story Task started"
        worklog.save()
        return super(TestEstimateView, self).form_valid(form)

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'Test Estimation successfully Updated'
        )
        success_url = reverse_lazy('emptask_mytask')
        return success_url
class UserStoryToSprintView(View):
    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(UserStoryToSprintView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        self.release_id = kwargs.get('release_id')
        self.release_backlog = ReleaseBacklog.objects.get(id=self.release_id)
        sprint_id = self.request.POST['sprint_id']
        user_stories = self.get_selected_stories(self.request.body)
        try:
            sprint = Sprint.objects.get(id=sprint_id)
            UserStory.objects.filter(id__in=user_stories).update(sprint=sprint)
            messages.add_message(
                self.request, messages.SUCCESS,
                '{0} User Stories successfully moved to sprint {1}'\
                .format(len(user_stories), sprint.name)
            )
        except Exception as e:
            messages.add_message(self.request, messages.ERROR, str(e))
        return redirect(self.get_success_url())

    def get_selected_stories(self, body):
        user_stories = [
            int(re.findall(r'\d+', s)[0]) \
            for s in re.findall(r'(user_story=\d+)', body)
        ]
        return user_stories

    def get_success_url(self):
        success_url = reverse_lazy(
            'scrum_product_backlog',
            args=[self.release_backlog.product_backlog.id])
        return success_url
class DevelopmentEstimateUpdateView(UpdateView):
    model = WorkLog
    template_name = "emptask/development_estimate_daily_form.html"
    fields = ('work_remaining', 'work_done', 'description')

    @method_decorator(employee_role_required("developer"))
    def dispatch(self, *args, **kwargs):
        return super(DevelopmentEstimateUpdateView,
                     self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        return super(DevelopmentEstimateUpdateView, self).form_valid(form)

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'Development Estimation successfully Updated'
        )
        success_url = reverse_lazy('emptask_development_task_detail',
                                   args=[self.get_object().user_story.id])
        return success_url

    def get_context_data(self, **kwargs):
        context = super(DevelopmentEstimateUpdateView,
                        self).get_context_data(**kwargs)
        context['user_story'] = self.get_object().user_story
        return context
class UserStoryCreateView(CreateView):
    model = UserStory
    fields = (
        'title',
        'description',
    )

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        self.product_id = kwargs.get('product_id', None)
        return super(UserStoryCreateView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        return super(UserStoryCreateView, self).post(*args, **kwargs)

    def form_valid(self, form):
        form.instance.created_by = self.request.user.employee
        form.instance.updated_by = self.request.user.employee
        form.instance.product_backlog_id = self.kwargs.get('product_id')
        return super(UserStoryCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(UserStoryCreateView, self).get_context_data(**kwargs)
        try:
            product_obj = ProductBacklog.objects.get(id=self.product_id)
            context['product_obj'] = product_obj
        except Exception, e:
            raise Http404
        return context
Example #10
0
class ProductBacklogListView(ListView):
    model = ProductBacklog
    paginate_by = 10

    @method_decorator(employee_role_required("product_owner", "scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(ProductBacklogListView, self).dispatch(*args, **kwargs)

    def get_queryset(self):
        return ProductBacklogService.all()
Example #11
0
class BurnDownChartListView(ListView):
    model = ProductBacklog
    paginate_by = 10
    template_name = "product_backlog_list.html"

    @method_decorator(
        employee_role_required("product_owner", "scrum_master", "tester",
                               "developer"))
    def dispatch(self, *args, **kwargs):
        return super(BurnDownChartListView, self).dispatch(*args, **kwargs)

    def get_queryset(self):
        return ProductBacklogService.all()
Example #12
0
class EmployeeTaskTemplateView(TemplateView):
    template_name = "emptask/employeetasks.html"

    @method_decorator(employee_role_required("developer", "tester"))
    def dispatch(self, *args, **kwargs):
        return super(EmployeeTaskTemplateView, self).dispatch(*args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(EmployeeTaskTemplateView,
                        self).get_context_data(**kwargs)
        context['development_tasks'] = UserStoryService.developer_user_stories(
            self.request.user.employee.id).order_by('sprint__id')
        context['testing_tasks'] = UserStoryService.tester_user_stories(
            self.request.user.employee.id).order_by('sprint__id')
        return context
class UserStoryUpdateView(UpdateView):
    model = UserStory
    fields = ('title', 'description')

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(UserStoryUpdateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        return super(UserStoryUpdateView, self).form_valid(form)

    def get_success_url(self):
        success_url = reverse_lazy('scrum_product_backlog',
                                   args=[self.get_object().product_backlog.id])
        return success_url
Example #14
0
class ReleaseBacklogUpdateView(UpdateView):
    model = ReleaseBacklog
    fields = ('name', )

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(ReleaseBacklogUpdateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        return super(ReleaseBacklogUpdateView, self).form_valid(form)

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'Release Backlog Successfully Updated')
        return reverse_lazy('scrum_product_backlog_detail',\
            args = [self.get_object().product_backlog.id])
class ProductBacklogDetailView(DetailView):
    model = ProductBacklog

    @method_decorator(employee_role_required("product_owner", "scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(ProductBacklogDetailView, self).dispatch(*args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(ProductBacklogDetailView,
                        self).get_context_data(**kwargs)
        # import pdb; pdb.set_trace()
        context['user_stories'] = UserStoryService.product_backlog_stories(
            self.get_object().id)
        context[
            'release_list'] = ReleaseBacklogService.product_backlog_releases(
                self.get_object().id).order_by('-id')
        return context
class DevelopmentEstimateCreateView(CreateView):
    model = WorkLog
    template_name = "emptask/development_estimate_daily_form.html"
    fields = ('work_remaining', 'work_done', 'description')

    @method_decorator(employee_role_required("developer"))
    def dispatch(self, *args, **kwargs):
        return super(DevelopmentEstimateCreateView,
                     self).dispatch(*args, **kwargs)

    def get(self, *args, **kwargs):
        story_id = kwargs['story_id']
        try:
            self.user_story = UserStory.objects.get(pk=story_id)
        except:
            raise Http404
        return super(DevelopmentEstimateCreateView, self).get(*args, **kwargs)

    def post(self, *args, **kwargs):
        story_id = kwargs['story_id']
        try:
            self.user_story = UserStory.objects.get(pk=story_id)
        except:
            raise Http404
        return super(DevelopmentEstimateCreateView, self).post(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        form.instance.employee = self.request.user.employee
        form.instance.user_story = self.user_story
        form.instance.log_type = 'development'
        return super(DevelopmentEstimateCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(DevelopmentEstimateCreateView,
                        self).get_context_data(**kwargs)
        context['user_story'] = self.user_story
        return context

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'Development Estimation successfully Updated'
        )
        success_url = reverse_lazy('emptask_development_task_detail',
                                   args=[self.user_story.id])
        return success_url
Example #17
0
class ReleaseBacklogStoryDeleteView(DeleteView):
    model = UserStory
    template_name = "scrum/release_backlog_userstory_confirm_delete.html"
    
    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(ReleaseBacklogStoryDeleteView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        user_story = self.get_object()
        user_story.updated_by = self.request.user.employee
        user_story.release_backlog = None
        user_story.save()
        return redirect(self.get_success_url())

    def get_success_url(self):
        success_url = reverse_lazy('scrum_product_backlog', args = [self.get_object().product_backlog.id])
        return success_url
class ProductBacklogDeleteView(DeleteView):
    model = ProductBacklog
    success_url = reverse_lazy('scrum_product_backlog_list')

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(ProductBacklogDeleteView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        product_backlog_object = self.get_object()
        product_backlog_object.updated_by = self.request.user.employee
        product_backlog_object.is_deleted = True
        product_backlog_object.deleted_by = self.request.user.employee
        product_backlog_object.deleted_on = timezone.now()
        product_backlog_object.save()
        messages.add_message(self.request, messages.SUCCESS,
                             'New employee successfully added')
        return redirect(self.success_url)
class ProductBacklogCreateView(CreateView):
    model = ProductBacklog
    fields = ('name', )
    success_url = reverse_lazy('scrum_product_backlog_list')

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(ProductBacklogCreateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.owner = self.request.user.employee
        form.instance.created_by = self.request.user.employee
        form.instance.updated_by = self.request.user.employee
        return super(ProductBacklogCreateView, self).form_valid(form)

    def get_success_url(self, *args, **kwargs):
        messages.add_message(self.request, messages.SUCCESS,\
            'New Prodcuct Backlog successfully added')
        return reverse_lazy('scrum_product_backlog_list')
Example #20
0
class EmployeeCreateView(CreateView):
    model = Employee
    form_class = EmployeeForm
    user_form = UserForm
    template_name = "hris/employee_form.html"

    @method_decorator(employee_role_required("hradmin"))
    def dispatch(self, *args, **kwargs):
        return super(EmployeeCreateView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        return super(EmployeeCreateView, self).post(*args, **kwargs)

    def form_valid(self, form):
        # import pdb; pdb.set_trace()
        user_form = UserForm(self.request.POST, self.request.FILES)
        if user_form.is_valid():
            user = user_form.save()
            form.instance.user = user
            form.instance.created_by = self.request.user.employee
            form.instance.updated_by = self.request.user.employee
            form.save()
            messages.add_message(self.request, messages.SUCCESS,
                                 'New employee successfully added')
        else:
            messages.add_message(self.request, messages.ERROR,
                                 'Oops!! something went wrong')
            self.set_user_form(user_form)
            return super(EmployeeCreateView, self).form_invalid(form)
        return super(EmployeeCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(EmployeeCreateView, self).get_context_data(**kwargs)
        roles = Role.objects.filter(is_visible=True)
        context['roles'] = roles
        context['user_form'] = self.user_form
        return context

    def set_user_form(self, form=None):
        self.user_form = form

    def get_success_url(self):
        return reverse('hris_employee_list')
class UserStoryDeleteView(DeleteView):
    model = UserStory

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(UserStoryDeleteView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        user_story = self.get_object()
        user_story.is_deleted = True
        user_story.deleted_by = self.request.user.employee
        user_story.deleted_on = timezone.now()
        user_story.updated_by = self.request.user.employee
        user_story.save()
        return redirect(self.get_success_url())

    def get_success_url(self):
        success_url = reverse_lazy('scrum_product_backlog',
                                   args=[self.get_object().product_backlog.id])
        return success_url
Example #22
0
class SprintDeleteView(DeleteView):
    model = Sprint

    @method_decorator(employee_role_required("scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(SprintDeleteView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        sprint = self.get_object()
        sprint.is_deleted = True
        sprint.deleted_by = self.request.user.employee
        sprint.deleted_on = timezone.now()
        sprint.updated_by = self.request.user.employee
        sprint.save()
        return redirect(self.get_success_url())

    def get_success_url(self):
        success_url = reverse_lazy(
            'scrum_product_backlog',
            args=[self.get_object().release_backlog.product_backlog.id])
        return success_url
Example #23
0
class SprintCreateView(CreateView):
    model = Sprint
    fields = ('name', )

    @method_decorator(employee_role_required("scrum_master"))
    def dispatch(self, *args, **kwargs):
        self.release_id = kwargs.get('release_id', None)
        return super(SprintCreateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.release_backlog_id = self.release_id
        form.instance.created_by = self.request.user.employee
        form.instance.updated_by = self.request.user.employee
        return super(SprintCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        # import pdb;pdb.set_trace()
        context = super(SprintCreateView, self).get_context_data(**kwargs)
        context['release_backlog'] = self.get_release_object()
        return context

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'New Sprint successfully added to {0}'.format(
                self.get_release_object().name
            )
        )
        return reverse_lazy(
            'scrum_product_backlog_detail',
            args=[self.get_release_object().product_backlog.id])

    def get_release_object(self):
        release_backlog = None
        try:
            self.release_backlog = ReleaseBacklog.objects.get(
                id=self.release_id)
        except Exception, e:
            raise Http404
        return self.release_backlog
class SprintStoryDeleteView(DeleteView):
    model = UserStory
    template_name = "scrum/sprint_userstory_confirm_delete.html"

    @method_decorator(employee_role_required("scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(SprintStoryDeleteView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        user_story = self.get_object()
        user_story.updated_by = self.request.user.employee
        user_story.sprint = None
        user_story.assiged_developer = None
        user_story.developer_effort = None
        user_story.assiged_tester = None
        user_story.tester_effort = None
        user_story.save()
        return redirect(self.get_success_url())

    def get_success_url(self):
        success_url = reverse_lazy('scrum_product_backlog',
                                   args=[self.get_object().product_backlog.id])
        return success_url
Example #25
0
class UserStoryAssignDeveloperView(UpdateView):
    form_class = DeveloperForm
    model = UserStory
    # fields = ('scrum_master',)
    template_name = "scrum/userstory_assign_developer_form.html"

    @method_decorator(employee_role_required("scrum_master"))
    def dispatch(self, *args, **kwargs):
        return super(UserStoryAssignDeveloperView,
                     self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.updated_by = self.request.user.employee
        return super(UserStoryAssignDeveloperView, self).form_valid(form)

    def get_success_url(self):
        messages.add_message(
            self.request, messages.SUCCESS, \
            'Developer Successfully Assigned to the User Story{0}'\
            .format(self.get_object().title)
        )
        return reverse_lazy('scrum_product_backlog_detail',\
            args = [self.get_object().product_backlog.id])
Example #26
0
class ReleaseBacklogDeleteView(DeleteView):
    model = ReleaseBacklog

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self, *args, **kwargs):
        return super(ReleaseBacklogDeleteView, self).dispatch(*args, **kwargs)

    def post(self, *args, **kwargs):
        release_backlog = self.get_object()
        release_backlog.is_deleted = True
        release_backlog.deleted_by = self.request.user.employee
        release_backlog.deleted_on = timezone.now()
        release_backlog.updated_by = self.request.user.employee
        release_backlog.save()
        return redirect(self.get_success_url())

    def get_success_url(self):
        messages.add_message(self.request, messages.SUCCESS, \
            'ReleaseBacklog successfully Deleted to {0}'
        )
        success_url = reverse_lazy('scrum_product_backlog', \
            args = [self.get_object().product_backlog.id])
        return success_url
class ReleaseBacklogCreateView(CreateView):
    model = ReleaseBacklog
    fields = ('name',)

    @method_decorator(employee_role_required("product_owner"))
    def dispatch(self,  *args, **kwargs):
        self.product_id = kwargs.get('product_id',None)
        return super(ReleaseBacklogCreateView, self).dispatch(*args, **kwargs)

    def form_valid(self, form):
        form.instance.created_by = self.request.user.employee
        form.instance.updated_by = self.request.user.employee
        form.instance.product_backlog_id = self.product_id
        return super(ReleaseBacklogCreateView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        # import pdb;pdb.set_trace()
        context = super(ReleaseBacklogCreateView, self).get_context_data(**kwargs)
        try:
            product_obj = ProductBacklog.objects.get(id=self.product_id)
            context['product_obj'] = product_obj
        except Exception, e:
            raise Http404
        return context