initial multi clone functionality
This commit is contained in:
108
rowers/views.py
108
rowers/views.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user