Merge branch 'release/v10.83'
This commit is contained in:
7
init.sh
7
init.sh
@@ -1,7 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source /srv/venv/bin/activate
|
||||
cd /srv/app
|
||||
python manage.py migrate
|
||||
python manage.py collectstatic --noinput
|
||||
python manage.py runserver
|
||||
@@ -18,6 +18,7 @@ from iso8601 import ParseError
|
||||
|
||||
import numpy
|
||||
import json
|
||||
from json.decoder import JSONDecodeError
|
||||
|
||||
from rowsandall_app.settings import (
|
||||
C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET
|
||||
|
||||
@@ -1782,6 +1782,11 @@ def delete_strokedata(id):
|
||||
dirname = 'media/strokedata_{id}.parquet.gz'.format(id=id)
|
||||
try:
|
||||
shutil.rmtree(dirname)
|
||||
except OSError:
|
||||
try:
|
||||
os.remove(dirname)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ class Command(BaseCommand):
|
||||
|
||||
# advance next_run
|
||||
if not testing:
|
||||
alert.next_run = datetime.date.today() + datetime.timedelta(days=alert.period)
|
||||
alert.next_run = datetime.date.today() + datetime.timedelta(days=alert.period-1)
|
||||
alert.save()
|
||||
|
||||
if testing:
|
||||
|
||||
@@ -706,6 +706,7 @@ def get_team(request):
|
||||
def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
||||
defaulttimeperiod='thisweek'):
|
||||
# set start end date according timeperiod
|
||||
# should always return datetime.date
|
||||
|
||||
timeperiod = request.GET.get('when')
|
||||
|
||||
@@ -720,8 +721,8 @@ def get_dates_timeperiod(request,startdatestring='',enddatestring='',
|
||||
startdate = dt.datetime.strptime(startdatestring,'%Y-%m-%d').date()
|
||||
enddate = dt.datetime.strptime(enddatestring,'%Y-%m-%d').date()
|
||||
except ValueError:
|
||||
startdate = parser.parse(startdatestring,fuzzy=True)
|
||||
enddate = parser.parse(enddatestring, fuzzy=True)
|
||||
startdate = parser.parse(startdatestring,fuzzy=True).date()
|
||||
enddate = parser.parse(enddatestring, fuzzy=True).date()
|
||||
|
||||
return startdate,enddate
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
function copyText() {
|
||||
var tempInput = document.createElement("input");
|
||||
tempInput.style = "position: absolute; left: -1000px; top: -1000px";
|
||||
tempInput.value = "{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/";
|
||||
tempInput.value = "{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/m/";
|
||||
document.body.appendChild(tempInput);
|
||||
tempInput.select();
|
||||
document.execCommand("copy");
|
||||
@@ -108,19 +108,22 @@ function copyText() {
|
||||
<li class="grid_4">
|
||||
<p>Playing the video will advance the data in synchronization. Use the regular
|
||||
YouTube controls to move around in the video and play it.</p>
|
||||
<p>In this reduced view, you cannot edit the video analysis. There is a separate
|
||||
view for that <a href="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}">here</a>.
|
||||
</p>
|
||||
</li>
|
||||
<li class="grid_4">
|
||||
<span class="fb-share-button" style="height:20px; vertical-align: top;"
|
||||
data-href="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}"
|
||||
data-href="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/m/"
|
||||
data-layout="button" data-size="small" data-mobile-iframe="false">
|
||||
<a class="fb-xfbml-parse-ignore" target="_blank"
|
||||
href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/video/{{ analysis.id|encode }}/">
|
||||
href="https://www.facebook.com/sharer/sharer.php?u=https://rowsandall.com/rowers/video/{{ analysis.id|encode }}/m/">
|
||||
Share</a>
|
||||
</span>
|
||||
<span>
|
||||
<a class="twitter-share-button"
|
||||
href="https://twitter.com/intent/tweet"
|
||||
data-url="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/"
|
||||
data-url="{{ siteurl }}/rowers/video/{{ analysis.id|encode }}/m/"
|
||||
data-text="@rowsandall #rowingdata">Tweet</a>
|
||||
</span>
|
||||
<span>
|
||||
|
||||
@@ -7,6 +7,17 @@
|
||||
Thank you. We have received the payment of € {{ amount }} for Rowsandall related services.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
With your contribution, you are helping to keep this service to the rowing community
|
||||
running. As the founder and developer of the Rowsandall.com site I am very interested
|
||||
to know what you think of Rowsandall.com, as well as suggestions for improvements.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
So don't hesitate to respond to this email and let me know. I will read and respond to each
|
||||
email.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Please contact our customer service by replying to this email if you have any further
|
||||
questions regarding the payment.
|
||||
@@ -16,4 +27,3 @@
|
||||
Best Regards, the Rowsandall Team
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
31
rowers/templates/plantrialwelcome.html
Normal file
31
rowers/templates/plantrialwelcome.html
Normal file
@@ -0,0 +1,31 @@
|
||||
{% extends "emailbase.html" %}
|
||||
|
||||
{% block body %}
|
||||
<p>Dear <strong>{{ first_name }}</strong>,</p>
|
||||
|
||||
<p>
|
||||
Welcome on the trial for the Self-Coach plan.
|
||||
</p>
|
||||
<p>
|
||||
As the developer of the Rowsandall.com site I am very interested to know what you think of Rowsandall.com. Especially, I'd like to understand how you started using the site, what you are looking for, and what you think could be improved.
|
||||
</p>
|
||||
<p>
|
||||
The Self-Coach functionality allows you to create training plans and sessions for you and your training group. Feel free to contact me any time you need help.
|
||||
</p>
|
||||
<p>
|
||||
I'd also love to hear a bit about your rowing background.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
So don't hesitate to respond to this email and let me know. I will read and respond to each
|
||||
email.
|
||||
</p>
|
||||
<p>
|
||||
Thank you very much for your help and for supporting <a href="rowsandall.com">rowsandall.com</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
Best Regards, the Rowsandall Team
|
||||
</p>
|
||||
{% endblock %}
|
||||
33
rowers/templates/protrialewelcome.html
Normal file
33
rowers/templates/protrialewelcome.html
Normal file
@@ -0,0 +1,33 @@
|
||||
{% extends "emailbase.html" %}
|
||||
|
||||
{% block body %}
|
||||
<p>Dear <strong>{{ first_name }}</strong>,</p>
|
||||
|
||||
<p>
|
||||
Welcome on the trial for the Pro plan.
|
||||
</p>
|
||||
<p>
|
||||
As the developer of the Rowsandall.com site I am very interested to know
|
||||
what you think of Rowsandall.com.
|
||||
Especially, I'd like to understand how you started using the site,
|
||||
what you are looking for, and what you think could be improved.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I'd also love to hear a bit about your rowing background.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
So don't hesitate to respond to this email and let me know. I will read and respond to each
|
||||
email.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Thank you very much for your help and for supporting <a href="rowsandall.com">rowsandall.com</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<p>
|
||||
Best Regards, the Rowsandall Team
|
||||
</p>
|
||||
{% endblock %}
|
||||
@@ -9,8 +9,20 @@
|
||||
You are now on the Rowsandall paid plan "{{ planname }}".
|
||||
</p>
|
||||
|
||||
<p>
|
||||
With your contribution, you are helping to keep this service to the rowing community
|
||||
running. As the founder and developer of the Rowsandall.com site I am very interested
|
||||
to know what you think of Rowsandall.com, as well as suggestions for improvements.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
So don't hesitate to respond to this email and let me know. I will read and respond to each
|
||||
email.
|
||||
</p>
|
||||
|
||||
{% if recurring=='recurring' %}
|
||||
<p>
|
||||
Some more information about the subscription.
|
||||
The subscription cost is €{{ price }} per year.
|
||||
Your next charge is due on {{ end_of_billing_period }}. We will charge you automatically
|
||||
on that date.
|
||||
@@ -60,4 +72,3 @@
|
||||
Best Regards, the Rowsandall Team
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -11,6 +11,24 @@ from django.http import Http404
|
||||
|
||||
from rowers.views import get_workout
|
||||
|
||||
class TestDateTime(TestCase):
|
||||
def setUp(self):
|
||||
self.factory = RequestFactory()
|
||||
|
||||
def tearDown(self):
|
||||
pass
|
||||
|
||||
def test_get_dates(self):
|
||||
request = self.factory.get('/rowers/sessions/create/user/230/?startdate=13.01.2020&enddate=19.01.2020')
|
||||
startdate,enddate = get_dates_timeperiod(request)
|
||||
|
||||
teststart = datetime.date(2020,1,1)
|
||||
self.assertTrue(teststart<startdate)
|
||||
|
||||
testend = datetime.date(2020,12,12)
|
||||
self.assertTrue(testend>enddate)
|
||||
|
||||
|
||||
# tests simple functions from views.py
|
||||
class SimpleViewTest(TestCase):
|
||||
def setUp(self):
|
||||
@@ -108,7 +126,3 @@ class SimpleViewTest(TestCase):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertEqual(login,False)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -445,8 +445,9 @@ def plannedsession_create_view(request,
|
||||
sps = get_sessions(r,startdate=startdate,enddate=enddate).exclude(
|
||||
sessiontype='race')
|
||||
|
||||
|
||||
sessiontemplates = PlannedSession.objects.filter(manager=request.user,is_template=True)
|
||||
sessiontemplates = PlannedSession.objects.filter(
|
||||
manager=request.user,
|
||||
is_template=True).order_by("name")
|
||||
|
||||
try:
|
||||
trainingplan = TrainingPlan.objects.filter(
|
||||
@@ -1511,11 +1512,11 @@ def plannedsession_teamclone_view(request,id=0):
|
||||
ps.name += ' (copy)'
|
||||
ps.is_template = False
|
||||
|
||||
deltadays = ps.enddate-ps.startdate
|
||||
deltadays = ps.preferreddate-ps.startdate
|
||||
|
||||
ps.startdate = timezone.now().date()
|
||||
ps.enddate = (timezone.now()+deltadays).date()
|
||||
ps.preferreddate = ps.preferreddate+deltadays
|
||||
ps.startdate = startdate
|
||||
ps.enddate = enddate
|
||||
ps.preferreddate = startdate+deltadays
|
||||
|
||||
ps.save()
|
||||
|
||||
|
||||
@@ -30,6 +30,13 @@ def start_trial_view(request):
|
||||
'Rowsandall Server <info@rowsandall.com>',
|
||||
['roosendaalsander@gmail.com'])
|
||||
|
||||
send_template_email('Rowsandall <info@rowsandall.com>',
|
||||
[r.user.email],
|
||||
'Welcome to the Rowsandall Pro Trial',
|
||||
'protrialewelcome.html',
|
||||
{'first_name':r.user.first_name,
|
||||
'last_name':r.user.last_name})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@login_required()
|
||||
@@ -58,6 +65,13 @@ def start_plantrial_view(request):
|
||||
'Rowsandall Server <info@rowsandall.com>',
|
||||
['roosendaalsander@gmail.com'])
|
||||
|
||||
send_template_email('Rowsandall <info@rowsandall.com>',
|
||||
[r.user.email],
|
||||
'Welcome to the Rowsandall Self-Coach Trial',
|
||||
'plantrialwelcome.html',
|
||||
{'first_name':r.user.first_name,
|
||||
'last_name':r.user.last_name})
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Page where user can manage his favorite charts
|
||||
@@ -491,5 +505,3 @@ def rower_update_empower_view(
|
||||
'form':form,
|
||||
'rower':r
|
||||
})
|
||||
|
||||
|
||||
|
||||
@@ -131,7 +131,7 @@ def workout_video_view_mini(request,id=''):
|
||||
'name': w.name
|
||||
},
|
||||
{
|
||||
'url':reverse('workout_video_view',kwargs={'id':encoder.encode_hex(analysis.id)}),
|
||||
'url':reverse('workout_video_view_mini',kwargs={'id':encoder.encode_hex(analysis.id)}),
|
||||
'name': 'Video Analysis'
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user