basic announcements functionality
This commit is contained in:
BIN
logos/logofornk.gif
Normal file
BIN
logos/logofornk.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
BIN
logos/logofornk.jpg
Normal file
BIN
logos/logofornk.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.7 KiB |
BIN
logos/logofornk.png
Normal file
BIN
logos/logofornk.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.1 KiB |
BIN
logos/logofornk.xcf
Normal file
BIN
logos/logofornk.xcf
Normal file
Binary file not shown.
@@ -2,7 +2,7 @@ from django.contrib import admin
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
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.
|
||||
|
||||
@@ -19,9 +19,13 @@ class WorkoutAdmin(admin.ModelAdmin):
|
||||
|
||||
class FavoriteChartAdmin(admin.ModelAdmin):
|
||||
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.register(User,UserAdmin)
|
||||
admin.site.register(Workout,WorkoutAdmin)
|
||||
admin.site.register(GraphImage)
|
||||
admin.site.register(FavoriteChart,FavoriteChartAdmin)
|
||||
admin.site.register(SiteAnnouncement,SiteAnnouncementAdmin)
|
||||
|
||||
@@ -14,6 +14,8 @@ from django.conf import settings
|
||||
from sqlalchemy import create_engine
|
||||
import sqlalchemy as sa
|
||||
from sqlite3 import OperationalError
|
||||
from django.utils import timezone
|
||||
import datetime
|
||||
|
||||
user = settings.DATABASES['default']['USER']
|
||||
password = settings.DATABASES['default']['PASSWORD']
|
||||
@@ -499,3 +501,16 @@ class RowerForm(ModelForm):
|
||||
raise forms.ValidationError("TR should be lower than AN")
|
||||
if an>=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)
|
||||
|
||||
@@ -22,36 +22,37 @@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h1>My Workouts</h1>
|
||||
|
||||
{% if workouts %}
|
||||
<table width="70%" class="listtable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> Date</th>
|
||||
<th> Time</th>
|
||||
<th> Name</th>
|
||||
<th> Type</th>
|
||||
<th> Distance </th>
|
||||
<th> Duration </th>
|
||||
<th> Avg HR </th>
|
||||
<th> Max HR </th>
|
||||
<th> Delete</th>
|
||||
<th> Export</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</tbody>
|
||||
{% for workout in workouts %}
|
||||
<tr>
|
||||
<td> {{ workout.date }} </td>
|
||||
<td> {{ workout.starttime }} </td>
|
||||
<td>
|
||||
{% if user.rower.rowerplan == 'pro' %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td>
|
||||
{% else %}
|
||||
<a href="/rowers/workout/{{ workout.id }}/edit">{{ workout.name }}</a> </td>
|
||||
{% endif %}
|
||||
<div class="grid_8 alpha">
|
||||
<h1>My Workouts</h1>
|
||||
|
||||
{% if workouts %}
|
||||
<table width="95%" class="listtable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> Date</th>
|
||||
<th> Time</th>
|
||||
<th> Name</th>
|
||||
<th> Type</th>
|
||||
<th> Distance </th>
|
||||
<th> Duration </th>
|
||||
<th> Avg HR </th>
|
||||
<th> Max HR </th>
|
||||
<th> Delete</th>
|
||||
<th> Export</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for workout in workouts %}
|
||||
<tr>
|
||||
<td> {{ workout.date }} </td>
|
||||
<td> {{ workout.starttime }} </td>
|
||||
<td>
|
||||
{% if user.rower.rowerplan == 'pro' %}
|
||||
<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.distance }}m</td>
|
||||
<td> {{ workout.duration |durationprint:"%H:%M:%S.%f" }} </td>
|
||||
@@ -71,6 +72,17 @@
|
||||
<p> No workouts found </p>
|
||||
{% endif %}
|
||||
</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">
|
||||
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||
method="get" accept-charset="utf-8">
|
||||
|
||||
@@ -20,7 +20,7 @@ from rowers.forms import PredictedPieceForm,DateRangeForm,DeltaDaysForm
|
||||
from rowers.forms import SummaryStringForm,IntervalUpdateForm,StrokeDataForm
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,FavoriteChart
|
||||
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
|
||||
import StringIO
|
||||
from django.contrib.auth.decorators import login_required,user_passes_test
|
||||
@@ -1988,6 +1988,9 @@ def workouts_view(request,message='',successmessage='',
|
||||
except EmptyPage:
|
||||
workouts = paginator.page(paginator.num_pages)
|
||||
|
||||
|
||||
announcements = SiteAnnouncement.objects.all().order_by("-created")
|
||||
|
||||
return render(request, 'list_workouts.html',
|
||||
{'workouts': workouts,
|
||||
'message': message,
|
||||
@@ -1995,6 +1998,7 @@ def workouts_view(request,message='',successmessage='',
|
||||
'dateform':dateform,
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'announcements':announcements,
|
||||
})
|
||||
except Rower.DoesNotExist:
|
||||
return HttpResponse("User has no rower instance")
|
||||
@@ -3152,12 +3156,12 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
||||
|
||||
|
||||
except Workout.DoesNotExist:
|
||||
form = WorkoutForm(
|
||||
initial = {'workouttype' : 'rower'}
|
||||
)
|
||||
return render(request,
|
||||
'workout_form.html',
|
||||
{'form':form})
|
||||
message = "workout doesn't exist"
|
||||
url = reverse(workouts_view,
|
||||
kwargs = {
|
||||
'message': str(message)
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(promember,login_url="/",redirect_field_name=None)
|
||||
def workout_add_otw_powerplot_view(request,id):
|
||||
|
||||
Reference in New Issue
Block a user