diff --git a/rowers/templates/plannedsessions.html b/rowers/templates/plannedsessions.html
index f1252d32..72065862 100644
--- a/rowers/templates/plannedsessions.html
+++ b/rowers/templates/plannedsessions.html
@@ -102,7 +102,7 @@
{% if ps.manager == request.user %}
Edit
+ href="/rowers/sessions/{{ ps.id }}/edit/{{ timeperiod }}/rower/{{ rower.id }} ">Edit
{% else %}
{% endif %}
diff --git a/rowers/templates/planningbuttons.html b/rowers/templates/planningbuttons.html
index 20648d28..4bfeb6c0 100644
--- a/rowers/templates/planningbuttons.html
+++ b/rowers/templates/planningbuttons.html
@@ -32,6 +32,9 @@
{% endif %}
+
{% if user.is_authenticated and user|is_manager %}
{% if timeperiod %}
diff --git a/rowers/urls.py b/rowers/urls.py
index 85d4a845..6e093cfa 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -419,6 +419,17 @@ urlpatterns = [
url(r'^sessions/create/(?P[\w\ ]+.*)$',
views.plannedsession_create_view),
+ url(r'^sessions/multicreate$',views.plannedsession_multicreate_view),
+ url(r'^sessions/multicreate/(?P[\w\ ]+.*)/rower/(?P\d+)/extra/(?P\d+)$',
+ views.plannedsession_multicreate_view),
+ url(r'^sessions/multicreate/rower/(?P\d+)$',
+ views.plannedsession_multicreate_view),
+ url(
+ r'^sessions/multicreate/(?P[\w\ ]+.*)/rower/(?P\d+)$',
+ views.plannedsession_multicreate_view),
+ url(r'^sessions/multicreate/(?P[\w\ ]+.*)$',
+ views.plannedsession_multicreate_view),
+
url(r'^sessions/(?P\d+)/edit$',views.plannedsession_edit_view),
url(r'^sessions/(?P\d+)/edit/(?P[\w\ ]+.*)/rower/(?P\d+)$',views.plannedsession_edit_view),
url(r'^sessions/(?P\d+)/edit/(?P[\w\ ]+.*)$',views.plannedsession_edit_view),
diff --git a/rowers/views.py b/rowers/views.py
index c59cd8db..4d5453a2 100644
--- a/rowers/views.py
+++ b/rowers/views.py
@@ -60,13 +60,17 @@ from rowers.models import (
RowerPowerZonesForm,AccountRowerForm,UserForm,StrokeData,
Team,TeamForm,TeamInviteForm,TeamInvite,TeamRequest,
WorkoutComment,WorkoutCommentForm,RowerExportForm,
- CalcAgePerformance,PowerTimeFitnessMetric,PlannedSessionForm
+ CalcAgePerformance,PowerTimeFitnessMetric,PlannedSessionForm,
+ PlannedSessionFormSmall,
+ )
+from rowers.models import (
+ FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet
)
-from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
from rowers.metrics import rowingmetrics,defaultfavoritecharts
from rowers import metrics
import rowers.uploads as uploads
from django.forms.formsets import formset_factory
+from django.forms import modelformset_factory
import StringIO
from django.contrib.auth.decorators import login_required,user_passes_test
from time import strftime,strptime,mktime,time,daylight
@@ -8807,7 +8811,6 @@ def workout_uploadimage_view(request,id):
if f is not None:
filename,path_and_filename = handle_uploaded_image(f)
- print path_and_filename,'aap'
try:
width,height = Image.open(path_and_filename).size
except:
@@ -11643,8 +11646,6 @@ def plannedsession_create_view(request,timeperiod='thisweek',rowerid=0):
else:
forminitial = {}
- print forminitial
-
sessioncreateform = PlannedSessionForm(initial=forminitial)
startdate,enddate = get_dates_timeperiod(timeperiod)
@@ -11659,6 +11660,101 @@ def plannedsession_create_view(request,timeperiod='thisweek',rowerid=0):
'timeperiod':timeperiod,
})
+@user_passes_test(hasplannedsessions,login_url="/rowers/planmembership/",
+ redirect_field_name=None)
+def plannedsession_multicreate_view(request,timeperiod='thisweek',
+ teamid=0,rowerid=0,extrasessions=0):
+
+ extrasessions=int(extrasessions)
+
+ 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")
+
+ startdate,enddate = get_dates_timeperiod(timeperiod)
+ sps = get_sessions(r,startdate=startdate,enddate=enddate)
+
+ m = Rower.objects.get(user=request.user)
+
+ if m.rowerplan == 'coach':
+ teams = Team.objects.filter(manager=request.user)
+ members = Rower.objects.filter(team__in=teams).distinct()
+ if r in members:
+ qset = PlannedSession.objects.filter(
+ rower__in=[r],
+ startdate__lte=enddate,
+ enddate__gte=startdate,
+ ).order_by("startdate","enddate")
+ else:
+ qset = []
+
+ if not qset:
+ qset = PlannedSession.objects.filter(
+ rower__in=[r],
+ manager = request.user,
+ startdate__lte=enddate,
+ enddate__gte=startdate,
+ ).order_by("startdate","enddate")
+
+
+
+ initial = {
+ 'startdate':startdate,
+ 'enddate':enddate,
+ 'sessionvalue':60,
+ 'manager':request.user,
+ 'name': 'NEW SESSION'
+ }
+
+
+
+ initials = [initial for i in range(extrasessions)]
+ PlannedSessionFormSet = modelformset_factory(
+ PlannedSession,
+ form=PlannedSessionFormSmall,
+ can_delete=True,
+ extra=extrasessions,
+ )
+ if request.method == "POST":
+ ps_formset = PlannedSessionFormSet(queryset = qset,
+ data = request.POST)
+ if ps_formset.is_valid():
+ instances = ps_formset.save(commit=False)
+ for ps in instances:
+ ps.save()
+ add_rower_session(r,ps)
+ for obj in ps_formset.deleted_objects:
+ obj.delete()
+ else:
+ print ps_formset.errors
+
+ url = reverse(plannedsession_multicreate_view,
+ kwargs = {
+ 'rowerid':r.id,
+ 'timeperiod':timeperiod
+ }
+ )
+ return HttpResponseRedirect(url)
+
+ ps_formset = PlannedSessionFormSet(queryset = qset,
+ initial=initials)
+
+ context = {
+ 'ps_formset':ps_formset,
+ 'rower':r,
+ 'timeperiod':timeperiod,
+ 'teams':get_my_teams(request.user),
+ 'extrasessions': extrasessions+1
+ }
+
+ return render(request,'plannedsession_multicreate.html',context)
+
# Manager creates sessions for entire team
@user_passes_test(iscoachmember,login_url="/rowers/planmembership/",
redirect_field_name=None)
|