From a9d84c49617abdec17bc7c2e22a46bb822f88baa Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 18 Oct 2017 23:41:56 +0200 Subject: [PATCH 1/3] alternative panel config form --- rowers/forms.py | 20 +++++++ rowers/templates/workflowconfig2.html | 76 +++++++++++++++++++++++++++ rowers/urls.py | 1 + rowers/views.py | 59 +++++++++++++++++++-- 4 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 rowers/templates/workflowconfig2.html diff --git a/rowers/forms.py b/rowers/forms.py index 3f2ab3ca..f06ae90c 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -11,6 +11,7 @@ from django.forms import ModelForm import dataprep import types import datetime +from django.forms import formset_factory # login form class LoginForm(forms.Form): @@ -128,6 +129,25 @@ class WorkFlowMiddlePanelForm(forms.Form): panels = defaultmiddle super(WorkFlowMiddlePanelForm,self).__init__(*args, **kwargs) + +class WorkFlowLeftPanelElement(forms.Form): + panelchoices = tuple(list(workflowleftpanel)+[(None,'None')]) + + panel = forms.ChoiceField( + label='', + choices=panelchoices, + initial=None, + ) + +class WorkFlowMiddlePanelElement(forms.Form): + panelchoices = tuple(list(workflowmiddlepanel)+[(None,'None')]) + + panel = forms.ChoiceField( + label='', + choices=panelchoices, + initial=None, + ) + # The form to indicate additional actions to be performed immediately # after a successful upload diff --git a/rowers/templates/workflowconfig2.html b/rowers/templates/workflowconfig2.html new file mode 100644 index 00000000..67153891 --- /dev/null +++ b/rowers/templates/workflowconfig2.html @@ -0,0 +1,76 @@ +{% extends "base.html" %} + +{% block title %}Change Rower Export Settings{% endblock %} + +{% block content %} + + + +{{ formmiddle.media }} + +
+ {% if workoutid %} + + {% endif %} +
+

Workflow Page Configuration

+
+

Left Panel

+

+ {{ leftpanel_formset.management_form }} +

+
+ {% for leftpanel_form in leftpanel_formset %} +
+ + {{ leftpanel_form.as_table }} +
+
+ {% endfor %} + {% csrf_token %} + +
+
+ +
+

Middle Panel

+

+ {{ middlepanel_formset.management_form }} +

