Private
Public Access
1
0

basic announcements functionality

This commit is contained in:
Sander Roosendaal
2016-12-19 22:17:15 +01:00
parent 886fdc5881
commit fa542427e9
8 changed files with 72 additions and 37 deletions

BIN
logos/logofornk.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
logos/logofornk.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
logos/logofornk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
logos/logofornk.xcf Normal file

Binary file not shown.

View File

@@ -2,7 +2,7 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User from django.contrib.auth.models import User
from .models import Rower, Workout,GraphImage,FavoriteChart from .models import Rower, Workout,GraphImage,FavoriteChart,SiteAnnouncement
# Register your models here. # Register your models here.
@@ -19,9 +19,13 @@ class WorkoutAdmin(admin.ModelAdmin):
class FavoriteChartAdmin(admin.ModelAdmin): class FavoriteChartAdmin(admin.ModelAdmin):
list_display = ('user','xparam','yparam1','yparam2','plottype','workouttype','reststrokes') list_display = ('user','xparam','yparam1','yparam2','plottype','workouttype','reststrokes')
class SiteAnnouncementAdmin(admin.ModelAdmin):
list_display = ('announcement','created','modified','expires')
admin.site.unregister(User) admin.site.unregister(User)
admin.site.register(User,UserAdmin) admin.site.register(User,UserAdmin)
admin.site.register(Workout,WorkoutAdmin) admin.site.register(Workout,WorkoutAdmin)
admin.site.register(GraphImage) admin.site.register(GraphImage)
admin.site.register(FavoriteChart,FavoriteChartAdmin) admin.site.register(FavoriteChart,FavoriteChartAdmin)
admin.site.register(SiteAnnouncement,SiteAnnouncementAdmin)

View File

@@ -14,6 +14,8 @@ from django.conf import settings
from sqlalchemy import create_engine from sqlalchemy import create_engine
import sqlalchemy as sa import sqlalchemy as sa
from sqlite3 import OperationalError from sqlite3 import OperationalError
from django.utils import timezone
import datetime
user = settings.DATABASES['default']['USER'] user = settings.DATABASES['default']['USER']
password = settings.DATABASES['default']['PASSWORD'] password = settings.DATABASES['default']['PASSWORD']
@@ -499,3 +501,16 @@ class RowerForm(ModelForm):
raise forms.ValidationError("TR should be lower than AN") raise forms.ValidationError("TR should be lower than AN")
if an>=max: if an>=max:
raise forms.ValidationError("AN should be lower than Max") raise forms.ValidationError("AN should be lower than Max")
class SiteAnnouncement(models.Model):
created = models.DateField(default=timezone.now)
announcement = models.TextField(max_length=140)
expires = models.DateField(default=timezone.now)
modified = models.DateField(default=timezone.now)
def save(self, *args, **kwargs):
if not self.id:
self.created = timezone.now()
self.expires = timezone.now()+datetime.timedelta(days=10)
self.modified = timezone.now()
return super(SiteAnnouncement,self).save(*args, **kwargs)

View File

@@ -22,36 +22,37 @@
</div> </div>
</div> </div>
<h1>My Workouts</h1>
{% if workouts %} <div class="grid_8 alpha">
<table width="70%" class="listtable"> <h1>My Workouts</h1>
<thead>
<tr> {% if workouts %}
<th> Date</th> <table width="95%" class="listtable">
<th> Time</th> <thead>
<th> Name</th> <tr>
<th> Type</th> <th> Date</th>
<th> Distance </th> <th> Time</th>
<th> Duration </th> <th> Name</th>
<th> Avg HR </th> <th> Type</th>
<th> Max HR </th> <th> Distance </th>
<th> Delete</th> <th> Duration </th>
<th> Export</th> <th> Avg HR </th>
</tr> <th> Max HR </th>
</thead> <th> Delete</th>
</tbody> <th> Export</th>
{% for workout in workouts %} </tr>
<tr> </thead>
<td> {{ workout.date }} </td> <tbody>
<td> {{ workout.starttime }} </td> {% for workout in workouts %}
<td> <tr>
{% if user.rower.rowerplan == 'pro' %} <td> {{ workout.date }} </td>
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td> <td> {{ workout.starttime }} </td>
{% else %} <td>
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td> {% if user.rower.rowerplan == 'pro' %}
{% endif %} <a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td>
{% else %}
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td>
{% endif %}
<td> {{ workout.workouttype }} </td> <td> {{ workout.workouttype }} </td>
<td> {{ workout.distance }}m</td> <td> {{ workout.distance }}m</td>
<td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td> <td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td>
@@ -71,6 +72,17 @@
<p> No workouts found </p> <p> No workouts found </p>
{% endif %} {% endif %}
</div> </div>
<div class="grid_4 omega">
<h1>Announcements</h1>
{% if announcements %}
{% for a in announcements %}
<i>{{ a.created }}</i>
<p>{{ a.announcement }}</p>
{% endfor %}
{% endif %}
</div>
<div class="grid_6 alpha"> <div class="grid_6 alpha">
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}" <form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
method="get" accept-charset="utf-8"> method="get" accept-charset="utf-8">

View File

@@ -20,7 +20,7 @@ from rowers.forms import PredictedPieceForm,DateRangeForm,DeltaDaysForm
from rowers.forms import SummaryStringForm,IntervalUpdateForm,StrokeDataForm 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 RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm from rowers.models import RowerPowerForm,RowerForm,GraphImage,AdvancedWorkoutForm
from rowers.models import FavoriteForm,BaseFavoriteFormSet from rowers.models import FavoriteForm,BaseFavoriteFormSet,SiteAnnouncement
from django.forms.formsets import formset_factory from django.forms.formsets import formset_factory
import StringIO import StringIO
from django.contrib.auth.decorators import login_required,user_passes_test from django.contrib.auth.decorators import login_required,user_passes_test
@@ -1988,6 +1988,9 @@ def workouts_view(request,message='',successmessage='',
except EmptyPage: except EmptyPage:
workouts = paginator.page(paginator.num_pages) workouts = paginator.page(paginator.num_pages)
announcements = SiteAnnouncement.objects.all().order_by("-created")
return render(request, 'list_workouts.html', return render(request, 'list_workouts.html',
{'workouts': workouts, {'workouts': workouts,
'message': message, 'message': message,
@@ -1995,6 +1998,7 @@ def workouts_view(request,message='',successmessage='',
'dateform':dateform, 'dateform':dateform,
'startdate':startdate, 'startdate':startdate,
'enddate':enddate, 'enddate':enddate,
'announcements':announcements,
}) })
except Rower.DoesNotExist: except Rower.DoesNotExist:
return HttpResponse("User has no rower instance") return HttpResponse("User has no rower instance")
@@ -3152,12 +3156,12 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
except Workout.DoesNotExist: except Workout.DoesNotExist:
form = WorkoutForm( message = "workout doesn't exist"
initial = {'workouttype' : 'rower'} url = reverse(workouts_view,
) kwargs = {
return render(request, 'message': str(message)
'workout_form.html', })
{'form':form}) return HttpResponseRedirect(url)
@user_passes_test(promember,login_url="/",redirect_field_name=None) @user_passes_test(promember,login_url="/",redirect_field_name=None)
def workout_add_otw_powerplot_view(request,id): def workout_add_otw_powerplot_view(request,id):