!{#JwfI7*G7
z$Ah%tp76co1f3jAD0zd1w+!xe-sS7b{HT(3CLpq0ywIH&%Jfo-nWv^_q+F&`n(r})
zB}B89uDO%O1VKkn?;!~B@!U|##y70q;pU02GxOK*C!Mym=7XrjS1(?@$4Fb{ck}Fv
z>`1kbw5m>GJgu1no=deY5;WuEI5O8P%o1i
zCR`~(gb)9Vp7<)`0{TF}XBH{xs|eXwgM+aWqXP;U1|E@Hfi&OJj0u(=-m`IE^;1J>
z8yzASNchx5&4NR?Y^7c4rF!{u=FaN{PwyqS(pS=kIZ?9WaD{IQ6jxmqEtyGxjr9Lg
zEkPGl_$LWqJHYlF`ynzDOeo7v!IZ!#L1#E<&wf*G`|!%!&NLZli)DB+v!}$_-)0u9
z3cEv(L7|6xUo&r??lwz!9qd$DGlHVf6K410Lm3-pqGvH3yW)0_5XLmwCrB1;x(DR<
zV5!E}^msW;X*a|cxUg>v~Lb6Tu=4)5mdmCX)$mzNsjQ0DY2qERZ)lN%6?!Z=uY2?Q_E>@Zpm<_Jc%b(
zbf9s8jhoI&J|!z#@I_zcQPWN=&sb!^v#)j-r-5*{3@<7yQA3T)jY-b~j7eTs{~)vr6d-
zM9a!PsIg5t0+B-F4Gx11q_MO_EF6^MSV>o7Zbi+mPJI2`$RYwsoI!bvqGC_+f_T>dSW5(NIrm;
zh9lH%tqN>u9odD6wH!0=xStt9#(KK>7WtEVnI*hMpEtN(C9FG=hdGDDz}E*2@ez?h
zQ)9(4HfCz9alk4|OgPnTmRP!js!&4*018Qks1KQ5qOXKMLu;Jg-Ef^I8>u%3pi893(Utho#!_6(Dy
zUWq%8LLJsA5{?bx8(
z070f>8D+u~5&^`AQQwMo3v_1V3MNWTvyx{lq65HN=|vHqbJGQh$_R%Y?ZbtJ_$@8|sj6w%O1`
z=E4L=g@Z`xW|_7cz2=0cN$8gP%;t5%>8e{|K*!wy
z+5L;{4hQ(vNg(2|HdQMb8)6wd`&rB#Lcpffjhg+~pxfZ!odP~g(M=8&2tJ?JsK!U^
zE;;ZqX-nU&Yrj|BRd-!m&qS@Kl@C=3MudYbFl|*>YJHbgK2#>K8kC^h0%=F|##0S)
zWzLPhu1;NNy;le3JTX%ZwObKER*t@lUHNXR!)-$kLUdwbG)A_8Pn)RwOjeZNVB+Js
zLASwajAurgcdl0Q25Gd@d$-<{)5jz}E5F|}3gE4Ni-gk&){~2uCW06UggiBY(vh=M
zAhAQY4yK8CM+PD2wm$R=;R9aAoXrHoLLD7>R!v(v!KMlJg#pX}$*#)sjf^8m0$~kI&~1m9O7C9svedS)tkWOxY9{F2e?ice_`#1LRxRGz
zL(;<8jGPc(a&qyn*cx2so=UPr7?=!y1t}Gt7=lqbJ!GAyhqet;qX9~jP1#SNEE6{=
zmtBBEL#lV?=hEDd|rVo0=MqA+&9eI?D}x+D;N>
zbmnW=JvLmV^a$Y=*5}$sGuxyW%O1wF&FE@H^e~xu~?hOE5^9bftP2Oi-}`p74%UO}fzOMCa1Ks!5406NCNH
z4G39SDGWgHLnf91BNj?OC}^jKwoOuREQvK&s4Q$nR?eHX5)<4qoQAG5dq;&otX=vF
zg>J;_#+0RP5lTfH%Up;t%)w?uJj`g@*-wR9?E_Ar5pkX$+BQss?&2tpGFz+lU<2<8
z7)~Nmf(&M-b9sZAmjB^8wCq+Jum>D=a3$;`>K{hV@{;ZPPn@0>C+t3b7`J&44$f4wBiqp=|@i
z!XT(!r`BWxfh0zUZPxhW4k`?xFpWm0XEJ8{M`L;&GQAGHm5dO$C=2fh(Ba}(BOqBX
zGA($k8G&+kaA?~G4Tg2o?O^!@0^ixksZ*Y7K6Ou?`1ncppeJp=!)6^y-T0oZ4lgw(
zrZ)==9wN7D=+uu5ZJ8Z7_e?x3v%{_d)(CL=uow^kV?PPVB&6{lJKwiiya<@523J#v
zoBwiEMvMso>qyoN4=tA^nL=bJVban3*wDrXm_G^t#_1PXIv7k};m=q%V(QC3H+(wr
z4ZSPG9=DHqfo;<->UP^pdw0ez@G&)mv*_>BdceqloPq$mv|`#DR5T2s$BkCmnU8qb
z12b#*NOXL=*a!sB>N8xrnFDXQC5+-q7;T
zdfVIZV?&n>kN`&UTv29w6x;Zjiz|k1nQKGGtSHgRlS9%<+ReO_
zcdkXdF(&Ad&E2y(64DZ!SrdD{Zk*Z0j}1Lsyc`FeW{3NQPf`
z_Jc#O8zAQypwFkAXExL^Bzkmj^}0b!PZ006=H{P|Tczq1q83ihB{{NLN688lwDUt>
zHfJQJ2fU(Y$$(^u5!{y*Z*lK29XOSlZ#$WzJ7*jB0n^=z-7v>qA1I%ap_pT4$?J_@
z!TK%3HKXV}KlHY7!q9-A?)7rKjJ-{`@*%Uuv0MSA;cQIQ@@VB`%$Z=1tC?a3XNO`R
z>@0`PP1+dr9F2^PNtP>o47uXm
z(N3holroQ#$1tJg3g!|as94=;^Vb#O9Z^Ee82+8rjut(A92V}NJphq28M8%dxb
zCeC5qp5W-=xiadf3uZQtx0<(>p9<(hwsxPcTfg{J?%}SmjiyETtV!vYDn|!6;IY~C
z4159Au!ONK5~Msr&%2f{Y?Dn4ct-Z-kGMPJSwGmI`(v0D>iMhyUlrDJOJaAX-q==_
zA{bShRe(F^EYI57YZ4nU4M!N;EvXO6(sKg*An5(a;3*Gqoik4
z;e82Hs`_q1?dSjc>90%Wgi}vPeFfO;@G!P*qNw*PF~b(w%Er6L@SuVv)@z)HH4oer_1s96{3AAb1Hs
zqX;;y>_=3c{e&tf!sG}WwB4w;(Dt}?50Q`l4oFlj%vxrK-1S}UqH>m?h|jYEp#cbE
z8zzW4`$64-=eQ0m28Y^OyHf27sG28In|Gz)qqbSP>Xc(Drs@^1m1>8(Q#rF*BV2%L
zmNUcO5g1OZ^2qJRiyt4xwo28a$cru6hoJOEM(;CC9Qz5A30)7b?^VEIHmbd0QtwJV
zx+>sDDMz(nyEAJcZ_1P!}A`VD8<
zOkfUE(OtkAgM%BO?_mFov1w#WMcEd=lG?+Xa(HWYei++URrbt`F{^=WKL>x>;QKi0
zz#FKr)L?bsVaBPQ{b~6q2ew_fdM*R+av*F!6AYXIx9j1dVQlL}9})h@u$g%_$=44n
zn5C=loWn2+Txk=WHGRb0kLLJNj7QP;=ts*?mvA=N-N6Z`%1Q|9sr_!5#HKkJ((iVPQ71jUD`V9(z%IFS-GP93
zV)U#m1Yf49T2YOiY9{#?nqX&KunY6sGo0fp1W4qE^+lC5fwvoNtu{j7`7Txx(~Vzm
zg!U1}rL-bcPG)7jE0X+T&F%r-d?f@9;ss?!U#{uTnPCYEHkR2|I!;LTQ9)G5$w|^U~Bj9
z!vS+5z&tF8TIR*BRS*W4&5y>!&631oS?y<@@MPj)4|3+l0H}gonWNgd#CP3(erG&C
z*bx^{xMJ|Dy8*2>w_xKNvunHB0QaVBVzr02`V>MF5u5Wbx79d8cTHP%FOwo1=%P%a
zz&+s%(=KXPiYN!-Y^cv}tJ&Of+!l=P5WctR2Ch69+4?79*V))nPhQCCh_(3Y49c6H
zAjiJ`ywxn=!QMyqedkDw$L%9H?VJcWJS)F6A_#WK1$D6QsJ7jMdk_#qaMS`mrd=g_
zrVb_$Rt`xYd8X}Q#k@&m(zbi2_D=07#}94fCo1#Y;0Bm1ZXno>;hEtxum&gCDHC_+
z4F6E)Uf*}Z+7`ayR1-I8V^Y}Jku)$i7^h;8qjA0L+9#aX%w87%_tCcwEzAjvVy#vN
z%MK3q;TOVcV+zi;9Ainwd*rj^Q_nYuc|tTwnhhKM9YklKH61?+?ieD$WPQGO262f5
zXBIX_9v$q{FN~d3oGG7V1EyddssWh|SC#qNJ50S`+CqTcdZUC{XV%A=XA2Zag$spW
z6>WH+l7BNRmoeG0h3?`s=E*_!1_!tS_)bzMMrP4E9YSHAA-^YOTNn@fHM^IFZnx!#
z0bWS?#%*~M3>Z*D5@auP7y~*byLXsu3UaC*nPVU}Uvo%Sx-dU$EjcoOmt?i6Y(28r
zM7C0RW|L~Q#xd(fOoKfmY^qhVXPGpyNf6nq9B>%(GR5;jK6J=^5WEr1v+1YFskb^y
zf0SrmnvuDjDD%xnkr(rgG|5u+w(ez?}Do|`?+G@AjllY^{%4$#%M8mTUlaz#?N_=U9|S6RE|
zIy*`+ly*h0D6if-Ph03h32X!Y0lmn|;SBc553V7g5LM1q`f`*uj}EdnIRIv%@4I0R
z`+bfCq&B5!%~BXGS&+74sX%UVmhL$q?`JH>l9VpgE1J7*ZZc0N)C}h&8+JaEo(Oo@i)Ddim*%7_fQa;ogHK?c%Y*L8{3Ebft;Qy-guF`UO`82`2pe#
zJ3YatxXU*@tcihxd#!wW6j7Dw!NicWAjYca*y^o{YA_8)khR=_c}1wDTqZwc8zrK(
z;*hwnm1+H?>q1Nh&o4=Wy8GFWd1Yk_Oat=@*E;2V^s~PkS2lbGAV}KQid{J~qm^tN
z305Xr=|ZN0)p5=?RMxd^e-E!}LG_-@D~xT|jQa`)Q%W7~6~Yb3B7-e@E7IH3B%>j-
zql2Vvuh?HWyvmYn=%?8BE|!m{eARSvKw^2@JeFq;sLLc=UST}e{q#f0LQ6tNSsqU1
zK8JI3yc$Y_5hQKHm2LQc2Cy8n;V1;j8S`|p`gmeleH*+a-68i}__P$R-sZv(ynt1q
z59~U{6>iThiR`}3b3n}S8lWI)8!_(C=~s4!!#36C8HFB~n}?m{n9$qe-S(n*FUR1D
zd=~GDc?ONyOel9Yw!$}Lt_;ex#O5(<(s^)@v~3vMrf@4BzA#R!jVTPFy-iO}fw)u9
zFQ*{&XSH>CgT}PJEW|p^UcG|Nw3-+bb2*ivZ1e0OX`8TOlNdAW!tbcu|3kUZskYKe
z4os`i=P1BE&&7;_aN^)aCG^YpT~>ih0XSZr8hg%6P`J4<9WE@qlt>eI(+z#%3X-;2
zqr=(LaNWQ`5%{{*=E`&$(p@=7mhft0PCke)hUn!?#Pq3a>zW{$vk%azl_R;L9Ao4v
zFwPms+X)f_Xb6JjZOT~V?!L+~*#HLD78<{{OX5yqi$gW8wWPw6S%|lVN?YYxV^U(z
zJy${A7Ak>r3WuL##&zR*#)I4zS6Y*;3+8%H01q+iUXa
zbI(vK9YGA|#_%l?W7>8Lwa)f(17;@&$=h_XpR#z9SF))F5Wy71v_Bk|I|-TC4#7(l
zU;TH~;Mz`bdtPDJ;Iy~O|3^mU*;?QetL)`JtiTyg0}>=}6IQukbx_|rXnI4CR08T_
zDxPh`tXpb=wl7w81O
zFZZ_EiObg1mTkDW%{F_>OR~Q0(XAt>%)#Zdms}V*>%^FSecj=2}kWeJo#-BVXl&BXJ9^VYf#d!B@y0lLE$(-a^QKw2~xIUgIAGTPLtx`bPfvH
z(y%`3LU}1N8#;01YK^`1rpRDPSl@UW#+yzwz^8$MvS8<
z(Q*jc)}L7Fpss>PtY=Qv8mf#VeYsGa>*6kbFpgzMbvp=jxl++#^B&BZ?`=mMi)3eM
zIo%msSmlL}vdtIgQJQ;+*}96d`Tm^rj!*i)uVlof58C!*ui)m~c5+n2pB2Kn>||HM
z=V~Pm>r2_Di<<_ZH;O6PY4
z5OapmQX6ZvL=xKq&jDIugdz|dh!#$P<|jhBKn+=hd}FaL&1&E0xb$bu%7)RzZYO5A
z;W(+5g|S*KX6=uH{MLW*Vy^fIPez9iY2oyp9gCmP{mT
zp%`NZ1wdfSk@!y0dHL)qiAVG`{5GG9p1yNp>DZ$H?iHy$QfZ^Kh{TnBN48Olr04oT
zwF&A(Z?`YV1QKMeonRmJM|BQL@Xs
zZUZZ(T*eGf#**%5$&LjCF1$Y`EDf;X39{BvBwidB<4@%5l}z@~49!<3!^rp4(QvPJ
z_@>F{d`vr5cJ6!^_fVwDSQ~6wQoAoeeUs;^7la^d6-6?g1D96jQ(XYIawHVowfZ4$
z>1FGToY6u(BC*TlrlUo6KQ97O1MqHO;v|{_Hg{oIE>-
zZaYUA&6c^(_Edpt;~K)&TNkNNl%hlQh$c|G$vaZ3$i9`MYwZ(S9BBaw%^8M}%oO
zg6Otxg_}@&Tl#@J-fTaBK>N)8oPJiF#JW?b1L?agG@q2cQuy*zgnr7`7VZsfTzYda
zLa(EP=(cN610BxUQo!IEwO(|A?fUQqYvZ>0%R3tFAqF<2^3+c|lQeTA^4Lxk3ma(@
z=O)<5caB7INdxCMPn}DQ1|f)U6UQyVg{FHdGQ3r-GG>n(DW0UsCtSVYGE3vDE!t~6
zx6bMPBT0i0uhUR8`n@;1#_Dg1Hs5U6?C2o6&04i_gt~$UZqn=K+q8V8Ji1E
zrM`TpMSmk#I=MamdJDo!TL(4o;J%o%SWd8pC5Ud5#$iBMnv1-N&ENL8CE*mex}eEP
z-gx0=w$ztgwA1fhlL~Rp$6vygxy`3>B?n%)t*c{x4?l5Fhv4k&AiAv?0+7tQwWGuv
z=~(lfRj>Yz_AFa@QMcdf4CSmdjN3kMgzp2+S1K_#?e|py=Q?kLW@iV{ZO4?u*q&78
z03uL&_LEcHZpT`_8w0P(xiuKK;!?BCd41PK87J#r
zrYzm|eZOM1p?k>J`+eVr*8l}++oExm3?j8jZEk~P8u($$c0I9~&czodXzB?A8wNeM
z$sF6C>ujssDJ7!aE%sA~Xm=+BRmmI4;L>tgvMGnhei->@N<(
z9qY6C^*tC>&$^CG*05f#&DAgFS4i7bZ6hEqC9_s#kkdpGq;12-du!c&Nbd6(Vm%)m
z5O>J!3fOGbWw#z(FX{L?jN9Xf9Hd7Q`RG(fY)-EnPI&Ix@4bJK<^JwPegdWqQbh6!cauc#QtBMVw
zK?u^eP2>6~_?iwjb3>?Wv+nbenJaJ)ikdca-Kv7J_^JQ_x~-e`Ma3DUMbgX|;tsBS6v{5Se(yakncu+|fGov2%S5im1u
zDre?V_LRku8E>3oi`*^Nz`^}CWO2)g6Q=;_uSL{b{6oNoCrI0tj@e&)X^$rOYz}CTY!8S^)5+1R
z0l;<)4{O?{a(HgH^DP@|@ZzXb*O}-&%D-&C2LJ?;lzCPnDmz(=r6~CzSugkzs38f`
zx2YTaTKKMx8Q)XHmMHXbb%(D>fif$6j+x&}mOsh9v9S&EHN(5&VD9J4_8i2FKc~0V
z$yDm#sW&b95nVoa(M(7QN=RnvAUef!rQoKU(MXMkze|1yyjPq2d+Ht
z6g_HwaM(L{mz-HsA~Xm=*5-`_5oK;9rvN~9Tu*;`s;Kq+
zJg~=JF7LH)UfwOEv1i+NufUbP@0$b0$<;E)U;Ocfglb5FtaThfZ7riZbq0PX`5MlV
zu54eCBf>By_FOMHqU?czd;Y1;DfCsK;9}8OQszU;Xguhdur=`9cOR`D=_Jk*LXfqN
zBe6#t3iASs2%39qNnmf1vUah<6SkR-E2`-AwdJNC&k$&5RKeK>&JnWnM&FJ%z(iL*
zw$zLWAsU7tYd1&Y(kJ+5-A!HLV^OQMv5ay(5U}4Ggvx|#o`}Ade(p_SJ0ez_KZG^s
zu*OG7D@XFRPd+)ux{p1MlMc?PV+NSD-zIX+uVH)g(5p6aI}?m^PZ
z_vZxqZVpVh-U=vamO8z3+8n94fK
zYL3=Mp89y5A87k2Jn0xAd>+eM58*Ibsb>FDX*n5*1Yvmj*dm1Ei+r*&I-ek99}l`KX;J3Po*(E*rzBxTAIChQhn
zw({^9A|Lt~XRWu{0D`TDr`G!qVV({6AYA5-?h3TL_>J=3e{Yh@v%~)beXy;doqzxU
DOTb>x
diff --git a/rowers/urls.py b/rowers/urls.py
index 3fe4c64b..5200a70e 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -608,6 +608,10 @@ urlpatterns = [
name='plannedsessions_coach_view'),
url(r'^sessions/print/?/$',views.plannedsessions_print_view,
name='plannedsessions_print_view'),
+ url(r'^sessions/(?P\d+)/comments/user/(?P\d+)/$',views.plannedsession_comment_view,
+ name='plannedsession_comment_view'),
+ url(r'^sessions/(?P\d+)/comments/$',views.plannedsession_comment_view,
+ name='plannedsession_comment_view'),
url(r'^sessions/print/user/(?P\d+)/$',views.plannedsessions_print_view,
name='plannedsessions_print_view'),
url(r'^sessions/sendcalendar/$',views.plannedsessions_icsemail_view,
diff --git a/rowers/views/planviews.py b/rowers/views/planviews.py
index 32de7ce1..f4d43afa 100644
--- a/rowers/views/planviews.py
+++ b/rowers/views/planviews.py
@@ -1,6 +1,150 @@
from statements import *
+@login_required()
+def plannedsession_comment_view(request,id=0,userid=0):
+ r = getrequestrower(request,userid=userid)
+ try:
+ ps = PlannedSession.objects.get(id=id)
+ except PlannedSession.DoesNotExist:
+ raise Http404("Planned Session does not exist")
+
+ m = ps.manager
+ mm = Rower.objects.get(user=m)
+
+ if ps.manager != request.user and ps.sessiontype not in ['race','indoorrace']:
+ if r.rowerplan == 'coach' and r not in ps.rower.all():
+ teams = Team.objects.filter(manager=request.user)
+ members = Rower.objects.filter(team__in=teams).distinct()
+ teamusers = [m.user for m in members]
+ if ps.manager not in teamusers:
+ raise PermissionDenied("You do not have access to this session")
+ elif r not in ps.rower.all():
+ raise PermissionDenied("You do not have access to this session")
+
+ comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created")
+
+ if request.method == 'POST':
+ manager = ps.manager
+ form = PlannedSessionCommentForm(request.POST)
+ if form.is_valid():
+ cd = form.cleaned_data
+ comment = cd['comment']
+ comment = bleach.clean(comment)
+ if isinstance(comment,unicode):
+ comment = comment.encode('utf8')
+ elif isinstance(comment, str):
+ comment = comment.decode('utf8')
+
+ notification = cd['notification']
+ c = PlannedSessionComment(plannedsession=ps,user=request.user,comment=comment,
+ notification=notification)
+ c.save()
+ url = reverse('plannedsession_comment_view',
+ kwargs={
+ 'id':id
+ })
+ message = '{name} says: {comment}'.format(
+ name = request.user.first_name,
+ comment = comment,
+ url = url,
+ )
+ if request.user != manager:
+ a_messages.info(r.user,message.encode('ascii','ignore'))
+
+ sessiontype = 'training session'
+ if ps.sessiontype == 'race':
+ sessiontype = 'online virtual race'
+ elif ps.sessiontype == 'indoorrace':
+ sessiontype = 'indoor online virtual race'
+
+ res = myqueue(queuehigh,
+ handle_sendemailnewcomment,r.user.first_name,
+ r.user.last_name,
+ r.user.email,
+ request.user.first_name,
+ request.user.last_name,
+ comment,ps.name,ps.id,
+ emailbounced = r.emailbounced,
+ sessiontype = sessiontype,
+ commentlink = url
+ )
+
+ commenters = {oc.user for oc in comments if oc.notification}
+ for u in commenters:
+ a_messages.info(u,message)
+ if u != request.user and u != r.user:
+ ocr = Rower.objects.get(user=u)
+ res = myqueue(queuelow,
+ handle_sendemailnewresponse,
+ u.first_name,
+ u.last_name,
+ u.email,
+ request.user.first_name,
+ request.user.last_name,
+ comment,
+ ps.name,
+ ps.id,
+ c.id,
+ emailbounced = ocr.emailbounced,
+ sessiontype = sessiontype,
+ commentlink = url
+ )
+
+ url = reverse('plannedsession_comment_view',kwargs={'id':ps.id})
+ return HttpResponseRedirect(url)
+
+
+ form = WorkoutCommentForm()
+
+ rower = getrower(request.user)
+
+ if ps.sessiontype in ['race','indoorrace']:
+ breadcrumbs = [
+ {
+ 'url':reverse('virtualevents_view'),
+ 'name': 'Races'
+ },
+ {
+ 'url': reverse('virtualevent_view',kwargs={'id':ps.id}),
+ 'name': ps.name
+ },
+ {
+ 'url':reverse('plannedsession_comment_view',kwargs={'id':ps.id}),
+ 'name': 'Comments'
+ }
+ ]
+
+ active = 'nav-racing'
+
+ else:
+ breadcrumbs = [
+ {
+ 'url':reverse('virtualevents_view'),
+ 'name': 'Races'
+ },
+ {
+ 'url': reverse('virtualevent_view',kwargs={'id':ps.id}),
+ 'name': ps.name
+ },
+ {
+ 'url':reverse('plannedsession_comment_view',kwargs={'id':ps.id}),
+ 'name': 'Comments'
+ }
+ ]
+
+ active = 'nav-plan'
+
+ return render(request,
+ 'plannedsession_comments.html',
+ {'plannedsession':ps,
+ 'rower':rower,
+ 'breadcrumbs':breadcrumbs,
+ 'active':active,
+ 'comments':comments,
+ 'form':form,
+ })
+
# Cloning sessions
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
message="This functionality requires a Coach or Self-Coach plan",
@@ -1385,7 +1529,7 @@ def plannedsession_view(request,id=0,userid=0):
raise Http404("Planned Session does not exist")
if ps.sessiontype in ['race','indoorrace']:
- url = reverse(virtualevent_view,
+ url = reverse('virtualevent_view',
kwargs={'id':ps.id}
)
return HttpResponseRedirect(url)
@@ -1522,6 +1666,8 @@ def plannedsession_view(request,id=0,userid=0):
}
]
+ comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created")
+
return render(request,'plannedsessionview.html',
{
'psdict': psdict,
@@ -1544,7 +1690,8 @@ def plannedsession_view(request,id=0,userid=0):
'timeperiod':timeperiod,
'ranking':ranking,
'coursescript': coursescript,
- 'coursediv': coursediv
+ 'coursediv': coursediv,
+ 'comments': comments,
}
)
diff --git a/rowers/views/racesviews.py b/rowers/views/racesviews.py
index 139d82c3..e7addf43 100644
--- a/rowers/views/racesviews.py
+++ b/rowers/views/racesviews.py
@@ -882,6 +882,9 @@ def virtualevent_view(request,id=0):
else:
racelogo = None
+ comments = PlannedSessionComment.objects.filter(plannedsession=race).order_by("created")
+
+
return render(request,'virtualevent.html',
{
'coursescript':script,
@@ -896,6 +899,7 @@ def virtualevent_view(request,id=0):
'racelogo':racelogo,
'form':form,
'active':'nav-racing',
+ 'comments':comments
})
def virtualevent_ranking_view(request,id=0):
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index 2af32b38..ee597981 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -87,6 +87,7 @@ from rowers.models import (
microcyclecheckdates,mesocyclecheckdates,macrocyclecheckdates,
TrainingMesoCycleForm, TrainingMicroCycleForm,
RaceLogo,RowerBillingAddressForm,PaidPlan,
+ PlannedSessionComment,
)
from rowers.models import (
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
@@ -97,7 +98,7 @@ from rowers.models import (
PlannedSessionFormSmall,GeoCourseEditForm,VirtualRace,
VirtualRaceForm,VirtualRaceResultForm,RowerImportExportForm,
IndoorVirtualRaceResultForm,IndoorVirtualRaceResult,
- IndoorVirtualRaceForm,
+ IndoorVirtualRaceForm,PlannedSessionCommentForm,
)
from rowers.models import (
FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement,BasePlannedSessionFormSet,
Comments ({{ comments|length }})
+ {% for c in comments %} ++ {{ c.user.first_name }} {{ c.user.last_name }} - {{ c.created }} + +
+ {% endfor %} ++ Add a comment +
+