def edit_subject_questionnaire(request, entity_type=None): # edit subject type questionnaire view manager = get_database_manager(request.user) if entity_type is None: return HttpResponseRedirect(reverse(all_subject_types)) form_model = get_form_model_by_entity_type(manager, [entity_type.lower()]) if form_model is None: form_model = get_form_model_by_code(manager, REGISTRATION_FORM_CODE) fields = form_model.fields existing_questions = json.dumps(fields, default=field_to_json) return render_to_response('entity/questionnaire.html', { 'existing_questions': repr(existing_questions), 'questionnaire_code': form_model.form_code, 'language': form_model.activeLanguages[0], 'entity_type': entity_type, 'is_pro_sms': get_organization(request).is_pro_sms, 'post_url': reverse(save_questionnaire), 'unique_id_types': json.dumps([{ "name": unique_id_type.capitalize(), "value": unique_id_type } for unique_id_type in get_unique_id_types(manager) if unique_id_type != entity_type]), }, context_instance=RequestContext(request))
def questionnaire(request, project_id): manager = get_database_manager(request.user) if request.method == 'GET': questionnaire = Project.get(manager, project_id) if questionnaire.is_void(): return HttpResponseRedirect(settings.HOME_PAGE + "?deleted=true") fields = questionnaire.fields existing_questions = json.dumps(fields, default=field_to_json) project_links = make_project_links(questionnaire) success, error = submission_stats(manager, questionnaire.form_code) project_has_submissions = (success + error > 0) in_trial_mode = _in_trial_mode(request) is_success = False active_language = request.LANGUAGE_CODE if "success" in [m.message for m in messages.get_messages(request)]: is_success = True return render_to_response( 'project/questionnaire.html', { "existing_questions": repr(existing_questions), 'questionnaire_code': questionnaire.form_code, 'project': questionnaire, 'project_has_submissions': project_has_submissions, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'in_trial_mode': in_trial_mode, 'is_success': is_success, 'active_language': active_language, 'post_url': reverse(edit_project, args=[project_id]), 'unique_id_types': get_unique_id_types(manager), 'preview_links': get_preview_and_instruction_links() }, context_instance=RequestContext(request))
def create_project(request): manager = get_database_manager(request.user) org = get_organization(request) is_active, project_active_id, project_active_name = get_active_form_model_name_and_id( manager) has_permission_on_active_project = True ngo_admin_email = get_ngo_admin_user_profiles_for(org)[0].user.email if is_active: user_permission = get_user_permission(user_id=request.user.id, dbm=manager) if user_permission is not None and project_active_id not in user_permission.project_ids: has_permission_on_active_project = False if request.method == 'GET': cancel_link = reverse('dashboard') if request.GET.get( 'prev', None) == 'dash' else reverse('alldata_index') return render_to_response('project/create_project.html', { 'preview_links': get_preview_and_instruction_links(), 'questionnaire_code': helper.generate_questionnaire_code(manager), 'is_edit': 'false', 'is_pro_sms': org.is_pro_sms, 'active_language': request.LANGUAGE_CODE, 'post_url': reverse(create_project), 'unique_id_types': json.dumps([ unique_id_type.capitalize() for unique_id_type in get_unique_id_types(manager) ]), 'has_permission_on_active_project': has_permission_on_active_project, 'ngo_admin_email': ngo_admin_email, 'cancel_link': cancel_link, 'is_active': is_active, 'project_active_id': project_active_id, 'project_active_name': project_active_name }, context_instance=RequestContext(request)) if request.method == 'POST': response_dict = _create_project_post_response(request, manager) return HttpResponse(json.dumps(response_dict))
def load_subject_type_with_projects(manager): result = OrderedDict() subject_types = get_unique_id_types(manager) for subject_type in subject_types: result.update({subject_type: []}) rows = manager.view.projects_by_subject_type() for row in rows: if row.key != 'reporter': projects = result.get(row.key) or [] projects.append(row.value) result.update({row.key: projects}) for subject_type in subject_types: result[subject_type] = sorted(result[subject_type]) return result
def create_project(request): manager = get_database_manager(request.user) if request.method == 'GET': cancel_link = reverse('dashboard') if request.GET.get('prev', None) == 'dash' else reverse('alldata_index') return render_to_response('project/create_project.html', {'preview_links': get_preview_and_instruction_links(), 'questionnaire_code': helper.generate_questionnaire_code(manager), 'is_edit': 'false', 'active_language': request.LANGUAGE_CODE, 'post_url': reverse(create_project), 'unique_id_types': json.dumps([unique_id_type.capitalize() for unique_id_type in get_unique_id_types(manager)]), 'cancel_link': cancel_link}, context_instance=RequestContext(request)) if request.method == 'POST': response_dict = _create_project_post_response(request, manager) return HttpResponse(json.dumps(response_dict))
def migration_to_convert_subject_ids_to_lowercase(db_name): try: logger = logging.getLogger(db_name) dbm = get_db_manager(db_name) entity_types = get_unique_id_types(dbm) for entity_type in entity_types: all_entities = get_all_entities(dbm, [entity_type]) try: for entity in all_entities: if 'short_code' in entity.data.keys(): short_code = entity.data['short_code']['value'] if re.search('[A-Z]', short_code): entity.data['short_code'][ 'value'] = short_code.lower() entity.save() logger.info('Migrated short_code:%s' % short_code) except Exception as e: logger.exception(e) logger.info('Completed Migration') mark_as_completed(db_name) except Exception as e: logger.exception(e)
def get(self, request, project_id): manager = get_database_manager(request.user) questionnaire = Project.get(manager, project_id) excel_as_dict = None try: if not self._reload_required( request): # Switch to handle unexpected failures excel_as_dict = self._get_pre_computed_questionnaire_as_dict( questionnaire) raw_excel, file_type = questionnaire.has_questionnaire_attachment( )[1:] if excel_as_dict is None: excel_as_dict = convert_excel_to_dict(file_content=raw_excel, file_type=file_type) _save_questionnaire_as_dict_for_builder( questionnaire, excel_as_dict) return HttpResponse(json.dumps({ "project_id": project_id, "questionnaire": excel_as_dict, "file_type": file_type, "unique_id_types": get_unique_id_types(manager) }), content_type='application/json') except Exception as e: logger.exception("Exception : \n%s" % e) return HttpResponse(json.dumps({ "success": False, "project_id": project_id, 'reason': 'Unable to fetch questionnaire details', 'details': e.message }), content_type='application/json')
def create_project(request): manager = get_database_manager(request.user) ngo_admin = NGOUserProfile.objects.get(user=request.user) active_language = request.LANGUAGE_CODE if request.method == 'GET': cancel_link = reverse('dashboard') if request.GET.get( 'prev', None) == 'dash' else reverse('index') return render_to_response('project/create_project.html', { 'preview_links': get_preview_and_instruction_links(), 'questionnaire_code': helper.generate_questionnaire_code(manager), 'is_edit': 'false', 'active_language': active_language, 'post_url': reverse(create_project), 'unique_id_types': json.dumps([ unique_id_type.capitalize() for unique_id_type in get_unique_id_types(manager) ]), 'cancel_link': cancel_link }, context_instance=RequestContext(request)) if request.method == 'POST': project_info = json.loads(request.POST['profile_form']) try: questionnaire = create_questionnaire( post=request.POST, manager=manager, name=project_info.get('name'), language=project_info.get('language', active_language), reporter_id=ngo_admin.reporter_id) except (QuestionCodeAlreadyExistsException, QuestionAlreadyExistsException, EntityQuestionAlreadyExistsException) as ex: return HttpResponse( json.dumps({ 'success': False, 'error_message': _(ex.message), 'error_in_project_section': False })) code_has_errors, name_has_errors = False, False error_message = {} if not questionnaire.is_form_code_unique(): code_has_errors = True error_message["code"] = _( "Questionnaire with same code already exists.") if not questionnaire.is_project_name_unique(): name_has_errors = True error_message["name"] = _( "Questionnaire with same name already exists.") if not code_has_errors and not name_has_errors: _associate_account_users_to_project(manager, questionnaire) questionnaire.update_doc_and_save() UserActivityLog().log(request, action=CREATED_PROJECT, project=questionnaire.name, detail=questionnaire.name) return HttpResponse( json.dumps({ 'success': True, 'project_id': questionnaire.id })) return HttpResponse( json.dumps({ 'success': False, 'error_message': error_message, 'error_in_project_section': False, 'code_has_errors': code_has_errors, 'name_has_errors': name_has_errors }))