From 13dee6305d73147e73f3fb59f2f63c1b7a7548c5 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 18 Oct 2017 15:44:51 +0200 Subject: [PATCH] workflow config form working --- rowers/forms.py | 62 ++++++++++++++++++++++------ rowers/models.py | 17 ++++---- rowers/templates/workflowconfig.html | 50 ++++++++++++++-------- rowers/views.py | 24 ++++++++--- 4 files changed, 108 insertions(+), 45 deletions(-) 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',