Пример #1
0
    def get(self, request, **kwargs):
        self.get_params()

        groups = ['designers', 'programmers', 'educationaltechnologists',
                  'video', 'management']
        report = WeeklySummaryReportCalculator(groups)
        data = report.calc(self.week_start, self.week_end)

        start_str = self.week_start.strftime('%Y%m%d')
        end_str = self.week_end.strftime('%Y%m%d')
        filename = "weekly-summary-report-%s-%s" % (start_str, end_str)

        column_names = ['Project'] + [x.capitalize() for x in groups] + \
                       ['Project Total']

        rows = []
        for project in data['project_times']:
            row = [project['name']]

            for grouptime in project['group_times']:
                row.append(interval_to_hours(grouptime))

            row.append(interval_to_hours(project['total_time']))
            rows.append(row)

        generator = ReportFileGenerator()
        return generator.generate(
            column_names, rows, filename, self.request.GET.get('format'))
Пример #2
0
 def test_interval_to_hours(self):
     self.assertEqual(interval_to_hours(timedelta(0)), 0)
     self.assertEqual(interval_to_hours(timedelta(hours=1)), 1)
     self.assertEqual(interval_to_hours(timedelta(hours=1, seconds=1800)),
                      1.5)
     self.assertEqual(
         interval_to_hours(timedelta(days=1, hours=1, seconds=1800)), 25.5)
Пример #3
0
 def test_interval_to_hours(self):
     self.assertEqual(
         utils.interval_to_hours(timedelta(0)),
         0)
     self.assertEqual(
         utils.interval_to_hours(timedelta(hours=1)),
         1)
     self.assertEqual(
         utils.interval_to_hours(timedelta(hours=1, seconds=1800)),
         1.5)
     self.assertEqual(
         utils.interval_to_hours(timedelta(days=1, hours=1, seconds=1800)),
         25.5)
Пример #4
0
    def get(self, request, *args, **kwargs):
        self.get_params()

        calc = ActiveProjectsCalculator()
        data = calc.calc(self.interval_start, self.interval_end)

        # Find dates for displaying to the user
        start_str = self.interval_start.strftime('%Y%m%d')
        end_str = self.interval_end.strftime('%Y%m%d')
        filename = "active-projects-%s-%s" % (start_str, end_str)

        column_names = [
            'ID', 'Name', 'Project Number', 'Last worked on', 'Project Status',
            'Caretaker', 'Hours logged'
        ]

        rows = [[
            x.pid, x.name, x.projnum, x.last_worked_on, x.status,
            x.caretaker_user,
            interval_to_hours(x.hours_logged)
        ] for x in data['projects']]

        generator = ReportFileGenerator()
        return generator.generate(column_names, rows, filename,
                                  self.request.GET.get('format'))
Пример #5
0
    def get(self, request, *args, **kwargs):
        days = 31
        if self.request.GET.get('days', None):
            days = int(self.request.GET['days'])

        calc = ActiveProjectsCalculator()
        data = calc.calc(days)

        # Find dates for displaying to the user
        now = datetime.now()
        interval_start = now + timedelta(days=-days)
        interval_end = now
        start_str = interval_start.strftime('%Y%m%d')
        end_str = interval_end.strftime('%Y%m%d')
        filename = "active-projects-%s-%s" % (start_str, end_str)

        column_names = ['ID', 'Name', 'Project Number', 'Last worked on',
                        'Project Status', 'Caretaker', 'Hours logged']

        rows = [[x.pid, x.name, x.projnum, x.last_worked_on, x.status,
                 x.caretaker, interval_to_hours(x.hours_logged)]
                for x in data['projects']]

        generator = ReportFileGenerator()
        return generator.generate(
            column_names, rows, filename, self.request.GET.get('format'))
Пример #6
0
    def get(self, request, pk):
        p = get_object_or_404(Project, pk=pk)

        if request.GET.get('interval_start') and \
           request.GET.get('interval_end'):
            interval_start = pytz.timezone(settings.TIME_ZONE).localize(
                datetime.combine(
                    parse_date(request.GET.get('interval_start')),
                    datetime.min.time()))
            interval_end = pytz.timezone(settings.TIME_ZONE).localize(
                datetime.combine(
                    parse_date(request.GET.get('interval_end')),
                    datetime.max.time()))
            actual_times = p.actual_times_between(interval_start, interval_end)
        else:
            actual_times = p.all_actual_times()

        filename = "project-hours-%d" % p.pid

        column_names = [
            'iid', 'item title', 'type', 'owner', 'assigned_to',
            'priority', 'target_date', 'estimated_time',
            'mid', 'milestone', 'user', 'hours', 'completed at']

        rows = [[a.item.iid, a.item.title, a.item.type,
                 a.item.owner_user.userprofile.username,
                 a.item.assigned_user.userprofile.username,
                 a.item.priority, a.item.target_date,
                 interval_to_hours(a.item.estimated_time),
                 a.item.milestone.mid, a.item.milestone.name,
                 a.user.userprofile.username, interval_to_hours(a.actual_time),
                 a.completed]
                for a in actual_times]

        generator = ReportFileGenerator()
        return generator.generate(
            column_names, rows, filename,
            self.request.GET.get('format', 'csv'))
