def questionnaire_preview(request, project_id=None, sms_preview=False): manager = get_database_manager(request.user) if request.method == 'GET': dashboard_page = settings.HOME_PAGE + "?deleted=true" questionnaire = Project.get(manager, project_id) if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) #if form_model.is_entity_type_reporter(): # fields = helper.hide_entity_question(form_model.fields) project_links = make_project_links(questionnaire) questions = [] fields = questionnaire.fields for field in fields: question = helper.get_preview_for_field(field) questions.append(question) example_sms = "%s" % (questionnaire.form_code) example_sms += get_example_sms(fields) template = 'project/questionnaire_preview.html' if sms_preview else 'project/questionnaire_preview_list.html' return render_to_response( template, { "questions": questions, 'questionnaire_code': questionnaire.form_code, 'project': questionnaire, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'example_sms': example_sms, 'org_number': get_organization_telephone_number(request) }, context_instance=RequestContext(request))
def subject_registration_form_preview(request, project_id=None, entity_type=None): manager = get_database_manager(request.user) questionnaire = Project.get(manager, project_id) dashboard_page = settings.HOME_PAGE + "?deleted=true" if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) if not entity_type: entity_type = questionnaire.entity_type[0] if request.method == "GET": fields, project_links, questions, registration_questionnaire = _get_registration_form( manager, questionnaire, entity_type) example_sms = get_example_sms_message( fields, registration_questionnaire.form_code) return render_to_response( 'project/questionnaire_preview_list.html', { "questions": questions, 'questionnaire_code': registration_questionnaire.form_code, 'project': questionnaire, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'example_sms': example_sms, 'org_number': get_organization_telephone_number(request) }, context_instance=RequestContext(request))
def _update_form_context(self, form_context, questionnaire_form, web_view_enabled=True): form_context.update({ 'extension_template': 'project/subjects.html', 'form_code': self.subject_registration_code, 'entity_type': self.entity_type, 'project_id': self.questionnaire.id, "questionnaire_form": questionnaire_form, "questions": self.form_model.fields, "org_number": get_organization_telephone_number(self.request), "example_sms": get_example_sms_message(self.form_model.fields, self.subject_registration_code), "web_view": web_view_enabled, "back_link": reverse("registered_subjects", args=[self.questionnaire.id, self.entity_type]), "edit_subject_questionnaire_link": reverse('edit_my_subject_questionnaire', args=[self.questionnaire.id, self.entity_type]), "register_subjects_link": reverse('subject_questionnaire', args=[self.questionnaire.id, self.entity_type]) + "?web_view=True" })
def sms_preview(request): manager = get_database_manager(request.user) context = {'org_number': get_organization_telephone_number(request)} project_info = json.loads(request.POST['profile_form']) context.update(get_sms_preview_context(manager, request.POST, project_info)) return render_to_response("project/sms_instruction_preview.html", context, context_instance=RequestContext(request))
def questionnaire_sms_preview(request): manager = get_database_manager(request.user) context = {'org_number': get_organization_telephone_number(request)} project_info = Project.load(manager.database, request.POST['project_id']) if project_info: context.update( get_sms_preview_context(manager, request.POST, project_info)) return render_to_response("project/sms_instruction_preview.html", context, context_instance=RequestContext(request))
def send_email_to_data_sender(user, language_code, request=None, type="activation", organization=None): site = get_current_site(request) account_type = organization.account_type if organization else 'Pro SMS' ctx_dict = { 'domain': site.domain, 'uid': int_to_base36(user.id), 'user': user, 'token': default_token_generator.make_token(user), 'protocol': 'http', 'site': site, 'account_type': account_type, } types = dict({ "activation": dict({ "subject": 'activatedatasenderemail/activation_email_subject_for_data_sender_account_', "subject_param": False, "template": 'activatedatasenderemail/activation_email_for_data_sender_account_' }), "created_user": dict({ "subject": 'registration/created_user_email_subject_', "subject_param": site.domain, "template": 'registration/created_user_email_' }) }) if type not in types: return action = types.get(type) subject = render_to_string( action.get("subject") + str(language_code) + '.txt') subject = ''.join(subject.splitlines()) if action.get("subject_param"): subject = subject % action.get("subject_param") if request is not None: ctx_dict.update({"creator_user": request.user.first_name}) if organization: ctx_dict.update( {"org_number": get_organization_telephone_number(request)}) message = render_to_string( action.get("template") + language_code + '.html', ctx_dict) email = EmailMessage(subject, message, EMAIL_HOST_USER, [user.email], [HNI_SUPPORT_EMAIL_ID]) email.content_subtype = "html" email.send()
def subject_registration_form_preview(request, project_id=None): manager = get_database_manager(request.user) project = Project.load(manager.database, project_id) if request.method == "GET": fields, project_links, questions, registration_questionnaire = _get_registration_form(manager, project, project.entity_type) example_sms = get_example_sms_message(fields, registration_questionnaire.form_code) return render_to_response('project/questionnaire_preview_list.html', {"questions": questions, 'questionnaire_code': registration_questionnaire.form_code, 'project': project, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'example_sms': example_sms, 'org_number': get_organization_telephone_number(request)}, context_instance=RequestContext(request))
def questionnaire_preview(request, project_id=None, sms_preview=False): manager = get_database_manager(request.user) if request.method == 'GET': project = Project.load(manager.database, project_id) form_model = FormModel.get(manager, project.qid) fields = form_model.fields if form_model.is_entity_type_reporter(): fields = helper.hide_entity_question(form_model.fields) project_links = make_project_links(project, form_model.form_code) questions = [] for field in fields: question = helper.get_preview_for_field(field) questions.append(question) example_sms = "%s" % ( form_model.form_code) example_sms += get_example_sms(fields) template = 'project/questionnaire_preview.html' if sms_preview else 'project/questionnaire_preview_list.html' return render_to_response(template, {"questions": questions, 'questionnaire_code': form_model.form_code, 'project': project, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'example_sms': example_sms, 'org_number': get_organization_telephone_number(request)}, context_instance=RequestContext(request))
def project_overview(request, project_id=None): manager = get_database_manager(request.user) project = Project.load(manager.database, project_id) questionnaire = FormModel.get(manager, project.qid) number_of_questions = len(questionnaire.fields) questionnaire_code = questionnaire.form_code project_links = make_project_links(project, questionnaire_code) map_api_key = get_map_key(request.META['HTTP_HOST']) number_data_sender = len(project.data_senders) number_records = survey_response_count(manager, questionnaire_code, None, None) number_reminders = Reminder.objects.filter(project_id=project.id).count() links = {'registered_data_senders': reverse("registered_datasenders", args=[project_id]), 'web_questionnaire_list': reverse('web_questionnaire', args=[project_id])} add_data_senders_to_see_on_map_msg = _( "Register Data Senders to see them on this map") if number_data_sender == 0 else "" add_subjects_to_see_on_map_msg = _( "Register %s to see them on this map") % project.entity_type if get_entity_count_for_type(manager, project.entity_type) == 0 else "" in_trial_mode = _in_trial_mode(request) return render_to_response('project/overview.html', RequestContext(request, { 'project': project, 'entity_type': project['entity_type'], 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'number_of_questions': number_of_questions, 'map_api_key': map_api_key, 'number_data_sender': number_data_sender, 'number_records': number_records, 'number_reminders': number_reminders, 'links': links, 'add_data_senders_to_see_on_map_msg': add_data_senders_to_see_on_map_msg, 'add_subjects_to_see_on_map_msg': add_subjects_to_see_on_map_msg, 'in_trial_mode': in_trial_mode, 'questionnaire_code': questionnaire_code, 'org_number':get_organization_telephone_number(request) }))
def create_subject(request, entity_type=None): manager = get_database_manager(request.user) form_model = get_form_model_by_entity_type(manager, [entity_type.lower()]) web_questionnaire_template = get_template(request.user) disable_link_class, hide_link_class = get_visibility_settings_for( request.user) if request.method == 'GET': questionnaire_form = SubjectRegistrationForm(form_model) form_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, web_view=request.GET.get("web_view", False)) form_context.update( {'is_pro_sms': get_organization(request).is_pro_sms}) return render_to_response(web_questionnaire_template, form_context, context_instance=RequestContext(request)) if request.method == 'POST': questionnaire_form = SubjectRegistrationForm( form_model, data=request.POST, country=get_organization_country(request)) if not questionnaire_form.is_valid(): form_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, web_view=True) return render_to_response(web_questionnaire_template, form_context, context_instance=RequestContext(request)) success_message = None error_message = None try: from datawinners.project.helper import create_request response = WebPlayer( manager, LocationBridge( location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)).accept( create_request(questionnaire_form, request.user.username), logger=websubmission_logger) if response.success: ReportRouter().route( get_organization(request).org_id, response) success_message = _( "%s with Identification Number %s successfully registered." ) % (entity_type.capitalize(), response.short_code) detail_dict = dict({ "Subject Type": entity_type.capitalize(), "Unique ID": response.short_code }) UserActivityLog().log(request, action=REGISTERED_IDENTIFICATION_NUMBER, detail=json.dumps(detail_dict)) questionnaire_form = SubjectRegistrationForm(form_model) else: from datawinners.project.helper import errors_to_list questionnaire_form._errors = errors_to_list( response.errors, form_model.fields) form_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, web_view=True) return render_to_response( web_questionnaire_template, form_context, context_instance=RequestContext(request)) except DataObjectNotFound: message = exception_messages.get(DataObjectNotFound).get(WEB) error_message = _(message) % (form_model.entity_type[0], form_model.entity_type[0]) except DataObjectAlreadyExists as exception: error_message = _( "%s with ID Number '%s' already exists or has previously collected data." ) % (exception.data[2], exception.data[1]) except Exception as exception: error_message = _( get_exception_message_for(exception=exception, channel=Channel.WEB)) subject_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, web_view=True) subject_context.update({ 'success_message': success_message, 'error_message': error_message }) return render_to_response(web_questionnaire_template, subject_context, context_instance=RequestContext(request))
def edit_subject(request, entity_type, entity_id, project_id=None): manager = get_database_manager(request.user) form_model = get_form_model_by_entity_type(manager, [entity_type.lower()]) subject = get_by_short_code(manager, entity_id, [entity_type.lower()]) back_link = reverse(all_subjects, args=[entity_type]) web_questionnaire_template = get_template(request.user) disable_link_class, hide_link_class = get_visibility_settings_for( request.user) if request.method == 'GET': initialize_values(form_model, subject) questionnaire_form = SubjectRegistrationForm(form_model) form_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, is_update=True, back_link=back_link) form_context.update( {'is_pro_sms': get_organization(request).is_pro_sms}) return render_to_response(web_questionnaire_template, form_context, context_instance=RequestContext(request)) if request.method == 'POST': questionnaire_form = SubjectRegistrationForm( form_model, data=request.POST, country=get_organization_country(request)) if not questionnaire_form.is_valid(): form_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, is_update=True, back_link=back_link) return render_to_response(web_questionnaire_template, form_context, context_instance=RequestContext(request)) success_message = None error_message = None try: response = WebPlayer( manager, LocationBridge( location_tree=get_location_tree(), get_loc_hierarchy=get_location_hierarchy)).accept( create_request(questionnaire_form, request.user.username, is_update=True)) if response.success: #assumption q6 - unique_id code and q2 - lastname codes cannot be changed update_submission_search_for_subject_edition( manager, [entity_type], response.processed_data) success_message = _("Your changes have been saved.") questionnaire_form = SubjectRegistrationForm( form_model, data=request.POST, country=get_organization_country(request)) else: from datawinners.project.helper import errors_to_list questionnaire_form._errors = errors_to_list( response.errors, form_model.fields) form_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, is_update=True, back_link=back_link) return render_to_response( web_questionnaire_template, form_context, context_instance=RequestContext(request)) except DataObjectNotFound: message = exception_messages.get(DataObjectNotFound).get(WEB) error_message = _(message) % (form_model.entity_type[0], form_model.entity_type[0]) except Exception as exception: error_message = _( get_exception_message_for(exception=exception, channel=Channel.WEB)) subject_context = _make_form_context( questionnaire_form, entity_type, disable_link_class, hide_link_class, form_model.form_code, get_organization_telephone_number(request), form_model.fields, is_update=True, back_link=back_link) subject_context.update({ 'success_message': success_message, 'error_message': error_message }) return render_to_response(web_questionnaire_template, subject_context, context_instance=RequestContext(request))
def project_overview(request, project_id): manager = get_database_manager(request.user) questionnaire = Project.get(manager, project_id) dashboard_page = settings.HOME_PAGE + "?deleted=true" if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) number_of_questions = len(questionnaire.fields) questionnaire_code = questionnaire.form_code project_links = make_project_links(questionnaire) map_api_key = get_map_key(request.META['HTTP_HOST']) number_data_sender = len(questionnaire.data_senders) number_records = survey_response_count(manager, questionnaire_code, None, None) number_reminders = Reminder.objects.filter( project_id=questionnaire.id).count() links = { 'registered_data_senders': reverse("registered_datasenders", args=[project_id]), 'web_questionnaire_list': reverse('web_questionnaire', args=[project_id]) } add_subjects_to_see_on_map_msg = "" if not is_empty(questionnaire.entity_type): subject_links = {} for entity_type in questionnaire.entity_type: subject_links.update({ entity_type: append_query_strings_to_url(reverse( "subject_questionnaire", args=[project_id, entity_type]), web_view=True) }) links.update({'create_subjects_links': subject_links}) add_subjects_to_see_on_map_msg = _( "Register %s to see them on this map" ) % questionnaire.entity_type[0] if get_entity_count_for_type( manager, questionnaire.entity_type[0]) == 0 else "" entity_type = "" has_multiple_unique_id = False in_trial_mode = _in_trial_mode(request) unique_id_header_text = "" if len(questionnaire.entity_type) == 1: entity_type = questionnaire.entity_type[0] unique_id_header_text = "%s %s &" % (ugettext("My"), entity_type.capitalize()) if len(questionnaire.entity_type) > 1: has_multiple_unique_id = True unique_id_header_text = "%s &" % ugettext("My Identification Numbers") return render_to_response( 'project/overview.html', RequestContext( request, { 'project': questionnaire, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'number_of_questions': number_of_questions, 'map_api_key': map_api_key, 'number_data_sender': number_data_sender, 'number_records': number_records, 'number_reminders': number_reminders, 'links': links, 'add_subjects_to_see_on_map_msg': add_subjects_to_see_on_map_msg, 'in_trial_mode': in_trial_mode, 'questionnaire_code': questionnaire_code, 'has_multiple_unique_id': has_multiple_unique_id, 'entity_type': json.dumps(entity_type), 'unique_id_header_text': unique_id_header_text, 'org_number': get_organization_telephone_number(request) }))