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'))
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"))
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'))
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"))