Пример #7
0
    def get(self, request, pk):
        p = get_object_or_404(Project, pk=pk)

        if request.GET.get('interval_start') and \
           request.GET.get('interval_end'):
            interval_start = pytz.timezone(settings.TIME_ZONE).localize(
                datetime.combine(parse_date(request.GET.get('interval_start')),
                                 datetime.min.time()))
            interval_end = pytz.timezone(settings.TIME_ZONE).localize(
                datetime.combine(parse_date(request.GET.get('interval_end')),
                                 datetime.max.time()))
            actual_times = p.actual_times_between(interval_start, interval_end)
        else:
            actual_times = p.all_actual_times()

        filename = "project-hours-%d" % p.pid

        column_names = [
            'iid', 'item title', 'type', 'owner', 'assigned_to', 'priority',
            'target_date', 'estimated_time', 'mid', 'milestone', 'user',
            'hours', 'completed at'
        ]

        rows = [[
            a.item.iid, a.item.title, a.item.type,
            a.item.owner_user.userprofile.username,
            a.item.assigned_user.userprofile.username, a.item.priority,
            a.item.target_date,
            interval_to_hours(a.item.estimated_time), a.item.milestone.mid,
            a.item.milestone.name, a.user.userprofile.username,
            interval_to_hours(a.actual_time), a.completed
        ] for a in actual_times]

        generator = ReportFileGenerator()
        return generator.generate(column_names, rows, filename,
                                  self.request.GET.get('format', 'csv'))
Пример #8
0
    def get(self, request, *args, **kwargs):
        self.get_params()
        calc = StaffReportCalculator(
            UserProfile.objects.filter(status='active', grp=False))
        data = calc.calc(self.interval_start, self.interval_end)

        start_str = self.interval_start.strftime('%Y%m%d')
        end_str = self.interval_end.strftime('%Y%m%d')
        filename = "staff-report-%s-%s" % (start_str, end_str)

        column_names = ['Staff Member', 'Hours Logged']

        rows = [[x['user'].fullname,
                 interval_to_hours(x['user_time'])] for x in data]

        generator = ReportFileGenerator()
        return generator.generate(column_names, rows, filename,
                                  self.request.GET.get('format'))
Пример #9
0
    def get(self, request, *args, **kwargs):
        self.get_params()
        calc = StaffReportCalculator(
            UserProfile.objects.filter(status='active', grp=False))
        data = calc.calc(self.interval_start, self.interval_end)

        start_str = self.interval_start.strftime('%Y%m%d')
        end_str = self.interval_end.strftime('%Y%m%d')
        filename = "staff-report-%s-%s" % (start_str, end_str)

        column_names = ['Staff Member', 'Hours Logged']

        rows = [
            [x['user'].fullname, interval_to_hours(x['user_time'])]
            for x in data]

        generator = ReportFileGenerator()
        return generator.generate(
            column_names, rows, filename, self.request.GET.get('format'))
Пример #10
0
    def get(self, request, *args, **kwargs):
        self.get_params()

        calc = StaffReportCalculator(['designers', 'programmers', 'video',
                                      'educationaltechnologists',
                                      'management'])
        data = calc.calc(self.week_start, self.week_end)

        start_str = self.week_start.strftime('%Y%m%d')
        end_str = self.week_end.strftime('%Y%m%d')
        filename = "staff-report-%s-%s" % (start_str, end_str)

        column_names = ['Staff Member', 'Group', 'Hours Logged']

        rows = [[x['user'].fullname, x['group_name'],
                 interval_to_hours(x['user_time'])]
                for x in data['users']]

        generator = ReportFileGenerator()
        return generator.generate(
            column_names, rows, filename, self.request.GET.get('format'))
Пример #11
0
def interval_to_hours(duration):
    return utils.interval_to_hours(duration)
Пример #12
0
def interval_to_hours(duration):
    return utils.interval_to_hours(duration)
Пример #13
0
 def body(self):
     hours = interval_to_hours(self.a.actual_time)
     return "{:.2f} hour{}".format(hours, pluralize(hours))