diff --git a/opentech/apply/determinations/forms.py b/opentech/apply/determinations/forms.py index b6d2559b5ab956869eb18ba7bb29e43dcca7a22e..f706486eeabccf24e4bae09f71fe2e06856ed85e 100644 --- a/opentech/apply/determinations/forms.py +++ b/opentech/apply/determinations/forms.py @@ -344,7 +344,25 @@ class BaseProposalDeterminationForm(forms.Form): class ConceptDeterminationForm(BaseConceptDeterminationForm, BaseNormalDeterminationForm): - pass + def __init__(self, *args, submission, user, initial={}, instance=None, **kwargs): + super().__init__(*args, submission=submission, user=user, initial={}, instance=None, **kwargs) + + action = kwargs.get('action') + stages_num = len(submission.workflow.stages) + + if stages_num > 1 and action == 'invited_to_proposal': + second_stage_forms = submission.get_from_parent('forms').filter(stage=2) + if second_stage_forms.count() > 1: + proposal_form_choices = [ + (index, form.form.name) + for index, form in enumerate(second_stage_forms) + ] + self.fields['proposal_form'] = forms.ChoiceField( + label='Proposal Form', + choices=proposal_form_choices, + help_text='Select the proposal form to use for proposal stage.', + ) + self.fields['proposal_form'].group = 1 class ProposalDeterminationForm(BaseProposalDeterminationForm, BaseNormalDeterminationForm): diff --git a/opentech/apply/determinations/views.py b/opentech/apply/determinations/views.py index 5e341b491d839690fcfca6cdccdea7134704ea6d..b6a0549e1aa288c9054533d65ba432be482dba43 100644 --- a/opentech/apply/determinations/views.py +++ b/opentech/apply/determinations/views.py @@ -248,6 +248,7 @@ class DeterminationCreateOrUpdateView(CreateOrUpdateView): submission=self.object.submission, related=self.object, ) + proposal_form = form.cleaned_data.get('proposal_form') transition = transition_from_outcome(form.cleaned_data.get('outcome'), self.submission) if self.object.outcome == NEEDS_MORE_INFO: @@ -260,7 +261,8 @@ class DeterminationCreateOrUpdateView(CreateOrUpdateView): related_object=self.object, ) - self.submission.perform_transition(transition, self.request.user, request=self.request, notify=False) + self.submission.perform_transition( + transition, self.request.user, request=self.request, notify=False, proposal_form=proposal_form) return HttpResponseRedirect(self.submission.get_absolute_url()) diff --git a/opentech/apply/funds/models/submissions.py b/opentech/apply/funds/models/submissions.py index 3591d72b2ad77f899433a5c65106047c302dcfeb..7087194a031ba4dcc6eb190610913a81314e46e2 100644 --- a/opentech/apply/funds/models/submissions.py +++ b/opentech/apply/funds/models/submissions.py @@ -310,15 +310,15 @@ class AddTransitions(models.base.ModelBase): transition(by=user, request=request, **kwargs) self.save(update_fields=['status']) - self.progress_stage_when_possible(user, request) + self.progress_stage_when_possible(user, request, **kwargs) attrs['perform_transition'] = perform_transition - def progress_stage_when_possible(self, user, request): + def progress_stage_when_possible(self, user, request, notify=None, **kwargs): # Check to see if we can progress to a new stage from the current status for stage_transition in STAGE_CHANGE_ACTIONS: try: - self.perform_transition(stage_transition, user, request=request, notify=False) + self.perform_transition(stage_transition, user, request=request, notify=False, **kwargs) except PermissionDenied: pass @@ -513,7 +513,9 @@ class ApplicationSubmission( prev_meta_categories = submission_in_db.meta_categories.all() self.id = None - self.form_fields = self.get_from_parent('get_defined_fields')(target) + proposal_form = kwargs.get('proposal_form') + proposal_form = int(proposal_form) if proposal_form else 0 + self.form_fields = self.get_from_parent('get_defined_fields')(target, proposal_form) self.live_revision = None self.draft_revision = None diff --git a/opentech/apply/funds/models/utils.py b/opentech/apply/funds/models/utils.py index f6661614fc08fdb6d955ab9bb6a1121f62c714ef..2d32775f005537adb6556d14ca10c484e44a797d 100644 --- a/opentech/apply/funds/models/utils.py +++ b/opentech/apply/funds/models/utils.py @@ -83,12 +83,12 @@ class WorkflowStreamForm(WorkflowHelpers, AbstractStreamForm): # type: ignore class Meta: abstract = True - def get_defined_fields(self, stage=None): + def get_defined_fields(self, stage=None, proposal_form=0): if not stage: - form_index = 0 + stage_num = 1 else: - form_index = self.workflow.stages.index(stage) - return self.forms.all()[form_index].fields + stage_num = self.workflow.stages.index(stage) + 1 + return self.forms.filter(stage=stage_num)[proposal_form].fields def render_landing_page(self, request, form_submission=None, *args, **kwargs): # We only reach this page after creation of a new submission