Пример #1
0
 def test_should_delete_datasender_from_project(self):
     self.project1 = Project.get(self.manager, self.project1_id)
     self.project1.data_senders = ['rep1', 'rep2']
     datasender_to_be_deleted = 'rep1'
     self.project1.delete_datasender(self.manager, datasender_to_be_deleted)
     self.project1 = Project.get(self.manager, self.project1_id)
     expected_data_senders = ['rep2']
     self.assertEqual(self.project1.data_senders, expected_data_senders)
Пример #2
0
    def test_should_update_project(self):
        self.project1 = Project.get(self.manager, self.project1_id)
        self.project1.update(
            dict(name=project1_name, devices=['web', 'sms'],
                 goals="New goals"))
        project1_id = self.project1.save()

        project = Project.get(self.manager, project1_id)
        self.assertEquals(project.name, project1_name)
        self.assertEquals(project.goals, 'New goals')
        self.assertEquals(project.devices, ['web', 'sms'])
Пример #3
0
    def post(self, request, project_id):
        data = request.POST['data']
        file_type = request.POST['file_type']
        is_draft = request.POST['is_draft']
        try:
            excel_as_dict = json.loads(data, object_pairs_hook=OrderedDict)
            if is_draft and is_draft.lower().strip() == 'true':
                manager = get_database_manager(request.user)
                questionnaire = Project.get(manager, project_id)
                _save_questionnaire_as_dict_for_builder(
                    questionnaire, excel_as_dict=excel_as_dict)
                return HttpResponse(json.dumps({
                    "status": "success",
                    "project_id": project_id,
                    'reason': 'Successfully updated',
                    'details': ''
                }),
                                    content_type='application/json')

            excel_raw_stream = convert_json_to_excel(excel_as_dict, file_type)
            excel_file = _temp_file(request, excel_raw_stream, file_type)
            return _edit_questionnaire(request, project_id, excel_file,
                                       excel_as_dict)

        except Exception as e:
            logger.exception('Unable to save questionnaire from builder')
            return HttpResponse(
                json.dumps({
                    "status": "error",
                    "project_id": project_id,
                    'reason': 'Unable to save',  # TODO: i18n translation
                    'details': e.message
                }),
                content_type='application/json')
Пример #4
0
def analysis_results(request, project_id=None, questionnaire_code=None):
    manager = get_database_manager(request.user)
    org_id = helper.get_org_id_by_user(request.user)

    if request.method == 'GET':
        questionnaire = Project.get(manager, project_id)
        dashboard_page = settings.HOME_PAGE + "?deleted=true"
        if questionnaire.is_void():
            return HttpResponseRedirect(dashboard_page)

        filterable_fields = get_filterable_fields(questionnaire.fields, [])
        first_filterable_fields = filterable_fields.pop(
            0) if filterable_fields else None

        result_dict = {
            "xform": questionnaire.xform,
            "user_email": request.user.email,
            "is_quota_reached": is_quota_reached(request, org_id=org_id),
            "first_filterable_field": first_filterable_fields,
            "filterable_fields": filterable_fields,
            'is_pro_sms': get_organization(request).is_pro_sms,
            "is_media_field_present":
            questionnaire.is_media_type_fields_present
            # first 3 columns are additional submission data fields (ds_is, ds_name and submission_status
        }
        result_dict.update(
            project_info(request, questionnaire, questionnaire_code))
        return render_to_response('project/analysis_results.html',
                                  result_dict,
                                  context_instance=RequestContext(request))
Пример #5
0
def send_reminders_for_an_organization(org,
                                       on_date,
                                       sms_client,
                                       from_number,
                                       dbm,
                                       charged_sms=False):
    """
    Sends out all reminders for an organization, scheduled for the given date.
    """
    reminders_grouped_by_proj = _get_reminders_grouped_by_project_for_organization(
        org.org_id)
    logger.info("Projects with reminders:- %d" %
                len(reminders_grouped_by_proj))
    for project_id, reminders in reminders_grouped_by_proj.items():
        try:
            project = Project.get(dbm, project_id)
            if not project.has_deadline():
                continue
            #send reminders to next projects in the queue if their is any error while sending reminders to previous project
            _, total_sms_sent = send_reminders_on(project, reminders, on_date,
                                                  sms_client, from_number, dbm)

            increment_dict = {'sent_reminders_count': total_sms_sent}
            if charged_sms:
                increment_dict.update(
                    {'sent_reminders_charged_count': total_sms_sent})
            org.increment_message_count_for(**increment_dict)

        except Exception:
            logger.exception(
                "Exception while sending reminders for this project")
