User can edit name and email address
This commit is contained in:
@@ -8,6 +8,7 @@ from django.dispatch import receiver
|
|||||||
from django.forms.widgets import SplitDateTimeWidget
|
from django.forms.widgets import SplitDateTimeWidget
|
||||||
from django.forms.formsets import BaseFormSet
|
from django.forms.formsets import BaseFormSet
|
||||||
from datetimewidget.widgets import DateTimeWidget
|
from datetimewidget.widgets import DateTimeWidget
|
||||||
|
from django.core.validators import validate_email
|
||||||
import os
|
import os
|
||||||
import twitter
|
import twitter
|
||||||
|
|
||||||
@@ -85,6 +86,8 @@ class Rower(models.Model):
|
|||||||
('lwt','light-weight'),
|
('lwt','light-weight'),
|
||||||
)
|
)
|
||||||
user = models.OneToOneField(User)
|
user = models.OneToOneField(User)
|
||||||
|
|
||||||
|
# Heart Rate Zone data
|
||||||
max = models.IntegerField(default=192,verbose_name="Max Heart Rate")
|
max = models.IntegerField(default=192,verbose_name="Max Heart Rate")
|
||||||
rest = models.IntegerField(default=48,verbose_name="Resting Heart Rate")
|
rest = models.IntegerField(default=48,verbose_name="Resting Heart Rate")
|
||||||
ut2 = models.IntegerField(default=105,verbose_name="UT2 band lower HR")
|
ut2 = models.IntegerField(default=105,verbose_name="UT2 band lower HR")
|
||||||
@@ -92,10 +95,13 @@ class Rower(models.Model):
|
|||||||
at = models.IntegerField(default=160,verbose_name="AT band lower HR")
|
at = models.IntegerField(default=160,verbose_name="AT band lower HR")
|
||||||
tr = models.IntegerField(default=167,verbose_name="TR band lower HR")
|
tr = models.IntegerField(default=167,verbose_name="TR band lower HR")
|
||||||
an = models.IntegerField(default=180,verbose_name="AN band lower HR")
|
an = models.IntegerField(default=180,verbose_name="AN band lower HR")
|
||||||
|
|
||||||
|
# Weight Category (for sync to C2)
|
||||||
weightcategory = models.CharField(default="hwt",
|
weightcategory = models.CharField(default="hwt",
|
||||||
max_length=30,
|
max_length=30,
|
||||||
choices=weightcategories)
|
choices=weightcategories)
|
||||||
|
|
||||||
|
# Power Zone Data
|
||||||
ftp = models.IntegerField(default=226,verbose_name="Functional Threshold Power")
|
ftp = models.IntegerField(default=226,verbose_name="Functional Threshold Power")
|
||||||
|
|
||||||
pw_ut2 = models.IntegerField(default=124,verbose_name="UT2 Power")
|
pw_ut2 = models.IntegerField(default=124,verbose_name="UT2 Power")
|
||||||
@@ -111,6 +117,7 @@ class Rower(models.Model):
|
|||||||
'Pwr TR',
|
'Pwr TR',
|
||||||
'Pwr AN'])
|
'Pwr AN'])
|
||||||
|
|
||||||
|
# Access tokens
|
||||||
c2token = models.CharField(default='',max_length=200,blank=True,null=True)
|
c2token = models.CharField(default='',max_length=200,blank=True,null=True)
|
||||||
tokenexpirydate = models.DateTimeField(blank=True,null=True)
|
tokenexpirydate = models.DateTimeField(blank=True,null=True)
|
||||||
c2refreshtoken = models.CharField(default='',max_length=200,blank=True,null=True)
|
c2refreshtoken = models.CharField(default='',max_length=200,blank=True,null=True)
|
||||||
@@ -120,13 +127,19 @@ class Rower(models.Model):
|
|||||||
blank=True,null=True)
|
blank=True,null=True)
|
||||||
stravatoken = models.CharField(default='',max_length=200,blank=True,null=True)
|
stravatoken = models.CharField(default='',max_length=200,blank=True,null=True)
|
||||||
|
|
||||||
|
# Plan
|
||||||
plans = (
|
plans = (
|
||||||
('basic','basic'),
|
('basic','basic'),
|
||||||
('pro','pro'),
|
('pro','pro'),
|
||||||
('coach','coach')
|
('coach','coach')
|
||||||
)
|
)
|
||||||
|
|
||||||
rowerplan = models.CharField(default='basic',max_length=30,
|
rowerplan = models.CharField(default='basic',max_length=30,
|
||||||
choices=plans)
|
choices=plans)
|
||||||
|
|
||||||
|
planexpires = models.DateField(default=timezone.now())
|
||||||
|
|
||||||
|
# Friends/Team
|
||||||
friends = models.ManyToManyField("self",blank=True)
|
friends = models.ManyToManyField("self",blank=True)
|
||||||
|
|
||||||
team = models.ForeignKey(Team,blank=True,null=True)
|
team = models.ForeignKey(Team,blank=True,null=True)
|
||||||
@@ -542,12 +555,27 @@ class RowerPowerZonesForm(ModelForm):
|
|||||||
|
|
||||||
return cleaned_data
|
return cleaned_data
|
||||||
|
|
||||||
|
# Form to set rower's Email and Weight category
|
||||||
|
class AccountRowerForm(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Rower
|
||||||
|
fields = ['weightcategory']
|
||||||
|
|
||||||
|
class UserForm(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = User
|
||||||
|
fields = ['first_name','last_name','email']
|
||||||
|
|
||||||
|
|
||||||
|
def clean(self):
|
||||||
|
cleaned_data = super(UserForm, self).clean()
|
||||||
|
|
||||||
# Form to set rower's Heart Rate zones, including test routines
|
# Form to set rower's Heart Rate zones, including test routines
|
||||||
# to enable consistency
|
# to enable consistency
|
||||||
class RowerForm(ModelForm):
|
class RowerForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Rower
|
model = Rower
|
||||||
fields = ['rest','ut2','ut1','at','tr','an','max','weightcategory']
|
fields = ['rest','ut2','ut1','at','tr','an','max']
|
||||||
|
|
||||||
|
|
||||||
def clean_rest(self):
|
def clean_rest(self):
|
||||||
|
|||||||
@@ -3,13 +3,14 @@
|
|||||||
{% block title %}Change Rower {% endblock %}
|
{% block title %}Change Rower {% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% if form.errors %}
|
|
||||||
<p style="color: red;">
|
|
||||||
Please correct the error{{ form.errors|pluralize }} below.
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
<div class="grid_6 alpha">
|
<div class="grid_6 alpha">
|
||||||
|
<p>
|
||||||
<h2>Heart Rate Zones</h2>
|
<h2>Heart Rate Zones</h2>
|
||||||
|
{% if form.errors %}
|
||||||
|
<p style="color: red;">
|
||||||
|
Please correct the error{{ form.errors|pluralize }} below.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<form enctype="multipart/form-data" action="" method="post">
|
<form enctype="multipart/form-data" action="" method="post">
|
||||||
<table>
|
<table>
|
||||||
@@ -19,7 +20,34 @@
|
|||||||
<div class="grid_2 prefix_2 suffix_2">
|
<div class="grid_2 prefix_2 suffix_2">
|
||||||
<input class="button green" type="submit" value="Save">
|
<input class="button green" type="submit" value="Save">
|
||||||
</form>
|
</form>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<p>
|
||||||
|
<h2>Account Information</h2>
|
||||||
|
{% if userform.errors %}
|
||||||
|
<p style="color: red;">
|
||||||
|
Please correct the error{{ form.errors|pluralize }} below.
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
{% if accountform.errors %}
|
||||||
|
<p style="color: red;">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
<form enctype="multipart/form-data" action="" method="post">
|
||||||
|
<table>
|
||||||
|
{{ userform.as_table }}
|
||||||
|
{{ accountform.as_table }}
|
||||||
|
<tr>
|
||||||
|
<td>Plan</td><td>{{ rower.rowerplan }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="grid_2 prefix_2 suffix_2">
|
||||||
|
<input class="button green" type="submit" value="Save">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid_6 omega">
|
<div class="grid_6 omega">
|
||||||
<p>
|
<p>
|
||||||
@@ -70,6 +98,7 @@
|
|||||||
<input class="button green" type="submit" value="Save">
|
<input class="button green" type="submit" value="Save">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<h2>Functional Threshold Power</h2>
|
<h2>Functional Threshold Power</h2>
|
||||||
<p>Use this form to quickly change your zones based on the power of a
|
<p>Use this form to quickly change your zones based on the power of a
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import math
|
import math
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def serialize_list(value,token=','):
|
def serialize_list(value,token=','):
|
||||||
assert(isinstance(value, list) or isinstance(value, tuple) or isinstance(value,np.ndarray))
|
assert(isinstance(value, list) or isinstance(value, tuple) or isinstance(value,np.ndarray))
|
||||||
return token.join([unicode(s) for s in value])
|
return token.join([unicode(s) for s in value])
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ from rowers.forms import SummaryStringForm,IntervalUpdateForm,StrokeDataForm
|
|||||||
from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
|
from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
|
||||||
from rowers.models import (
|
from rowers.models import (
|
||||||
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
|
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
|
||||||
RowerPowerZonesForm
|
RowerPowerZonesForm,AccountRowerForm,UserForm,
|
||||||
)
|
)
|
||||||
from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
|
from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
|
||||||
from django.forms.formsets import formset_factory
|
from django.forms.formsets import formset_factory
|
||||||
@@ -4706,14 +4706,67 @@ def rower_edit_view(request,message=""):
|
|||||||
return response
|
return response
|
||||||
else:
|
else:
|
||||||
form = RowerForm(instance=r)
|
form = RowerForm(instance=r)
|
||||||
|
powerform = RowerPowerForm(instance=r)
|
||||||
|
accountform = AccountRowerForm(instance=r)
|
||||||
userform = UserForm(instance=request.user)
|
userform = UserForm(instance=request.user)
|
||||||
#powerzonesform = RowerPowerZonesForm(instance=r)
|
#powerzonesform = RowerPowerZonesForm(instance=r)
|
||||||
message = HttpResponse("invalid form")
|
message = HttpResponse("invalid form")
|
||||||
return render(request, 'rower_form.html',
|
return render(request, 'rower_form.html',
|
||||||
{'form':form,
|
{'form':form,
|
||||||
'powerform':powerform,
|
'powerform':powerform,
|
||||||
|
'powerzonesform':powerzonesform,
|
||||||
|
'accountform':accountform,
|
||||||
'userform':userform,
|
'userform':userform,
|
||||||
'rower':r,
|
'rower':r,
|
||||||
|
})
|
||||||
|
elif request.method == 'POST' and "weightcategory" in request.POST:
|
||||||
|
accountform = AccountRowerForm(request.POST)
|
||||||
|
userform = UserForm(request.POST)
|
||||||
|
if accountform.is_valid() and userform.is_valid():
|
||||||
|
# process
|
||||||
|
cd = accountform.cleaned_data
|
||||||
|
ucd = userform.cleaned_data
|
||||||
|
first_name = ucd['first_name']
|
||||||
|
last_name = ucd['last_name']
|
||||||
|
email = ucd['email']
|
||||||
|
weightcategory = cd['weightcategory']
|
||||||
|
u = request.user
|
||||||
|
if len(first_name):
|
||||||
|
u.first_name = first_name
|
||||||
|
u.last_name = last_name
|
||||||
|
if len(email):
|
||||||
|
u.email = email
|
||||||
|
u.save()
|
||||||
|
r = Rower.objects.get(user=u)
|
||||||
|
r.weightcategory = weightcategory
|
||||||
|
r.save()
|
||||||
|
form = RowerForm(instance=r)
|
||||||
|
powerform = RowerPowerForm(instance=r)
|
||||||
|
powerzonesform = RowerPowerZonesForm(instance=r)
|
||||||
|
accountform = AccountRowerForm(instance=r)
|
||||||
|
userform = UserForm(instance=u)
|
||||||
|
successmessage = 'Account Information changed'
|
||||||
|
return render(request, 'rower_form.html',
|
||||||
|
{'form':form,
|
||||||
|
'powerzonesform':powerzonesform,
|
||||||
|
'powerform':powerform,
|
||||||
|
'accountform':accountform,
|
||||||
|
'userform':userform,
|
||||||
|
'rower':r,
|
||||||
|
'successmessage':successmessage,
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
form = RowerForm(instance=r)
|
||||||
|
powerform = RowerPowerForm(instance=r)
|
||||||
|
powerzonesform = RowerPowerZonesForm(instance=r)
|
||||||
|
return render(request, 'rower_form.html',
|
||||||
|
{'form':form,
|
||||||
|
'powerzonesform':powerzonesform,
|
||||||
|
'powerform':powerform,
|
||||||
|
'accountform':accountform,
|
||||||
|
'userform':userform,
|
||||||
|
'rower':r,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -4722,12 +4775,16 @@ def rower_edit_view(request,message=""):
|
|||||||
|
|
||||||
form = RowerForm(instance=r)
|
form = RowerForm(instance=r)
|
||||||
powerform = RowerPowerForm(instance=r)
|
powerform = RowerPowerForm(instance=r)
|
||||||
|
powerzonesform = RowerPowerZonesForm(instance=r)
|
||||||
|
accountform = AccountRowerForm(instance=r)
|
||||||
userform = UserForm(instance=request.user)
|
userform = UserForm(instance=request.user)
|
||||||
grants = AccessToken.objects.filter(user=request.user)
|
grants = AccessToken.objects.filter(user=request.user)
|
||||||
return render(request, 'rower_form.html',
|
return render(request, 'rower_form.html',
|
||||||
{
|
{
|
||||||
'form':form,
|
'form':form,
|
||||||
'powerform':powerform,
|
'powerform':powerform,
|
||||||
|
'powerzonesform':powerzonesform,
|
||||||
|
'userform':userform,
|
||||||
'accountform':accountform,
|
'accountform':accountform,
|
||||||
'grants':grants,
|
'grants':grants,
|
||||||
'rower':r,
|
'rower':r,
|
||||||
|
|||||||
Reference in New Issue
Block a user