Example #1
0
def handle_time_tracking(request):
    """
    Handles button presses for time tracking.

    Add a new time track entry, or finish an existing one.
    """
    if request.POST:
        if request.POST.get("add_activity_button"):
            new_name = request.POST.get("new_name")
            new_comment = request.POST.get("new_comment")

            TimeEntry.objects.create(user=request.user, name=new_name, comment=new_comment)

            additional_context = {
                "info_msg": "Added new activity."
            }
            add_to_context(request.session, additional_context)
        elif request.POST.get("finish_activity_button"):
            activity_id = request.POST.get("finish_activity_button")
            entry = get_object_or_404(TimeEntry, id=activity_id)

            entry.done = True
            entry.save()

            additional_context = {
                "info_msg": "Finished activity."
            }
            add_to_context(request.session, additional_context)

    return HttpResponseRedirect(reverse('timetrack:current_activities'))
Example #2
0
def logout_user(request):
    logout(request)

    if not request.user.is_authenticated():
        additional_context = {"info_msg": "You are now logged out."}
    else:
        additional_context = {"error_msg": "Something went wrong. Try again."}

    add_to_context(request.session, additional_context)

    prev = request.GET.get("next")
    if prev:
        return HttpResponseRedirect(prev)
    else:
        return HttpResponseRedirect(reverse("index"))
Example #3
0
def handle_selection(request):
    """
    Handles selection of a user's activities depending on the button they pressed.

    Generate a CSV file for the user to download.
    This CSV file can then be imported to e.g. Google Sheets.

    Taken from https://docs.djangoproject.com/en/1.8/howto/outputting-csv/

    Or delete selected activities.
    """
    if request.POST:
        selected_activity_ids = request.POST.getlist('activity_id_selection')
        activities = [get_object_or_404(TimeEntry, id=activity_id) for activity_id in selected_activity_ids]

        if request.POST.get('export_button'):
            response = HttpResponse(content_type="text/csv")
            response["Content-Disposition"] = "attachment; filename='tracked_activity_times.csv'"

            writer = csv.writer(response, delimiter="\t")
            for activity in activities:
                formatted_duration = str(activity.duration()).split(".")[0]
                writer.writerow([activity.started.strftime(DATETIME_FORMAT),
                                 activity.ended.strftime(DATETIME_FORMAT),
                                 formatted_duration,
                                 activity.name,
                                 activity.comment])

            return response
        elif request.POST.get('delete_button'):
            for activity in activities:
                activity.delete()

                additional_context = {
                    "info_msg": "Deleted selected entries."
                }
                add_to_context(request.session, additional_context)

    return HttpResponseRedirect(reverse('timetrack:user_activities'))
Example #4
0
def login_user(request):
    if request.POST:
        uname = request.POST.get("username")
        passwd = request.POST.get("password")

        user = authenticate(username=uname, password=passwd)
        if user is not None and user.is_active:
            login(request, user)

            additional_context = {"info_msg": "Successfully logged in."}
            add_to_context(request.session, additional_context)

            prev = request.POST["next"]
            if prev:
                return HttpResponseRedirect(prev)
            else:
                return HttpResponseRedirect(reverse("index"))
        else:
            additional_context = {"error_msg": "Invalid login data."}
            add_to_context(request.session, additional_context)

    return HttpResponseRedirect(reverse("login"))