Private
Public Access
1
0

initial multi clone functionality

This commit is contained in:
Sander Roosendaal
2018-02-18 12:15:51 +01:00
parent d45b674a15
commit 7badc03935
17 changed files with 412 additions and 10 deletions

View File

@@ -50,6 +50,7 @@ from rowers.forms import (
UpdateStreamForm,WorkoutMultipleCompareForm,ChartParamChoiceForm,
FusionMetricChoiceForm,BoxPlotChoiceForm,MultiFlexChoiceForm,
TrendFlexModalForm,WorkoutSplitForm,WorkoutJoinParamForm,
PlannedSessionMultipleCloneForm,SessionDateShiftForm,
)
from rowers.models import (
Workout, User, Rower, WorkoutForm,FavoriteChart,
@@ -11576,6 +11577,113 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt',
'the_div':div,
})
# Cloning sessions
@user_passes_test(hasplannedsessions,login_url="/rowers/planmembership/",
redirect_field_name=None)
def plannedsession_multiclone_view(
request,timeperiod='nextweek',
rowerid=0,
startdate=timezone.now()-datetime.timedelta(days=30),
enddate=timezone.now()+datetime.timedelta(days=1)):
if rowerid==0:
r = getrower(request.user)
else:
try:
r = Rower.objects.get(id=rowerid)
except Rower.DoesNotExist:
raise Http404("This rower doesn't exist")
if not checkaccessuser(request.user,r):
raise PermissionDenied("You don't have access to this plan")
if 'startdate' in request.session:
startdate = iso8601.parse_date(request.session['startdate'])
if 'enddate' in request.session:
enddate = iso8601.parse_date(request.session['enddate'])
if request.method == 'POST' and 'daterange' in request.POST:
dateform = DateRangeForm(request.POST)
if dateform.is_valid():
startdate = dateform.cleaned_data['startdate']
enddate = dateform.cleaned_data['enddate']
startdatestring = startdate.strftime('%Y-%m-%d')
enddatestring = enddate.strftime('%Y-%m-%d')
request.session['startdate'] = startdatestring
request.session['enddate'] = enddatestring
else:
dateform = DateRangeForm(initial={
'startdate':startdate,
'enddate':enddate,
})
if request.method == 'POST' and 'plannedsessions' in request.POST:
form = PlannedSessionMultipleCloneForm(request.POST)
dateshiftform = SessionDateShiftForm(request.POST)
if form.is_valid() and dateshiftform.is_valid():
cd = form.cleaned_data
sps = cd['plannedsessions']
std = min([ps.startdate for ps in sps])
shiftstartdate = dateshiftform.cleaned_data['shiftstartdate']
delta = shiftstartdate-std
for ps in sps:
rowers = ps.rower.all()
teams = ps.team.all()
ps.pk = None
ps.startdate += delta
ps.enddate += delta
ps.save()
for rower in rowers:
add_rower_session(rower,ps)
for team in teams:
add_team_session(team,ps)
url = reverse(plannedsession_multicreate_view,
kwargs = {
'rowerid':r.id,
'timeperiod':timeperiod,
})
return HttpResponseRedirect(url)
startdate = datetime.datetime.combine(startdate,datetime.time())
enddate = datetime.datetime.combine(enddate,datetime.time(23,59,59))
enddate = enddate+datetime.timedelta(days=1)
sps = PlannedSession.objects.filter(
manager=request.user,
rower__in=[r],
startdate__lte=enddate,
enddate__gte=startdate).order_by("startdate","enddate")
query = request.GET.get('q')
if query:
query_list = query.split()
sps = sps.filter(
reduce(operator.and_,
(Q(name__icontains=q) for q in query_list)) |
reduce(operator.and_,
(Q(comment__icontains=q) for q in query_list))
)
form = PlannedSessionMultipleCloneForm()
form.fields["plannedsessions"].queryset = sps
dateshiftform = SessionDateShiftForm()
return render(request, 'plannedsessions_multiclone_select.html',
{'plannedsessions':sps,
'dateform':dateform,
'startdate':startdate,
'enddate':enddate,
'form':form,
'dateshiftform':dateshiftform,
'rower':r,
'timeperiod':timeperiod,
}
)
# Individual user creates training for himself
@user_passes_test(hasplannedsessions,login_url="/rowers/planmembership/",
redirect_field_name=None)