Ejemplo n.º 1
0
    def save(self, request, commit=True, *args, **kwargs):
        logger = logging.getLogger("alliance")
        logger.debug("Inside BacklogNewForm save")
        results = {'success': False}
        results['errors'] = None
        logger.debug(results)

        backlog = super(BacklogNewForm, self).save(commit=False,
                                                   *args,
                                                   **kwargs)
        backlog.story_title = self.cleaned_data['story_title']
        backlog.story_descr = self.cleaned_data['story_descr']
        backlog.priority = self.cleaned_data['priority']
        backlog.module = "backlog"

        teamNameFromRequest = request.session.get('teamName')
        logger.debug(teamNameFromRequest)

        if 'All Megastars' == teamNameFromRequest:
            backlog.github_repo = "alliance-community"
        elif 'North Stars' == teamNameFromRequest:
            backlog.github_repo = "nexus-community"
        elif 'Belatrix Stars' == teamNameFromRequest:
            backlog.github_repo = "bigbluebutton-community"
        else:
            backlog.github_repo = "test-community"

        logger.debug(backlog.github_repo)
        backlog.status = get_object_or_none(Status,
                                            category='backlog',
                                            name='open')
        if backlog.status is None:
            logger.debug("Status is None")
            results[
                'errors'] = "Missing Status to Save Backlog. Please contact your administrator."

        backlog.team = get_object_or_none(Team, id=request.session.get('team'))
        if backlog.team is None:
            logger.debug("Team is None")
            results[
                'errors'] = "Missing Team to Save Backlog. Please contact your administrator."

        backlog.project = get_object_or_none(Project,
                                             id=project_id_list(
                                                 request.session.get('team')))
        if backlog.project is None:
            logger.debug("Project is None")
            results[
                'errors'] = "Team is missing Project association and hence not authorized to add backlog. Please contact your administrator."

        if results['errors'] is None:
            logger.debug("results errors is None")
            if commit:
                backlog = backlog.save()
                results['success'] = True
                return results
        else:
            return results
Ejemplo n.º 2
0
    def evulateAcceptedVelocity(self, request, teamId):
        logger = logging.getLogger("alliance")
        # Accepted Velocity for current/recent sprint : START
        statusFlag = 'OPEN'
        priorityFlag = '9'
        backlogs = retrieve_backlogs_by_project_status_and_priority(teamId, statusFlag, priorityFlag) \
            .order_by('project__name', 'module', 'sprint_id', 'priority', 'id')

        acceptedSprint = 0
        acceptedEstimate = 0
        acceptedEstimateVel = 0

        for backlog in backlogs:
            estimate = get_object_or_none(Estimate, team_id=teamId, backlog_id=backlog.id)
            if not estimate:
                estimate = Estimate(team_id=teamId, backlog_id=backlog.id)

            acceptedSprint = backlog.sprint_id
            acceptedEstimate = estimate.estimate
            logger.debug(estimate)
            logger.debug(acceptedEstimate)

            if not acceptedEstimate:
                acceptedEstimate = 0
                logger.debug("Accepted Estimate is EMPTY. Resetting to ZERO(0) ", acceptedEstimate)

            if acceptedSprint != None and acceptedEstimate != None:
                acceptedEstimateVel += int(acceptedEstimate)

        return acceptedEstimateVel
