diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-03 03:18:43 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-01-03 03:18:43 +0100 |
commit | c32287904f82f9db1090217f2cc4a36589d16d8a (patch) | |
tree | 897092dfa26b9bce6578b03a09881733e88f9da0 | |
parent | 6c5de269a1b4ffa1d374c68525870978ea872543 (diff) | |
download | Ishtar-c32287904f82f9db1090217f2cc4a36589d16d8a.tar.bz2 Ishtar-c32287904f82f9db1090217f2cc4a36589d16d8a.zip |
Change merlin-session-wizard to django-formwizard
-rw-r--r-- | ishtar/furnitures/forms.py | 68 | ||||
-rw-r--r-- | ishtar/furnitures/urls.py | 12 | ||||
-rw-r--r-- | ishtar/furnitures/views.py | 22 | ||||
-rw-r--r-- | ishtar/templates/file_done.html | 16 | ||||
-rw-r--r-- | ishtar/templates/file_wizard.html | 19 | ||||
-rw-r--r-- | static/media/style.css | 11 |
6 files changed, 88 insertions, 60 deletions
diff --git a/ishtar/furnitures/forms.py b/ishtar/furnitures/forms.py index b78a06644..08fb912a7 100644 --- a/ishtar/furnitures/forms.py +++ b/ishtar/furnitures/forms.py @@ -24,13 +24,15 @@ import datetime from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _ -from django.template import Context +from django.template import Context, RequestContext from django.shortcuts import render_to_response from django import forms from merlin.wizards.utils import Step as BasicStep from merlin.wizards.session import SessionWizard +from formwizard.forms import NamedUrlSessionFormWizard + import models import widgets from ishtar import settings @@ -39,34 +41,37 @@ from django.utils.functional import lazy reverse_lazy = lazy(reverse, unicode) -class Step(BasicStep): - """ - Add a label to steps - """ - def __init__(self, idx, label, form): - self.label = label - super(Step, self).__init__(idx, form) - -class Wizard(SessionWizard): - def process_show_form(self, request, step, form): +class Wizard(NamedUrlSessionFormWizard): + def get_template_context(self, request, storage, form=None): + context = super(Wizard, self).get_template_context(request, storage, + form) + step = self.get_first_step(request, storage) + current_step = storage.get_current_step() + context.update({'current_step':self.form_list[current_step]}) + if step == current_step: + return context previous_steps = [] - for stp in self.base_steps: - if stp == step: - return Context({'previous_steps':previous_steps, - 'current_step':stp}) - previous_steps.append(stp) - return Context({'previous_steps':previous_steps}) + while step: + if step == current_step: + context.update({'previous_steps':previous_steps}) + return context + else: + previous_steps.append(self.form_list[step]) + step = self.get_next_step(request, storage, step) + context.update({'previous_steps':previous_steps}) + return context class FileWizard(Wizard): - def get_template(self, request, step, form): - return ['file_wizard_%s.html' % step, - 'file_wizard.html'] - - def done(self, request, form_list): - return render_to_response('done.html', { - 'form_data': [form.cleaned_data for form in form_list], - }) - + def get_template(self, request, form): + return ['file_wizard.html'] + + def done(self, request, storage, form_list): + return render_to_response( + 'file_done.html', + {'form_list': [form.cleaned_data for form in form_list]}, + context_instance=RequestContext(request) + ) + """ def process_step(self, request, step, form): if models.PREVENTIVE and 'file_type' in form.cleaned_data: file_type = int(form.cleaned_data['file_type']) @@ -79,9 +84,10 @@ class FileWizard(Wizard): else: preventive_step = self.get_step(request, 'preventive') self.remove_step(request, preventive_step) - +""" class FileForm1(forms.Form): + form_label = _("General") in_charge = forms.IntegerField(label=_("Person in charge"), widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person'), associated_model=models.Person), @@ -97,8 +103,8 @@ class FileForm1(forms.Form): comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea, required=False) - class FileForm2(forms.Form): + form_label = _("Address") town = forms.IntegerField(label=_(u"Town"), widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-town'), associated_model=models.Town), @@ -106,7 +112,9 @@ class FileForm2(forms.Form): total_surface = forms.IntegerField(label=_("Total surface")) address = forms.CharField(label=_(u"Address"), widget=forms.Textarea) + class FileForm3(forms.Form): + form_label = _("Preventive informations") general_contractor = forms.IntegerField(label=_(u"General contractor"), widget=widgets.JQueryAutoComplete( reverse_lazy('autocomplete-organization'), @@ -118,3 +126,7 @@ class FileForm3(forms.Form): saisine_type = forms.ChoiceField(label=_("Saisine type"), choices=models.SaisineType.get_types()) reception_date = forms.DateField(label=_(u"Reception date")) + +file_creation_wizard = FileWizard([FileForm1, FileForm2, FileForm3], + url_name='file_creation') + diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index 5d1e0c710..aaa0d65c2 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -21,20 +21,22 @@ from django.conf.urls.defaults import * from ishtar.urls import BASE_URL from menus import menu +from forms import file_creation_wizard urlpatterns, actions = [], [] +urlpatterns = patterns('', + url(r'^file_creation/(?P<step>.+)$', file_creation_wizard, + name='file_creation'), + ) for section in menu.childs: for menu_item in section.childs: actions.append(menu_item.idx) actions = r"|".join(actions) urlpatterns += patterns('ishtar.furnitures.views', - url(BASE_URL + r'(?P<action_slug>' + actions + r')/(?P<slug>[A-Za-z0-9_-]+)/' +\ - r'(?P<obj_id>\d)/$', 'action', name='action-bounded-form'), - url(BASE_URL + r'(?P<action_slug>' + actions + r')/(?P<slug>[A-Za-z0-9_-]+)/$', - 'action', name='action-form'), - url(BASE_URL + r'(?P<action_slug>' + actions + r')/$', 'action', name='action'), + url(BASE_URL + r'(?P<action_slug>' + actions + r')/$', 'action', + name='action'), url(BASE_URL + r'autocomplete-persone/$', 'autocomplete_person', name='autocomplete-person'), url(BASE_URL + r'autocomplete-town/$', 'autocomplete_town', diff --git a/ishtar/furnitures/views.py b/ishtar/furnitures/views.py index bee8a305e..832089ea8 100644 --- a/ishtar/furnitures/views.py +++ b/ishtar/furnitures/views.py @@ -31,7 +31,7 @@ from django.core import serializers from ishtar import settings from menus import menu -from forms import Step, FileForm1, FileForm2, FileForm3, FileWizard +from forms import file_creation_wizard import models def index(request): @@ -111,31 +111,11 @@ def action(request, action_slug, obj_id=None, *args, **kwargs): associated_wizard = action_slug + '_wizard' dct = {} globals_dct = globals() - if associated_wizard in globals_dct: - wizard = globals_dct[associated_wizard] - if ('slug' not in kwargs or not kwargs['slug']): - current_step = None - if wizard.id in request.session \ - and 'current_step' in request.session[wizard.id] \ - and request.session[wizard.id]['current_step']: - current_step = request.session[wizard.id]['current_step'].slug - else: - current_step = wizard.base_steps[0].slug - return redirect('action-form', action_slug, current_step) - elif wizard.id in request.session: - for step in wizard.base_steps: - if step.slug == kwargs['slug']: - request.session[wizard.id]['current_step'] = step if action_slug in globals_dct: return globals_dct[action_slug](request, dct, obj_id, *args, **kwargs) return render_to_response('index.html', dct, context_instance=RequestContext(request)) -file_creation_wizard = FileWizard([ - Step('general', _(u"General"), FileForm1), - Step('localisation', _(u"Localisation"), FileForm2), - Step('preventive', _(u"Preventive informations"), FileForm3)]) - def file_creation(request, dct, obj_id, *args, **kwargs): return file_creation_wizard(request, *args, **kwargs) diff --git a/ishtar/templates/file_done.html b/ishtar/templates/file_done.html new file mode 100644 index 000000000..6bbeb53d4 --- /dev/null +++ b/ishtar/templates/file_done.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} +{% load i18n %} +{% block content %} +<ul id='form_path'> +{% for step in previous_steps %} + <li>» <a href='?form_prev_step={{forloop.counter0}}'>{{step.form_label}}</a></li> +{% endfor %} + <li class='current'>» <a href='#'>{{current_step.form_label}}</a></li> +</ul> +<div class='form'> +<pre> +{{ form_list|pprint }} +</pre> +</form> +</div> +{% endblock %} diff --git a/ishtar/templates/file_wizard.html b/ishtar/templates/file_wizard.html index 4bb6a59c8..9ebf4adb3 100644 --- a/ishtar/templates/file_wizard.html +++ b/ishtar/templates/file_wizard.html @@ -2,20 +2,27 @@ {% load i18n %} {% load range %} {% block content %} +<form action="." method="post">{% csrf_token %} <ul id='form_path'> -{% for step in extra_context.previous_steps %} - <li>» <a href='{%url action-form CURRENT_ACTION step.slug%}'>{{step.label}}</a></li> +{% for step in previous_steps %} + <li>» <button name="form_prev_step" value="{{forloop.counter0}}">{{step.form_label}}</button></li> {% endfor %} - <li class='current'>» <a href='{%url action-form CURRENT_ACTION extra_context.current_step.slug%}'>{{extra_context.current_step.label}}</a></li> + <li class='current'>» <a href='#'>{{current_step.form_label}}</a></li> </ul> <div class='form'> -<form action="." method="post">{% csrf_token %} <table> -{{ form }} +{% if form.forms %} + {{ form.management_form }} + {% for formsetform in form.forms %} + {{ formsetform.as_table }} + {% endfor %} +{% else %} + {{ form.as_table }} +{% endif %} </table> <input type="hidden" name="{{ step_field }}" value="{{ step0 }}" /> {{ previous_fields|safe }} <input type="submit" value="{% trans "Validate" %}"/> -</form> </div> +</form> {% endblock %} diff --git a/static/media/style.css b/static/media/style.css index 5caaa1353..47f30b2ee 100644 --- a/static/media/style.css +++ b/static/media/style.css @@ -13,6 +13,17 @@ a { color:#D14; } +button { + text-decoration:none; + color:#D14; + border:none; + background-color:white; + font-size: 11pt; + cursor:pointer; + padding:0; + margin:0; +} + caption { color:#922; font-weight:bold; |