summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-04 16:07:33 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:52:35 +0200
commitd3de36b29482af18e5c7f7920e2c2405a6049d3a (patch)
tree52ef9eebdda38ee7575204ad2b54dec0c1966776
parent184378f1f78690f40adde34290ce16df3d52e398 (diff)
downloadIshtar-d3de36b29482af18e5c7f7920e2c2405a6049d3a.tar.bz2
Ishtar-d3de36b29482af18e5c7f7920e2c2405a6049d3a.zip
Context record: add town field for context records (when parcel is not mandatory)
-rw-r--r--archaeological_context_records/forms.py25
-rw-r--r--archaeological_context_records/migrations/0024_auto_20180604_1532.py27
-rw-r--r--archaeological_context_records/models.py13
3 files changed, 61 insertions, 4 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index 59700bf15..17e557283 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -28,7 +28,7 @@ from django.core import validators
from django.forms.formsets import formset_factory
from django.utils.translation import ugettext_lazy as _
-from ishtar_common.models import valid_id, IshtarSiteProfile
+from ishtar_common.models import valid_id, IshtarSiteProfile, Town
from archaeological_operations.models import Period, Parcel, Operation, \
ArchaeologicalSite, RelationType as OpeRelationType
import models
@@ -143,12 +143,13 @@ class RecordFormGeneral(CustomForm, ManageOldType):
base_models = ["documentation"]
associated_models = {
'archaeological_site': ArchaeologicalSite,
- 'parcel': Parcel, 'unit': models.Unit,
+ 'parcel': Parcel, 'unit': models.Unit, 'town': Town,
'documentation': models.DocumentationType,
'excavation_technic': models.ExcavationTechnicType}
pk = forms.IntegerField(required=False, widget=forms.HiddenInput)
operation_id = forms.IntegerField(widget=forms.HiddenInput)
- parcel = forms.ChoiceField(label=_("Parcel"), choices=[])
+ parcel = forms.ChoiceField(label=_(u"Parcel"), choices=[])
+ town = forms.ChoiceField(label=_(u"Town"), choices=[], required=False)
archaeological_site = forms.ChoiceField(
label=" ", choices=[], required=False,
help_text=_(u"Only the items associated to the operation can be "
@@ -228,6 +229,9 @@ class RecordFormGeneral(CustomForm, ManageOldType):
self.fields['parcel'].choices = [('', '--')]
if not profile.parcel_mandatory:
self.fields['parcel'].required = False
+ self.fields['town'].choices = [('', '--')]
+ else:
+ self.fields.pop('town')
site_label = IshtarSiteProfile.get_default_site_label()
self.fields['archaeological_site'].label = site_label
@@ -243,6 +247,17 @@ class RecordFormGeneral(CustomForm, ManageOldType):
(" - ".join([k for k in key if k]),
[(parcel.pk, parcel.short_label) for parcel in gparcels])
)
+ if len(self.fields['parcel'].choices) == 1:
+ # only the empty choice is available
+ self.fields.pop('parcel')
+ if 'town' in self.fields:
+ self.fields['town'].required = True
+ if 'town' in self.fields:
+ if self.fields['town'].required:
+ self.fields['town'].choices = [] # remove the empty choice
+ self.fields['town'].choices += [(t.pk, unicode(t))
+ for t in operation.towns.all()]
+
self.fields['archaeological_site'].choices += [
(site.pk, unicode(site))
for site in operation.archaeological_sites.all()
@@ -260,6 +275,10 @@ class RecordFormGeneral(CustomForm, ManageOldType):
if cr.count():
raise forms.ValidationError(_(u"This ID already exists for "
u"this operation."))
+ if not self.cleaned_data.get('parcel', None) and not \
+ self.cleaned_data.get('town', None):
+ raise forms.ValidationError(_(u"You have to choose a town or a "
+ u"parcel."))
return cleaned_data
diff --git a/archaeological_context_records/migrations/0024_auto_20180604_1532.py b/archaeological_context_records/migrations/0024_auto_20180604_1532.py
new file mode 100644
index 000000000..8290c21b0
--- /dev/null
+++ b/archaeological_context_records/migrations/0024_auto_20180604_1532.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.10 on 2018-06-04 15:32
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('ishtar_common', '0054_auto_20180525_1249'),
+ ('archaeological_context_records', '0023_auto_20180511_1232'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='contextrecord',
+ name='town',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='context_record', to='ishtar_common.Town', verbose_name='Town'),
+ ),
+ migrations.AddField(
+ model_name='historicalcontextrecord',
+ name='town',
+ field=models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='ishtar_common.Town'),
+ ),
+ ]
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 1ae661524..08c6f1d93 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -34,7 +34,7 @@ from ishtar_common.models import GeneralType, BaseHistorizedItem, \
HistoricalRecords, OwnPerms, ShortMenuItem, Source, GeneralRelationType,\
GeneralRecordRelations, post_delete_record_relation, get_image_path, \
post_save_cache, ValueGetter, BulkUpdatedItem, IshtarImage, RelationItem, \
- ThroughImage
+ Town, ThroughImage
from archaeological_operations.models import Operation, Period, Parcel, \
ArchaeologicalSite
@@ -264,6 +264,9 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem,
parcel = models.ForeignKey(
Parcel, verbose_name=_(u"Parcel"), related_name='context_record',
blank=True, null=True)
+ town = models.ForeignKey(
+ Town, verbose_name=_(u"Town"), related_name='context_record',
+ blank=True, null=True)
operation = models.ForeignKey(Operation, verbose_name=_(u"Operation"),
related_name='context_record')
archaeological_site = models.ForeignKey(
@@ -557,6 +560,14 @@ class ContextRecord(BulkUpdatedItem, BaseHistorizedItem,
"""
Dating.fix_dating_association(self)
+ def save(self, *args, **kwargs):
+ super(ContextRecord, self).save(*args, **kwargs)
+ if (not self.town and self.parcel) or (
+ self.parcel and self.parcel.town != self.town):
+ self.town = self.parcel.town
+ self.skip_history_when_saving = True
+ self.save()
+
post_save.connect(cached_label_changed, sender=ContextRecord)