Пример #6
0
    def post(self, request):
        project_name = request.GET['pname'].strip()
        manager = get_database_manager(request.user)

        try:
            xls_parser_response = _try_parse_xls(manager, request,
                                                 project_name)

            if isinstance(xls_parser_response, HttpResponse):
                return xls_parser_response

            send_email_if_unique_id_type_question_has_no_registered_unique_ids(
                xls_parser_response, request, project_name)
            questionnaire_code = generate_questionnaire_code(manager)
            excel_file = _temp_file(request)
            mangrove_service = MangroveService(
                request,
                questionnaire_code=questionnaire_code,
                project_name=project_name,
                xls_form=excel_file,
                xls_parser_response=xls_parser_response)
            questionnaire_id, form_code = mangrove_service.create_project()

            if not questionnaire_id:
                logger.info("User: %s. Upload Error: %s",
                            request.user.username,
                            "Questionnaire must be unique")

                return HttpResponse(
                    content_type='application/json',
                    content=json.dumps({
                        'success':
                        False,
                        'error_msg': [
                            _("Duplicate labels. All questions (labels) must be unique."
                              )
                        ],
                        'message_prefix':
                        _("Sorry! Current version of DataWinners does not support"
                          ),
                        'message_suffix':
                        _("Update your XLSForm and upload again.")
                    }))

            questionnaire = Project.get(manager, questionnaire_id)
            _save_questionnaire_as_dict_for_builder(questionnaire,
                                                    excel_file=excel_file)
        except QuestionAlreadyExistsException as e:
            return HttpResponse(content_type='application/json',
                                content=json.dumps({
                                    'success': False,
                                    'error_msg': [_(e.message)]
                                }))
        return HttpResponse(json.dumps({
            "success": True,
            "project_name": project_name,
            "project_id": questionnaire_id,
            "form_code": form_code
        }),
                            content_type='application/json')
Пример #7
0
def geo_json_for_project(request, project_id, entity_type=None):
    dbm = get_database_manager(request.user)
    location_list = []

    try:
        if entity_type:
            first_geocode_field = _get_first_geocode_field_for_entity_type(
                dbm, entity_type)
            if first_geocode_field:
                unique_ids = get_all_entities(dbm, [entity_type], limit=1000)
                location_list.extend(
                    get_location_list_for_entities(first_geocode_field,
                                                   unique_ids))
        else:
            questionnaire = Project.get(dbm, project_id)
            unique_ids = by_short_codes(dbm,
                                        questionnaire.data_senders,
                                        ["reporter"],
                                        limit=1000)
            location_list.extend(get_location_list_for_datasenders(unique_ids))

    except DataObjectNotFound:
        pass

    location_geojson = {"type": "FeatureCollection", "features": location_list}
    return HttpResponse(json.dumps(location_geojson))
Пример #8
0
def get_submission_breakup(request, project_id):
    dbm = get_database_manager(request.user)
    questionnaire = Project.get(dbm, project_id)
    submission_success, submission_errors = submission_stats(
        dbm, questionnaire.id)
    response = json.dumps([submission_success, submission_errors])
    return HttpResponse(response)
Пример #9
0
def my_poll_recipients_count(request, project_id):
    dbm = get_database_manager(request.user)
    questionnaire = Project.get(dbm, project_id)
    contact_dict = _get_poll_recipients(dbm, questionnaire)
    return HttpResponse(content_type='application/json',
                        content=json.dumps(
                            {'my_poll_recipients': contact_dict}))
Пример #10
0
def make_user_data_sender_with_project(manager, reporter_id, project_id):
    questionnaire = Project.get(manager, project_id)
    reporters_to_associate = [reporter_id]
    questionnaire.associate_data_sender_to_project(manager,
                                                   reporters_to_associate)
    for data_senders_code in reporters_to_associate:
        update_datasender_index_by_id(data_senders_code, manager)
