diff options
| -rw-r--r-- | archaeological_context_records/forms.py | 25 | ||||
| -rw-r--r-- | archaeological_context_records/migrations/0024_auto_20180604_1532.py | 27 | ||||
| -rw-r--r-- | archaeological_context_records/models.py | 13 | 
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)  | 
