summaryrefslogtreecommitdiff
path: root/archaeological_files_pdl
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2014-12-28 01:15:07 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-05-06 15:38:32 +0200
commit3b557c928dc57942d4e9496b7730504bc44ad1eb (patch)
treecf7782840ce79aee720cf3b6c55571ab0b2e7c8e /archaeological_files_pdl
parent16fbb32b8ba00325a7b813825f288cb097699c98 (diff)
downloadIshtar-3b557c928dc57942d4e9496b7730504bc44ad1eb.tar.bz2
Ishtar-3b557c928dc57942d4e9496b7730504bc44ad1eb.zip
Work on dynamic (too much of ajax and JS...) person/organization widget
Diffstat (limited to 'archaeological_files_pdl')
-rw-r--r--archaeological_files_pdl/forms.py89
-rw-r--r--archaeological_files_pdl/templates/ishtar/blocks/JQueryCorporationPerson.js2
-rw-r--r--archaeological_files_pdl/templates/ishtar/blocks/JQueryNaturalPerson.js2
-rw-r--r--archaeological_files_pdl/templates/ishtar/blocks/JQueryPersonOrga.js65
-rw-r--r--archaeological_files_pdl/templates/ishtar/wizard/wizard_generalcontractor.html32
-rw-r--r--archaeological_files_pdl/views.py8
-rw-r--r--archaeological_files_pdl/wizards.py9
7 files changed, 200 insertions, 7 deletions
diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py
index aedf60ba1..fc4efff73 100644
--- a/archaeological_files_pdl/forms.py
+++ b/archaeological_files_pdl/forms.py
@@ -23,11 +23,13 @@ from django import forms
from django.core import validators
from django.utils.translation import ugettext_lazy as _
-from ishtar_common.models import Person
+from ishtar_common.models import Person, valid_id
from archaeological_files import models
-from ishtar_common.forms import get_now
+from ishtar_common.forms import get_now, reverse_lazy
from ishtar_common.forms_common import get_town_field
+from archaeological_files.forms import GENERAL_CONTRACTOR, \
+ RESPONSIBLE_PLANNING_SERVICE
from ishtar_common import widgets
@@ -65,7 +67,6 @@ class FileFormPreventiveType(forms.Form):
default='NP')
self.fields['permit_type'].help_text = models.PermitType.get_help()
-
class FileFormPlanning(forms.Form):
form_label = _(u"Planning")
associated_models = {'town':models.Town}
@@ -87,3 +88,85 @@ class FileFormPlanning(forms.Form):
label=_(u"Total developed surface (m²)"),
required=False, validators=[validators.MinValueValidator(0),
validators.MaxValueValidator(999999999)])
+
+class FileFormGeneralContractor(forms.Form):
+ form_label = _(u"General contractor")
+ associated_models = {'general_contractor':models.Person}
+
+ def __init__(self, *args, **kwargs):
+
+ # get the status: natural person or corporation
+ DEFAULT_STATUS = 'natural'
+ current_status = ''
+ if 'data' in kwargs:
+ current_item_key = ((kwargs['prefix'] + '-') if kwargs.get('prefix')\
+ else '') + 'general_contractor'
+ if kwargs['data'] and kwargs['data'].get(current_item_key):
+ model = self.associated_models['general_contractor']
+ try:
+ item = model.objects.get(pk=kwargs['data'][current_item_key])
+ current_status = 'natural' if item.is_natural() \
+ else 'corporation'
+ except (model.DoesNotExist, ValueError):
+ pass
+
+ status = ''
+ if 'status' in kwargs:
+ status = kwargs.pop('status')
+ if current_status != status:
+ if kwargs.get('data'):
+ # status is different from the existing - clear fields
+ kwargs.pop('data')
+ elif current_status:
+ status = current_status
+ else:
+ status = DEFAULT_STATUS
+
+ if status not in ('natural', 'corporation'):
+ status = DEFAULT_STATUS
+ super(FileFormGeneralContractor, self).__init__(*args, **kwargs)
+
+ # distinct widget for natural and corporation
+ if status == 'natural':
+ self.fields['general_contractor'] = forms.IntegerField(
+ label=_(u"General contractor"),
+ widget=widgets.JQueryPersonOrganization(
+ reverse_lazy('autocomplete-person',
+ args=[GENERAL_CONTRACTOR.pk]),
+ reverse_lazy('person_create'),
+ model=Person,
+ limit={'person_types':[GENERAL_CONTRACTOR.pk],
+ 'attached_to__isnull':True},
+ js_template='ishtar/blocks/JQueryNaturalPerson.js',
+ new=True),
+ validators=[valid_id(Person)])
+ else:
+ self.fields['general_contractor'] = forms.IntegerField(
+ label=_(u"General contractor"),
+ widget=widgets.JQueryPersonOrganization(
+ reverse_lazy('autocomplete-person',
+ args=[GENERAL_CONTRACTOR.pk]),
+ reverse_lazy('organization_person_create'),
+ model=Person,
+ limit={'person_types':[GENERAL_CONTRACTOR.pk]},
+ js_template='ishtar/blocks/JQueryCorporationPerson.js',
+ new=True),
+ validators=[valid_id(Person)])
+
+class FileFormPlanningService(forms.Form):
+ form_label = _(u"Town planning service")
+ associated_models = {'responsible_planning_service':models.Person}
+
+ def __init__(self, *args, **kwargs):
+ super(FileFormPlanningService, self).__init__(*args, **kwargs)
+ self.fields['responsible_planning_service'] = forms.IntegerField(
+ label=_(u"Responsible town planning service"),
+ widget=widgets.JQueryPersonOrganization(
+ reverse_lazy('autocomplete-person',
+ args=[RESPONSIBLE_PLANNING_SERVICE.pk]),
+ reverse_lazy('person_create'),
+ model=Person,
+ limit={'person_types':[RESPONSIBLE_PLANNING_SERVICE.pk]},
+ new=True),
+ validators=[valid_id(Person)])
+
diff --git a/archaeological_files_pdl/templates/ishtar/blocks/JQueryCorporationPerson.js b/archaeological_files_pdl/templates/ishtar/blocks/JQueryCorporationPerson.js
new file mode 100644
index 000000000..3eb375167
--- /dev/null
+++ b/archaeological_files_pdl/templates/ishtar/blocks/JQueryCorporationPerson.js
@@ -0,0 +1,2 @@
+var current_status = 'corporation';
+{% include "ishtar/blocks/JQueryPersonOrga.js" %}
diff --git a/archaeological_files_pdl/templates/ishtar/blocks/JQueryNaturalPerson.js b/archaeological_files_pdl/templates/ishtar/blocks/JQueryNaturalPerson.js
new file mode 100644
index 000000000..fc4b9a90c
--- /dev/null
+++ b/archaeological_files_pdl/templates/ishtar/blocks/JQueryNaturalPerson.js
@@ -0,0 +1,2 @@
+var current_status = 'natural';
+{% include "ishtar/blocks/JQueryPersonOrga.js" %}
diff --git a/archaeological_files_pdl/templates/ishtar/blocks/JQueryPersonOrga.js b/archaeological_files_pdl/templates/ishtar/blocks/JQueryPersonOrga.js
new file mode 100644
index 000000000..c151a5e4d
--- /dev/null
+++ b/archaeological_files_pdl/templates/ishtar/blocks/JQueryPersonOrga.js
@@ -0,0 +1,65 @@
+person_save_callback = function(item_id, lbl){
+ var url = {{edit_source}};
+ $('#id_{{field_id}}').val(null);
+ $('#id_select_{{field_id}}').val(lbl);
+ if (item_id){
+ url = {{edit_source}}+item_id;
+ $('#id_{{field_id}}').val(item_id);
+ }
+ $("#id_select_{{field_id}}").trigger('autocompletechange');
+ $.get(url , function( data ) {
+ $( "#div-{{field_id}}" ).html( data );
+ });
+};
+
+edit_url = {{edit_source}};
+parent_id = "{{field_id}}";
+
+person_new_callback = function(){
+ var url = {{edit_source}};
+ $('#id_{{field_id}}').val(null);
+ $('#id_select_{{field_id}}').val(null);
+}
+
+$(function() {
+ var $radios = $('input:radio[name=person_type]');
+ if($radios.is(':checked') === false) {
+ $radios.filter('[value='+ current_status +']').prop('checked', true);
+ }
+
+ $radios.change(function(){
+ var loc = window.location;
+ window.location = loc.protocol + '//' + loc.host + loc.pathname + "?status=" + $('input:radio[name=person_type]:checked').val();
+ });
+
+ $("#id_select_{{field_id}}").autocomplete({
+ source: {{source}},
+ select: function( event, ui ) {
+ var url = {{edit_source}};
+ if(ui.item){
+ url = {{edit_source}}+ui.item.id;
+ $('#id_{{field_id}}').val(ui.item.id);
+ } else {
+ $('#id_{{field_id}}').val(null);
+ }
+ $.get(url , function( data ) {
+ $( "#div-{{field_id}}" ).html( data );
+ });
+ },
+ minLength: 2{% if options %},
+ {{options}}
+ {% endif %}
+ });
+
+ $.get( {{edit_source}}{% if selected %}+'{{selected}}'{% endif %}, function( data ) {
+ $( "#div-{{field_id}}" ).html( data );
+ });
+
+ $('#id_select_{{field_id}}').live('click', function(){
+ $('#id_{{field_id}}').val(null);
+ $('#id_select_{{field_id}}').val(null);
+ $.get( {{edit_source}}, function( data ) {
+ $( "#div-{{field_id}}" ).html( data );
+ });
+ });
+});
diff --git a/archaeological_files_pdl/templates/ishtar/wizard/wizard_generalcontractor.html b/archaeological_files_pdl/templates/ishtar/wizard/wizard_generalcontractor.html
new file mode 100644
index 000000000..4788a41fc
--- /dev/null
+++ b/archaeological_files_pdl/templates/ishtar/wizard/wizard_generalcontractor.html
@@ -0,0 +1,32 @@
+{% extends "ishtar/wizard/default_wizard.html" %}
+{% load i18n range table_form %}
+{% block wizard_form %}
+<form action="." method="post" name='wizard'{% if wizard.form.file_upload %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
+<div class='form'>
+{{ wizard.form.media }}
+{{ wizard.management_form }}
+
+<table class='formset'>
+ <caption>Statut</caption>
+ <tr>
+ <th><label>{% trans "Corporation" %}</label></th>
+ <td><input type='radio' name='person_type' value='corporation'/></td>
+ </tr>
+ <tr>
+ <th><label>{% trans "Natural person" %}</label></th>
+ <td><input type='radio' name='person_type' value='natural'/></td>
+ </tr>
+</table>
+
+<table>
+{% table_form wizard.form %}
+</table>
+<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
+{{ previous_fields|safe }}
+<div id='validation-bar'>
+ <input type="submit" id="submit_form" name='validate' value="{% trans "Validate" %}"/>
+ {% if next_steps %}<input type="submit" id="submit_end_form" name='validate_and_end' value="{% trans "Validate and end" %}"/>{% endif %}
+</div>
+</div>
+</form>
+{% endblock %}
diff --git a/archaeological_files_pdl/views.py b/archaeological_files_pdl/views.py
index 1dd69b50c..139da223d 100644
--- a/archaeological_files_pdl/views.py
+++ b/archaeological_files_pdl/views.py
@@ -33,7 +33,10 @@ file_creation_wizard = FileWizard.as_view([
('preventivetype-file_creation', forms.FileFormPreventiveType),
('preventiveplanning-file_creation', forms.FileFormPlanning),
('parcelspdl-file_creation', ParcelFormSet),
- ('preventive-file_creation', ref_forms.FileFormPreventive),
+ ('generalcontractor-file_creation',
+ forms.FileFormGeneralContractor),
+ ('planningservice-file_creation',
+ forms.FileFormPlanningService),
('research-file_creation', ref_forms.FileFormResearch),
('final-file_creation', ref_forms.FinalForm)],
label=_(u"New file"),
@@ -41,9 +44,6 @@ file_creation_wizard = FileWizard.as_view([
'preventivetype-file_creation':\
is_preventive('general-file_creation', models.FileType,
type_key='file_type'),
- 'preventive-file_creation':\
- is_preventive('general-file_creation', models.FileType,
- type_key='file_type'),
'research-file_creation':\
is_not_preventive('general-file_creation', models.FileType,
type_key='file_type'),
diff --git a/archaeological_files_pdl/wizards.py b/archaeological_files_pdl/wizards.py
index 679b0823f..4abe5f0d5 100644
--- a/archaeological_files_pdl/wizards.py
+++ b/archaeological_files_pdl/wizards.py
@@ -24,4 +24,13 @@ class FileWizard(BaseFileWizard):
town_step_key = 'preventiveplanning-'
town_input_id = 'main_town'
multi_towns = False
+ wizard_templates = {
+ 'generalcontractor-file_creation':\
+ 'ishtar/wizard/wizard_generalcontractor.html',}
+ def get_form_kwargs(self, *args, **kwargs):
+ returned = super(FileWizard, self).get_form_kwargs(*args, **kwargs)
+ if args and args[0].startswith('generalcontractor-file_creation'):
+ if 'status' in self.request.GET:
+ returned['status'] = self.request.GET['status']
+ return returned