def export_count(request): if request.method == 'GET': return HttpResponse(status=405) submission_type = request.GET.get(u'type') post_body = json.loads(request.POST['data']) search_filters = post_body['search_filters'] questionnaire_code = post_body['questionnaire_code'] manager = get_database_manager(request.user) questionnaire = get_project_by_code(manager, questionnaire_code) organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) # the number_of_results limit will not be used for result-set size since scan-scroll api does not support it. # it is specified since the code-flow requires its value to be present query_params = { "search_filters": search_filters, "start_result_number": 0, "number_of_results": 4000, "order": "", "sort_field": "date" } search_text = search_filters.get("search_text", '') query_params.update({"search_text": search_text}) query_params.update({"filter": submission_type}) submission_count = get_submission_count(manager, questionnaire, query_params, local_time_delta) return HttpResponse(mimetype='application/json', content=json.dumps({"count": submission_count}))
def _create_export_artifact(form_model, manager, request, search_filters): # the number_of_results limit will not be used for result-set size since scan-scroll api does not support it. # it is specified since the code-flow requires its value to be present query_params = { "search_filters": search_filters, "start_result_number": 0, "number_of_results": 4000, "order": "", "sort_field": "date" } search_text = search_filters.get("search_text", '') submission_type = request.GET.get(u'type') query_params.update({"search_text": search_text}) query_params.update({"filter": submission_type}) is_media = False if request.POST.get('is_media') == u'true': is_media = True organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) project_name = request.POST.get(u"project_name") current_language = get_language() if form_model.xform: return _advanced_questionnaire_export(current_language, form_model, is_media, local_time_delta, manager, project_name, query_params, submission_type) return SubmissionExporter(form_model, project_name, manager, local_time_delta, current_language) \ .create_excel_response(submission_type, query_params)
def get_stats(request, form_code): dbm = get_database_manager(request.user) questionnaire = get_project_by_code(dbm, form_code) search_parameters = {} search_parameters.update({"start_result_number": 0}) search_parameters.update({"number_of_results": 0}) filter_type = "success" search_parameters.update({"filter": filter_type}) search_parameters.update({"sort_field": "ds_id"}) search_parameters.update( {"order": "-" if request.POST.get('sSortDir_0') == "desc" else ""}) search_filters = json.loads(request.POST.get('search_filters')) search_parameters.update({"search_filters": search_filters}) search_text = search_filters.get("search_text", '') search_parameters.update({"search_text": search_text}) organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) # total success submission count irrespective of current fields being present or not facet_results, total_submissions = get_facets_for_choice_fields( dbm, questionnaire, search_parameters, local_time_delta) return HttpResponse(json.dumps({ 'result': create_statistics_response(facet_results, questionnaire), 'total': total_submissions }), content_type='application/json')
def _get_failed_entries(organization, display_start=0, display_length=25, sort_col=2, sort_dir='asc'): header_dict = OrderedDict([('from_number', 'Data Sender'), ('created_at', 'Submission Date'), ('form_code', 'Questionnaire Code'), ('message', 'SMS Text'), ('error', 'Error message')]) order = list(header_dict.keys())[sort_col - 1] total = DatawinnerLog.objects.filter(organization=organization).count() i_start = display_start if display_length == 0: i_end = total else: i_end = display_start + display_length if sort_dir == 'desc': order = '-' + order org_logs = DatawinnerLog.objects.filter( organization=organization).order_by(order)[i_start:i_end] # import IPython # IPython.embed() local_time_delta = get_country_time_delta(organization.country) for entry in org_logs: entry.created_at = convert_utc_to_localized(local_time_delta, entry.created_at) org_logs_flat = org_logs.values_list('from_number', 'created_at', 'form_code', 'message', 'error') return total, list(org_logs_flat)
def _get_failed_entries(organization): org_logs = DatawinnerLog.objects.filter( organization=organization).order_by('-created_at') local_time_delta = get_country_time_delta(organization.country) for entry in org_logs: entry.created_at = convert_utc_to_localized(local_time_delta, entry.created_at) return org_logs
def _get_timezone_information(organization): timedelta = get_country_time_delta(organization.country) localized_time = convert_utc_to_localized(timedelta, datetime.datetime.utcnow()) timedelta_as_string = "%s%.2d:%.2d" % (timedelta[0], timedelta[1], timedelta[2]) return ugettext("GMT%s <span class='timezone-text'> Now it is: %s</span>" ) % (timedelta_as_string, datetime.datetime.strftime(localized_time, "%H:%M"))
def _get_all_criterias_from_request(request, form_code): dbm = get_database_manager(request.user) questionnaire = get_project_by_code(dbm, form_code) organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) pagination_params = _get_pagination_params(request) sort_params = _get_sorting_params(request) search_parameters = _get_search_params(request) return dbm, questionnaire, pagination_params, \ local_time_delta, sort_params, search_parameters
def projects_ajax(request): organization = get_organization(request) project_list = [] rows = get_project_list(request) smart_phone_instruction_link = reverse("smart_phone_instruction") local_time_delta = get_country_time_delta(organization.country) for project in rows: project_list.append( _construct_project_dict(request.user, local_time_delta, project)) project_list.sort(key=itemgetter('name')) return HttpResponse(mimetype='application/json', content=json.dumps(project_list, default=json_serial))
def index(request): organization = get_organization(request) page_heading = get_page_heading(request) hide_for_data_sender = 'none' if request.user.get_profile( ).reporter else '' rows = get_project_list(request) project_list = [] smart_phone_instruction_link = reverse("smart_phone_instruction") local_time_delta = get_country_time_delta(organization.country) for project in rows: project_list.append( _construct_project_dict(request.user, local_time_delta, project)) project_list.sort(key=itemgetter('name')) activation_success = request.GET.get('activation', False) error_messages = [] if "associate" in request.GET.keys(): error_messages = [ _('You may have been dissociated from the project. Please contact your administrator for more details.' ) ] if is_crs_admin(request): return render_to_response('alldata/index.html', { 'projects': project_list, 'page_heading': page_heading, 'is_crs_admin': True, 'project_links': get_alldata_project_links(), 'is_quota_reached': is_quota_reached(request), 'error_messages': error_messages, 'is_pro_sms': organization.is_pro_sms, 'activation_success': activation_success, 'hide_for_data_sender': hide_for_data_sender, 'current_lang': get_language() }, context_instance=RequestContext(request)) else: return render_to_response('alldata/index.html', { 'projects': project_list, 'page_heading': page_heading, 'is_crs_admin': False, "smart_phone_instruction_link": smart_phone_instruction_link, 'project_links': get_alldata_project_links(), 'is_quota_reached': is_quota_reached(request), 'error_messages': error_messages, 'is_pro_sms': organization.is_pro_sms, 'activation_success': activation_success, 'hide_for_data_sender': hide_for_data_sender, 'current_lang': get_language() }, context_instance=RequestContext(request))
def delete(request, project_id): dbm = get_database_manager(request.user) questionnaire = Project.get(dbm, project_id) dashboard_page = settings.HOME_PAGE + "?deleted=true" if questionnaire.is_void(): return HttpResponseRedirect(dashboard_page) organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) survey_response_ids = get_survey_response_ids_from_request( dbm, request, questionnaire, local_time_delta) received_times = [] for survey_response_id in survey_response_ids: survey_response = SurveyResponse.get(dbm, survey_response_id) received_times.append( datetime.datetime.strftime( convert_utc_to_localized(local_time_delta, survey_response.submitted_on), "%d/%m/%Y %X")) feeds_dbm = get_feeds_database(request.user) additional_feed_dictionary = get_project_details_dict_for_feed( questionnaire) delete_response = WebPlayerV2(dbm, feeds_dbm).delete_survey_response( survey_response, additional_feed_dictionary, websubmission_logger) mail_feed_errors(delete_response, dbm.database_name) if survey_response.data_record: ReportRouter().delete( get_organization(request).org_id, questionnaire.form_code, survey_response.data_record.id) if len(received_times): UserActivityLog().log(request, action=DELETED_DATA_SUBMISSION, project=questionnaire.name, detail=json.dumps({ "Date Received": "[%s]" % ", ".join(received_times) })) response = encode_json({ 'success_message': ugettext("The selected submissions have been deleted"), 'success': True }) else: response = encode_json({ 'error_message': ugettext("No records deleted"), 'success': False }) return HttpResponse(response)
def show_log(request): organization = get_organization(request) org_id = organization.org_id args = dict(organization=org_id) time_delta = get_country_time_delta(organization.country) if request.method == 'GET': form = LogFilterForm(request=request) else: form = LogFilterForm(request.POST, request=request) filter = form.data.copy() filter.pop("csrfmiddlewaretoken") for key, value in filter.items(): if value != "": if key == "daterange": dates = value.split(" %s " % ugettext("to")) # args["log_date__gte"] = convert_dmy_to_ymd(dates[0]) args["log_date__gte"] = convert_local_to_utc( dates[0] + " 00:00:00", time_delta, "%d-%m-%Y %H:%M:%S") try: end_date = date.today() if len(dates) > 1: # end_date = convert_dmy_to_ymd(dates[1]) end_date = convert_local_to_utc( dates[1] + " 23:59:59", time_delta, "%d-%m-%Y %H:%M:%S") else: end_date = convert_local_to_utc( dates[0] + " 23:59:59", time_delta, "%d-%m-%Y %H:%M:%S") except KeyError: pass args["log_date__lte"] = "%s" % end_date continue args[key] = value log_data = UserActivityLog.objects.select_related().filter( **args).order_by("-log_date") for entry in log_data: entry.log_date = convert_utc_to_localized(time_delta, entry.log_date) return render_to_response( "activitylog/activitylog.html", { 'form': form, 'is_pro_sms': organization.is_pro_sms, 'log_data': repr(encode_json([log.to_render() for log in log_data])) }, context_instance=RequestContext(request))
def export_subject(request): manager = get_database_manager(request.user) organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) current_language = get_language() subject_type = request.POST.get('subject_type', '').lower() project_name = subject_type form_model = get_form_model_by_entity_type(manager, [subject_type.lower()]) query_params = { "start_result_number": 0, "number_of_results": 4000, "order": "", "filter": 'identification_number', } return SubmissionExporter(form_model, project_name, manager, local_time_delta, current_language, None) \ .create_excel_response('identification_number', query_params)
def get_submissions(request, form_code): dbm = get_database_manager(request.user) questionnaire = get_project_by_code(dbm, form_code) search_parameters = {} search_parameters.update( {"start_result_number": int(request.POST.get('iDisplayStart'))}) search_parameters.update( {"number_of_results": int(request.POST.get('iDisplayLength'))}) filter_type = request.GET['type'] search_parameters.update({"filter": filter_type}) search_parameters.update({ "sort_field": _get_field_to_sort_on(request.POST, questionnaire, filter_type) }) search_parameters.update( {"order": "-" if request.POST.get('sSortDir_0') == "desc" else ""}) search_filters = json.loads(request.POST.get('search_filters')) search_parameters.update({"search_filters": search_filters}) search_text = search_filters.get("search_text", '') search_parameters.update({"search_text": search_text}) organization = get_organization(request) local_time_delta = get_country_time_delta(organization.country) search_results, query_fields = get_submissions_paginated( dbm, questionnaire, search_parameters, local_time_delta) submission_count_with_filters = get_submission_count( dbm, questionnaire, search_parameters, local_time_delta) submission_count_without_filters = get_submissions_without_user_filters_count( dbm, questionnaire, search_parameters) submissions = SubmissionQueryResponseCreator( questionnaire, local_time_delta).create_response(query_fields, search_results) return HttpResponse(jsonpickle.encode( { 'data': submissions, 'iTotalDisplayRecords': submission_count_with_filters, 'iDisplayStart': int(request.POST.get('iDisplayStart')), "iTotalRecords": submission_count_without_filters, 'iDisplayLength': int(request.POST.get('iDisplayLength')) }, unpicklable=False), content_type='application/json')
def _get_slim_submission_paginated(request, project_uuid): dbm = get_database_manager(request.user) form_model = FormModel.get(dbm, project_uuid) length = int(request.GET.get('length', '10')) start = int(request.GET.get('start', '0')) search_text = request.GET.get('search_str') search_parameters = {} search_parameters.update({"start_result_number": start}) search_parameters.update({"number_of_results": length}) search_parameters.update({"filter": 'all'}) search_parameters.update({"headers_for": 'all'}) search_parameters.update( {'response_fields': ['ds_id', 'ds_name', 'date', 'status']}) search_parameters.update({"sort_field": "date"}) search_parameters.update({"order": "-"}) search_filters = { "submissionDatePicker": "All Dates", "datasenderFilter": "", "search_text": search_text, "dateQuestionFilters": {}, "uniqueIdFilters": {} } search_parameters.update({"search_filters": search_filters}) search_parameters.update({"search_text": search_text}) local_time_delta = get_country_time_delta('IN') search_results, query_fields = get_submissions_paginated( dbm, form_model, search_parameters, local_time_delta) submission_count_with_filters = get_submission_count( dbm, form_model, search_parameters, local_time_delta) submissions = SubmissionQueryResponseCreator(form_model, local_time_delta) \ .create_response(query_fields, search_results) return { 'data': submissions, 'headers': '', 'total': submission_count_with_filters, 'start': start, "search_count": len(submissions), 'length': length }
def show_log(request): organization = get_organization(request) org_id = organization.org_id args = dict(organization=org_id) time_delta = get_country_time_delta(organization.country) if request.method == 'GET': form = LogFilterForm(request=request) else: form = LogFilterForm(request.POST, request=request) filter = form.data.copy() filter.pop("csrfmiddlewaretoken") for key, value in filter.items(): if value != "": if key == "daterange": dates = value.split(" %s " % _("to")) # args["log_date__gte"] = convert_dmy_to_ymd(dates[0]) args["log_date__gte"] = convert_local_to_utc( dates[0] + " 00:00:00", time_delta, "%d-%m-%Y %H:%M:%S") try: end_date = date.today() if len(dates) > 1: # end_date = convert_dmy_to_ymd(dates[1]) end_date = convert_local_to_utc( dates[1] + " 23:59:59", time_delta, "%d-%m-%Y %H:%M:%S") else: end_date = convert_local_to_utc( dates[0] + " 23:59:59", time_delta, "%d-%m-%Y %H:%M:%S") except KeyError: pass args["log_date__lte"] = "%s" % end_date continue args[key] = value log_data = UserActivityLog.objects.select_related().filter( **args).order_by("-log_date") for entry in log_data: entry.log_date = convert_utc_to_localized(time_delta, entry.log_date) action = entry.action if action == "Updated reminders": try: current_lang = get_language() activate(current_lang) details = json.loads(entry.detail) text_details = "" text_details += "<ul class='bulleted'>" for key, value in details.iteritems(): if value != "": text_details += "<li>" + _(key) % value + "</li>" else: text_details += "<li>" + _(key) + "</li>" text_details += "</ul>" entry.detail = text_details except ValueError: entry.detail = _(entry.detail) if action == "Set Deadline": try: current_lang = get_language() activate(current_lang) entry.detail = _(entry.detail) except ValueError: entry.detail = _(entry.detail) if action == "Edited Data Submission(s) for advanced questionnaire": try: current_lang = get_language() activate(current_lang) details = json.loads(entry.detail) text_details = "" text_details += _("Changed Answers:") text_details += "<ul class='bulleted'>" for key, value in details.iteritems(): question = unicode(value['question']) #if value['old'] and value['new']: try: old_data_value = str(value['old'].encode('UTF-8')) new_data_value = str(value['new'].encode('UTF-8')) text_details += '<li>' + question + ': "' + old_data_value.decode( 'UTF-8') + '" ' + _( "to") + ' "' + new_data_value.decode( 'UTF-8') + '"</li>' #except : #new_data_value = str(value['new']) #text_details += '<li>'+ _("New node: ") + '</br>' + question + ':' + new_data_value +'"</li>' #else : #old_data_value = str(value['old']) #text_details += '<li>'+ _("Delete node: ") + '</br>' + question + ':' + old_data_value +'"</li>' except (ValueError, IndexError): entry.detail = _(entry.detail) text_details += "</ul>" entry.detail = text_details except: entry.detail = _(entry.detail) return render_to_response( "activitylog/activitylog.html", { 'form': form, 'is_pro_sms': organization.is_pro_sms, 'log_data': repr(encode_json([log.to_render() for log in log_data])) }, context_instance=RequestContext(request))