def update_draft(request, draft_pk): """Updates current draft to save admin comments :param draft_pk: Unique id for current draft :return: DraftRegistration obj """ data = json.loads(request.body) draft = get_draft_or_error(draft_pk) if 'admin_settings' in data: form = DraftRegistrationForm(data=data['admin_settings']) if not form.is_valid(): return HttpResponseBadRequest("Invalid form data") admin_settings = form.cleaned_data draft.notes = admin_settings.get('notes', draft.notes) del admin_settings['notes'] draft.flags = admin_settings draft.save() else: schema_data = data.get('schema_data', {}) data = deepcopy(draft.registration_metadata) for key, value in data.items(): data[key]['comments'] = schema_data.get(key, {}).get('comments', []) try: draft.update_metadata(data) draft.save() except (NodeStateError): raise HTTPError(http.BAD_REQUEST) return JsonResponse(serializers.serialize_draft_registration(draft))
def test_form_valid_notes(self): form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = AdminLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_equal(count, AdminLogEntry.objects.count()) self.dr1.reload() nt.assert_equal(self.dr1.notes, self.form_data['notes'])
def test_form_valid_reject(self, mock_reject, mock_files): self.form_data.update(approve_reject='reject') form = DraftRegistrationForm(data=self.form_data) nt.assert_true(form.is_valid()) view = setup_form_view(self.post_view, self.post, form, draft_pk=self.dr1._id) view.draft = self.dr1 count = AdminLogEntry.objects.count() with transaction.atomic(): view.form_valid(form) nt.assert_true(mock_reject.called) nt.assert_equal(count + 1, AdminLogEntry.objects.count())
def prereg(request): """Redirects to prereg page if user has prereg access :param request: Current logged in user :return: Redirect to prereg page with username, reviewers, and user obj """ paginator = Paginator(get_prereg_drafts(user=request.user), 5) try: page_number = int(request.GET.get('page')) except (TypeError, ValueError): page_number = 1 page = paginator.page(page_number) try: drafts = [ serializers.serialize_draft_registration(d, json_safe=False) for d in page ] except EmptyPage: drafts = [] for draft in drafts: draft['form'] = DraftRegistrationForm(draft) context = {'drafts': drafts, 'page': page} return render(request, 'pre_reg/prereg.html', context)
def update_draft(request, draft_pk): """Updates current draft to save admin comments :param draft_pk: Unique id for current draft :return: DraftRegistration obj """ data = json.loads(request.body) draft = get_draft_or_error(draft_pk) if 'admin_settings' in data: form = DraftRegistrationForm(data=data['admin_settings']) if not form.is_valid(): return HttpResponseBadRequest("Invalid form data") admin_settings = form.cleaned_data draft.notes = admin_settings.get('notes', draft.notes) del admin_settings['notes'] draft.flags = admin_settings draft.save() else: schema_data = data.get('schema_data', {}) data = deepcopy(draft.registration_metadata) log_message = list() for key, value in data.items(): comments = schema_data.get(key, {}).get('comments', []) for comment in comments: log_message.append('{}: {}'.format(key, comment['value'])) try: draft.update_metadata(data) draft.save() update_admin_log(user_id=request.user.id, object_id=draft._id, object_repr='Draft Registration', message='Comments: <p>{}</p>'.format( '</p><p>'.join(log_message)), action_flag=COMMENT_PREREG) except (NodeStateError): raise HTTPError(http.BAD_REQUEST) return JsonResponse(serializers.serialize_draft_registration(draft))