Skip to content

Commit

Permalink
GH-717: Allow staff to pick proposal form if multiple exists for prop…
Browse files Browse the repository at this point in the history
…osal stage
  • Loading branch information
Parbhat authored and frjo committed Aug 26, 2019
1 parent c1faa68 commit 7f239cc
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 10 deletions.
20 changes: 19 additions & 1 deletion opentech/apply/determinations/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
4 changes: 3 additions & 1 deletion opentech/apply/determinations/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,7 @@ def form_valid(self, form):
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:
Expand All @@ -260,7 +261,8 @@ def form_valid(self, form):
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())

Expand Down
10 changes: 6 additions & 4 deletions opentech/apply/funds/models/submissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,15 +310,15 @@ def perform_transition(self, action, user, request=None, **kwargs):
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

Expand Down Expand Up @@ -513,7 +513,9 @@ def progress_application(self, **kwargs):
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
Expand Down
8 changes: 4 additions & 4 deletions opentech/apply/funds/models/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 7f239cc

Please sign in to comment.