+
+ {% for middlepanel_form in middlepanel_formset %} +
+ + {{ middlepanel_form.as_table }} +
+
+ {% endfor %} + {% csrf_token %} + +
+
+ +
+
+ + + + + + + + +{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 2331bc34..1691e9ae 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -313,6 +313,7 @@ urlpatterns = [ url(r'^me/c2refresh/$',views.rower_c2_token_refresh), url(r'^me/favoritecharts/$',views.rower_favoritecharts_view), url(r'^me/workflowconfig$',views.workout_workflow_config_view), + url(r'^me/workflowconfig2$',views.workout_workflow_config2_view), url(r'^email/send/$', views.sendmail), url(r'^email/thankyou/$', TemplateView.as_view(template_name='thankyou.html'), name='thankyou'), url(r'^email/$', TemplateView.as_view(template_name='email.html'), name='email'), diff --git a/rowers/views.py b/rowers/views.py index 3b84a33c..e502e55f 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -23,6 +23,7 @@ from django.contrib.auth import authenticate, login, logout from rowers.forms import ( LoginForm,DocumentsForm,UploadOptionsForm, TeamUploadOptionsForm,WorkFlowLeftPanelForm,WorkFlowMiddlePanelForm, + WorkFlowLeftPanelElement,WorkFlowMiddlePanelElement, ) from django.core.urlresolvers import reverse from django.core.exceptions import PermissionDenied @@ -5864,6 +5865,7 @@ def workout_workflow_config_view(request): r = getrower(request.user) + if request.method == 'POST' and 'leftpanel' in request.POST: formleft = WorkFlowLeftPanelForm(request.POST) if formleft.is_valid(): @@ -5877,20 +5879,71 @@ def workout_workflow_config_view(request): r.workflowmiddlepanel = middlepanel r.save() + formleft = WorkFlowLeftPanelForm(instance=r) formmiddle = WorkFlowMiddlePanelForm(instance=r) - - # Add processing of POST data + tmplt = 'workflowconfig.html' - return render(request,'workflowconfig.html', + + return render(request,tmplt, { 'rower':r, 'formleft':formleft, 'formmiddle':formmiddle, 'workoutid': workoutid, }) + +@login_required() +def workout_workflow_config2_view(request): + request.session['referer'] = absolute(request)['PATH'] + request.session[translation.LANGUAGE_SESSION_KEY] = USER_LANGUAGE + try: + workoutid = request.session['lastworkout'] + except KeyError: + workoutid = 0 + + + r = getrower(request.user) + + leftpanelform_data = [{'panel':panel} + for panel in r.workflowleftpanel] + + LeftPanelFormSet = formset_factory(WorkFlowLeftPanelElement,extra=0) + middlepanelform_data = [{'panel':panel} + for panel in r.workflowmiddlepanel] + + MiddlePanelFormSet = formset_factory(WorkFlowMiddlePanelElement,extra=0) + + if request.method == 'POST' and 'leftpanel' in request.POST: + formleft = WorkFlowLeftPanelSimpleForm(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 = WorkFlowMiddlePanelSimpleForm(request.POST) + if formmiddle.is_valid(): + middlepanel = formmiddle.cleaned_data['middlepanel'] + r.workflowmiddlepanel = middlepanel + r.save() + + leftpanel_formset = LeftPanelFormSet(initial=leftpanelform_data) + middlepanel_formset = MiddlePanelFormSet(initial=middlepanelform_data) + + + tmplt = 'workflowconfig2.html' + + return render(request,tmplt, + { + 'rower':r, + 'leftpanel_formset':leftpanel_formset, + 'middlepanel_formset':middlepanel_formset, + 'workoutid': workoutid, + }) + + # Workflow View @login_required() def workout_workflow_view(request,id): From be36e2d77f8fdc6b877e76ab7440a741769acda8 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 19 Oct 2017 19:00:19 +0200 Subject: [PATCH 2/3] somewhat working form config2 --- rowers/forms.py | 8 ++--- rowers/templates/workflowconfig2.html | 18 ++++------ rowers/views.py | 47 +++++++++++++++++---------- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/rowers/forms.py b/rowers/forms.py index f06ae90c..7b7f2cc4 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -131,21 +131,21 @@ class WorkFlowMiddlePanelForm(forms.Form): super(WorkFlowMiddlePanelForm,self).__init__(*args, **kwargs) class WorkFlowLeftPanelElement(forms.Form): - panelchoices = tuple(list(workflowleftpanel)+[(None,'None')]) + panelchoices = tuple(list(workflowleftpanel)+[('None','None')]) panel = forms.ChoiceField( label='', choices=panelchoices, - initial=None, + initial='None', ) class WorkFlowMiddlePanelElement(forms.Form): - panelchoices = tuple(list(workflowmiddlepanel)+[(None,'None')]) + panelchoices = tuple(list(workflowmiddlepanel)+[('None','None')]) panel = forms.ChoiceField( label='', choices=panelchoices, - initial=None, + initial='None', ) diff --git a/rowers/templates/workflowconfig2.html b/rowers/templates/workflowconfig2.html index 67153891..e9465081 100644 --- a/rowers/templates/workflowconfig2.html +++ b/rowers/templates/workflowconfig2.html @@ -6,7 +6,7 @@ -{{ formmiddle.media }} +
{% if workoutid %} @@ -20,10 +20,8 @@

Workflow Page Configuration

Left Panel

-

- {{ leftpanel_formset.management_form }} -

+ {{ leftpanel_formset.management_form }} {% for leftpanel_form in leftpanel_formset %}
@@ -38,10 +36,8 @@

Middle Panel

-

- {{ middlepanel_formset.management_form }} -

+ {{ middlepanel_formset.management_form }} {% for middlepanel_form in middlepanel_formset %}
@@ -61,12 +57,12 @@ diff --git a/rowers/views.py b/rowers/views.py index e502e55f..826d2a3c 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5906,31 +5906,42 @@ def workout_workflow_config2_view(request): r = getrower(request.user) + MiddlePanelFormSet = formset_factory(WorkFlowMiddlePanelElement,extra=1) + LeftPanelFormSet = formset_factory(WorkFlowLeftPanelElement,extra=1) + + + if request.method == 'POST': + wasmiddle = [1 for key,value in request.POST.items() if 'middlepanel' in key.lower()] + wasleft = [1 for key,valye in request.POST.items() if 'leftpanel' in key.lower()] + if wasmiddle: + middlepanel_formset = MiddlePanelFormSet(request.POST, + prefix='middlepanel') + newmiddlepanel = [] + if middlepanel_formset.is_valid(): + for form in middlepanel_formset: + value = form.cleaned_data.get('panel') + if value != 'None': + newmiddlepanel.append(value) + + + newmiddlepanel = [i for i in newmiddlepanel if i != None] + r.workflowmiddlepanel = newmiddlepanel + try: + r.save() + except IntegrityError: + messages.error(request,'Something went wrong') + leftpanelform_data = [{'panel':panel} for panel in r.workflowleftpanel] - LeftPanelFormSet = formset_factory(WorkFlowLeftPanelElement,extra=0) middlepanelform_data = [{'panel':panel} for panel in r.workflowmiddlepanel] - MiddlePanelFormSet = formset_factory(WorkFlowMiddlePanelElement,extra=0) - - if request.method == 'POST' and 'leftpanel' in request.POST: - formleft = WorkFlowLeftPanelSimpleForm(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 = WorkFlowMiddlePanelSimpleForm(request.POST) - if formmiddle.is_valid(): - middlepanel = formmiddle.cleaned_data['middlepanel'] - r.workflowmiddlepanel = middlepanel - r.save() - - leftpanel_formset = LeftPanelFormSet(initial=leftpanelform_data) - middlepanel_formset = MiddlePanelFormSet(initial=middlepanelform_data) + leftpanel_formset = LeftPanelFormSet(initial=leftpanelform_data, + prefix='leftpanel') + middlepanel_formset = MiddlePanelFormSet(initial=middlepanelform_data, + prefix='middlepanel') tmplt = 'workflowconfig2.html' From 3ff3dcff824aff068c7d6b8149b1bc4cf24300f3 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 20 Oct 2017 07:56:19 +0200 Subject: [PATCH 3/3] simple config page (working) --- rowers/templates/workflow.html | 2 +- rowers/templates/workflowconfig2.html | 28 +++++---------------------- rowers/views.py | 17 ++++++++++++++++ 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/rowers/templates/workflow.html b/rowers/templates/workflow.html index ebd65dd1..01a0d55c 100644 --- a/rowers/templates/workflow.html +++ b/rowers/templates/workflow.html @@ -33,7 +33,7 @@ {% block left_panel %} {% for templateName in leftTemplates %} diff --git a/rowers/templates/workflowconfig2.html b/rowers/templates/workflowconfig2.html index e9465081..86b1e7f5 100644 --- a/rowers/templates/workflowconfig2.html +++ b/rowers/templates/workflowconfig2.html @@ -18,17 +18,16 @@ {% endif %}

Workflow Page Configuration

+

On this page, you can configure the content of your "Workflow" page + for each workout. If you want to remove an element, change it to "None". + You can add one new element at a time.

Left Panel

{{ leftpanel_formset.management_form }} - {% for leftpanel_form in leftpanel_formset %} -
- {{ leftpanel_form.as_table }} + {{ leftpanel_formset.as_table }}
-
- {% endfor %} {% csrf_token %}
@@ -38,13 +37,9 @@

Middle Panel

{{ middlepanel_formset.management_form }} - {% for middlepanel_form in middlepanel_formset %} -
- {{ middlepanel_form.as_table }} + {{ middlepanel_formset.as_table }}
-
- {% endfor %} {% csrf_token %}
@@ -52,19 +47,6 @@
- - - - diff --git a/rowers/views.py b/rowers/views.py index 826d2a3c..0faed633 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -5930,6 +5930,23 @@ def workout_workflow_config2_view(request): r.save() except IntegrityError: messages.error(request,'Something went wrong') + if wasleft: + leftpanel_formset = LeftPanelFormSet(request.POST, + prefix='leftpanel') + newleftpanel = [] + if leftpanel_formset.is_valid(): + for form in leftpanel_formset: + value = form.cleaned_data.get('panel') + if value != 'None': + newleftpanel.append(value) + + + newleftpanel = [i for i in newleftpanel if i != None] + r.workflowleftpanel = newleftpanel + try: + r.save() + except IntegrityError: + messages.error(request,'Something went wrong') leftpanelform_data = [{'panel':panel} for panel in r.workflowleftpanel]