summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/forms.py34
-rw-r--r--archaeological_context_records/models.py1
-rw-r--r--archaeological_context_records/views.py4
-rw-r--r--archaeological_context_records/wizards.py20
-rw-r--r--archaeological_operations/forms.py10
5 files changed, 62 insertions, 7 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index df5a83539..59f683620 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2015 É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
@@ -36,7 +36,8 @@ from ishtar_common import widgets
from ishtar_common.forms import FinalForm, FormSet, \
reverse_lazy, get_form_selection, TableSelect
from ishtar_common.forms_common import get_town_field, SourceSelect
-from archaeological_operations.forms import OperationSelect, ParcelField
+from archaeological_operations.forms import OperationSelect, ParcelField,\
+ RecordRelationsForm as OpeRecordRelationsForm
class RecordSelect(TableSelect):
@@ -181,6 +182,35 @@ DatingFormSet = formset_factory(DatingForm, can_delete=True,
DatingFormSet.form_label = _("Dating")
+class RecordRelationsForm(OpeRecordRelationsForm):
+ current_model = models.RelationType
+ current_related_model = models.ContextRecord
+ associated_models = {'right_record': models.ContextRecord,
+ 'relation_type': models.RelationType}
+ right_record = forms.ChoiceField(
+ label=_(u"Context record"), choices=[], required=False)
+
+ def __init__(self, *args, **kwargs):
+ crs = None
+ if 'data' in kwargs and 'CONTEXT_RECORDS' in kwargs['data']:
+ crs = kwargs['data']['CONTEXT_RECORDS']
+ # clean data if not "real" data
+ prefix_value = kwargs['prefix'] + '-right_record'
+ if not [k for k in kwargs['data'].keys()
+ if k.startswith(prefix_value) and kwargs['data'][k]]:
+ kwargs['data'] = None
+ if 'files' in kwargs:
+ kwargs.pop('files')
+ super(RecordRelationsForm, self).__init__(*args, **kwargs)
+ self.fields['relation_type'].choices = \
+ models.RelationType.get_types()
+ if crs:
+ self.fields['right_record'].choices = [('', '-' * 2)] + crs
+
+RecordRelationsFormSet = formset_factory(RecordRelationsForm, can_delete=True)
+RecordRelationsFormSet.form_label = _(u"Relations")
+
+
class RecordFormInterpretation(forms.Form):
form_label = _("Interpretation")
associated_models = {'activity': models.ActivityType,
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 85f7582f3..6fc950f52 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -296,6 +296,7 @@ class RelationType(GeneralRelationType):
class RecordRelations(GeneralRecordRelations, models.Model):
+ MAIN_ATTR = 'left_record'
left_record = models.ForeignKey(ContextRecord,
related_name='right_relations')
right_record = models.ForeignKey(ContextRecord,
diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py
index cbf34ee07..41d290a3f 100644
--- a/archaeological_context_records/views.py
+++ b/archaeological_context_records/views.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2010-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2010-2015 É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
@@ -73,6 +73,7 @@ record_creation_wizard = RecordWizard.as_view([
('general-record_creation', RecordFormGeneral),
('datings-record_creation', DatingFormSet),
('interpretation-record_creation', RecordFormInterpretation),
+ ('relations-record_creation', RecordRelationsFormSet),
('final-record_creation', FinalForm)],
label=_(u"New context record"),
url_name='record_creation',)
@@ -82,6 +83,7 @@ record_modification_wizard = RecordModifWizard.as_view([
('general-record_modification', RecordFormGeneral),
('datings-record_modification', DatingFormSet),
('interpretation-record_modification', RecordFormInterpretation),
+ ('relations-record_creation', RecordRelationsFormSet),
('final-record_modification', FinalForm)],
label=_(u"Context record modification"),
url_name='record_modification',)
diff --git a/archaeological_context_records/wizards.py b/archaeological_context_records/wizards.py
index 99c666e89..2449b400e 100644
--- a/archaeological_context_records/wizards.py
+++ b/archaeological_context_records/wizards.py
@@ -29,6 +29,14 @@ class RecordWizard(Wizard):
model = models.ContextRecord
edit = False
wizard_done_window = reverse_lazy('show-contextrecord')
+ relations_step_key = 'relations'
+
+ def get_template_names(self):
+ templates = super(RecordWizard, self).get_template_names()
+ current_step = self.steps.current
+ if current_step.startswith(self.relations_step_key):
+ templates = ['ishtar/wizard/relations_wizard.html'] + templates
+ return templates
def get_current_operation(self):
step = self.steps.current
@@ -87,9 +95,21 @@ class RecordWizard(Wizard):
else:
current_object = self.get_current_object()
data['context_record'] = current_object
+ elif step.startswith('relations') and hasattr(form, 'management_form'):
+ data['CONTEXT_RECORDS'] = self.get_other_context_records()
form = super(RecordWizard, self).get_form(step, data, files)
return form
+ def get_other_context_records(self):
+ operation = self.get_current_operation()
+ if not operation:
+ return []
+ q = models.ContextRecord.objects.filter(operation=operation)
+ obj = self.get_current_object()
+ if obj and obj.pk:
+ q = q.exclude(pk=obj.pk)
+ return [(cr.pk, unicode(cr)) for cr in q.all()]
+
class RecordModifWizard(RecordWizard):
modification = True
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 1dad60ea1..cba230338 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -338,6 +338,8 @@ ParcelFormSet.form_label = _(u"Parcels")
class RecordRelationsForm(forms.Form):
base_model = 'right_relation'
+ current_model = models.RelationType
+ current_related_model = models.Operation
associated_models = {'right_record': models.Operation,
'relation_type': models.RelationType}
relation_type = forms.ChoiceField(label=_(u"Relation type"),
@@ -373,14 +375,14 @@ class RecordRelationsForm(forms.Form):
if not data:
continue
try:
- relation_type = models.RelationType.objects.get(
+ relation_type = cls.current_model.objects.get(
pk=data.get('relation_type'))
- except models.RelationType.DoesNotExist:
+ except cls.current_model.DoesNotExist:
continue
try:
- right_record = models.Operation.objects.get(
+ right_record = cls.current_related_model.objects.get(
pk=data.get('right_record'))
- except models.Operation.DoesNotExist:
+ except cls.current_related_model.DoesNotExist:
continue
values = [unicode(relation_type), right_record.reference]
if data.get('DELETE'):