diff --git a/rowers/.#models.py b/rowers/.#models.py deleted file mode 100644 index 11d1b7d9..00000000 --- a/rowers/.#models.py +++ /dev/null @@ -1 +0,0 @@ -E408191@CZ27LT9RCGN72.21348:1542056188 \ No newline at end of file diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 2b023b68..183ffcb9 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -999,7 +999,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', maxhr = np.nan_to_num(maxhr) averagehr = np.nan_to_num(averagehr) - duplicate = True + duplicate = False t = datetime.datetime.strptime(duration,"%H:%M:%S.%f") delta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) @@ -1007,7 +1007,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', workoutenddatetime = workoutstartdatetime+delta # check for duplicate start times and duration - ws = Workout.objects.filter(user=r,date=workoutdate).exclude( + ws = Workout.objects.filter(user=r,date=workoutdate,duplicate=False).exclude( startdatetime__gt=workoutenddatetime ) @@ -1019,7 +1019,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', enddatetime = ww.startdatetime+delta if enddatetime > workoutstartdatetime: ws2.append(ww) - + + if (len(ws2) != 0): message = "Warning: This workout overlaps with an existing one and was marked as a duplicate" duplicate = True diff --git a/rowers/models.py b/rowers/models.py index 008f8329..dfa1726a 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -2182,7 +2182,42 @@ def auto_delete_file_on_delete(sender, instance, **kwargs): if instance.csvfilename+'.gz': if os.path.isfile(instance.csvfilename+'.gz'): os.remove(instance.csvfilename+'.gz') - + +@receiver(models.signals.post_delete,sender=Workout) +def update_duplicates_on_delete(sender, instance, **kwargs): + if instance.id: + + duplicates = Workout.objects.filter( + user=instance.user,date=instance.date, + duplicate=True) + + for d in duplicates: + t = d.duration + delta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) + workoutenddatetime = d.startdatetime+delta + ws = Workout.objects.filter( + user=d.user,date=d.date, + ).exclude( + pk__in=[instance.pk,d.pk] + ).exclude( + startdatetime__gt=workoutenddatetime + ) + + + ws2 = [] + + for ww in ws: + t = ww.duration + delta = datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second) + enddatetime = ww.startdatetime+delta + if enddatetime > d.startdatetime: + ws2.append(ww) + + if len(ws2) == 0: + d.duplicate=False + d.save() + + # Delete stroke data from the database when a workout is deleted @receiver(models.signals.post_delete,sender=Workout) def auto_delete_strokedata_on_delete(sender, instance, **kwargs): diff --git a/rowers/views.py b/rowers/views.py index 18461b6f..7ffbb025 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -9859,6 +9859,11 @@ def workout_edit_view(request,id=0,message="",successmessage=""): except KeyError: rankingpiece =- Workout.objects.get(id=id).rankingpiece + try: + duplicate = form.cleaned_data['duplicate'] + except KeyError: + duplicate = Workout.objects.get(id=id).duplicate + if private: privacy = 'private' else: @@ -9898,6 +9903,7 @@ def workout_edit_view(request,id=0,message="",successmessage=""): row.duration = duration row.distance = distance row.boattype = boattype + row.duplicate = duplicate row.privacy = privacy row.rankingpiece = rankingpiece row.timezone = thetimezone