Ejemplo n.º 3
0
    def update_backlog_and_acc_cri(self, request, results):
        from ...backlog.forms import AcceptanceCriteriaFormSet, BacklogUpdateForm

        backlog_id = request.POST.get('backlog-id')
        backlog = get_object_or_none(Backlog, id=backlog_id)
        form = BacklogUpdateForm(request.POST,
                                 prefix='backlog',
                                 instance=backlog)

        prefix = 'acceptance-criteria-%d' % backlog.id
        formset = AcceptanceCriteriaFormSet(request.POST,
                                            instance=backlog,
                                            prefix=prefix)
        if form.is_valid():
            if formset.is_valid():
                backlog = form.save()
                backlog.refresh_from_db()
                formset.save()
                formset = AcceptanceCriteriaFormSet(instance=backlog, prefix=prefix)
                html = render_to_string('backlog/acc_cri_par.txt',
                                        {'form': form, 'formset': formset})
                results['html'] = html
                results['mgt_fields'] = formset.management_form.as_p()
                results['update_dttm'] = localtime(backlog.update_dttm)
                results['success'] = True
            else:
                results['errors'] = formset.non_form_errors()
        else:
            results['errors'] = form.errors.as_json()
    def update_backlog_and_acc_cri(self, request, results):
        from ...backlog.forms import AcceptanceCriteriaFormSet, BacklogUpdateForm

        backlog_id = request.POST.get('backlog-id')
        backlog = get_object_or_none(Backlog, id=backlog_id)
        form = BacklogUpdateForm(request.POST,
                                 prefix='backlog',
                                 instance=backlog)

        prefix = 'acceptance-criteria-%d' % backlog.id
        formset = AcceptanceCriteriaFormSet(request.POST,
                                            instance=backlog,
                                            prefix=prefix)
        if form.is_valid():
            if formset.is_valid():
                backlog = form.save()
                backlog.refresh_from_db()
                formset.save()
                formset = AcceptanceCriteriaFormSet(instance=backlog, prefix=prefix)
                html = render_to_string('backlog/acc_cri_par.txt',
                                        {'form': form, 'formset': formset})
                results['html'] = html
                results['mgt_fields'] = formset.management_form.as_p()
                results['update_dttm'] = localtime(backlog.update_dttm)
                results['success'] = True
            else:
                results['errors'] = formset.non_form_errors()
        else:
            results['errors'] = form.errors.as_json()
Ejemplo n.º 5
0
    def post(self, request):
        logger = logging.getLogger("alliance")
        logger.debug("Inside CheckBacklogsView")
        result = {'outdated': False}
        team_id = request.session.get('team')
        ui_backlogs = json.loads(request.body).get("backlogs")

        if ui_backlogs and team_id:
            ui_backlogs_count = len(ui_backlogs)
            paginator_count = request.session.get('paginatorCount')

            # Same query executed in the BacklogView class
            statusFlag = request.session.get('statusFlag')
            priorityFlag = request.session.get('priorityFlag')
            logger.debug(team_id)
            logger.debug(statusFlag)
            logger.debug(priorityFlag)

            db_backlogs_count = \
                    retrieve_backlogs_by_project_status_and_priority(team_id, statusFlag, priorityFlag)\
                    .count()
            logger.debug(db_backlogs_count)
            logger.debug(ui_backlogs_count)
            logger.debug(paginator_count)

            # If the number of backlogs displayed to the user
            #  differs from the number that exists into database
            #  then user must refresh his/her page.
            if (paginator_count != db_backlogs_count):
                result['outdated'] = True
            else:
                # Otherwise we must compare the last update time
                #  of each backlog displayed to the user with those
                #  existing into database.
                for ui_backlog in ui_backlogs:
                    backlog_id = ui_backlog.get('id')
                    backlog = get_object_or_none(Backlog, id=backlog_id)

                    result['outdated'] = backlog is None
                    # Database datetime has greater precision than
                    # the one brought from ui so we add a timedelta,
                    # otherwise the page that executed the update
                    # would show the message of requested refresh.
                    ui_last_update = parse_datetime(
                        ui_backlog.get('lastUpdated'))
                    db_last_update = backlog.update_dttm

                    if not ui_last_update and db_last_update:
                        result['outdated'] = True
                    elif db_last_update:
                        ui_last_update += datetime.timedelta(milliseconds=500)
                        if db_last_update > ui_last_update:
                            result['outdated'] = True
        return JsonResponse(result)
