summaryrefslogtreecommitdiff
path: root/archaeological_files
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_files')
-rw-r--r--archaeological_files/forms.py250
-rw-r--r--archaeological_files/urls.py38
-rw-r--r--archaeological_files/views.py79
-rw-r--r--archaeological_files/wizards.py155
4 files changed, 282 insertions, 240 deletions
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index 368c57843..564d0c6fc 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -31,104 +31,17 @@ from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
-from ishtar_common.models import Town
+from ishtar_common.models import Person, PersonType, Town, Organization, \
+ OrganizationType, valid_id, is_unique
+from archaeological_operations.models import ActType, AdministrativeAct
import models
-from ishtar_common.views import Wizard
-from ishtar_common.forms import FinalForm, FormSet, ClosingWizard, \
- ClosingDateFormSelection, SearchWizard, formset_factory, get_now, \
- reverse_lazy
-from ishtar_common.forms_common import TownFormset, ParcelFormSet, \
- get_town_field, get_person_field
-from archaeological_operations.forms import OperationAdministrativeActWizard, \
- AdministrativeActOpeForm, AdministrativeActOpeFormSelection, \
- AdministrativeActDeletionWizard, FinalAdministrativeActDeleteForm, \
- is_preventive
+from ishtar_common.forms import FinalForm, FormSet, ClosingDateFormSelection, \
+ formset_factory, get_now, reverse_lazy
+from ishtar_common.forms_common import get_town_field, get_person_field
+from archaeological_operations.forms import AdministrativeActOpeForm, \
+ AdministrativeActOpeFormSelection, FinalAdministrativeActDeleteForm
from ishtar_common import widgets
-class FileWizard(Wizard):
- model = models.File
- object_parcel_type = 'associated_file'
-
- def get_form(self, request, storage, step=None, data=None, files=None):
- """
- Manage towns
- """
- if data:
- data = data.copy()
- else:
- data = {}
- # manage the dynamic choice of towns
- if not step:
- step = self.determine_step(request, storage)
- form = self.get_form_list(request, storage)[step]
- town_form_key = 'towns-' + self.url_name
- if step.startswith('parcels-') and hasattr(form, 'management_form') \
- and self.session_has_key(request, storage, town_form_key):
- towns = []
- qdict = request.session[storage.prefix]['step_data'][town_form_key]
- for k in qdict.keys():
- if k.endswith("town") and qdict[k]:
- try:
- town = Town.objects.get(pk=int(qdict[k]))
- towns.append((town.pk, unicode(town)))
- except (ObjectDoesNotExist, ValueError):
- pass
- data['TOWNS'] = sorted(towns, key=lambda x:x[1])
- form = super(FileWizard, self).get_form(request, storage, step, data,
- files)
- return form
-
- def get_extra_model(self, dct, request, storage, form_list):
- dct = super(FileWizard, self).get_extra_model(dct, request, storage,
- form_list)
- if not dct['numeric_reference']:
- current_ref = models.File.objects.filter(year=dct['year']
- ).aggregate(Max('numeric_reference'))["numeric_reference__max"]
- dct['numeric_reference'] = current_ref and current_ref + 1 or 1
- return dct
-
- def done(self, request, storage, form_list, **kwargs):
- '''
- Save parcels
- '''
- r = super(FileWizard, self).done(request, storage, form_list,
- return_object=True, **kwargs)
- if type(r) not in (list, tuple) or len(r) != 2:
- return r
- obj, res = r
- obj.parcels.clear()
- for form in form_list:
- if not hasattr(form, 'prefix') \
- or not form.prefix.startswith('parcels-') \
- or not hasattr(form, 'forms'):
- continue
- for frm in form.forms:
- if not frm.is_valid():
- continue
- dct = frm.cleaned_data.copy()
- if 'parcel' in dct:
- try:
- parcel = models.Parcel.objects.get(pk=dct['parcel'])
- setattr(parcel, self.object_parcel_type, obj)
- parcel.save()
- except (ValueError, ObjectDoesNotExist):
- continue
- continue
- try:
- dct['town'] = models.Town.objects.get(pk=int(dct['town']))
- except (ValueError, ObjectDoesNotExist):
- continue
- dct['associated_file'], dct['operation'] = None, None
- dct[self.object_parcel_type] = obj
- if 'DELETE' in dct:
- dct.pop('DELETE')
- parcel = models.Parcel.objects.filter(**dct).count()
- if not parcel:
- dct['history_modifier'] = request.user
- parcel = models.Parcel(**dct)
- parcel.save()
- return res
-
class FileSelect(forms.Form):
towns = get_town_field()
in_charge = get_person_field(label=_(u"Person in charge"),
@@ -150,7 +63,7 @@ class FileFormSelection(forms.Form):
pk = forms.IntegerField(label="", required=False,
widget=widgets.JQueryJqGrid(reverse_lazy('get-file'),
FileSelect(), models.File, source_full=reverse_lazy('get-file-full')),
- validators=[models.valid_id(models.File)])
+ validators=[valid_id(models.File)])
def clean(self):
cleaned_data = self.cleaned_data
@@ -160,14 +73,14 @@ class FileFormSelection(forms.Form):
class FileFormGeneral(forms.Form):
form_label = _("General")
- associated_models = {'in_charge':models.Person,
+ associated_models = {'in_charge':Person,
'related_file':models.File,
'file_type':models.FileType}
in_charge = forms.IntegerField(label=_("Person in charge"),
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-person',
- args=[models.PersonType.objects.get(txt_idx='sra_agent').pk]),
- associated_model=models.Person, new=True),
- validators=[models.valid_id(models.Person)])
+ args=[PersonType.objects.get(txt_idx='sra_agent').pk]),
+ associated_model=Person, new=True),
+ validators=[valid_id(Person)])
year = forms.IntegerField(label=_("Year"),
initial=lambda:datetime.datetime.now().year,
validators=[validators.MinValueValidator(1900),
@@ -176,7 +89,7 @@ class FileFormGeneral(forms.Form):
widget=forms.HiddenInput, required=False)
internal_reference = forms.CharField(label=_(u"Internal reference"),
max_length=60,
- validators=[models.is_unique(models.File, 'internal_reference')])
+ validators=[is_unique(models.File, 'internal_reference')])
creation_date = forms.DateField(label=_(u"Creation date"),
initial=get_now, widget=widgets.JQueryDate)
file_type = forms.ChoiceField(label=_("File type"),
@@ -184,7 +97,7 @@ class FileFormGeneral(forms.Form):
related_file = forms.IntegerField(label=_("Related file"), required=False,
widget=widgets.JQueryAutoComplete(reverse_lazy('autocomplete-file'),
associated_model=models.File),
- validators=[models.valid_id(models.File)])
+ validators=[valid_id(models.File)])
comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea,
required=False)
@@ -198,7 +111,7 @@ class FileFormGeneralRO(FileFormGeneral):
class FileFormAddress(forms.Form):
form_label = _(u"Address")
- associated_models = {'town':models.Town}
+ associated_models = {'town':Town}
total_surface = forms.IntegerField(required=False,
widget=widgets.AreaWidget,
label=_(u"Total surface (m²)"),
@@ -212,23 +125,23 @@ class FileFormAddress(forms.Form):
class FileFormPreventive(forms.Form):
form_label = _(u"Preventive informations")
- associated_models = {'general_contractor':models.Person,
+ associated_models = {'general_contractor':Person,
'saisine_type':models.SaisineType,
'permit_type':models.PermitType,
- 'town_planning_service':models.Organization}
+ 'town_planning_service':Organization}
general_contractor = forms.IntegerField(label=_(u"General contractor"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-person',
- args=[models.PersonType.objects.get(txt_idx='general_contractor').pk]),
- associated_model=models.Person, new=True),
- validators=[models.valid_id(models.Person)])
+ args=[PersonType.objects.get(txt_idx='general_contractor').pk]),
+ associated_model=Person, new=True),
+ validators=[valid_id(Person)])
town_planning_service = forms.IntegerField(required=False,
label=_(u"Town planning service"),
widget=widgets.JQueryAutoComplete(
reverse_lazy('autocomplete-organization',
- args=[models.OrganizationType.objects.get(txt_idx='planning_service').pk]),
- associated_model=models.Organization, new=True),
- validators=[models.valid_id(models.Organization)])
+ args=[OrganizationType.objects.get(txt_idx='planning_service').pk]),
+ associated_model=Organization, new=True),
+ validators=[valid_id(Organization)])
permit_type = forms.ChoiceField(label=_(u"Permit type"), required=False,
choices=models.PermitType.get_types())
permit_reference = forms.CharField(label=_(u"Permit reference"),
@@ -247,143 +160,40 @@ class FileFormPreventive(forms.Form):
self.fields['saisine_type'].choices = models.SaisineType.get_types()
self.fields['saisine_type'].help_text = models.SaisineType.get_help()
-file_search_wizard = SearchWizard([('general-file_search', FileFormSelection)],
- url_name='file_search',)
-
-file_creation_wizard = FileWizard([
- ('general-file_creation', FileFormGeneral),
- ('address-file_creation', FileFormAddress),
- ('towns-file_creation', TownFormset),
- ('parcels-file_creation', ParcelFormSet),
- ('preventive-file_creation', FileFormPreventive),
- ('final-file_creation', FinalForm)],
- condition_list={
-'preventive-file_creation':is_preventive('general-file_creation',
- models.FileType, type_key='file_type')
- },
- url_name='file_creation',)
-
-class FileModificationWizard(FileWizard):
- modification = True
-
-file_modification_wizard = FileModificationWizard([
- ('selec-file_modification', FileFormSelection),
- ('general-file_modification', FileFormGeneralRO),
- ('adress-file_modification', FileFormAddress),
- ('towns-file_modification', TownFormset),
- ('parcels-file_modification', ParcelFormSet),
- ('preventive-file_modification', FileFormPreventive),
- ('final-file_modification', FinalForm)],
- condition_list={
-'preventive-file_modification':is_preventive('general-file_modification',
- models.FileType, type_key='file_type')
- },
- url_name='file_modification',)
-
-class FileClosingWizard(ClosingWizard):
- model = models.File
- fields = ['year', 'numeric_reference', 'internal_reference',
- 'file_type', 'in_charge', 'general_contractor', 'creation_date',
- 'reception_date', 'total_surface', 'total_developed_surface',
- 'address', 'address_complement', 'postal_code', 'comment']
- if settings.COUNTRY == 'fr':
- fields += ['saisine_type', 'reference_number']
- fields += ['towns']
class FinalFileClosingForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _(u"Would you like to close this archaeological file?")
-file_closing_wizard = FileClosingWizard([
- ('selec-file_closing', FileFormSelection),
- ('date-file_closing', ClosingDateFormSelection),
- ('final-file_closing', FinalFileClosingForm)],
- url_name='file_closing',)
-
-class FileDeletionWizard(FileClosingWizard):
- def get_formated_datas(self, forms):
- datas = super(FileDeletionWizard, self).get_formated_datas(forms)
- datas.append((_("Associated operations"), []))
- for operation in models.Operation.objects.filter(
- associated_file=self.current_obj).all():
- if operation.end_date:
- datas[-1][1].append(('', unicode(operation)))
- return datas
-
- def done(self, request, storage, form_list, **kwargs):
- obj = self.get_current_object(request, storage)
- for operation in models.Operation.objects.filter(
- associated_file=obj).all():
- operation.delete()
- obj.delete()
- return render_to_response('wizard_done.html', {},
- context_instance=RequestContext(request))
-
class FinalFileDeleteForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _(u"Would you like to delete this archaelogical file ?")
-file_deletion_wizard = FileDeletionWizard([
- ('selec-file_deletion', FileFormSelection),
- ('final-file_deletion', FinalFileDeleteForm)],
- url_name='file_deletion',)
-
-class FileAdministrativeActWizard(OperationAdministrativeActWizard):
- model = models.File
-
-class FileEditAdministrativeActWizard(FileAdministrativeActWizard):
- model = models.AdministrativeAct
- edit = True
- def get_associated_item(self, request, storage, dct):
- return self.get_current_object(request, storage).associated_file
-
class AdministrativeActFileSelect(forms.Form):
associated_file__towns = get_town_field()
act_type = forms.ChoiceField(label=_("Act type"), choices=[])
def __init__(self, *args, **kwargs):
super(AdministrativeActFileSelect, self).__init__(*args, **kwargs)
- self.fields['act_type'].choices = models.ActType.get_types(
+ self.fields['act_type'].choices = ActType.get_types(
dct={'intented_to':'F'})
- self.fields['act_type'].help_text = models.ActType.get_help(
+ self.fields['act_type'].help_text = ActType.get_help(
dct={'intented_to':'F'})
class AdministrativeActFileFormSelection(AdministrativeActOpeFormSelection):
pk = forms.IntegerField(label="", required=False,
widget=widgets.JQueryJqGrid(reverse_lazy('get-administrativeactfile'),
- AdministrativeActFileSelect(), models.AdministrativeAct,
+ AdministrativeActFileSelect(), AdministrativeAct,
table_cols='TABLE_COLS_FILE'),
- validators=[models.valid_id(models.AdministrativeAct)])
+ validators=[valid_id(AdministrativeAct)])
class AdministrativeActFileForm(AdministrativeActOpeForm):
act_type = forms.ChoiceField(label=_(u"Act type"), choices=[])
def __init__(self, *args, **kwargs):
super(AdministrativeActFileForm, self).__init__(*args, **kwargs)
- self.fields['act_type'].choices = models.ActType.get_types(
+ self.fields['act_type'].choices = ActType.get_types(
dct={'intented_to':'F'})
- self.fields['act_type'].help_text = models.ActType.get_help(
+ self.fields['act_type'].help_text = ActType.get_help(
dct={'intented_to':'F'})
-
-file_administrativeactfile_wizard = FileAdministrativeActWizard([
- ('selec-file_administrativeactfile', FileFormSelection),
- ('administrativeact-file_administrativeactfile', AdministrativeActFileForm),
- ('final-file_administrativeactfile', FinalForm)],
- url_name='file_administrativeactfile',)
-
-file_administrativeactfile_modification_wizard = FileEditAdministrativeActWizard([
- ('selec-file_administrativeactfile_modification',
- AdministrativeActFileFormSelection),
- ('administrativeact-file_administrativeactfile_modification',
- AdministrativeActFileForm),
- ('final-file_administrativeactfile_modification', FinalForm)],
- url_name='file_administrativeactfile_modification',)
-
-file_administrativeactfile_deletion_wizard = AdministrativeActDeletionWizard([
- ('selec-file_administrativeactfile_deletion',
- AdministrativeActFileFormSelection),
- ('final-file_administrativeactfile_deletion',
- FinalAdministrativeActDeleteForm)],
- url_name='file_administrativeactfile_deletion',)
-
diff --git a/archaeological_files/urls.py b/archaeological_files/urls.py
index e32ab8294..a64a8b2b1 100644
--- a/archaeological_files/urls.py
+++ b/archaeological_files/urls.py
@@ -19,29 +19,28 @@
from django.conf.urls.defaults import *
-"""
-import forms
+import views
-# forms
+# forms:
urlpatterns = patterns('',
- url(r'file_search/(?P<step>.+)$',
- forms.file_search_wizard, name='file_search'),
- url(r'file_creation/(?P<step>.+)$',
- forms.file_creation_wizard, name='file_creation'),
- url(r'file_modification/(?P<step>.+)$',
- forms.file_modification_wizard, name='file_modification'),
- url(r'file_closing/(?P<step>.+)$',
- forms.file_closing_wizard, name='file_closing'),
- url(r'file_deletion/(?P<step>.+)$',
- forms.file_deletion_wizard, name='file_deletion'),
- url(r'file_administrativeactfile/(?P<step>.+)$',
- forms.file_administrativeactfile_wizard,
+ url(r'file_search/(?P<step>.+)?$',
+ views.file_search_wizard, name='file_search'),
+ url(r'file_creation/(?P<step>.+)?$',
+ views.file_creation_wizard, name='file_creation'),
+ url(r'file_modification/(?P<step>.+)?$',
+ views.file_modification_wizard, name='file_modification'),
+ url(r'file_closing/(?P<step>.+)?$',
+ views.file_closing_wizard, name='file_closing'),
+ url(r'file_deletion/(?P<step>.+)?$',
+ views.file_deletion_wizard, name='file_deletion'),
+ url(r'file_administrativeactfile/(?P<step>.+)?$',
+ views.file_administrativeactfile_wizard,
name='file_administrativeactfile'),
- url(r'file_administrativeactfile_modification/(?P<step>.+)$',
- forms.file_administrativeactfile_modification_wizard,
+ url(r'file_administrativeactfile_modification/(?P<step>.+)?$',
+ views.file_administrativeactfile_modification_wizard,
name='file_administrativeactfile_modification'),
- url(r'file_administrativeactfile_deletion/(?P<step>.+)$',
- forms.file_administrativeactfile_deletion_wizard,
+ url(r'file_administrativeactfile_deletion/(?P<step>.+)?$',
+ views.file_administrativeactfile_deletion_wizard,
name='file_administrativeactfile_deletion'),
)
@@ -61,4 +60,3 @@ urlpatterns += patterns('archaeological_files.views',
url(r'revert-file/(?P<pk>.+)/(?P<date>.+)$',
'revert_file', name='revert-file'),
)
-"""
diff --git a/archaeological_files/views.py b/archaeological_files/views.py
index 02332b629..0f71b24d8 100644
--- a/archaeological_files/views.py
+++ b/archaeological_files/views.py
@@ -24,7 +24,14 @@ from django.http import HttpResponse
from django.shortcuts import render_to_response
from ishtar_common.views import get_item, show_item, revert_item
+from archaeological_operations.models import AdministrativeAct
import models
+from ishtar_common.wizards import SearchWizard
+from archaeological_operations.wizards import is_preventive
+from wizards import *
+from ishtar_common.forms_common import TownFormset
+from archaeological_operations.forms import ParcelFormSet
+from forms import *
def autocomplete_file(request):
person_types = request.user.ishtaruser.person.person_type
@@ -56,6 +63,12 @@ get_file = get_item(models.File, 'get_file', 'file')
show_file = show_item(models.File, 'file')
revert_file = revert_item(models.File)
+get_administrativeactfile = get_item(AdministrativeAct,
+ 'get_administrativeactfile', 'administrativeactfile',
+ extra_request_keys={'associated_file__towns':'associated_file__towns__pk',
+ 'operation__towns':'operation__towns__pk',
+ 'act_type__intented_to':'act_type__intented_to'})
+
def dashboard_file(request, dct, obj_id=None, *args, **kwargs):
"""
Main dashboard
@@ -64,3 +77,69 @@ def dashboard_file(request, dct, obj_id=None, *args, **kwargs):
return render_to_response('dashboard_file.html', dct,
context_instance=RequestContext(request))
+file_search_wizard = SearchWizard.as_view(
+ [('general-file_search', FileFormSelection)],
+ url_name='file_search',)
+file_creation_wizard = FileWizard.as_view([
+ ('general-file_creation', FileFormGeneral),
+ ('address-file_creation', FileFormAddress),
+ ('towns-file_creation', TownFormset),
+ ('parcels-file_creation', ParcelFormSet),
+ ('preventive-file_creation', FileFormPreventive),
+ ('final-file_creation', FinalForm)],
+ condition_dict={'preventive-file_creation':is_preventive(
+ 'general-file_creation',
+ models.FileType, type_key='file_type')
+ },
+ url_name='file_creation',)
+
+file_modification_wizard = FileModificationWizard.as_view([
+ ('selec-file_modification', FileFormSelection),
+ ('general-file_modification', FileFormGeneralRO),
+ ('adress-file_modification', FileFormAddress),
+ ('towns-file_modification', TownFormset),
+ ('parcels-file_modification', ParcelFormSet),
+ ('preventive-file_modification', FileFormPreventive),
+ ('final-file_modification', FinalForm)],
+ condition_dict={'preventive-file_modification':is_preventive(
+ 'general-file_modification',
+ models.FileType, type_key='file_type')
+ },
+ url_name='file_modification',)
+
+file_closing_wizard = FileClosingWizard.as_view([
+ ('selec-file_closing', FileFormSelection),
+ ('date-file_closing', ClosingDateFormSelection),
+ ('final-file_closing', FinalFileClosingForm)],
+ url_name='file_closing',)
+
+
+file_deletion_wizard = FileDeletionWizard.as_view([
+ ('selec-file_deletion', FileFormSelection),
+ ('final-file_deletion', FinalFileDeleteForm)],
+ url_name='file_deletion',)
+
+file_administrativeactfile_wizard = FileAdministrativeActWizard.as_view([
+ ('selec-file_administrativeactfile', FileFormSelection),
+ ('administrativeact-file_administrativeactfile',
+ AdministrativeActFileForm),
+ ('final-file_administrativeactfile', FinalForm)],
+ url_name='file_administrativeactfile',)
+
+file_administrativeactfile_modification_wizard = \
+ FileEditAdministrativeActWizard.as_view([
+ ('selec-file_administrativeactfile_modification',
+ AdministrativeActFileFormSelection),
+ ('administrativeact-file_administrativeactfile_modification',
+ AdministrativeActFileForm),
+ ('final-file_administrativeactfile_modification', FinalForm)],
+ url_name='file_administrativeactfile_modification',)
+
+file_administrativeactfile_deletion_wizard = \
+ AdministrativeActDeletionWizard.as_view([
+ ('selec-file_administrativeactfile_deletion',
+ AdministrativeActFileFormSelection),
+ ('final-file_administrativeactfile_deletion',
+ FinalAdministrativeActDeleteForm)],
+ url_name='file_administrativeactfile_deletion',)
+
diff --git a/archaeological_files/wizards.py b/archaeological_files/wizards.py
new file mode 100644
index 000000000..b161deae0
--- /dev/null
+++ b/archaeological_files/wizards.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Copyright (C) 2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# See the file COPYING for details.
+
+from django.conf import settings
+from django.core.exceptions import ObjectDoesNotExist
+from django.shortcuts import render_to_response
+from django.template import RequestContext
+from django.utils.translation import ugettext_lazy as _
+
+from ishtar_common.wizards import Wizard, ClosingWizard
+from archaeological_operations.wizards import OperationAdministrativeActWizard,\
+ AdministrativeActDeletionWizard
+from archaeological_operations.models import AdministrativeAct
+import models
+
+class FileWizard(Wizard):
+ model = models.File
+ object_parcel_type = 'associated_file'
+
+ def get_form(self, request, storage, step=None, data=None, files=None):
+ """
+ Manage towns
+ """
+ if data:
+ data = data.copy()
+ else:
+ data = {}
+ # manage the dynamic choice of towns
+ if not step:
+ step = self.determine_step(request, storage)
+ form = self.get_form_list(request, storage)[step]
+ town_form_key = 'towns-' + self.url_name
+ if step.startswith('parcels-') and hasattr(form, 'management_form') \
+ and self.session_has_key(request, storage, town_form_key):
+ towns = []
+ qdict = request.session[storage.prefix]['step_data'][town_form_key]
+ for k in qdict.keys():
+ if k.endswith("town") and qdict[k]:
+ try:
+ town = Town.objects.get(pk=int(qdict[k]))
+ towns.append((town.pk, unicode(town)))
+ except (ObjectDoesNotExist, ValueError):
+ pass
+ data['TOWNS'] = sorted(towns, key=lambda x:x[1])
+ form = super(FileWizard, self).get_form(request, storage, step, data,
+ files)
+ return form
+
+ def get_extra_model(self, dct, request, storage, form_list):
+ dct = super(FileWizard, self).get_extra_model(dct, request, storage,
+ form_list)
+ if not dct['numeric_reference']:
+ current_ref = models.File.objects.filter(year=dct['year']
+ ).aggregate(Max('numeric_reference'))["numeric_reference__max"]
+ dct['numeric_reference'] = current_ref and current_ref + 1 or 1
+ return dct
+
+ def done(self, request, storage, form_list, **kwargs):
+ '''
+ Save parcels
+ '''
+ r = super(FileWizard, self).done(request, storage, form_list,
+ return_object=True, **kwargs)
+ if type(r) not in (list, tuple) or len(r) != 2:
+ return r
+ obj, res = r
+ obj.parcels.clear()
+ for form in form_list:
+ if not hasattr(form, 'prefix') \
+ or not form.prefix.startswith('parcels-') \
+ or not hasattr(form, 'forms'):
+ continue
+ for frm in form.forms:
+ if not frm.is_valid():
+ continue
+ dct = frm.cleaned_data.copy()
+ if 'parcel' in dct:
+ try:
+ parcel = models.Parcel.objects.get(pk=dct['parcel'])
+ setattr(parcel, self.object_parcel_type, obj)
+ parcel.save()
+ except (ValueError, ObjectDoesNotExist):
+ continue
+ continue
+ try:
+ dct['town'] = models.Town.objects.get(pk=int(dct['town']))
+ except (ValueError, ObjectDoesNotExist):
+ continue
+ dct['associated_file'], dct['operation'] = None, None
+ dct[self.object_parcel_type] = obj
+ if 'DELETE' in dct:
+ dct.pop('DELETE')
+ parcel = models.Parcel.objects.filter(**dct).count()
+ if not parcel:
+ dct['history_modifier'] = request.user
+ parcel = models.Parcel(**dct)
+ parcel.save()
+ return res
+
+class FileModificationWizard(FileWizard):
+ modification = True
+
+class FileClosingWizard(ClosingWizard):
+ model = models.File
+ fields = ['year', 'numeric_reference', 'internal_reference',
+ 'file_type', 'in_charge', 'general_contractor', 'creation_date',
+ 'reception_date', 'total_surface', 'total_developed_surface',
+ 'address', 'address_complement', 'postal_code', 'comment']
+ if settings.COUNTRY == 'fr':
+ fields += ['saisine_type', 'reference_number']
+ fields += ['towns']
+class FileDeletionWizard(FileClosingWizard):
+ def get_formated_datas(self, forms):
+ datas = super(FileDeletionWizard, self).get_formated_datas(forms)
+ datas.append((_("Associated operations"), []))
+ for operation in models.Operation.objects.filter(
+ associated_file=self.current_obj).all():
+ if operation.end_date:
+ datas[-1][1].append(('', unicode(operation)))
+ return datas
+
+ def done(self, request, storage, form_list, **kwargs):
+ obj = self.get_current_object(request, storage)
+ for operation in models.Operation.objects.filter(
+ associated_file=obj).all():
+ operation.delete()
+ obj.delete()
+ return render_to_response('wizard_done.html', {},
+ context_instance=RequestContext(request))
+
+
+class FileAdministrativeActWizard(OperationAdministrativeActWizard):
+ model = models.File
+
+class FileEditAdministrativeActWizard(FileAdministrativeActWizard):
+ model = AdministrativeAct
+ edit = True
+ def get_associated_item(self, request, storage, dct):
+ return self.get_current_object(request, storage).associated_file