Пример #11
0
def edit_xform_submission_post(request, survey_response_id):
    manager = get_database_manager(request.user)
    survey_response = get_survey_response_by_id(manager, survey_response_id)
    activity_log = UserActivityLog()
    questionnaire = Project.get(manager, survey_response.form_model_id)
    old_data = survey_response._doc.values

    try:
        response = XFormWebSubmissionHandler(request=request). \
            update_submission_response(survey_response_id)
        new_survey_response = get_survey_response_by_id(
            manager, survey_response_id)
        new_data = new_survey_response._doc.values

        edit_details = _details_for_activity_log(new_data, old_data,
                                                 questionnaire)
        activity_log.log(request,
                         action=EDITED_DATA_SUBMISSION_ADV_QUEST,
                         project=questionnaire.name,
                         detail=json.dumps(edit_details))

        return response

    except Exception as e:
        logger.exception("Exception in submission : \n%s" % e)
        send_email_on_exception(request.user,
                                "Edit Web Submission",
                                traceback.format_exc(),
                                additional_details={
                                    'survey_response_id': survey_response_id,
                                    'submitted-data': request.POST['form_data']
                                })
        return HttpResponseBadRequest()
Пример #12
0
 def _associate_datasender_to_poll_questionnaire(self, current_project_id,
                                                 dbm, short_codes):
     questionnaire = Project.get(dbm, current_project_id)
     questionnaire.associate_data_sender_to_project(dbm, short_codes)
     questionnaire.save()
     for short_code in short_codes:
         update_datasender_index_by_id(short_code, dbm)
Пример #13
0
    def _associate_datasender_to_questionnaire(self, dbm, reporter_id, questionnaire_id):
        questionnaire = Project.get(dbm, questionnaire_id)
        reporters_to_associate = [reporter_id]
        questionnaire.associate_data_sender_to_project(dbm, reporters_to_associate)
        for data_senders_code in reporters_to_associate:
            update_datasender_index_by_id(data_senders_code, dbm)

        return questionnaire.name
Пример #14
0
 def _get_projects(self, manager, request):
     project_ids = request.POST.get('project_id').split(';')
     questionnaires = []
     for project_id in project_ids:
         questionnaire = Project.get(manager, project_id)
         if questionnaire is not None:
             questionnaires.append(questionnaire)
     return questionnaires
Пример #15
0
def remove_user_as_datasender_for_projects(manager, project_ids,
                                           selected_questionnaires,
                                           reporter_id):
    removed_questionnaires = list(
        set(project_ids) - set(selected_questionnaires))
    for questionnaire in removed_questionnaires:
        project = Project.get(manager, questionnaire)
        project.delete_datasender(manager, reporter_id)
        update_datasender_index_by_id(reporter_id, manager)
Пример #16
0
def associate_user_with_existing_project(manager, reporter_id):
    rows = get_all_projects(manager)
    for row in rows:
        project_id = row['value']['_id']
        questionnaire = Project.get(manager, project_id)
        reporters_to_associate = [reporter_id]
        questionnaire.associate_data_sender_to_project(manager, reporters_to_associate)
        for data_senders_code in reporters_to_associate:
            update_datasender_index_by_id(data_senders_code, manager)
Пример #17
0
 def wrapper(*args, **kw):
     request = args[0]
     user = request.user
     dbm = get_database_manager(user)
     project_id = kw["project_id"]
     questionnaire = Project.get(dbm, project_id)
     if "web" not in questionnaire.devices:
         referer = django_settings.HOME_PAGE
         return HttpResponseRedirect(referer)
     return f(*args, **kw)
Пример #18
0
def delete_datasenders_from_project(manager, data_sender_ids):
    from datawinners.search.datasender_index import update_datasender_index_by_id

    for entity_id in data_sender_ids:
        associated_projects = get_all_projects(manager,
                                               data_sender_id=entity_id)
        for associated_project in associated_projects:
            project = Project.get(manager, associated_project['value']['_id'])
            project.delete_datasender(manager, entity_id)
            update_datasender_index_by_id(entity_id, manager)
Пример #19
0
def deactivate_poll(request, project_id):
    if request.method == 'POST':
        manager = get_database_manager(request.user)
        questionnaire = Project.get(manager, project_id)
        if questionnaire:
            _change_questionnaire_status(questionnaire, "deactivated")
            UserActivityLog().log(request,
                                  action=DEACTIVATE_POLL,
                                  project=questionnaire.name,
                                  detail=questionnaire.name)
            return HttpResponse(json.dumps({'success': True}))
        return HttpResponse(json.dumps({'success': False}))