Ejemplo n.º 6
0
    def update_estimate(self, request, results, team_id):
        from ...backlog.forms import EstimateForm

        backlog_id = request.POST.get('estimate-backlog_id')
        estimate = get_object_or_none(Estimate, team_id=team_id, backlog_id=backlog_id)
        form = EstimateForm(request.POST, prefix='estimate', instance=estimate)

        if form.is_valid():
            form.save()
            # TODO: What is happening in the next 3 lines??
            backlog = Backlog.objects.get(id=backlog_id)
            backlog.save()  # No need to save, we haven't made any changes
            backlog.refresh_from_db()  # No need to get an update from the db, we just got this object
            results['update_dttm'] = localtime(backlog.update_dttm)
            results['success'] = True
        else:
            results['errors'] = form.errors.as_json()
    def update_estimate(self, request, results, team_id):
        from ...backlog.forms import EstimateForm

        backlog_id = request.POST.get('estimate-backlog_id')
        estimate = get_object_or_none(Estimate, team_id=team_id, backlog_id=backlog_id)
        form = EstimateForm(request.POST, prefix='estimate', instance=estimate)

        if form.is_valid():
            form.save()
            # TODO: What is happening in the next 3 lines??
            backlog = Backlog.objects.get(id=backlog_id)
            backlog.save()  # No need to save, we haven't made any changes
            backlog.refresh_from_db()  # No need to get an update from the db, we just got this object
            results['update_dttm'] = localtime(backlog.update_dttm)
            results['success'] = True
        else:
            results['errors'] = form.errors.as_json()
    def update_estimate(self, request, results, team_id):
        from ...backlog.forms import EstimateForm

        backlog_id = request.POST.get('estimate-backlog_id')
        estimate = get_object_or_none(Estimate,
                team_id=team_id, backlog_id=backlog_id)
        form = EstimateForm(request.POST, prefix='estimate',
                            instance=estimate)

        if form.is_valid():
            form.save()
            backlog = Backlog.objects.get(id=backlog_id)
            backlog.save()
            backlog.refresh_from_db()
            results['update_dttm'] = localtime(backlog.update_dttm)
            results['success'] = True
        else:
            results['errors'] = form.errors.as_json()
    def post(self, request):
        result = {'outdated': False}
        team_id = request.session.get('team')
        ui_backlogs = json.loads(request.body).get("backlogs")

        if ui_backlogs and team_id:
            ui_backlogs_count = len(ui_backlogs)
            # Same query executed in the BacklogView class
            db_backlogs_count = \
                retrieve_backlogs_by_status_project_and_priority(team_id)\
                .count()

            # If the number of backlogs displayed to the user
            #  differs from the number that exists into database
            #  then user must refresh his/her page.
            if (ui_backlogs_count != db_backlogs_count):
                result['outdated'] = True
            else:
                # Otherwise we must compare the last update time
                #  of each backlog displayed to the user with those
                #  existing into database.
                for ui_backlog in ui_backlogs:
                    backlog_id = ui_backlog.get('id')
                    backlog = get_object_or_none(Backlog, id=backlog_id)

                    result['outdated'] = backlog is None
                    # Database datetime has greater precision than
                    # the one brought from ui so we add a timedelta,
                    # otherwise the page that executed the update
                    # would show the message of requested refresh.
                    ui_last_update = parse_datetime(
                        ui_backlog.get('lastUpdated'))
                    db_last_update = backlog.update_dttm

                    if not ui_last_update and db_last_update:
                        result['outdated'] = True
                    elif db_last_update:
                        ui_last_update += datetime.timedelta(
                            milliseconds=500)
                        if db_last_update > ui_last_update:
                            result['outdated'] = True
        return JsonResponse(result)
Ejemplo n.º 10
0
    def get(self, request):
        # Get the volunteers team
        team_id = request.session.get('team')
        # Redirects to the index page if there is no team associated
        if team_id is None:
            return redirect(reverse('index'))
        # From here now we have all we need to list the backlogs
        backlogs = retrieve_backlogs_by_status_project_and_priority(team_id)\
            .order_by('project__name', 'priority', 'module', 'id')
        backlog_tuple = []
        from ...backlog.forms import AcceptanceCriteriaFormSet, EstimateForm, BacklogUpdateForm
        for backlog in backlogs:
            read_only = backlog.status.id == queued_status_id()

            estimate = get_object_or_none(Estimate,
                                          team_id=team_id,
                                          backlog_id=backlog.id)
            if not estimate:
                estimate = Estimate(team_id=team_id, backlog_id=backlog.id)

            # Creates the backlog form to edit data like story descr, skills,
            # notes, etc
            form = BacklogUpdateForm(read_only=read_only,
                                     instance=backlog,
                                     prefix='backlog')
            # Creates the estimate form to edit the estimate time of the
            # specific backlog
            form_estimate = EstimateForm(instance=estimate, prefix='estimate')
            # Creates a set of forms that represents each acceptance
            # criteria linked to the specific backlog
            prefix = 'acceptance-criteria-%d' % backlog.id
            formset = AcceptanceCriteriaFormSet(instance=backlog,
                                                prefix=prefix)

            # Apeend all these information to be sent in the context
            backlog_tuple.append((backlog, form_estimate, form, formset), )

        context = RequestContext(request, {
            'backlogs': backlog_tuple,
        })
        return render(request, 'backlog/backlog_list.html', context)
