def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) data_date = get_report_date(self.request) data = self.get_timeline_data(data_date) ctx.update({ 'report_date': data_date, 'data': data, }) return ctx
def weekly_summary(request, full=False): report_date = utils.get_report_date(request) root_categories = Category.objects.filter(user=request.user, parent=None) dates = utils.get_dates_for_week_of(report_date) totals_by_root_cat = [ (cat, utils.get_totals_for_dates(cat, dates, full=full)) for cat in root_categories if full or cat.show_in_selective_reports ] context = ReportsContext(request, { 'report_date': report_date, 'root_categories': root_categories, 'dates': dates, 'totals_by_root_cat': totals_by_root_cat, }) return render_to_response('reports/summary_base.html', {}, context)
def intervals(request): report_date = utils.get_report_date(request) year, month, day = report_date.year, report_date.month, report_date.day tz = report_date.tzinfo nowtz = now().astimezone(tz=tz) is_today = utils.date_is_today(report_date) root_categories = Category.objects.filter(user=request.user, parent=None) category_width = _get_category_width(root_categories.count()) user_intervals = Interval.user_intervals(request.user) def timedelta_height(td): hours = td.total_seconds() / 3600 height = PX_PER_HOUR * hours return int(height) min_datetime = datetime(year, month, day, 0, 0, 0, 0, tz) max_datetime = datetime(year, month, day, 23, 59, 59, 0, tz) all_intervals = user_intervals.filter( start__range=(min_datetime, max_datetime), ).order_by('start') if all_intervals.count() > 0: min_interval_time = all_intervals[0].start.astimezone(tz=tz) max_interval_time = all_intervals.latest('start').start.astimezone(tz=tz) if max_interval_time < nowtz: max_interval_time = nowtz else: min_interval_time = datetime(year, month, day, 8, 0, 0, 0, tz) max_interval_time = datetime(year, month, day, 18, 0, 0, 0, tz) def time_top(dt): temp_min_time = min_interval_time.replace(minute=0, second=0) offset = dt - temp_min_time return timedelta_height(offset) time_cells = [] for hour in range(min_interval_time.hour, max_interval_time.hour+1): start_time = datetime(year, month, day, hour, 0, 0, 0, tz) an_hour = timedelta(hours=1) time_cells.append({ 'height': timedelta_height(an_hour), 'top': time_top(start_time), 'value': start_time.strftime(TIME_FORMAT), 'classes': 'time-cell', }) if is_today: time_cells.append({ 'height': 1, 'top': time_top(nowtz), 'value': '', 'classes': 'current-time', }) root_category_cells = [] for cat in root_categories: interval_list = [] for interval in all_intervals: if interval.timer.category.root_parent == cat: interval_list.append(interval) cells = [] for interval in interval_list: start = interval.start.astimezone(tz=tz).strftime(TIME_FORMAT) end = '[active]' if interval.end is not None: end = interval.end.astimezone(tz=tz).strftime(TIME_FORMAT) title = '{0} ({1}-{2})'.format( interval.timer.hierarchy_display, start, end) cells.append({ 'height': timedelta_height(interval.length), 'top': time_top(interval.start.astimezone(tz=tz)), 'interval': interval, 'timer': interval.timer, 'title': title, 'start': start, 'end': end, }) root_category_cells.append((cat, cells)) context = { 'report_date': report_date, 'category_width': category_width, 'total_height': timedelta_height(max_interval_time - min_interval_time), 'time_cells': time_cells, 'root_category_cells': root_category_cells, } context = ReportsContext( request, context, ) return render_to_response('reports/intervals.html', {}, context)