From 6742f81fe3fbb4bb4af1d35961c2c6d8342c905f Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 11 Nov 2021 11:09:27 +0100 Subject: [PATCH] showing discounts --- rowers/credits.py | 17 ++++++++++++++++- rowers/templates/instantplans.html | 12 ++++++++++++ rowers/templates/rower_form.html | 6 ++++++ rowers/templatetags/rowerfilters.py | 10 ++++++++++ rowers/tests/testdata/testdata.tcx.gz | Bin 3999 -> 4002 bytes 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/rowers/credits.py b/rowers/credits.py index 30d7a279..e57710c9 100644 --- a/rowers/credits.py +++ b/rowers/credits.py @@ -1,4 +1,3 @@ -from rowers.models import Rower class InsufficientCreditError(Exception): """Raised when trying to subtract more than available""" @@ -24,3 +23,19 @@ def withdraw(amount, rower): return rower.eurocredits return rower.eurocredits + +def discount(amount,rower): + if amount < rower.eurocredits: + return amount + else: + return rower.eurocredits + + return 0 + +def discounted(amount,rower): + if amount > rower.eurocredits: + return amount-rower.eurocredits + else: + return 0 + + return 0 diff --git a/rowers/templates/instantplans.html b/rowers/templates/instantplans.html index 6176d9b9..2506fc8c 100644 --- a/rowers/templates/instantplans.html +++ b/rowers/templates/instantplans.html @@ -10,11 +10,19 @@
  • +

    On this page, you find trusted training plans that work. If you are looking for a plan, this page is for you. This ever growing list of plans contains a plan for everyone, whether you are a beginning rower or experienced, irrespective of your current fitness level. Click on a plan to read more and see the sessions. If you're on a Self-Coach plan or higher, you can get the plan including even more detailed workout instructions copied straight to your training calendar on this site, with the simple click of a button. +

    + {% if rower.eurocredits %} +

    + Your have discount vouchers for an mount of {{ rower.eurocredits }}€. You + will get discount for up to this amount on any paid plan. +

    + {% endif %}
  • {% for plan in plans %}
  • @@ -34,6 +42,10 @@ {% else %}

    Price: {{ plan.price }}€

    {% endif %} + {% if rower.eurocredits and plan.price > 0 %} +

    Your discount: {{ plan.price|discount:rower }}€

    +

    You pay: {{ plan.price|discounted:rower }}€

    + {% endif %}
  • {% endfor %} diff --git a/rowers/templates/rower_form.html b/rowers/templates/rower_form.html index d83d8a59..68096f27 100644 --- a/rowers/templates/rower_form.html +++ b/rowers/templates/rower_form.html @@ -52,6 +52,12 @@ {% endif %} {{ rower.planexpires }} + {% if rower.eurocredits %} + + Discount voucher for training plans + {{ rower.eurocredits }}€ + + {% endif %} {% endif %} {% csrf_token %} diff --git a/rowers/templatetags/rowerfilters.py b/rowers/templatetags/rowerfilters.py index 5b39f2a9..d51f18ac 100644 --- a/rowers/templatetags/rowerfilters.py +++ b/rowers/templatetags/rowerfilters.py @@ -19,6 +19,7 @@ from rowers.plannedsessions import ( race_can_register, race_can_submit,race_rower_status ) +from rowers import credits from rowers import c2stuff from rowers.c2stuff import c2_open from rowers.rower_rules import is_coach_user, is_workout_user, isplanmember,ispromember @@ -153,6 +154,15 @@ def weekbegin(nr): return True return False +@register.filter +def discount(amount,rower): + return credits.discount(amount,rower) + + +@register.filter +def discounted(amount,rower): + return credits.discounted(amount,rower) + @register.filter def weekend(nr): week, day = divmod(nr,7) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index f4f27297b9607c188bf5ef096429530d1f2c1964..ff0f764533a3cb14f1001f86916c99d35627c902 100644 GIT binary patch literal 4002 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 I&%}TM0Jz#UI{*Lx literal 3999 zcmV;Q4`A>giwFp3%ZyuIcmVC4NpBoC7J%>m6@m}RVG#CP__!#t zf^35^U}u8Z$mBMtNFBLnq?XWKUh?mU?6zguRv~`U6u~Oc2SZ(5Th~{Qd^?Z6d2?}o z@M^i)t}fS)9-@JV2j3h&IC{S6R_oRJ?EB@qUv7Tr`tJ8`yF5rcueXmLzUcd_!^PtD z>(}P2+gz;H=H&8Xk-prXyjWgz+r{mNFJ95Z{V5K+H=l8qZ%_Kwt5yH!k8k?rI^W=p z6TI23J~+c`HkX^T1p(mVx2I2@?N0I4YQ62d^~o|FwOt+V&->)^r0aLT_D(l&pg-yr znK#?hzdrEqUH^S|ez{pKw~JT!*Zcp`^(XuNm)DoV&%4whpt~Nr|BVli9~>MUy?p@b zXXKCXH~e|5_haQ|ic`tj*80lKe1z9M*zd}#5IoQaM&!ruT60ge`F zr+525>8=i*_1&g_zPeaGdiYnzUSB93`uwu*&huf6ct@ ze!Tu}+4b9>mz$@n^~-+w@BYS*NT>O=JAb)6Mw>3O|MUG77PnmD#@A1~H>-=67yqXl z5O>QB+;WK&Ue*53F_9Sjc@WBIyTb}Q3hwIU6`^jaW|NPr$&jh!Q;UAwdo%3H^-zTw&M~nSmA768k zF8cA$yZsjPi*OrWEp-Nyq+P6nIPg?r}EUovny_O!98UYq-af^3E_D?!F@KmUiR3Q*gJzP(ki^5AIkM z_W%`fm&82@l}4NQ#!ZBKUGg5dBJSP<4^E@cJ6F<-W10_lUk`Ty;{#fayn8V+5$=_Z z^A*`~!X|=^8ty?#+V69c_fQdcXB-e{^tvcT_4)b8J3>W@okYW|bJHS}CC~RDPj!)} zYNmKPgk;Kz&XhxxlD-?Z^O1R$ipX0NlTxpec@h%}l9w5gj}?(m=A0l0Rd~h~wd37< z$Xizrc?9Dul1k>2@n6z&=jSue3sgj&jb#+pkT2}Ji!&lm6_Ixaoz97a&X=6$Ews^o z6!O7D5~~T%p${efclRRSM*BhXgvJqg)o35elAlk64y7Wij;s+tRB3oImbB;RMBavq z$R|CW3028g5KBhsEX`=N$BM{D6A-*rrQJ31Ga%1oT*Rm%pObS7lAn>^zNXQh#jpdf zndixtC2wa$zM_Z?2Lk|JG~@+JM(6E){Px_ex*_sOeyu}Q8Wu?`>BE~9`HFmamJK6X zO_Y{=(G2@WekAhFfK`$YFd3PzZJw_vN^67h=~YzO^AU`18s60Bc|nszUS-cSK+%ZJ zj7IyKWL~UE&lX5S9&s|deT&i#lXu1o22GTf35(kEb0S}nJ)bQ!wyJra8BLrBd2I9i z?c_P<-ZCI*JUQt_DVcR`UGv+ILS76o1eMGS6^+<5^5c;ACM1bR4SB~+=I=miR| zBtTF#$?#lM=6%!cMgB=55)m z>)2{(MGorgM=%kIHQrkX*m7^DFZ0Mo0+A+4>u@^c zxp{I1$-A6&t?Gp62#f0Wb0S~UXdewA22Fh4F%_+%_ANd?2Kk(O8!%}4-a1P~b8qKF zz9M^`tRaW2n&*WklY7gpetwX=H)xSmqrIb|_WX>2L2m7oF$lM7|>3 zK51(lQMGEB3*4f#GaxSpKvZ4MUE~&}o&IRg-iYWrA$n-!?@GQR-QI#>FDg%tM_W?E zyH_4w)9{ALbMAhs^4|Jn3C5OzIeGG8ymhFF)%m0w6pYmg&d8pxC_Zn4vB;>&$?@rJ zu@fO*n-4G4LtZe~(yG?9@KUsXeoiu9lZGd3ybx-9c;2~^e*0O?^A*|iNq#w!s>a59 z*D5OSNWP*dtwaM%pc?Iin~ZMXytf17g15oSSD3w zMnrDpryj9Mmsax;c@r$dhA(p-7;~w~yWz9qnCP zi+T+5``laIJRd?)t8Px@EAr$>ve1}7MLve2IXSM)^P`Y=CRk!klokQXhH2-7z9LtS z#GG&sL4}^6p}%AQ(`v?hmpk9Os2lGQ7>lOd-v>QZhF&T{FS%g~=mvaClR=NI-}NB+ zU<3(Cg+8fqkLvjTKb+a1p#TslOw7stCQ$EwVhS z&<8gesjmz@yL!+kJIw|Ht3n@rQ8jN)13p%Sp3_`UpqlFu!er3bHsIGJ_0BLLspfjb zvgI~&LeCYUk6FWyI;k(aYGFe^4*J{))v+ow3)76%H2fK$mptIBLbixPMWgj|Qu8V@ z?l>6o7*rZQy5`Nht8o|VL7&EMaJfI82E8xZ2lrkXnb3^8LG;!D5bLBq*vX*BX50;; z_X)kOiAK)mDvF*P`ccqF6RpyvL*R-UchtOjW1vsUdPH5>4N`XeH>saIdNIyx(No!0 zX>*c#s0e*9BBW}7jg%}x-_TFnrQ>sFOzT8c#vLUEK_=2Z2ivmrgXpbcuWO%^7si-O z=cH!W52N>nf&|@w@1ba6JvKFO4D^@;SXpp~6mT*faj~Uk4x(p+PS-UHDHdJ0bXEgC zRfOIdu%ye#W#GxIant7dVf4X7QC8nD+M+I)cSQxf=t0&af2J)z`C>ZKpy_%^L+h8v%?usdr&A z13tC{twHq8Sk$d$i0ot0#%a{-`ccqFLlLb`!w+S{H{85=W1zQ``)BFAc^qR?^QJ%G zTQMNY!Yhj~nRtC|$=DSIZEe!nkYZG!Cu(#3^wA5Ls9d-hEmP6RUGw3OgPu)vNILYE zC$qd+bL0-A-?dEiDmBlFZ7!YZJ92j|6VdDDdMA@f&}wO!1L(u9Wg_U7yg}=w8Fy2+ z>qBmtXhl%v$hDzW-`o{_s0e+?9kg^^HEb*!zTr0DkAWW1FpE=3y+GOJ>UlUs=mSosp-NNp2GGacG7%7?&aRKt(lTd&o=pIyH_t=a z<&2^A(isK4%jl!ZuJ_1AYwn;KccY+>#-lP1-&5HV3}`{yG0-FBhAK*_=dvXj(1Nz3 zpqJcGg>+JHrD)_1nwmEX`e0Zv=%ij;(NvA5=8b}$l5t1M)(YOa=E$A8ODE=*iJ)E6 z)_Xshxt?0kb`X6ovSv_)Z+!60uAc$=Xe3#8I;oF-GIl*RHE#$#lM!om;hO-V+4VC( zFS+mvbm*}t`n*(78}LU!9}F<+`r(J1ygw22)Vz5^=<`a}fI)|z<7Cjc_3MYxvk5}F z$X$9-N^1DI6GcNm0(xgW+o*Es1cxPEI4Z?U()M2HTg}}tddbx{L6wmkV$n+5dky%lm(DQykk_=;MeZULUF>XD8h$NVIs&_u ztO32sksDDa1o=8b}$cZ-;-jJqhYt!_DSZ(c_4a^aN{y^BSqzBNi62Yt+iS30{s258OG zChpBk=yxkwD$?p{iznUH^@pD>`{nld zi}U{LAJ3N;%XNS7|b1NZoDSn zUR|B9PP#t*^y?Sn`rMzKEPeOg%hmbm_0Rn^y^rb88xQC0mZ#l+(j~LA;O6H~cU!H~ zW-sse+ikdhv>%=S=y|&7<6oBN%Wk_&9P+2PkM72O9X;vRXODk4{_&^GX7}fQ`_Jhu z{^{k#@5^*&0AB&@|36yX_+tO$caQ1#!4CCmou0$@3FUJ0LwXv&r%N9{_#c3gd>h1o F0RUL{K-B;M