Ejemplo n.º 11
0
    def get(self, request):
        # Get the volunteers team
        team_id = request.session.get('team')
        # Redirects to the index page if there is no team associated
        if team_id is None:
            return redirect(reverse('index'))
        # From here now we have all we need to list the backlogs
        backlogs = retrieve_backlogs_by_status_project_and_priority(team_id)\
            .order_by('project__name', 'priority', 'module', 'id')
        backlog_tuple = []
        from ...backlog.forms import AcceptanceCriteriaFormSet, EstimateForm, BacklogUpdateForm
        for backlog in backlogs:
            read_only = backlog.status.id == queued_status_id()

            estimate = get_object_or_none(Estimate, team_id=team_id, backlog_id=backlog.id)
            if not estimate:
                estimate = Estimate(team_id=team_id, backlog_id=backlog.id)

            # Creates the backlog form to edit data like story descr, skills,
            # notes, etc
            form = BacklogUpdateForm(read_only=read_only, instance=backlog,
                                     prefix='backlog')
            # Creates the estimate form to edit the estimate time of the
            # specific backlog
            form_estimate = EstimateForm(instance=estimate, prefix='estimate')
            # Creates a set of forms that represents each acceptance
            # criteria linked to the specific backlog
            prefix = 'acceptance-criteria-%d' % backlog.id
            formset = AcceptanceCriteriaFormSet(instance=backlog,
                                                prefix=prefix)

            # Apeend all these information to be sent in the context
            backlog_tuple.append((backlog, form_estimate, form, formset),)

        context = RequestContext(request, {'backlogs': backlog_tuple, })
        return render(request, 'backlog/backlog_list.html', context)
Ejemplo n.º 12
0
    def evulateAvgTeamVelocity(self, request, teamId):
        logger = logging.getLogger("alliance")

        # Average Team Velocity for Completed backlogs : START
        statusFlag = 'COMPLETE'
        priorityFlag = '9'
        completedBacklogs = retrieve_backlogs_by_project_status_and_priority(teamId, statusFlag, priorityFlag) \
            .order_by('project__name', 'module', 'sprint_id', 'priority', 'id')

        previousRecSprint = 0
        currentRecSprint = 0
        bgCountBySprint = 0
        totalEstimateSum = 0
        estimateValue = 0
        estimateList = []
        myTeamVelocitydict = {}

        for backlog in completedBacklogs:

            estimate = get_object_or_none(Estimate, team_id=teamId, backlog_id=backlog.id)

            if not estimate:
                estimate = Estimate(team_id=teamId, backlog_id=backlog.id)

            currentRecSprint = backlog.sprint_id
            estimateValue = estimate.estimate
            logger.debug(estimate)
            logger.debug(estimateValue)

            if estimateValue == "" or estimateValue is None:
                estimateValue = 0

            if bgCountBySprint == 0:
                previousRecSprint = currentRecSprint

            if currentRecSprint == previousRecSprint:
                bgCountBySprint += 1
                estimateList.append(int(estimateValue))
            else:
                bgCountBySprint = 1

                if previousRecSprint != None:
                    myTeamVelocitydict.update({previousRecSprint: estimateList})

                estimateList = []
                estimateList.append(int(estimateValue))

            previousRecSprint = currentRecSprint

        if previousRecSprint != None:
            myTeamVelocitydict.update({previousRecSprint: estimateList})
        logger.debug(myTeamVelocitydict)

        for key in myTeamVelocitydict:
            logger.debug(key)
            logger.debug(myTeamVelocitydict[key])
            estimateSum = sum(myTeamVelocitydict[key])
            logger.debug(estimateSum)
            totalEstimateSum += estimateSum
            logger.debug(totalEstimateSum)

        logger.debug(len(myTeamVelocitydict.keys()))
        teamVelocity = totalEstimateSum / len(myTeamVelocitydict.keys())
        return teamVelocity
