Private
Public Access
1
0

User can edit name and email address

This commit is contained in:
Sander Roosendaal
2017-01-27 11:17:29 +01:00
parent ae36376dbe
commit 227081cfb3
4 changed files with 128 additions and 12 deletions

View File

@@ -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):

View File

@@ -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

View File

@@ -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])

View File

@@ -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,