summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_operations/forms.py26
-rw-r--r--archaeological_operations/ishtar_menu.py10
-rw-r--r--archaeological_operations/urls.py5
-rw-r--r--archaeological_operations/views.py18
-rw-r--r--archaeological_operations/wizards.py10
-rw-r--r--ishtar_common/forms.py144
6 files changed, 133 insertions, 80 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 38efb269f..bf69a74b5 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -1288,6 +1288,32 @@ class SiteFormSelection(IshtarForm):
return cleaned_data
+class SiteForm(ManageOldType):
+ form_label = _(u"General")
+ form_admin_name = _(u"Archaeological site - 010 - General")
+ associated_models = {'period': models.Period, 'remain': models.RemainType}
+ reference = forms.CharField(label=_(u"Reference"), max_length=20)
+ name = forms.CharField(label=_(u"Name"), max_length=200, required=False)
+ period = forms.MultipleChoiceField(
+ label=_("Periods"), choices=[], widget=widgets.Select2Multiple,
+ required=False)
+ remain = forms.MultipleChoiceField(
+ label=_("Remains"), choices=[], widget=widgets.Select2Multiple,
+ required=False)
+
+ TYPES = [
+ FieldType('period', models.Period, True),
+ FieldType('remain', models.RemainType, True),
+ ]
+
+ def clean_reference(self):
+ reference = self.cleaned_data['reference']
+ if models.ArchaeologicalSite.objects.filter(
+ reference=reference).count():
+ raise forms.ValidationError(_(u"This reference already exists."))
+ return reference
+
+
####################################
# Source management for operations #
####################################
diff --git a/archaeological_operations/ishtar_menu.py b/archaeological_operations/ishtar_menu.py
index 5c2cca383..55acf810b 100644
--- a/archaeological_operations/ishtar_menu.py
+++ b/archaeological_operations/ishtar_menu.py
@@ -28,11 +28,6 @@ from archaeological_operations import models
"""
MenuItem(
- 'operation_creation', _(u"Creation"),
- model=models.Operation,
- access_controls=['add_operation',
- 'add_own_operation']),
-MenuItem(
'operation_modification', _(u"Modification"),
model=models.Operation,
access_controls=['change_operation',
@@ -116,6 +111,11 @@ MENU_SECTIONS = [
model=models.ArchaeologicalSite,
access_controls=['view_archaeologicalsite',
'view_own_archaeologicalsite']),
+ MenuItem(
+ 'site_creation', _(u"Creation"),
+ model=models.ArchaeologicalSite,
+ access_controls=['add_archaeologicalsite',
+ 'add_own_archaeologicalsite']),
]),
),
(30, SectionItem(
diff --git a/archaeological_operations/urls.py b/archaeological_operations/urls.py
index 8075296e8..fbca132d4 100644
--- a/archaeological_operations/urls.py
+++ b/archaeological_operations/urls.py
@@ -163,6 +163,11 @@ urlpatterns = [
check_rights(['view_archaeologicalsite',
'view_own_archaeologicalsite'])(
views.site_search_wizard), name='site_search'),
+ url(r'site_creation/(?P<step>.+)?$',
+ check_rights(['add_archaeologicalsite',
+ 'add_own_archaeologicalsite'])(
+ views.site_creation_wizard),
+ name='site_creation'),
url(r'autocomplete-patriarche/$', views.autocomplete_patriarche,
name='autocomplete-patriarche'),
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 8ca97826e..76f712613 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -42,7 +42,8 @@ from archaeological_operations.forms import ArchaeologicalSiteForm, \
SourceOperationFormSelection, OperationSourceForm, \
AdministrativeActOpeFormSelection, AdministrativeActOpeForm, \
AdministrativeActOpeModifForm, FinalAdministrativeActDeleteForm, \
- AdministrativeActRegisterFormSelection, DocumentGenerationAdminActForm
+ AdministrativeActRegisterFormSelection, DocumentGenerationAdminActForm, \
+ SiteForm
from ishtar_common.views import get_item, show_item, revert_item, new_item
@@ -52,7 +53,7 @@ from archaeological_operations.wizards import has_associated_file, \
OperationClosingWizard, OperationDeletionWizard, SiteSearch, \
OperationSourceWizard, OperationSourceDeletionWizard, \
OperationAdministrativeActWizard, OperationEditAdministrativeActWizard, \
- AdministrativeActDeletionWizard
+ AdministrativeActDeletionWizard, SiteWizard
def autocomplete_patriarche(request):
@@ -333,6 +334,7 @@ operation_deletion_wizard = OperationDeletionWizard.as_view(
def site_extra_context(request, item):
return {'SITE_LABEL': IshtarSiteProfile.get_default_site_label()}
+
get_site = get_item(models.ArchaeologicalSite, 'get_site', 'site')
show_site = show_item(
models.ArchaeologicalSite, 'site',
@@ -344,6 +346,18 @@ site_search_wizard = SiteSearch.as_view(
label=_(u"{} search"),
url_name='site_search',)
+
+site_creation_steps = [
+ ('general-site_creation', SiteForm),
+ ('final-site_creation', FinalForm)
+]
+
+site_creation_wizard = SiteWizard.as_view(
+ site_creation_steps,
+ label=_(u"New {}"),
+ url_name='site_creation',
+)
+
# operation sources
operation_source_search_wizard = SearchWizard.as_view([
diff --git a/archaeological_operations/wizards.py b/archaeological_operations/wizards.py
index 01c9cbc2e..9f8ca3f6a 100644
--- a/archaeological_operations/wizards.py
+++ b/archaeological_operations/wizards.py
@@ -448,13 +448,21 @@ class OperationEditAdministrativeActWizard(OperationAdministrativeActWizard):
return self.get_current_object().operation
-class SiteSearch(SearchWizard):
+class SiteLabel(object):
def get_label(self):
return unicode(_(u"Search {}")).format(
get_current_profile().get_site_label()
)
+class SiteSearch(SiteLabel, SearchWizard):
+ pass
+
+
+class SiteWizard(SiteLabel, Wizard):
+ model = models.ArchaeologicalSite
+
+
class AdministrativeActDeletionWizard(ClosingWizard):
wizard_templates = {
'final-operation_administrativeactop_deletion':
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 13e8457f6..eb548f70c 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -263,78 +263,7 @@ class IshtarForm(forms.Form):
widget.options['todayHighlight'] = 'true'
-class FieldType(object):
- def __init__(self, key, model, is_multiple=False, extra_args=None):
- self.key = key
- self.model = model
- self.is_multiple = is_multiple
- self.extra_args = extra_args
-
- def get_choices(self, initial=None):
- args = {
- 'empty_first': not self.is_multiple,
- 'initial': initial
- }
- if self.extra_args:
- args.update(self.extra_args)
- return self.model.get_types(**args)
-
- def get_help(self):
- args = {}
- if self.extra_args:
- args.update(self.extra_args)
- return self.model.get_help(**args)
-
-
-class ManageOldType(IshtarForm):
- TYPES = [] # FieldType list
-
- def __init__(self, *args, **kwargs):
- """
- init_data is used to manage deactivated items in list when editing
- old data
- """
- prefix = kwargs.get('prefix') or ''
- self.init_data = {}
- if 'data' in kwargs and kwargs['data']:
- for k in kwargs['data']:
- if prefix not in k:
- continue
- new_k = k[len(prefix) + 1:]
- if hasattr(kwargs['data'], 'getlist'):
- items = kwargs['data'].getlist(k)
- else:
- items = [kwargs['data'][k]]
- for val in items:
- if not val:
- continue
- if new_k not in self.init_data:
- self.init_data[new_k] = []
- self.init_data[new_k].append(val)
- if 'initial' in kwargs and kwargs['initial']:
- for k in kwargs['initial']:
- if k not in self.init_data or not self.init_data[k]:
- if hasattr(kwargs['initial'], 'getlist'):
- items = kwargs['initial'].getlist(k)
- else:
- items = [kwargs['initial'][k]]
- for val in items:
- if not val:
- continue
- if k not in self.init_data:
- self.init_data[k] = []
- self.init_data[k].append(val)
- self.init_data = MultiValueDict(self.init_data)
- super(ManageOldType, self).__init__(*args, **kwargs)
- for field in self.TYPES:
- if field.key not in self.fields:
- continue
- self.fields[field.key].choices = field.get_choices(
- initial=self.init_data.get(field.key))
- self.fields[field.key].help_text = field.get_help()
-
-
-class TableSelect(ManageOldType):
+class TableSelect(IshtarForm):
def __init__(self, *args, **kwargs):
super(TableSelect, self).__init__(*args, **kwargs)
# no field is required for search
@@ -432,6 +361,77 @@ def get_data_from_formset(data):
return values
+class FieldType(object):
+ def __init__(self, key, model, is_multiple=False, extra_args=None):
+ self.key = key
+ self.model = model
+ self.is_multiple = is_multiple
+ self.extra_args = extra_args
+
+ def get_choices(self, initial=None):
+ args = {
+ 'empty_first': not self.is_multiple,
+ 'initial': initial
+ }
+ if self.extra_args:
+ args.update(self.extra_args)
+ return self.model.get_types(**args)
+
+ def get_help(self):
+ args = {}
+ if self.extra_args:
+ args.update(self.extra_args)
+ return self.model.get_help(**args)
+
+
+class ManageOldType(IshtarForm):
+ TYPES = [] # FieldType list
+
+ def __init__(self, *args, **kwargs):
+ """
+ init_data is used to manage deactivated items in list when editing
+ old data
+ """
+ prefix = kwargs.get('prefix') or ''
+ self.init_data = {}
+ if 'data' in kwargs and kwargs['data']:
+ for k in kwargs['data']:
+ if prefix not in k:
+ continue
+ new_k = k[len(prefix) + 1:]
+ if hasattr(kwargs['data'], 'getlist'):
+ items = kwargs['data'].getlist(k)
+ else:
+ items = [kwargs['data'][k]]
+ for val in items:
+ if not val:
+ continue
+ if new_k not in self.init_data:
+ self.init_data[new_k] = []
+ self.init_data[new_k].append(val)
+ if 'initial' in kwargs and kwargs['initial']:
+ for k in kwargs['initial']:
+ if k not in self.init_data or not self.init_data[k]:
+ if hasattr(kwargs['initial'], 'getlist'):
+ items = kwargs['initial'].getlist(k)
+ else:
+ items = [kwargs['initial'][k]]
+ for val in items:
+ if not val:
+ continue
+ if k not in self.init_data:
+ self.init_data[k] = []
+ self.init_data[k].append(val)
+ self.init_data = MultiValueDict(self.init_data)
+ super(ManageOldType, self).__init__(*args, **kwargs)
+ for field in self.TYPES:
+ if field.key not in self.fields:
+ continue
+ self.fields[field.key].choices = field.get_choices(
+ initial=self.init_data.get(field.key))
+ self.fields[field.key].help_text = field.get_help()
+
+
class DocumentGenerationForm(forms.Form):
"""
Form to generate document by choosing the template