Ejemplo n.º 13
0
    def get(self, request):
        logger = logging.getLogger("alliance")
        # Get the volunteers team
        team_id = request.session.get('team')
        # Redirects to the index page if there is no team associated
        if team_id is None:
            return redirect(reverse('index'))

        logger.debug(request.GET)
        results = {'success': False}
        statusResults = False
        statusFlag = request.session.get('statusFlag')
        if 'backlogStatus' in request.GET:
            logger.debug("Inside list_backlog_view backlogStatus")
            request.session['statusFlag'] = None

            if "COMPLETE" in request.GET.getlist("backlogStatus"):
                request.session['statusFlag'] = 'COMPLETE'
            else:
                request.session['statusFlag'] = 'OPEN'

            statusFlag = request.session['statusFlag']
            logger.debug(statusFlag)
            statusResults = True
        else:
            logger.debug("List backlogs default flow : backlogStatus is not avaliable in request.GET")

        priorityResults = False
        priorityFlag = request.session.get('priorityFlag')
        if 'backlogPriority' in request.GET:
            logger.debug("Inside list_backlog_view backlogPriority")
            request.session['priorityFlag'] = None

            if "3" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '3'
            elif "4" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '4'
            elif "5" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '5'
            elif "6" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '6'
            elif "7" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '7'
            elif "8" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '8'
            elif "9" in request.GET.getlist("backlogPriority"):
                request.session['priorityFlag'] = '9'
            else:
                request.session['priorityFlag'] = '2'

            priorityFlag = request.session['priorityFlag']
            logger.debug(priorityFlag)
            priorityResults = True
        else:
             logger.debug("List backlogs default flow : backlogPriority is not avaliable in request.GET")
			 
        if statusResults and priorityResults:
            results = {'success': True}
            return JsonResponse(results)

        # Sprint Velocity and Average Team Velocity : START
        acceptedEstimateVel = self.evulateAcceptedVelocity(request, team_id)
        teamVelocity = self.evulateAvgTeamVelocity(request, team_id)
        logger.debug("Velocity in list_backlogs_view !!!!!! ")

        logger.debug(acceptedEstimateVel)
        request.session['acceptedVelocity'] = acceptedEstimateVel

        logger.debug(teamVelocity)
        request.session['teamVelocity'] = teamVelocity
        # Sprint Velocity and Average Team Velocity : END

        # From here now we have all we need to list the backlogs
        backlogs = retrieve_backlogs_by_project_status_and_priority(team_id, statusFlag, priorityFlag)\
            .order_by('project__name', 'priority', 'module', 'id')
		
        backlog_tuple = []
        from ...backlog.forms import AcceptanceCriteriaFormSet, EstimateForm, BacklogUpdateForm
        for backlog in backlogs:
            read_only = backlog.status.id == queued_status_id()

            estimate = get_object_or_none(Estimate, team_id=team_id, backlog_id=backlog.id)
            if not estimate:
                estimate = Estimate(team_id=team_id, backlog_id=backlog.id)

            # Creates the backlog form to edit data like story descr, skills,
            # notes, etc
            form = BacklogUpdateForm(read_only=read_only, instance=backlog, 
                                                prefix='backlog')

            # Creates the estimate form to edit the estimate time of the
            # specific backlog
            form_estimate = EstimateForm(instance=estimate, prefix='estimate')
            # Creates a set of forms that represents each acceptance
            # criteria linked to the specific backlog
            prefix = 'acceptance-criteria-%d' % backlog.id
            formset = AcceptanceCriteriaFormSet(instance=backlog,
                                                prefix=prefix)

            # Apeend all these information to be sent in the context
            backlog_tuple.append((backlog, form_estimate, form, formset),)

        page = request.GET.get('page', 1)
        paginator = Paginator(backlog_tuple,5)
        request.session['paginatorCount'] = paginator.count
        try:
            backlog_tuple_list = paginator.page(page)
        except PageNotAnInteger:
            backlog_tuple_list = paginator.page(1)
        except EmptyPage:
            backlog_tuple_list = paginator.page(paginator.num_pages)

        context = RequestContext(request, {'backlogs': backlog_tuple_list, })
        return render(request, 'backlog/backlog_list.html', context)
Ejemplo n.º 14
0
def status_id(name):
    status = get_object_or_none(Status, category='backlog', name=name)
    if status:
        return status.id
    return None
Ejemplo n.º 15
0
def status_id(name):
    status = get_object_or_none(Status, category='backlog', name=name)
    if status:
        return status.id
    return None