Exemple #1
0
def reject_user_timesheet(request, user_id):
    """
    This allows admins to reject all entries, instead of just one
    """
    form = YearMonthForm(request.GET or request.POST)
    user = User.objects.get(pk=user_id)
    if form.is_valid():
        from_date, to_date = form.save()
        entries = Entry.no_join.filter(status=Entry.VERIFIED, user=user,
            start_time__gte=from_date, end_time__lte=to_date)
        if request.POST.get('yes'):
            if entries.exists():
                count = entries.count()
                entries.update(status=Entry.UNVERIFIED)
                msg = 'You have rejected %d previously verified entries.' \
                    % count
            else:
                msg = 'There are no verified entries to reject.'
            messages.info(request, msg)
        else:
            return render(request, 'timepiece/user/timesheet/reject.html', {
                'date': from_date,
                'timesheet_user': user
            })
    else:
        msg = 'You must provide a month and year for entries to be rejected.'
        messages.error(request, msg)

    url = reverse('view_user_timesheet', args=(user_id,))
    return HttpResponseRedirect(url)
Exemple #2
0
def reject_user_timesheet(request, user_id):
    """
    This allows admins to reject all entries, instead of just one
    """
    form = YearMonthForm(request.GET or request.POST)
    user = User.objects.get(pk=user_id)
    if form.is_valid():
        from_date, to_date = form.save()
        entries = Entry.no_join.filter(status=Entry.VERIFIED,
                                       user=user,
                                       start_time__gte=from_date,
                                       end_time__lte=to_date)
        if request.POST.get('yes'):
            if entries.exists():
                count = entries.count()
                entries.update(status=Entry.UNVERIFIED)
                msg = 'You have rejected %d previously verified entries.' \
                    % count
            else:
                msg = 'There are no verified entries to reject.'
            messages.info(request, msg)
        else:
            return render(request, 'timepiece/user/timesheet/reject.html', {
                'date': from_date,
                'timesheet_user': user
            })
    else:
        msg = 'You must provide a month and year for entries to be rejected.'
        messages.error(request, msg)

    url = reverse('view_user_timesheet', args=(user_id, ))
    return HttpResponseRedirect(url)
Exemple #3
0
 def get_context_data(self, **kwargs):
     context = super(ProjectTimesheet, self).get_context_data(**kwargs)
     project = self.object
     year_month_form = YearMonthForm(self.request.GET or None)
     if self.request.GET and year_month_form.is_valid():
         from_date, to_date = year_month_form.save()
     else:
         date = utils.add_timezone(datetime.datetime.today())
         from_date = utils.get_month_start(date).date()
         to_date = from_date + relativedelta(months=1)
     entries_qs = Entry.objects
     entries_qs = entries_qs.timespan(from_date,
                                      span='month').filter(project=project)
     extra_values = ('start_time', 'end_time', 'comments', 'seconds_paused',
                     'id', 'location__name', 'project__name',
                     'activity__name', 'status')
     month_entries = entries_qs.date_trunc('month', extra_values)
     total = entries_qs.aggregate(hours=Sum('hours'))['hours']
     user_entries = entries_qs.order_by().values(
         'user__first_name',
         'user__last_name').annotate(sum=Sum('hours')).order_by('-sum')
     activity_entries = entries_qs.order_by().values(
         'activity__name').annotate(sum=Sum('hours')).order_by('-sum')
     context.update({
         'project': project,
         'year_month_form': year_month_form,
         'from_date': from_date,
         'to_date': to_date - relativedelta(days=1),
         'entries': month_entries,
         'total': total,
         'user_entries': user_entries,
         'activity_entries': activity_entries,
     })
     return context
Exemple #4
0
    def get_context_data(self, **kwargs):
        context = super(ProjectTimesheet, self).get_context_data(**kwargs)
        project = self.object
        year_month_form = YearMonthForm(self.request.GET or None)
        if self.request.GET and year_month_form.is_valid():
            from_date, to_date = year_month_form.save()
        else:
            date = utils.add_timezone(datetime.datetime.today())
            from_date = utils.get_month_start(date).date()
            to_date = from_date + relativedelta(months=1)
        entries_qs = Entry.objects
        entries_qs = entries_qs.timespan(from_date, span='month').filter(
            project=project
        )
        extra_values = ('start_time', 'end_time', 'comments', 'seconds_paused',
                        'id', 'location__name', 'project__name',
                        'activity__name', 'status')

        month_entries = entries_qs.date_trunc('month', extra_values).order_by('start_time')
        if month_entries:
            format_totals(month_entries, "hours")

        total = entries_qs.aggregate(hours=Sum('hours'))['hours']
        if total:
            total = "{0:.2f}".format(total)
        user_entries = entries_qs.order_by().values('user__first_name', 'user__last_name')
        user_entries = user_entries.annotate(sum=Sum('hours')).order_by('-sum')
        if user_entries:
            format_totals(user_entries)
        activity_entries = entries_qs.order_by().values('activity__name')
        activity_entries = activity_entries.annotate(sum=Sum('hours')).order_by('-sum')
        if activity_entries:
            format_totals(activity_entries)

        context.update({
            'project': project,
            'year_month_form': year_month_form,
            'from_date': from_date,
            'to_date': to_date - relativedelta(days=1),
            'entries': month_entries,
            'total': total,
            'user_entries': user_entries,
            'activity_entries': activity_entries,
        })
        return context