podusowski/spartan

View on GitHub
activities/strength/strength_workout.py

Summary

Maintainability
A
0 mins
Test Coverage
import logging

import django.utils.timezone

from training import models
from . import activity


def start_workout(user):
    workout = models.Workout.objects.create(user=user, activity_type=activity.TYPE)
    return workout.id


def _finish_active_excercise(workout):
    try:
        current_excercise = workout.excercise_set.latest('pk')
        current_excercise.time_finished = django.utils.timezone.now()
        current_excercise.save()
    except models.Excercise.DoesNotExist:
        logging.debug("nothing to finish - no active excercise yet")


def finish_workout(request, workout_id):
    workout = models.Workout.objects.get(pk=workout_id)
    workout.finish()
    workout.save()

    _finish_active_excercise(workout)


def add_excercise(user, workout_id, name):
    workout = models.Workout.objects.get(pk=workout_id, user=user)

    _finish_active_excercise(workout)

    excercise = workout.excercise_set.create(name=name)
    try:
        workout.start()
    except:
        pass
    workout.save()

    excercise.time_started = django.utils.timezone.now()
    excercise.save()


def add_reps(user, excercise_id, reps):
    s = models.Excercise.objects.get(pk=excercise_id, workout__user=user)
    s.reps_set.create(reps=reps)

    s.time_updated = django.utils.timezone.now()
    s.save()
    return s.workout.id


def start_timer(user, excercise_id):
    excercise = models.Excercise.objects.get(pk=excercise_id, workout__user=user)
    excercise.timers_set.create(time_started=django.utils.timezone.now())
    return excercise.workout.id


def stop_timer(user, excercise_id):
    excercise = models.Excercise.objects.get(pk=excercise_id, workout__user=user)
    timer = excercise.timers_set.latest('pk')
    timer.duration = django.utils.timezone.now() - timer.time_started
    timer.save()
    return excercise.workout.id


def undo(user, workout_id):
    workout = models.Workout.objects.get(pk=workout_id, user=user)

    if workout.excercise_set.count() == 0:
        return

    current_excercise = workout.excercise_set.latest('pk')

    if current_excercise.reps_set.count() > 0:
        latest_set = current_excercise.reps_set.latest('pk')
        latest_set.delete()
    else:
        current_excercise.delete()