Пример #20
0
def reminder_settings(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)
    if questionnaire.is_poll:
         return HttpResponseRedirect('/project/'+ project_id + '/results/'+questionnaire.form_code)
    from datawinners.project.views.views import make_project_links


    project_links = make_project_links(questionnaire)
    active_language = request.LANGUAGE_CODE
    org_id = (NGOUserProfile.objects.get(user=request.user)).org_id
    organization = Organization.objects.get(org_id=org_id)
    is_reminder_disabled = is_empty(questionnaire.data_senders)
    url_to_my_datasender = project_links['registered_datasenders_link']
    html = 'project/reminders_trial.html' if organization.in_trial_mode else 'project/reminder_settings.html'
    if request.method == 'GET':
        data = (_reminder_info_about_project(questionnaire))

        return render_to_response(html,
                                  {'project_links': project_links,
                                   'is_quota_reached': is_quota_reached(request, organization=organization),
                                   'project': questionnaire,
                                   'reminder_data': repr(json.dumps(data)),
                                   'questionnaire_code': questionnaire.form_code,
                                   'is_reminder_disabled': is_reminder_disabled,
                                   'active_language': active_language,
                                   'no_of_my_datasenders': len(questionnaire.data_senders),
                                   'is_pro_sms': get_organization(request).is_pro_sms,
                                   'url_to_my_datasender': url_to_my_datasender,
                                   'post_url': reverse(reminder_settings, args=[project_id])
                                  }, context_instance=RequestContext(request))

    if request.method == 'POST':
        post_data = request.POST.copy()
        post_data['should_send_reminder_to_all_ds'] = not post_data['whom_to_send_message'] == 'true'
        post_data = _populate_week_month_data(post_data)
        org_id = NGOUserProfile.objects.get(user=request.user).org_id
        organization = Organization.objects.get(org_id=org_id)
        reminder_list = Reminder.objects.filter(project_id=questionnaire.id)
        action = _get_activity_log_action(reminder_list, post_data)
        questionnaire, set_deadline = _add_reminder_info_to_project(post_data, questionnaire, organization,
                                                              reminder_list=reminder_list)
        questionnaire.save()
        if action is not None:
            UserActivityLog().log(request, action=action, project=questionnaire.name)
        if set_deadline:
            UserActivityLog().log(request, action=SET_DEADLINE, project=questionnaire.name)
        response = {'success_message': ugettext("Reminder settings saved successfully."), 'success': True, 'is_pro_sms': get_organization(request).is_pro_sms,}
        return HttpResponse(json.dumps(response))
Пример #21
0
def activate_poll(request, project_id):
    if request.method == 'POST':
        manager = get_database_manager(request.user)
        questionnaire = Project.get(manager, project_id)
        if questionnaire:
            response_dict = _create_reponse_for_activated_poll(
                manager, questionnaire, request)
            return HttpResponse(json.dumps(response_dict))
        return HttpResponse(
            json.dumps({
                'success': False,
                'message': "No Such questionnaire"
            }))
Пример #22
0
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)
Пример #23
0
    def post(self, request, project_id):
        dbm = get_database_manager(request.user)
        questionnaire = Project.get(dbm, project_id)
        try:
            questionnaire.activeLanguages = [request.POST['selected_language']]
            questionnaire.is_outgoing_sms_replies_enabled = request.POST['enable_sms_replies'] == 'true'
            questionnaire.save()
            is_success = True
            if 'resp_message' in request.GET:
                messages.info(request, ugettext('Your changes have been saved.'), extra_tags='success')
        except:
            is_success = False

        return HttpResponse(json.dumps({'success': is_success, 'is_pro_sms': get_organization(request).is_pro_sms}), mimetype='application/json', content_type='application/json')
Пример #24
0
def my_poll_recipients_count(request, project_id):
    dbm = get_database_manager(request.user)
    questionnaire = Project.get(dbm, project_id)
    datasender_ids = questionnaire.data_senders
    contact_dict = {}
    for datasender_id in datasender_ids:
        contact = contact_by_short_code(dbm, datasender_id)
        if contact.name != '':
            contact_dict[contact.name] = contact.short_code
        else:
            contact_dict[contact.data.get('mobile_number')
                         ['value']] = contact.short_code
    return HttpResponse(content_type='application/json',
                        content=json.dumps(
                            {'my_poll_recipients': contact_dict}))
