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.formsets import BaseFormSet
|
||||
from datetimewidget.widgets import DateTimeWidget
|
||||
from django.core.validators import validate_email
|
||||
import os
|
||||
import twitter
|
||||
|
||||
@@ -85,6 +86,8 @@ class Rower(models.Model):
|
||||
('lwt','light-weight'),
|
||||
)
|
||||
user = models.OneToOneField(User)
|
||||
|
||||
# Heart Rate Zone data
|
||||
max = models.IntegerField(default=192,verbose_name="Max Heart Rate")
|
||||
rest = models.IntegerField(default=48,verbose_name="Resting Heart Rate")
|
||||
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")
|
||||
tr = models.IntegerField(default=167,verbose_name="TR 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",
|
||||
max_length=30,
|
||||
choices=weightcategories)
|
||||
|
||||
# Power Zone Data
|
||||
ftp = models.IntegerField(default=226,verbose_name="Functional Threshold Power")
|
||||
|
||||
pw_ut2 = models.IntegerField(default=124,verbose_name="UT2 Power")
|
||||
@@ -111,6 +117,7 @@ class Rower(models.Model):
|
||||
'Pwr TR',
|
||||
'Pwr AN'])
|
||||
|
||||
# Access tokens
|
||||
c2token = models.CharField(default='',max_length=200,blank=True,null=True)
|
||||
tokenexpirydate = models.DateTimeField(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)
|
||||
stravatoken = models.CharField(default='',max_length=200,blank=True,null=True)
|
||||
|
||||
# Plan
|
||||
plans = (
|
||||
('basic','basic'),
|
||||
('pro','pro'),
|
||||
('coach','coach')
|
||||
)
|
||||
|
||||
rowerplan = models.CharField(default='basic',max_length=30,
|
||||
choices=plans)
|
||||
|
||||
planexpires = models.DateField(default=timezone.now())
|
||||
|
||||
# Friends/Team
|
||||
friends = models.ManyToManyField("self",blank=True)
|
||||
|
||||
team = models.ForeignKey(Team,blank=True,null=True)
|
||||
@@ -541,13 +554,28 @@ class RowerPowerZonesForm(ModelForm):
|
||||
raise forms.ValidationError(e)
|
||||
|
||||
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
|
||||
# to enable consistency
|
||||
class RowerForm(ModelForm):
|
||||
class Meta:
|
||||
model = Rower
|
||||
fields = ['rest','ut2','ut1','at','tr','an','max','weightcategory']
|
||||
fields = ['rest','ut2','ut1','at','tr','an','max']
|
||||
|
||||
|
||||
def clean_rest(self):
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
{% block title %}Change Rower {% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if form.errors %}
|
||||
<p style="color: red;">
|
||||
Please correct the error{{ form.errors|pluralize }} below.
|
||||
</p>
|
||||
{% endif %}
|
||||
<div class="grid_6 alpha">
|
||||
<p>
|
||||
<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">
|
||||
<table>
|
||||
@@ -19,7 +20,34 @@
|
||||
<div class="grid_2 prefix_2 suffix_2">
|
||||
<input class="button green" type="submit" value="Save">
|
||||
</form>
|
||||
</p>
|
||||
</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 class="grid_6 omega">
|
||||
<p>
|
||||
@@ -68,8 +96,9 @@
|
||||
{% csrf_token %}
|
||||
<div class="grid_2 prefix_2 suffix_2">
|
||||
<input class="button green" type="submit" value="Save">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</p>
|
||||
<p>
|
||||
<h2>Functional Threshold Power</h2>
|
||||
<p>Use this form to quickly change your zones based on the power of a
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import math
|
||||
import numpy as np
|
||||
|
||||
|
||||
|
||||
def serialize_list(value,token=','):
|
||||
assert(isinstance(value, list) or isinstance(value, tuple) or isinstance(value,np.ndarray))
|
||||
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 (
|
||||
RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm,
|
||||
RowerPowerZonesForm
|
||||
RowerPowerZonesForm,AccountRowerForm,UserForm,
|
||||
)
|
||||
from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
|
||||
from django.forms.formsets import formset_factory
|
||||
@@ -4706,14 +4706,67 @@ def rower_edit_view(request,message=""):
|
||||
return response
|
||||
else:
|
||||
form = RowerForm(instance=r)
|
||||
powerform = RowerPowerForm(instance=r)
|
||||
accountform = AccountRowerForm(instance=r)
|
||||
userform = UserForm(instance=request.user)
|
||||
#powerzonesform = RowerPowerZonesForm(instance=r)
|
||||
message = HttpResponse("invalid form")
|
||||
return render(request, 'rower_form.html',
|
||||
{'form':form,
|
||||
return render(request, 'rower_form.html',
|
||||
{'form':form,
|
||||
'powerform':powerform,
|
||||
'powerzonesform':powerzonesform,
|
||||
'accountform':accountform,
|
||||
'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:
|
||||
@@ -4722,12 +4775,16 @@ def rower_edit_view(request,message=""):
|
||||
|
||||
form = RowerForm(instance=r)
|
||||
powerform = RowerPowerForm(instance=r)
|
||||
powerzonesform = RowerPowerZonesForm(instance=r)
|
||||
accountform = AccountRowerForm(instance=r)
|
||||
userform = UserForm(instance=request.user)
|
||||
grants = AccessToken.objects.filter(user=request.user)
|
||||
return render(request, 'rower_form.html',
|
||||
{
|
||||
'form':form,
|
||||
'powerform':powerform,
|
||||
'powerzonesform':powerzonesform,
|
||||
'userform':userform,
|
||||
'accountform':accountform,
|
||||
'grants':grants,
|
||||
'rower':r,
|
||||
|
||||
Reference in New Issue
Block a user