def info(request): (context, some_data) = data_existence(request) user = request.user workspace = request.user.profile.workspace context.update({ 'selection': user.id, 'workspace': workspace, 'topic': 'info' }) return render(request, 'dashboard/user_info.html', context)
def time(request): (context, some_data) = data_existence(request) workspace = request.user.profile.workspace if some_data: user = request.user startdate = STARTDATE.isoformat() enddate = TODAY.isoformat() form = DateRangeForm(initial={ 'start_date': startdate, 'end_date': enddate }) context.update({'form': form, 'selection': user.id, 'topic': 'time'}) return render(request, 'dashboard/user_time.html', context)
def new(request): (context, some_data) = data_existence(request) profile = request.user.profile workspace = profile.workspace if request.method == 'POST': form = TaskForm(workspace, profile, request.POST) if form.is_valid(): new_task = form.save(commit=False) new_task.workspace = workspace new_task.save() return redirect(reverse_lazy('task_new')) else: form = TaskForm(workspace, profile, initial={'owner': profile.user.id}) context.update({'form': form, 'form_action': reverse_lazy('task_new')}) return render(request, 'dashboard/task_new.html', context)
def comparison_table(request): try: tasks = json.loads(request.GET.get('tasks')) except: tasks = None (context, some_data) = data_existence(request) data = [] if some_data and tasks: workspace = request.user.profile.workspace task_list = apps.get_model('task', 'Task').objects.filter(workspace=workspace, pk__in=tasks) for i in task_list: if not (i.cost_estimate or i.additional_cost): cost = '' else: cost = (i.cost_estimate or 0) + (i.additional_cost or 0) if i.start_date: start = i.start_date.isoformat() else: start = None if i.end_date: end = i.end_date.isoformat() else: end = None tmp = { 'name': unicode(i), 'start': start, 'end': end, 'time': i.time_estimate or '', 'cost': cost, 'actual_start': '', 'actual_end': '', 'actual_time': '', 'actual_cost': '' } data_list = DailyDataPerTask.objects.filter( workspace=workspace, task=i).order_by('date') if len(data_list) > 0: tmp['actual_start'] = data_list.first().date.isoformat() tmp['actual_end'] = data_list.last().date.isoformat() tmp['actual_time'] = (data_list.aggregate( Sum('duration'))['duration__sum']).total_seconds() / 3600 tmp['actual_cost'] = float( data_list.aggregate(Sum('cost'))['cost__sum']) or '' data.append(tmp) context['data'] = data return render(request, 'dashboard/task_comparison_table.html', context)
def cost(request): (context, some_data) = data_existence(request) if some_data: workspace = request.user.profile.workspace startdate = STARTDATE.isoformat() enddate = TODAY.isoformat() form = DateRangeForm(initial={ 'start_date': startdate, 'end_date': enddate }) context.update({ 'form': form, 'topic': 'cost', 'legend1': _('Cost per project'), 'legend2': _('Cumulated cost per project') }) return render(request, 'dashboard/task_chart.html', context)
def time_per_user(request): startdate = request.GET.get('startdate') enddate = request.GET.get('enddate') user = request.GET.get('user') (context, some_data) = data_existence(request) data = {} if some_data and user: workspace = request.user.profile.workspace queryset = DailyDataPerTaskPerUser.objects.filter(workspace=workspace, profile__user=user, task__monitored=True) queryset = queryset_filter(queryset, None, startdate, enddate) (array, line_options) = over_time(workspace, queryset, 'duration', DailyDataPerTaskPerUser) line_options['isStacked'] = 'true' data['data'] = array data['options'] = line_options return HttpResponse(json.dumps(data), content_type="application/json")
def time_per_project(request, topic='duration'): startdate = request.GET.get('startdate') enddate = request.GET.get('enddate') try: tasks = json.loads(request.GET.get('tasks')) except: tasks = None (context, some_data) = data_existence(request) data = {} if some_data: workspace = request.user.profile.workspace queryset = DailyDataPerTask.objects.filter(workspace=workspace, task__monitored=True) queryset = queryset_filter(queryset, tasks, startdate, enddate) (array, line_options) = over_time(workspace, queryset, topic, DailyDataPerTask) data['data'] = array data['options'] = line_options return HttpResponse(json.dumps(data), content_type="application/json")
def overview(request): (context, some_data) = data_existence(request) workspace = request.user.profile.workspace context['users_number'] = Profile.objects.filter( user__is_active=True, workspace=workspace).count() if some_data: startd = STARTDATE queryset = DailyDataPerTaskPerUser.objects.filter(task__monitored=True, workspace=workspace) queryset = queryset_filter(queryset, startdate=startd) context['time_consumption'] = sum_and_sort_time(queryset, limit=3) context['resources_involved'] = resources_involved(queryset, limit=3) context['active_users'] = active_users(queryset) # pie chart #(pie_data, pie_options) = pie_total_time(queryset) #context['chart1_data'] = pie_data #context['chart1_options'] = pie_options context['legend1'] = _('Time repartition') context['legend2'] = _('Cost repartition') return render(request, 'dashboard/overview.html', context)
def total_time_per_project(request, topic='duration'): try: tasks = json.loads(request.GET.get('tasks')) except: tasks = None (context, some_data) = data_existence(request) data = {'data':[['Task', 'total time (hours)'],]} if some_data and tasks: workspace = request.user.profile.workspace task_list = apps.get_model('task', 'Task').objects.filter(workspace=workspace, pk__in=tasks) for i in task_list: data_list = DailyDataPerTask.objects.filter(workspace=workspace, task=i) if len(data_list) > 0: if topic == 'duration': tmp = [ unicode(i), (data_list.aggregate(Sum(topic))['%s__sum'%topic] ).total_seconds()/3600] elif topic == 'cost': tmp = [unicode(i), int(data_list.aggregate(Sum(topic))['%s__sum'%topic])] data['data'].append(tmp) data['options'] = {'is3D':'true', 'backgroundColor':'transparent'} return HttpResponse(json.dumps(data), content_type="application/json")
def info(request): (context, some_data) = data_existence(request) context.update({'topic': 'info'}) return render(request, 'dashboard/task_info.html', context)
def comparison(request): (context, some_data) = data_existence(request) context.update({'topic': 'control'}) return render(request, 'dashboard/task_comparison.html', context)