def save_questionnaire(request): manager = get_database_manager(request.user) if request.method == 'POST': questionnaire_code = request.POST['questionnaire-code'] json_string = request.POST['question-set'] question_set = json.loads(json_string) pid = request.POST['pid'] project = Project.load(manager.database, pid) form_model = FormModel.get(manager, project.qid) old_fields = form_model.fields try: QuestionnaireBuilder(form_model, manager).update_questionnaire_with_questions(question_set) except QuestionCodeAlreadyExistsException as e: return HttpResponseServerError(e) except QuestionAlreadyExistsException as e: return HttpResponseServerError(e) except EntityQuestionAlreadyExistsException as e: return HttpResponseServerError(e.message) else: try: form_model.form_code = questionnaire_code.lower() except DataObjectAlreadyExists as e: if e.message.find("Form") >= 0: return HttpResponseServerError("Questionnaire with this code already exists") return HttpResponseServerError(e.message) form_model.name = project.name form_model.entity_id = project.entity_type detail = utils.get_changed_questions(old_fields, form_model.fields, subject=False) form_model.save() UserActivityLog().log(request, project=project.name, action=EDITED_PROJECT, detail=json.dumps(detail)) return HttpResponse(json.dumps({"response": "ok"}))
def edit_project(request, project_id=None): manager = get_database_manager(request.user) entity_list = get_all_entity_types(manager) entity_list = helper.remove_reporter(entity_list) project = Project.load(manager.database, project_id) questionnaire = FormModel.get(manager, project.qid) if request.method == 'GET': form = CreateProject(data=project, entity_list=entity_list) activity_report_questions = json.dumps(helper.get_activity_report_questions(manager), default=field_to_json) subject_report_questions = json.dumps(helper.get_subject_report_questions(manager), default=field_to_json) fields = questionnaire.fields if questionnaire.entity_defaults_to_reporter(): fields = helper.hide_entity_question(questionnaire.fields) existing_questions = json.dumps(fields, default=field_to_json) return render_to_response('project/create_project.html', {'form': form, "activity_report_questions": repr(activity_report_questions), 'subject_report_questions': repr(subject_report_questions), 'preview_links': get_preview_and_instruction_links(), 'existing_questions': repr(existing_questions), 'questionnaire_code': questionnaire.form_code, 'project': project, 'is_edit': 'true', 'post_url': reverse(edit_project, args=[project_id])}, context_instance=RequestContext(request)) if request.method == 'POST': project_info = json.loads(request.POST['profile_form']) form = CreateProject(entity_list, data=project_info) if form.is_valid(): detail = dict() for key, changed in enumerate(form.changed_data): if getattr(project, changed) != form.cleaned_data.get(changed): detail.update({changed.capitalize(): form.cleaned_data.get(changed)}) project.update(form.cleaned_data) try: old_fields = questionnaire.fields questionnaire = update_questionnaire(questionnaire, request.POST, form.cleaned_data['entity_type'], form.cleaned_data['name'], manager, form.cleaned_data['language']) changed_questions = get_changed_questions(old_fields, questionnaire.fields, subject=False) detail.update(changed_questions) project.state = request.POST['project_state'] project.qid = questionnaire.save() UserActivityLog().log(request, project=project.name, action=EDITED_PROJECT, detail=json.dumps(detail)) except (QuestionCodeAlreadyExistsException, QuestionAlreadyExistsException, EntityQuestionAlreadyExistsException) as ex: return HttpResponse( json.dumps({'success': False, 'error_in_project_section': False, 'error_message': _(ex.message)})) except DataObjectAlreadyExists: return HttpResponse(json.dumps({'success': False, 'error_in_project_section': False, 'error_message': 'Questionnaire with this code already exists'})) try: project.save(manager) except DataObjectAlreadyExists as ex: message = _("%s with %s = %s already exists.") % (_(ex.data[2]), _(ex.data[0]), "'%s'" % project.name) return HttpResponse( json.dumps({'success': False, 'error_message': message, 'error_in_project_section': True})) return HttpResponse(json.dumps({'success': True, 'project_id': project.id}))
def edit_project(request, project_id): manager = get_database_manager(request.user) dashboard_page = settings.HOME_PAGE + "?deleted=true" questionnaire = Project.get(manager, project_id) if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) if request.method == 'GET': return render_to_response('project/create_project.html', {'preview_links': get_preview_and_instruction_links(), 'questionnaire_code': questionnaire.form_code, 'is_pro_sms': get_organization(request).is_pro_sms, 'is_edit': 'true', 'post_url': reverse(edit_project, args=[project_id])}, context_instance=RequestContext(request)) if request.method == 'POST': project_info = json.loads(request.POST['profile_form']) detail = _get_changed_data(questionnaire , project_info) if detail.get("Name"): detail.pop("Name") try: old_fields = questionnaire.fields old_form_code = questionnaire.form_code old_field_codes = questionnaire.field_codes() questionnaire = update_questionnaire(questionnaire, request.POST, manager) changed_questions = get_changed_questions(old_fields, questionnaire.fields, subject=False) detail.update(changed_questions) questionnaire.save() deleted_question_codes = _get_deleted_question_codes(old_codes=old_field_codes, new_codes=questionnaire.field_codes()) update_associated_submissions.delay(manager.database_name, questionnaire.id, deleted_question_codes) UserActivityLog().log(request, project=questionnaire.name, action=EDITED_QUESTIONNAIRE, detail=json.dumps(detail)) except (QuestionCodeAlreadyExistsException, QuestionAlreadyExistsException, EntityQuestionAlreadyExistsException) as ex: return HttpResponse( json.dumps({'success': False, 'error_in_project_section': False, 'error_message': _(ex.message)})) except DataObjectAlreadyExists: return HttpResponse(json.dumps({'success': False, 'error_in_project_section': False, "code_has_error":True, 'error_message': ugettext('Questionnaire with same code already exists.')})) if request.POST['has_callback'] == 'false': messages.add_message(request,messages.INFO,"success") return HttpResponse(json.dumps({'success': True, 'project_id': project_id, 'is_pro_sms': get_organization(request).is_pro_sms,}))
def save_questionnaire(request): manager = get_database_manager(request.user) if request.method == 'POST': new_short_code = request.POST['questionnaire-code'].lower() saved_short_code = request.POST['saved-questionnaire-code'].lower() form_model = get_form_model_by_code(manager, saved_short_code) detail_dict = dict() if new_short_code != saved_short_code: try: form_model.old_form_code = form_model.form_code form_model.form_code = new_short_code form_model.save() detail_dict.update({"form_code": new_short_code}) except DataObjectAlreadyExists as e: if e.message.find("Form") >= 0: return HttpResponse(json.dumps({'success': False, "code_has_error": True, 'error_message': ugettext( "Questionnaire with same code already exists.")})) return HttpResponseServerError(e.message) json_string = request.POST['question-set'] question_set = json.loads(json_string) try: saved_fields = form_model.fields QuestionnaireBuilder(form_model, manager).update_questionnaire_with_questions(question_set) form_model.save() changed = get_changed_questions(saved_fields, form_model.fields) changed.update(dict(entity_type=form_model.entity_type[0].capitalize())) detail_dict.update(changed) kwargs = dict() if request.POST.get("project-name") is not None: kwargs.update(dict(project=request.POST.get("project-name").capitalize())) UserActivityLog().log(request, action=EDITED_REGISTRATION_FORM, detail=json.dumps(detail_dict), **kwargs) return HttpResponse(json.dumps({'success': True, 'form_code': form_model.form_code})) except QuestionCodeAlreadyExistsException as e: return HttpResponse(json.dumps({'success': False, 'error_message': _(e.message)})) except QuestionAlreadyExistsException as e: return HttpResponse(json.dumps({'success': False, 'error_message': _(e.message)})) except EntityQuestionAlreadyExistsException as e: return HttpResponse(json.dumps({'success': False, 'error_message': _(e.message)}))