diff --git a/castellum/studies/templates/studies/study_form.html b/castellum/studies/templates/studies/study_form.html index 2529d3b459a10b80ef71d42552d8bd1cd23c3f82..fa928214ec906816bc78ccd1b31fe8b27d5162b1 100644 --- a/castellum/studies/templates/studies/study_form.html +++ b/castellum/studies/templates/studies/study_form.html @@ -16,24 +16,26 @@ {% csrf_token %} {% bootstrap_field form.name required_css_class='castellum-required' %} - {% bootstrap_field form.contact_person required_css_class='castellum-required' %} {% bootstrap_field form.principal_investigator required_css_class='castellum-required' %} - {% bootstrap_field form.affiliated_scientists required_css_class='castellum-required' %} - {% bootstrap_field form.affiliated_research_assistants required_css_class='castellum-required' %} + {% bootstrap_field form.contact_person required_css_class='castellum-required' %} {% bootstrap_field form.phone required_css_class='castellum-required' %} {% bootstrap_field form.email required_css_class='castellum-required' %} + {% bootstrap_field form.min_subject_count required_css_class='castellum-required' %} + {% bootstrap_field form.description required_css_class='castellum-required' %} {% bootstrap_field form.tags required_css_class='castellum-required' %} + {% bootstrap_field form.affiliated_scientists required_css_class='castellum-required' %} + {% bootstrap_field form.affiliated_research_assistants required_css_class='castellum-required' %} + +
+ {% bootstrap_field form.exportable_attributes required_css_class='castellum-required' %} +
+ {% bootstrap_field form.consent required_css_class='castellum-required' %} {% if CASTELLUM_STUDY_STATUS_NOTIFICATION_TO %} {% bootstrap_field form.announce_status_changes required_css_class='castellum-required' %} {% else %} {{ form.announce_status_changes.as_hidden }} {% endif %} - {% bootstrap_field form.consent required_css_class='castellum-required' %} - {% bootstrap_field form.min_subject_count required_css_class='castellum-required' %} -
- {% bootstrap_field form.exportable_attributes required_css_class='castellum-required' %} -
{% if form.is_onetime_invitation %} {% bootstrap_field form.is_onetime_invitation required_css_class='castellum-required' %} {% endif %} diff --git a/castellum/studies/views/studies.py b/castellum/studies/views/studies.py index 2111e20e4371eecf3af7e41244b650d1ca4fbb45..e21df0e4b1946a7c2a821e014664ae7af16c7b68 100644 --- a/castellum/studies/views/studies.py +++ b/castellum/studies/views/studies.py @@ -221,17 +221,15 @@ class StudyCreateView(PermissionRequiredMixin, CreateView): self.object.save() if self.duplicate: + # copy all fields that are not part of the create form self.object.exclusion_criteria = self.duplicate.exclusion_criteria self.object.recruitment_text = self.duplicate.recruitment_text self.object.advanced_filtering = self.duplicate.advanced_filtering self.object.is_exclusive = self.duplicate.is_exclusive self.object.complete_matches_only = self.duplicate.complete_matches_only self.object.excluded_studies.set(self.duplicate.excluded_studies.all()) - self.object.consent = self.duplicate.consent self.object.mail_subject = self.duplicate.mail_subject self.object.mail_body = self.duplicate.mail_body - self.object.email = self.duplicate.email - self.object.phone = self.duplicate.phone self.object.save() self.object.general_domains.set(self.duplicate.general_domains.all()) @@ -256,8 +254,6 @@ class StudyCreateView(PermissionRequiredMixin, CreateView): ) s.type.set(session.type.all()) - for name in self.duplicate.tags: - self.object.studytag_set.create(name=name) for tag in self.duplicate.executiontag_set.all(): self.object.executiontag_set.create(name=tag.name) else: @@ -276,12 +272,18 @@ class StudyCreateView(PermissionRequiredMixin, CreateView): def get_initial(self): initial = super().get_initial() if self.duplicate: - initial['name'] = "Copy " + self.duplicate.name initial['contact_person'] = self.duplicate.contact_person initial['principal_investigator'] = self.duplicate.principal_investigator initial['affiliated_scientists'] = self.duplicate.affiliated_scientists initial['affiliated_research_assistants'] = self.duplicate.affiliated_research_assistants # noqa + initial['phone'] = self.duplicate.phone + initial['email'] = self.duplicate.email initial['description'] = self.duplicate.description + initial['tags'] = list(self.duplicate.tags) + initial['announce_status_changes'] = self.duplicate.announce_status_changes + initial['consent'] = self.duplicate.consent + initial['min_subject_count'] = self.duplicate.min_subject_count + initial['exportable_attributes'] = list(self.duplicate.exportable_attributes.all()) initial['is_onetime_invitation'] = self.duplicate.is_onetime_invitation return initial diff --git a/tests/studies/views/test_create_view.py b/tests/studies/views/test_create_view.py index e974a461f5d31aaf97baf365b4ec7de5ba50fcac..68d354e841ad17597b516dee1c01a2fc74066db0 100644 --- a/tests/studies/views/test_create_view.py +++ b/tests/studies/views/test_create_view.py @@ -63,11 +63,11 @@ def test_create_study_on_post(request, client, user_fixture): def test_duplicate_study_get(client, user): client.force_login(user) - original = baker.make(Study, name="Test study", members=[user]) + original = baker.make(Study, email="test@example.com", members=[user]) response = client.get('/studies/create/?duplicate_pk={}'.format(original.pk)) assert response.status_code == 200 - assert b'value="Copy Test study"' in response.content + assert b'value="test@example.com"' in response.content def test_duplicate_study_404(client, user):