From d62963b77b09b3e2205607c4e77e96ff8bcbd83e Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Thu, 9 Aug 2018 12:55:16 +0100 Subject: [PATCH] Make review forms behave the same way as application forms a new instance is copied onto the round --- .../migrations/0040_roundbasereviewform.py | 29 +++++++++++++++++++ opentech/apply/funds/models/applications.py | 25 +++++++++++----- opentech/apply/funds/models/forms.py | 4 +++ 3 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 opentech/apply/funds/migrations/0040_roundbasereviewform.py diff --git a/opentech/apply/funds/migrations/0040_roundbasereviewform.py b/opentech/apply/funds/migrations/0040_roundbasereviewform.py new file mode 100644 index 000000000..4f27a6ada --- /dev/null +++ b/opentech/apply/funds/migrations/0040_roundbasereviewform.py @@ -0,0 +1,29 @@ +# Generated by Django 2.0.2 on 2018-08-09 11:29 + +from django.db import migrations, models +import django.db.models.deletion +import modelcluster.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0006_remove_review_review'), + ('funds', '0039_add_rfps_and_sealed_rounds'), + ] + + operations = [ + migrations.CreateModel( + name='RoundBaseReviewForm', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), + ('form', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='review.ReviewForm')), + ('round', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='review_forms', to='funds.RoundBase')), + ], + options={ + 'ordering': ['sort_order'], + 'abstract': False, + }, + ), + ] diff --git a/opentech/apply/funds/models/applications.py b/opentech/apply/funds/models/applications.py index ffccab077..0e4fffcc5 100644 --- a/opentech/apply/funds/models/applications.py +++ b/opentech/apply/funds/models/applications.py @@ -115,7 +115,9 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm): # type: ignore ], heading="Dates"), FieldPanel('reviewers'), ReadOnlyPanel('get_workflow_name_display', heading="Workflow"), + # Forms comes from parental key in models/forms.py ReadOnlyInlinePanel('forms', help_text="Are copied from the parent fund."), + ReadOnlyInlinePanel('review_forms', help_text="Are copied from the parent fund."), ] edit_handler = TabbedInterface([ @@ -156,13 +158,22 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm): # type: ignore if is_new and hasattr(self, 'parent_page'): # Would be nice to do this using model clusters as part of the __init__ - for form in self.parent_page.forms.all(): - # Create a copy of the existing form object - new_form = form.form - new_form.id = None - new_form.name = '{} for {} ({})'.format(new_form.name, self.title, self.get_parent().title) - new_form.save() - RoundBaseForm.objects.create(round=self, form=new_form) + self._copy_forms('forms') + self._copy_forms('review_forms') + + def _copy_forms(self, field): + for form in getattr(self.parent_page, field).all(): + new_form = self._meta.get_field(field).related_model + self._copy_form(form, new_form) + + def _copy_form(self, form, new_class): + # Create a copy of the existing form object + new_form = form.form + new_form.id = None + new_form.name = '{} for {} ({})'.format(new_form.name, self.title, self.get_parent().title) + new_form.save() + new_class.objects.create(round=self, form=new_form) + def get_submit_meta_data(self, **kwargs): return super().get_submit_meta_data( diff --git a/opentech/apply/funds/models/forms.py b/opentech/apply/funds/models/forms.py index 41f6fb32b..0eaba0798 100644 --- a/opentech/apply/funds/models/forms.py +++ b/opentech/apply/funds/models/forms.py @@ -90,5 +90,9 @@ class ApplicationBaseReviewForm(AbstractRelatedReviewForm): application = ParentalKey('ApplicationBase', related_name='review_forms') +class RoundBaseReviewForm(AbstractRelatedReviewForm): + round = ParentalKey('RoundBase', related_name='review_forms') + + class LabBaseReviewForm(AbstractRelatedReviewForm): lab = ParentalKey('LabBase', related_name='review_forms') -- GitLab