diff --git a/rowers/forms.py b/rowers/forms.py index efc6ac85..ebcceaea 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1,4 +1,5 @@ from django import forms +from django.contrib.admin.widgets import FilteredSelectMultiple from rowers.models import Workout from rowers.rows import validate_file_extension,must_be_csv from django.contrib.auth.forms import UserCreationForm @@ -58,37 +59,72 @@ class DocumentsForm(forms.Form): fields = ['title','file','workouttype','fileformat'] from utils import workflowleftpanel,workflowmiddlepanel + +defaultleft = [p[0] for p in workflowleftpanel] +defaultmiddle = [p[0] for p in workflowmiddlepanel] + # Form to change Workflow page layout class WorkFlowLeftPanelForm(forms.Form): - panels = ['panel_editbuttons.html','panel_stats.html','panel_staticchart.html'] - leftpanel = forms.MultipleChoiceField(label='Left Panel', - choices=workflowleftpanel, - initial=panels) + panels = defaultleft + + leftpanel = forms.MultipleChoiceField( + label='', + choices=workflowleftpanel, + initial=panels, + widget=FilteredSelectMultiple( + ('elements'), + False + ) + ) + + class Media: + css = { + 'all':['admin/css/widgets.css',] +# 'css/uid-manage-form.css'], + } + js = ['/admin/jsi18n/'] + def __init__(self, *args, **kwargs): if 'instance' in kwargs: r = kwargs.pop('instance') panels = r.workflowleftpanel + self.base_fields['leftpanel'].initial=panels else: - panels = ['panel_editbuttons.html','panel_stats.html','panel_staticchart.html'] + panels = defaultleft + super(WorkFlowLeftPanelForm,self).__init__(*args, **kwargs) class WorkFlowMiddlePanelForm(forms.Form): - panels = ['panel_statcharts.html', - 'flexthumbnails.html', - 'panel_summary.html'] + panels = defaultmiddle + + + middlepanel = forms.MultipleChoiceField( + label='', + choices=workflowmiddlepanel, + initial=panels, + widget=FilteredSelectMultiple( + ('elements'), + False + ) + ) + + class Media: + css = { + 'all':['admin/css/widgets.css',] +# 'css/uid-manage-form.css'], + } + js = ['/admin/jsi18n/'] - middlepanel = forms.MultipleChoiceField(label='Middle Panel', - choices=workflowmiddlepanel, - initial=panels) def __init__(self, *args, **kwargs): if 'instance' in kwargs: r = kwargs.pop('instance') - panels = r.workflowleftpanel + panels = r.workflowmiddlepanel + self.base_fields['middlepanel'].initial=panels else: - panels = ['panel_editbuttons.html','panel_stats.html','panel_staticchart.html'] + panels = defaultmiddle super(WorkFlowMiddlePanelForm,self).__init__(*args, **kwargs) diff --git a/rowers/models.py b/rowers/models.py index 02f50de6..dae97b14 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -196,7 +196,11 @@ class TeamRequest(models.Model): issuedate = models.DateField(default=timezone.now) code = models.CharField(max_length=150,unique=True) - +from utils import workflowleftpanel,workflowmiddlepanel + +defaultleft = [p[0] for p in workflowleftpanel] +defaultmiddle = [p[0] for p in workflowmiddlepanel] + # Extension of User with rowing specific data class Rower(models.Model): weightcategories = ( @@ -276,16 +280,9 @@ class Rower(models.Model): 'Pwr AN']) # Site Settings - workflowleftpanel = TemplateListField(default=[ - 'panel_statcharts.html', - 'flexthumbnails.html', - 'panel_summary.html']) + workflowleftpanel = TemplateListField(default=defaultleft) - workflowmiddlepanel = TemplateListField(default=[ - 'panel_editbuttons.html', - 'panel_stats.html', - 'panel_staticchart.html', - ]) + workflowmiddlepanel = TemplateListField(default=defaultmiddle) # Access tokens c2token = models.CharField(default='',max_length=200,blank=True,null=True) diff --git a/rowers/templates/workflowconfig.html b/rowers/templates/workflowconfig.html index de43183a..bba78091 100644 --- a/rowers/templates/workflowconfig.html +++ b/rowers/templates/workflowconfig.html @@ -4,17 +4,16 @@ {% block content %} + + +{{ formmiddle.media }}

Workflow Page Configuration

-

- Here, you can configure which elements, and in which order, are visible on the Workflow page. -

-

- Select the elements you want to have in each panel. You can select multiple by holding down Control while clicking on an item. Similarly, you can unselect one item by holding down Control while clicking. Use the arrows to change the order by moving selected items up, resp down. Press the Save button to store your configuration. -

+ +

Left Panel

-
+

{% if formleft.errors %}

@@ -28,28 +27,45 @@ {% csrf_token %}

-
- Move Up
- Move Down +
+ Move Up
+ Move Down
-
+
+ +
+
+ +
+ +
+ +
+

Middle Panel

+
+

{% if formmiddle.errors %}

Please correct the error{{ formmiddle.errors|pluralize }} below.

{% endif %} - + - {{ formmiddle.as_table }} -
+ {{ formmiddle.as_table }} + + {% csrf_token %}
-
- Move Up
- Move Down +
+ Move Up
+ Move Down
+
+ +
+
diff --git a/rowers/views.py b/rowers/views.py index f5fd6bd6..1966bdf7 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5858,11 +5858,25 @@ def workout_workflow_config_view(request): request.session['referer'] = absolute(request)['PATH'] request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE r = getrower(request.user) - formleft = WorkFlowLeftPanelForm(instance=r) - formmiddle = WorkFlowMiddlePanelForm() + if request.method == 'POST' and 'leftpanel' in request.POST: + formleft = WorkFlowLeftPanelForm(request.POST) + if formleft.is_valid(): + leftpanel = formleft.cleaned_data['leftpanel'] + r.workflowleftpanel = leftpanel + r.save() + if request.method == 'POST' and 'middlepanel' in request.POST: + formmiddle = WorkFlowMiddlePanelForm(request.POST) + if formmiddle.is_valid(): + middlepanel = formmiddle.cleaned_data['middlepanel'] + r.workflowmiddlepanel = middlepanel + r.save() + + formleft = WorkFlowLeftPanelForm(instance=r) + formmiddle = WorkFlowMiddlePanelForm(instance=r) - # Add processing of POST data + # Add processing of POST data + return render(request,'workflowconfig.html', { 'rower':r, @@ -5909,9 +5923,9 @@ def workout_workflow_view(request,id): statcharts = GraphImage.objects.filter(workout=row) # This will be user configurable in the future - middleTemplates = r.workflowleftpanel + middleTemplates = r.workflowmiddlepanel - leftTemplates = r.workflowmiddlepanel + leftTemplates = r.workflowleftpanel return render(request, 'workflow.html',