diff --git a/insitu/forms.py b/insitu/forms.py index 845276f1..bbd7bbfd 100644 --- a/insitu/forms.py +++ b/insitu/forms.py @@ -273,6 +273,37 @@ class Meta: 'quality_control_procedure', 'dissemination', 'inspire_themes', 'essential_variables'] + def save(self, created_by='', commit=True): + if created_by: + self.instance.created_by = created_by + else: + created_by = self.instance.created_by + inspire_themes = self.cleaned_data.pop('inspire_themes') + essential_variables = self.cleaned_data.pop('essential_variables') + if not self.initial: + data = models.Data.objects.create(created_by=created_by, + **self.cleaned_data) + + else: + data = models.Data.objects.filter(pk=self.instance.pk) + data.update(created_by=created_by, **self.cleaned_data) + data = data.first() + for inspire_theme in data.inspire_themes.all(): + data.inspire_themes.remove(inspire_theme) + for essential_variable in data.essential_variables.all(): + data.essential_variables.remove(essential_variable) + + for inspire_theme in inspire_themes: + data.inspire_themes.add(inspire_theme.id) + for essential_variable in essential_variables: + data.essential_variables.add(essential_variable.id) + return data + +class DataCloneForm(DataForm): + def save(self, created_by='', commit=True): + self.initial = None + return super(DataCloneForm, self).save(created_by, commit) + class DataReadyForm(RequiredFieldsMixin, DataForm): class Meta: @@ -297,6 +328,12 @@ def clean(self): self.add_error("essential_variables", error) +class DataReadyCloneForm(DataReadyForm): + def save(self, created_by='', commit=True): + self.initial = None + return super(DataReadyCloneForm, self).save(created_by, commit) + + class DataRequirementBaseForm(forms.ModelForm): requirement = forms.ModelChoiceField( disabled=True, diff --git a/insitu/templates/data/add.html b/insitu/templates/data/add.html index 6fd981a3..4ae1536b 100644 --- a/insitu/templates/data/add.html +++ b/insitu/templates/data/add.html @@ -30,11 +30,11 @@