Esempio n. 1
0
def scrumboard_chart_burndown(sprint):
    from scrumboard.models import Event
    timetable = Event.get_events_timetable(sprint)

    from datetime import timedelta, date

    def daterange(start_date, end_date):
        for n in range(int((end_date - start_date).days)):
            yield start_date + timedelta(n)

    def iso_date(single_date):
        return single_date.strftime("%Y-%m-%d")

    tomorrow = date.today() + timedelta(days=1)

    labels1 = [iso_date(single_date) for single_date in daterange(sprint.start_date, tomorrow)]  # TODO: if not single_date in sprint.excluded_days()
    labels2 = [iso_date(single_date) for single_date in daterange(tomorrow, sprint.end_date + timedelta(days=1))]

    from itertools import accumulate
    dataset_burndown = list(accumulate([sum(timetable[l]) for l in labels1]))

    sprint_length = int((sprint.end_date - sprint.start_date).days)  # TODO: sprint.length() that takes free days into account
    dataset_prognosis = [sprint.capacity*(1.0 - x/sprint_length) for x in range(sprint_length)] + [0]

    return {'sprint': sprint,
            'labels': labels1 + labels2,
            'dataset_burndown': dataset_burndown,
            'dataset_prognosis': dataset_prognosis}
Esempio n. 2
0
    def test_events_can_be_fetched_ordered_by_date(self):
        more_changes = [("2015-05-01", 3), ("2015-05-02", 5), ("2015-05-09", -8)]

        events = self.create_events(self.sprint, self.changes + more_changes)

        assert len(events) == len(Event.get_events(self.sprint))

        timetable = Event.get_events_timetable(self.sprint)
        assert 2 == len(timetable["2015-05-01"])
        assert -2 == sum(timetable["2015-05-01"])