def step_7(request, trial_pk): ct = get_object_or_404(ClinicalTrial, id=int(trial_pk)) PrimaryOutcomesSet = modelformset_factory( Outcome, formset=MultilingualBaseFormSet, form=PrimaryOutcomesForm,extra=EXTRA_FORMS, can_delete=True, extra_formset_attrs={ 'default_second_language':ct.submission.get_secondary_language(), 'available_languages':[lang.lower() for lang in ct.submission.get_mandatory_languages()], 'display_language':request.user.get_profile().preferred_language, }, ) SecondaryOutcomesSet = modelformset_factory(Outcome, formset=MultilingualBaseFormSet, form=SecondaryOutcomesForm,extra=EXTRA_FORMS, can_delete=True, extra_formset_attrs={ 'default_second_language':ct.submission.get_secondary_language(), 'available_languages':[lang.lower() for lang in ct.submission.get_mandatory_languages()], 'display_language':request.user.get_profile().preferred_language, }, ) primary_qs = Outcome.objects.filter(trial=ct, interest=choices.OUTCOME_INTEREST[0][0]) secondary_qs = Outcome.objects.filter(trial=ct, interest=choices.OUTCOME_INTEREST[1][0]) if request.POST: primary_outcomes_formset = PrimaryOutcomesSet(request.POST, queryset=primary_qs, prefix='primary') secondary_outcomes_formset = SecondaryOutcomesSet(request.POST, queryset=secondary_qs, prefix='secondary') if primary_outcomes_formset.is_valid() and secondary_outcomes_formset.is_valid(): outcomes = primary_outcomes_formset.save(commit=False) outcomes += secondary_outcomes_formset.save(commit=False) for outcome in outcomes: outcome.trial = ct primary_outcomes_formset.save() secondary_outcomes_formset.save() # Executes validation of current trial submission (for mandatory fields) trial_validator.validate(ct) return HttpResponseRedirect(reverse('step_7',args=[trial_pk])) else: primary_outcomes_formset = PrimaryOutcomesSet(queryset=primary_qs, prefix='primary') secondary_outcomes_formset = SecondaryOutcomesSet(queryset=secondary_qs, prefix='secondary') formsets = [primary_outcomes_formset,secondary_outcomes_formset] return render_to_response('repository/trial_form.html', {'formsets':formsets, 'trial_pk':trial_pk, 'title':TRIAL_FORMS[6], 'steps': step_list(trial_pk), 'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[6])), 'default_second_language': ct.submission.get_secondary_language(), 'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, context_instance=RequestContext(request))
def step_8(request, trial_pk): ct = get_object_or_404(ClinicalTrial, id=int(trial_pk)) contact_type = { 'PublicContact': (PublicContact,make_public_contact_form(request.user)), 'ScientificContact': (ScientificContact,make_scientifc_contact_form(request.user)), 'SiteContact': (SiteContact,make_site_contact_form(request.user)) } InlineFormSetClasses = [] for model,form in contact_type.values(): InlineFormSetClasses.append( inlineformset_factory(ClinicalTrial,model,form=form,can_delete=True,extra=EXTRA_FORMS) ) ContactFormSet = modelformset_factory(Contact, form=make_contact_form(request.user), extra=1) contact_qs = Contact.objects.none() if request.POST: inlineformsets = [fs(request.POST,instance=ct) for fs in InlineFormSetClasses] new_contact_formset = ContactFormSet(request.POST,queryset=contact_qs,prefix='new_contact') if not False in [fs.is_valid() for fs in inlineformsets] \ and new_contact_formset.is_valid(): for contactform in new_contact_formset.forms: if contactform.cleaned_data: Relation = contact_type[contactform.cleaned_data.pop('relation')][0] new_contact = contactform.save(commit=False) new_contact.creator = request.user new_contact.save() Relation.objects.create(trial=ct,contact=new_contact) for fs in inlineformsets: fs.save() # Executes validation of current trial submission (for mandatory fields) trial_validator.validate(ct) return HttpResponseRedirect(reverse('step_8',args=[trial_pk])) else: inlineformsets = [fs(instance=ct) for fs in InlineFormSetClasses] new_contact_formset = ContactFormSet(queryset=contact_qs,prefix='new_contact') formsets = inlineformsets + [new_contact_formset] return render_to_response('repository/step_8.html', {'formsets':formsets, 'trial_pk':trial_pk, 'title':TRIAL_FORMS[7], 'steps': step_list(trial_pk), 'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[7])), 'default_second_language': ct.submission.get_secondary_language(), 'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, context_instance=RequestContext(request))
def step_4(request, trial_pk): ct = get_object_or_404(ClinicalTrial, id=int(trial_pk)) DescriptorFormSet = modelformset_factory(Descriptor, formset=MultilingualBaseFormSet, form=InterventionDescriptorForm, can_delete=True, extra=EXTRA_FORMS, extra_formset_attrs={ 'default_second_language':ct.submission.get_secondary_language(), 'available_languages':[lang.lower() for lang in ct.submission.get_mandatory_languages()], 'display_language':request.user.get_profile().preferred_language, }, ) queryset = Descriptor.objects.filter(trial=trial_pk, aspect=choices.TRIAL_ASPECT[1][0], level=choices.DESCRIPTOR_LEVEL[0][0]) if request.POST: form = InterventionForm(request.POST, instance=ct, display_language=request.user.get_profile().preferred_language) specific_desc_formset = DescriptorFormSet(request.POST, queryset=queryset) if form.is_valid() and specific_desc_formset.is_valid(): descriptors = specific_desc_formset.save(commit=False) for descriptor in descriptors: descriptor.trial = ct specific_desc_formset.save() form.save() return HttpResponseRedirect(reverse('step_4',args=[trial_pk])) else: form = InterventionForm(instance=ct, default_second_language=ct.submission.get_secondary_language(), display_language=request.user.get_profile().preferred_language) specific_desc_formset = DescriptorFormSet(queryset=queryset) forms = [form] formsets = [specific_desc_formset] return render_to_response('repository/step_4.html', {'forms':forms,'formsets':formsets, 'trial_pk':trial_pk, 'title':TRIAL_FORMS[3], 'steps': step_list(trial_pk), 'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[3])), 'default_second_language': ct.submission.get_secondary_language(), 'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, context_instance=RequestContext(request))
def step_9(request, trial_pk): # TODO: this function should be on another place ct = get_object_or_404(ClinicalTrial, id=int(trial_pk)) su = Submission.objects.get(trial=ct) NewAttachmentFormSet = modelformset_factory(Attachment, extra=1, can_delete=False, form=NewAttachmentForm) existing_attachments = Attachment.objects.filter(submission=su) if request.method == 'POST': new_attachment_formset = NewAttachmentFormSet(request.POST, request.FILES, prefix='new') if new_attachment_formset.is_valid(): new_attachments = new_attachment_formset.save(commit=False) for attachment in new_attachments: attachment.submission = su new_attachment_formset.save() return HttpResponseRedirect(reverse('step_9',args=[trial_pk])) else: new_attachment_formset = NewAttachmentFormSet(queryset=Attachment.objects.none(), prefix='new') formsets = [new_attachment_formset] return render_to_response('repository/attachments.html', {'formsets':formsets, 'existing_attachments':existing_attachments, 'trial_pk':trial_pk, 'title':TRIAL_FORMS[8], 'host': request.get_host(), 'steps': step_list(trial_pk), 'remarks':Remark.opened.filter(submission=ct.submission,context=slugify(TRIAL_FORMS[8])), 'default_second_language': ct.submission.get_secondary_language(), 'available_languages': [lang.lower() for lang in ct.submission.get_mandatory_languages()],}, context_instance=RequestContext(request))