diff --git a/rowers/forms.py b/rowers/forms.py index 4d6740c3..311f1fa5 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1213,6 +1213,7 @@ class ForceCurveMultipleCompareForm(forms.Form): bulkactions = ( ('remove','remove'), ('export','export'), + ('rower assign','rower assign'), ) destinations = ( ('C2','C2'), @@ -1230,6 +1231,15 @@ class ExportChoices(forms.Form): choices=destinations, label='Destination', required=False, initial='strava' ) +class AssignChoices(forms.Form): + remove_workout = forms.BooleanField(initial=False, required=False) + destination = forms.ModelMultipleChoiceField(label='Rowers', required=False, + queryset=Rower.objects.filter(), widget=forms.CheckboxSelectMultiple()) + + def __init__(self, *args, **kwargs): + super(AssignChoices, self).__init__(*args, **kwargs) + self.fields['destination'].queryset = Rower.objects.filter() + class WorkoutMultipleCompareForm(forms.Form): workouts = forms.ModelMultipleChoiceField( queryset=Workout.objects.filter(), diff --git a/rowers/tasks.py b/rowers/tasks.py index dbf562d4..bb4f04bd 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -324,6 +324,50 @@ def summaryfromsplitdata(splitdata, data, filename, sep='|', workouttype='rower' return sums, sa, results +@app.task +def handle_assignworkouts(workouts, rowers, remove_workout, debug=False, **kwargs): + for workout in workouts: + uploadoptions = { + 'secret': UPLOAD_SERVICE_SECRET, + 'title': workout.name, + 'boattype': workout.boattype, + 'workouttype': workout.workouttype, + 'inboard': workout.inboard, + 'oarlength': workout.oarlength, + 'summary': workout.summary, + 'elapsedTime': 3600.*workout.duration.hour+60*workout.duration.minute+workout.duration.second, + 'totalDistance': workout.distance, + 'useImpeller': workout.impeller, + 'seatNumber': workout.seatnumber, + 'boatName': workout.boatname, + 'portStarboard': workout.empowerside, + } + for rower in rowers: + failed = False + csvfilename = 'media/{code}.csv'.format(code=uuid4().hex[:16]) + try: + with open(csvfilename,'wb') as f: + shutil.copy(workout.csvfilename,csvfilename) + except FileNotFoundError: + try: + with open(csvfilename,'wb') as f: + csvfilename = csvfilename+'.gz' + shutil.copy(workout.csvfilename+'.gz', csvfilename) + except: + failed = True + if not failed: + uploadoptions['user'] = rower.user.id + uploadoptions['file'] = csvfilename + session = requests.session() + newHeaders = {'Content-type': 'application/json', 'Accept': 'text/plain'} + session.headers.update(newHeaders) + response = session.post(UPLOAD_SERVICE_URL, json=uploadoptions) + print(response.text) + if remove_workout: + workout.delete() + + return 1 + @app.task def handle_post_workout_api(uploadoptions, debug=False, **kwargs): # pragma: no cover session = requests.session() diff --git a/rowers/templates/workout_bulk_actions.html b/rowers/templates/workout_bulk_actions.html index 4fcb356b..0c50413c 100644 --- a/rowers/templates/workout_bulk_actions.html +++ b/rowers/templates/workout_bulk_actions.html @@ -23,6 +23,11 @@ {{ exportchoice.as_p }}
{% endif %} + {% if action == 'rower assign' %} ++ {{ assignchoices.as_p }} +
+ {% endif %}