Пример #25
0
def get_poll_info(request, project_id):
    manager = get_database_manager(request.user)
    questionnaire = Project.get(manager, project_id)
    project_links = get_project_link(questionnaire)
    questionnaire_active, active_poll_id, active_poll_name = get_active_form_model_name_and_id(
        manager)
    from_date = questionnaire.modified.date()
    to_date = questionnaire.end_date.date()
    languages_list = get_available_project_languages(manager)
    current_project_language = questionnaire.language
    num_of_recipients = _get_number_of_recipients_(project_id)
    return render_to_response(
        'project/poll.html',
        RequestContext(
            request, {
                'project':
                questionnaire,
                'message_text':
                questionnaire.form_fields[0]['label'],
                'project_links':
                project_links,
                'is_active':
                questionnaire.active,
                'from_date':
                from_date,
                'is_pro_sms':
                get_organization(request).is_pro_sms,
                'to_date':
                to_date,
                'questionnaire_id':
                active_poll_id,
                'questionnaire_name':
                active_poll_name,
                'languages_list':
                json.dumps(languages_list),
                'languages_link':
                reverse('languages'),
                'current_project_language':
                current_project_language,
                'post_url':
                reverse("project-language", args=[questionnaire.id]),
                'get_poll_sent_messages':
                reverse("get_poll_sent_messages", args=[questionnaire.id]),
                'questionnaire_code':
                questionnaire.form_code,
                'num_of_recipients':
                num_of_recipients,
            }))
Пример #26
0
def get_project_info(manager, project):
    project_id = project['value']['_id']
    questionnaire = Project.get(manager, project_id)
    questionnaire_code = questionnaire.form_code

    analysis, disabled, log = get_project_analysis_and_log_link(
        project_id, questionnaire_code)

    web_submission_link = reverse("web_questionnaire", args=[project_id])

    web_submission_link_disabled = 'disable_link'
    if 'web' in project['value']['devices']:
        web_submission_link_disabled = ""

    create_subjects_links = {}
    for entity_type in questionnaire.entity_type:
        create_subjects_links.update({
            entity_type:
            append_query_strings_to_url(reverse("subject_questionnaire",
                                                args=[project_id,
                                                      entity_type]),
                                        web_view=True)
        })
    if questionnaire.is_poll:
        project_link = reverse("submissions",
                               args=[project_id, questionnaire_code])
    else:
        project_link = reverse('project-overview', args=[project_id])

    project_info = dict(
        project_id=project_id,
        name=project['value']['name'],
        qid=questionnaire_code,
        created=project['value']['created'],
        is_advanced_questionnaire=bool(project['value'].get('xform')),
        link=project_link,
        log=log,
        analysis=analysis,
        disabled=disabled,
        web_submission_link=web_submission_link,
        web_submission_link_disabled=web_submission_link_disabled,
        create_subjects_link=create_subjects_links,
        entity_type=questionnaire.entity_type,
        encoded_name=urlquote(project['value']['name']),
        import_template_file_name=slugify(project['value']['name']),
        is_poll=bool(questionnaire.is_poll))
    return project_info
Пример #27
0
    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
                }))
Пример #28
0
def get_submissions_about_project(request, project_id):
    dbm = get_database_manager(request.user)
    questionnaire = Project.get(dbm, project_id)
    rows = dbm.load_all_rows_in_view('undeleted_survey_response', reduce=False, descending=True,
                                     startkey=[questionnaire.id, {}],
                                     endkey=[questionnaire.id], limit=7)
    submission_list = []
    for row in rows:
        reporter = _find_reporter_name(dbm, row)
        message = _make_message(row)
        submission = dict(message=message, created=row.value["submitted_on"].strftime("%B %d %y %H:%M"),
                          reporter=reporter,
                          status=row.value["status"])
        submission_list.append(submission)

    submission_response = json.dumps(submission_list)
    return HttpResponse(submission_response)
Пример #29
0
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 calculate_usage(db_name, log_file_path):
    dbm = get_db_manager(db_name)
    rows = dbm.view.all_media_details(reduce=True)
    total_size_in_mb = rows[0][u"value"] if rows else 0
    if total_size_in_mb > 0:
        organization = OrganizationSetting.objects.get(
            document_store=db_name).organization
        text = "%s(%s) \nTotal used: %.2f mb\n" % (
            organization.name, organization.org_id, total_size_in_mb)
        usage_per_questionnaire = dbm.view.all_media_details(reduce=True,
                                                             group=True)
        for row in usage_per_questionnaire:
            project = Project.get(dbm, row['key'])
            text += "%s (%s): Used: %.2f mb\n" % (project.name, project.id,
                                                  row['value'])
        with open(log_file_path, "a") as log_file:
            log_file.write(text)