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

View File

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

View File

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

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