def broadcast_message(request, project_id): dbm = get_database_manager(request.user) project = Project.load(dbm.database, project_id) number_associated_ds = len(project.data_senders) number_of_ds = len(import_module.load_all_entities_of_type(dbm, type=REPORTER)[0]) - 1 questionnaire = FormModel.get(dbm, project.qid) organization = utils.get_organization(request) if request.method == 'GET': form = BroadcastMessageForm(associated_ds=number_associated_ds, number_of_ds=number_of_ds) html = 'project/broadcast_message_trial.html' if organization.in_trial_mode else 'project/broadcast_message.html' return render_to_response(html, {'project': project, "project_links": make_project_links(project, questionnaire.form_code), 'is_quota_reached': is_quota_reached(request, organization=organization), "form": form, "ong_country": organization.country, "success": None}, context_instance=RequestContext(request)) if request.method == 'POST': form = BroadcastMessageForm(associated_ds=number_associated_ds, number_of_ds=number_of_ds, data=request.POST) if form.is_valid(): no_smsc = False data_senders = _get_data_senders(dbm, form, project) organization_setting = OrganizationSetting.objects.get(organization=organization) current_month = datetime.date(datetime.datetime.now().year, datetime.datetime.now().month, 1) message_tracker = organization._get_message_tracker(current_month) other_numbers = form.cleaned_data['others'] failed_numbers = [] try: failed_numbers = helper.broadcast_message(data_senders, form.cleaned_data['text'], organization_setting.get_organisation_sms_number()[0], other_numbers, message_tracker, country_code=organization.get_phone_country_code()) except NoSMSCException as e: no_smsc = True success = not no_smsc and len(failed_numbers) == 0 if success: form = BroadcastMessageForm(associated_ds=number_associated_ds, number_of_ds=number_of_ds) else: form = BroadcastMessageForm(associated_ds=number_associated_ds, number_of_ds=number_of_ds, data=request.POST) return render_to_response('project/broadcast_message.html', {'project': project, "project_links": make_project_links(project, questionnaire.form_code), 'is_quota_reached': is_quota_reached(request, organization=organization), "form": form, "ong_country": organization.country, "no_smsc": no_smsc, 'failed_numbers': ",".join(failed_numbers), "success": success}, context_instance=RequestContext(request)) return render_to_response('project/broadcast_message.html', {'project': project, "project_links": make_project_links(project, questionnaire.form_code), "form": form, 'is_quota_reached': is_quota_reached(request, organization=organization), 'success': None, "ong_country": organization.country}, context_instance=RequestContext(request))
def sent_reminders(request, project_id): dbm = get_database_manager(request.user) dashboard_page = settings.HOME_PAGE + "?deleted=true" questionnaire = Project.get(dbm, project_id) if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) organization = Organization.objects.get( org_id=request.user.get_profile().org_id) is_trial_account = organization.in_trial_mode html = 'project/sent_reminders_trial.html' if organization.in_trial_mode else 'project/sent_reminders.html' return render_to_response(html, { 'project': questionnaire, "project_links": make_project_links(questionnaire), 'is_quota_reached': is_quota_reached(request, organization=organization), 'reminders': get_all_reminder_logs_for_project(project_id, dbm), 'in_trial_mode': is_trial_account, 'questionnaire_code': questionnaire.form_code }, 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 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 review_and_test(request, project_id=None): manager = get_database_manager(request.user) project = Project.load(manager.database, project_id) form_model = FormModel.get(manager, project.qid) if request.method == 'GET': number_of_registered_subjects = get_non_voided_entity_count_for_type(manager, project.entity_type) number_of_registered_data_senders = len(project.data_senders) fields = form_model.fields if form_model.is_entity_type_reporter(): fields = helper.hide_entity_question(form_model.fields) is_reminder = "enabled" if len(Reminder.objects.filter(project_id=project.id)) != 0 else "disabled" project_devices = project.devices devices = ", ".join(project_devices).replace('sms', 'SMS').replace('web', 'Web').replace('smartPhone', 'Smartphone') in_trial_mode = _in_trial_mode(request) return render_to_response('project/review_and_test.html', {'project': project, 'fields': fields, 'project_links': make_project_links(project, form_model.form_code), 'is_quota_reached': is_quota_reached(request), 'number_of_datasenders': number_of_registered_data_senders , 'number_of_subjects': number_of_registered_subjects, "is_reminder": is_reminder, "in_trial_mode": in_trial_mode, "devices": devices}, context_instance=RequestContext(request))
def _make_form_context(questionnaire_form, project, form_code, hide_link_class, disable_link_class): return {'questionnaire_form': questionnaire_form, 'project': project, 'project_links': make_project_links(project, form_code), 'hide_link_class': hide_link_class, 'disable_link_class': disable_link_class, 'back_to_project_link': reverse("alldata_index"), 'smart_phone_instruction_link': reverse("smart_phone_instruction"), }
def _make_form_context(survey_response_form, form_model, hide_link_class, disable_link_class, entity_type=None, is_update=False): return {'questionnaire_form': survey_response_form, 'project': form_model, 'project_links': make_project_links(form_model, entity_type), 'hide_link_class': hide_link_class, 'disable_link_class': disable_link_class, 'back_to_project_link': reverse("alldata_index"), 'smart_phone_instruction_link': reverse("smart_phone_instruction", args=[form_model.id]), 'is_update': is_update, 'questionnaire_code': form_model.form_code }
def _get_registration_form(manager, project, type_of_subject='reporter'): if type_of_subject == 'reporter': registration_questionnaire = form_model.get_form_model_by_code(manager, REGISTRATION_FORM_CODE) else: entity_type = [project.entity_type] registration_questionnaire = get_form_model_by_entity_type(manager, entity_type) if registration_questionnaire is None: registration_questionnaire = form_model.get_form_model_by_code(manager, REGISTRATION_FORM_CODE) questions = viewable_questionnaire(registration_questionnaire) project_links = make_project_links(project, registration_questionnaire.form_code) return registration_questionnaire.fields, project_links, questions, registration_questionnaire
def sent_reminders(request, project_id): dbm = get_database_manager(request.user) project = Project.load(dbm.database, project_id) questionnaire = FormModel.get(dbm, project.qid) organization = Organization.objects.get(org_id=request.user.get_profile().org_id) is_trial_account = organization.in_trial_mode html = 'project/reminders_trial.html' if organization.in_trial_mode else 'project/sent_reminders.html' return render_to_response(html, {'project': project, "project_links": make_project_links(project, questionnaire.form_code), 'is_quota_reached': is_quota_reached(request, organization=organization), 'reminders': get_all_reminder_logs_for_project(project_id, dbm), 'in_trial_mode': is_trial_account, 'create_reminder_link': reverse(create_reminder, args=[project_id])}, context_instance=RequestContext(request))
def get(self, request, project_id): dbm = get_database_manager(request.user) questionnaire = Project.get(dbm, project_id) languages_list = get_available_project_languages(dbm) current_project_language = questionnaire.language return self.render_to_response( RequestContext( request, { 'project': questionnaire, 'project_links': make_project_links(questionnaire), 'languages_list': json.dumps(languages_list), 'languages_link': reverse('languages'), 'current_project_language': current_project_language, 'post_url': reverse("project-language", args=[project_id]), 'questionnaire_code': questionnaire.form_code }))
def get(self, request, project_id): dbm = get_database_manager(request.user) questionnaire = Project.get(dbm, project_id) if questionnaire.is_poll: return HttpResponseRedirect('/project/'+ project_id + '/results/'+questionnaire.form_code) languages_list = get_available_project_languages(dbm) current_project_language = questionnaire.language return self.render_to_response(RequestContext(request, { 'project': questionnaire, 'project_links': make_project_links(questionnaire), 'languages_list': json.dumps(languages_list), 'languages_link': reverse('languages'), 'is_pro_sms': get_organization(request).is_pro_sms, 'current_project_language': current_project_language, 'post_url': reverse("project-language", args=[project_id]), 'questionnaire_code': questionnaire.form_code }))
def questionnaire(request, project_id=None): 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) existing_questions = json.dumps(fields, default=field_to_json) project_links = make_project_links(project, form_model.form_code) in_trial_mode = _in_trial_mode(request) return render_to_response('project/questionnaire.html', {"existing_questions": repr(existing_questions), 'questionnaire_code': form_model.form_code, 'project': project, 'project_links': project_links, 'is_quota_reached': is_quota_reached(request), 'in_trial_mode': in_trial_mode, 'preview_links': get_preview_and_instruction_links_for_questionnaire()}, 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 _get_project_and_project_link(manager, project_id, reporter_id=None): project = Project.load(manager.database, project_id) questionnaire = FormModel.get(manager, project.qid) project_links = make_project_links(project, questionnaire.form_code, reporter_id) return project, project_links
def get_project_link(project, entity_type=None): project_links = make_project_links(project, entity_type) return project_links
def _make_project_context(form_model, project): return {'form_model': form_model, 'project': project, 'project_links': make_project_links(project, form_model.form_code)}
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) }))