Exemplo n.º 1
0
def export_all_form_metadata_async(req, domain):
    datespan = req.datespan if req.GET.get("startdate") and req.GET.get("enddate") else None
    group_id = req.GET.get("group")
    ufilter =  UserTypeFilter.get_user_filter(req)[0]
    users = util.get_all_users_by_domain(
        domain=domain,
        group=group_id,
        user_filter=ufilter,
        simplified=True,
        include_inactive=True
    )
    user_ids = filter(None, [u["user_id"] for u in users])
    format = req.GET.get("format", Format.XLS_2007)
    filename = "%s_forms" % domain

    download = DownloadBase()
    download.set_task(create_metadata_export.delay(
        download.download_id,
        domain,
        format=format,
        filename=filename,
        datespan=datespan,
        user_ids=user_ids,
    ))
    return download.get_start_response()
Exemplo n.º 2
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname, args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!") if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(
                DemoRestoreStatusView.urlname,
                args=[domain, download.download_id, user_id]
            )
        )
    else:
        turn_off_demo_mode(user)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
Exemplo n.º 3
0
def prepare_form_multimedia(request, domain):
    """Gets the download_id for the multimedia zip and sends it to the
    exportDownloadService in download_export.ng.js to begin polling for the
    zip file download.
    """
    form_or_case = request.POST.get('form_or_case')
    sms_export = json.loads(request.POST.get('sms_export'))
    permissions = ExportsPermissionsManager(form_or_case, domain, request.couch_user)
    permissions.access_download_export_or_404()

    view_helper = DownloadExportViewHelper.get(request, domain, form_or_case, sms_export)
    filter_form_data = json.loads(request.POST.get('form_data'))
    export_specs = json.loads(request.POST.get('exports'))
    try:
        filter_form = view_helper.get_filter_form(filter_form_data)
    except ExportFormValidationException:
        return json_response({
            'error': _("Please check that you've submitted all required filters."),
        })

    download = DownloadBase()
    export_object = view_helper.get_export(export_specs[0]['export_id'])
    task_kwargs = filter_form.get_multimedia_task_kwargs(export_object, download.download_id, filter_form_data)
    from corehq.apps.reports.tasks import build_form_multimedia_zip
    download.set_task(build_form_multimedia_zip.delay(**task_kwargs))

    return json_response({
        'success': True,
        'download_id': download.download_id,
    })
Exemplo n.º 4
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname, args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!") if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user.get_id, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(
                DemoRestoreStatusView.urlname,
                args=[domain, download.download_id, user_id]
            )
        )
    else:
        from corehq.apps.app_manager.views.utils import unset_practice_mode_configured_apps, \
            get_practice_mode_configured_apps
        # if the user is being used as practice user on any apps, check/ask for confirmation
        apps = get_practice_mode_configured_apps(domain)
        confirm_turn_off = True if (request.POST.get('confirm_turn_off', 'no')) == 'yes' else False
        if apps and not confirm_turn_off:
            return HttpResponseRedirect(reverse(ConfirmTurnOffDemoModeView.urlname, args=[domain, user_id]))

        turn_off_demo_mode(user)
        unset_practice_mode_configured_apps(domain, user.get_id)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
Exemplo n.º 5
0
 def prepare_form_multimedia(self, in_data):
     """Gets the download_id for the multimedia zip and sends it to the
     exportDownloadService in download_export.ng.js to begin polling for the
     zip file download.
     """
     try:
         filter_form_data, export_specs = self._get_form_data_and_specs(in_data)
         filter_form = FilterFormExportDownloadForm(
             self.domain_object, self.timezone, filter_form_data
         )
         if not filter_form.is_valid():
             raise ExportFormValidationException(
                 _("Please check that you've submitted all required filters.")
             )
         download = DownloadBase()
         export_object = self.get_export_schema(self.domain, export_specs[0]['export_id'])
         task_kwargs = filter_form.get_multimedia_task_kwargs(
             export_object, download.download_id
         )
         from corehq.apps.reports.tasks import build_form_multimedia_zip
         download.set_task(build_form_multimedia_zip.delay(**task_kwargs))
     except Exception as e:
         return format_angular_error(e)
     return format_angular_success({
         'download_id': download.download_id,
     })
Exemplo n.º 6
0
 def export_data_async(self, format=None, **kwargs):
     format = format or self.default_format
     download = DownloadBase()
     download.set_task(couchexport.tasks.export_async.delay(
         self,
         download.download_id,
         format=format,
         **kwargs
     ))
     return download.get_start_response()
Exemplo n.º 7
0
    def get_download_task(self, export_tags, export_filter):
        self.generate_bulk_files(export_tags, export_filter)

        download = DownloadBase()
        download.set_task(couchexport.tasks.bulk_export_async.delay(
            self,
            download.download_id,
            domain=self.domain
        ))
        return download
Exemplo n.º 8
0
def export_all_form_metadata_async(req, domain):
    format = req.GET.get("format", Format.XLS_2007)
    filename = "%s_forms" % domain
    download = DownloadBase()
    download.set_task(create_metadata_export.delay(
        download.download_id,
        domain,
        format=format,
        filename=filename,
    ))
    return download.get_start_response()
Exemplo n.º 9
0
def download_item_lists(request, domain):
    """Asynchronously serve excel download for edit_lookup_tables
    """
    download = DownloadBase()
    download.set_task(fixture_download_async.delay(
        prepare_fixture_download,
        table_ids=request.GET.getlist("table_id"),
        domain=domain,
        download_id=download.download_id,
    ))
    return download.get_start_response()
Exemplo n.º 10
0
def get_export_download(export_instances, filters, filename=None):
    from corehq.apps.export.tasks import populate_export_download_task

    download = DownloadBase()
    download.set_task(populate_export_download_task.delay(
        export_instances,
        filters,
        download.download_id,
        filename=filename
    ))
    return download
Exemplo n.º 11
0
def download_commcare_users(request, domain):
    form = CommCareUserFilterForm(request.GET, domain=domain)
    user_filters = {}
    if form.is_valid():
        user_filters = form.cleaned_data
    else:
        return HttpResponseRedirect(
            reverse(FilteredUserDownload.urlname, args=[domain]) + "?" + request.GET.urlencode())
    download = DownloadBase()
    res = bulk_download_users_async.delay(domain, download.download_id, user_filters)
    download.set_task(res)
    return redirect(DownloadUsersStatusView.urlname, domain, download.download_id)
Exemplo n.º 12
0
def excel_commit(request, domain):
    """
    Step three of three.

    This page is submitted with the list of column to
    case property mappings for this upload.

    The config variable is an ImporterConfig object that
    has everything gathered from previous steps, with the
    addition of all the field data. See that class for
    more information.
    """
    config = importer_util.ImporterConfig.from_request(request)

    excel_id = request.session.get(EXCEL_SESSION_ID)

    excel_ref = DownloadBase.get(excel_id)
    spreadsheet = importer_util.get_spreadsheet(excel_ref, config.named_columns)

    if not spreadsheet:
        return _spreadsheet_expired(request, domain)

    if spreadsheet.has_errors:
        messages.error(request, _('The session containing the file you '
                                  'uploaded has expired - please upload '
                                  'a new one.'))
        return HttpResponseRedirect(base.ImportCases.get_url(domain=domain) + "?error=cache")

    download = DownloadBase()
    download.set_task(bulk_import_async.delay(
        download.download_id,
        config,
        domain,
        excel_id,
    ))

    try:
        del request.session[EXCEL_SESSION_ID]
    except KeyError:
        pass

    return render(
        request,
        "importer/excel_commit.html", {
            'download_id': download.download_id,
            'template': 'importer/partials/import_status.html',
            'domain': domain,
            'report': {
                'name': 'Import: Completed'
            },
            'slug': base.ImportCases.slug
        }
    )
Exemplo n.º 13
0
 def generate_payload(payload_func):
     if async:
         download = DownloadBase()
         a_task = prepare_download.delay(download.download_id, payload_func, content_disposition, mimetype)
         download.set_task(a_task)
         return download.get_start_response()
     else:
         payload = payload_func()
         response = HttpResponse(payload)
         response["Content-Type"] = mimetype
         response["Content-Disposition"] = content_disposition
         return response
Exemplo n.º 14
0
    def explode_cases(self, request, domain):
        user_id = request.POST.get('user_id')
        factor = request.POST.get('factor', '2')
        try:
            factor = int(factor)
        except ValueError:
            messages.error(request, 'factor must be an int; was: %s' % factor)
        else:
            download = DownloadBase()
            res = explode_case_task.delay(self.domain, user_id, factor)
            download.set_task(res)

            return redirect('hq_soil_download', self.domain, download.download_id)
Exemplo n.º 15
0
    def form_valid(self):
        download = DownloadBase()
        res = prime_restore.delay(
            self.domain,
            CommCareUser.ids_by_domain(self.domain),
            version=V2,
            cache_timeout_hours=24,
            overwrite_cache=True,
            check_cache_only=False
        )
        download.set_task(res)

        return redirect('hq_soil_download', self.domain, download.download_id)
Exemplo n.º 16
0
def get_export_download(domain, export_ids, exports_type, username, filters, filename=None):
    from corehq.apps.export.tasks import populate_export_download_task

    download = DownloadBase()
    download.set_task(populate_export_download_task.delay(
        domain,
        export_ids,
        exports_type,
        username,
        filters,
        download.download_id,
        filename=filename
    ))
    return download
Exemplo n.º 17
0
 def post(self, request, *args, **kwargs):
     type_ = request.POST.get('type')
     assert type_ in [CASE_EXPORT, FORM_EXPORT], 'Unrecogized export type {}'.format(type_)
     download = DownloadBase()
     download.set_task(generate_schema_for_all_builds.delay(
         self.export_cls(type_),
         request.domain,
         request.POST.get('app_id'),
         request.POST.get('identifier'),
     ))
     download.save()
     return json_response({
         'download_id': download.download_id
     })
Exemplo n.º 18
0
def location_export(request, domain):
    headers_only = request.GET.get('download_type', 'full') == 'empty'
    if not request.can_access_all_locations and not headers_only:
        return no_permissions(request)
    if not LocationType.objects.filter(domain=domain).exists():
        messages.error(request, _("You need to define organization levels before "
                                  "you can do a bulk import or export."))
        return HttpResponseRedirect(reverse(LocationsListView.urlname, args=[domain]))
    include_consumption = request.GET.get('include_consumption') == 'true'
    download = DownloadBase()
    res = download_locations_async.delay(domain, download.download_id,
                                         include_consumption, headers_only)
    download.set_task(res)
    return redirect(DownloadLocationStatusView.urlname, domain, download.download_id)
Exemplo n.º 19
0
    def get(self, request, *args, **kwargs):
        assert self.include_multimedia_files or self.include_index_files
        error_response = self.check_before_zipping()
        if error_response:
            return error_response

        download = DownloadBase()
        download.set_task(build_application_zip.delay(
            include_multimedia_files=self.include_multimedia_files,
            include_index_files=self.include_index_files,
            app=self.app,
            download_id=download.download_id,
            compress_zip=self.compress_zip,
            filename=self.zip_name)
        )
        return download.get_start_response()
Exemplo n.º 20
0
def excel_commit(request, domain):
    """
    Step three of three.

    This page is submitted with the list of column to
    case property mappings for this upload.

    The config variable is an ImporterConfig object that
    has everything gathered from previous steps, with the
    addition of all the field data. See that class for
    more information.
    """
    config = importer_util.ImporterConfig.from_request(request)

    excel_id = request.session.get(EXCEL_SESSION_ID)

    excel_ref = DownloadBase.get(excel_id)
    try:
        importer_util.get_spreadsheet(excel_ref, config.named_columns)
    except ImporterError as e:
        return render_error(request, domain, _get_importer_error_message(e))

    download = DownloadBase()
    download.set_task(bulk_import_async.delay(
        download.download_id,
        config,
        domain,
        excel_id,
    ))

    try:
        del request.session[EXCEL_SESSION_ID]
    except KeyError:
        pass

    return render(
        request,
        "importer/excel_commit.html", {
            'download_id': download.download_id,
            'template': 'importer/partials/import_status.html',
            'domain': domain,
            'report': {
                'name': 'Import: Completed'
            },
            'slug': base.ImportCases.slug
        }
    )
Exemplo n.º 21
0
def reset_demo_user_restore(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    if not user.is_demo_user:
        warning = _("The user is not a demo user.")
        messages.warning(request, warning)
        return HttpResponseRedirect(reverse(EditCommCareUserView.urlname, args=[domain, user_id]))

    download = DownloadBase()
    res = reset_demo_user_restore_task.delay(user, domain)
    download.set_task(res)

    return HttpResponseRedirect(
        reverse(
            DemoRestoreStatusView.urlname,
            args=[domain, download.download_id, user_id]
        )
    )
Exemplo n.º 22
0
    def form_valid(self, form):
        domain = form.cleaned_data['domain']
        if form.cleaned_data['all_users']:
            user_ids = CommCareUser.ids_by_domain(domain)
        else:
            user_ids = form.user_ids

        download = DownloadBase()
        res = prime_restore.delay(
            user_ids,
            version=form.cleaned_data['version'],
            cache_timeout=form.cleaned_data['cache_timeout'],
            overwrite_cache=form.cleaned_data['overwrite_cache']
        )
        download.set_task(res)

        return redirect('hq_soil_download', domain, download.download_id)
Exemplo n.º 23
0
    def form_valid(self):
        if self.form.cleaned_data['all_users']:
            user_ids = CommCareUser.ids_by_domain(self.domain)
        else:
            user_ids = self.form.user_ids

        download = DownloadBase()
        res = prime_restore.delay(
            self.domain,
            user_ids,
            version=V2,
            cache_timeout_hours=24,
            overwrite_cache=self.form.cleaned_data['overwrite_cache'],
            check_cache_only=self.form.cleaned_data['check_cache_only']
        )
        download.set_task(res)

        return redirect('hq_soil_download', self.domain, download.download_id)
Exemplo n.º 24
0
def explode_cases(request, domain, template="hqcase/explode_cases.html"):
    if request.method == 'POST':
        user_id = request.POST['user_id']
        user = CommCareUser.get_by_user_id(user_id, domain)
        factor = request.POST.get('factor', '2')
        try:
            factor = int(factor)
        except ValueError:
            messages.error(request, 'factor must be an int; was: %s' % factor)
        else:
            download = DownloadBase()
            res = explode_case_task.delay(user_id, domain, factor)
            download.set_task(res)

            return redirect('hq_soil_download', domain, download.download_id)

    return render(request, template, {
        'domain': domain,
        'users': CommCareUser.by_domain(domain),
    })
Exemplo n.º 25
0
    def get(self, request, *args, **kwargs):
        assert self.include_multimedia_files or self.include_index_files
        error_response = self.check_before_zipping()
        if error_response:
            return error_response

        message = request.GET['message'] if 'message' in request.GET else None
        download = DownloadBase(message=message)
        build_profile_id = None
        if domain_has_privilege(request.domain, privileges.BUILD_PROFILES):
            build_profile_id = request.GET.get('profile')
        download.set_task(build_application_zip.delay(
            include_multimedia_files=self.include_multimedia_files,
            include_index_files=self.include_index_files,
            app=self.app,
            download_id=download.download_id,
            compress_zip=self.compress_zip,
            filename=self.zip_name,
            build_profile_id=build_profile_id)
        )
        return download.get_start_response()
Exemplo n.º 26
0
    def get(self, request, *args, **kwargs):
        assert self.include_multimedia_files or self.include_index_files
        error_response = self.check_before_zipping()
        if error_response:
            return error_response

        message = request.GET['message'] if 'message' in request.GET else None
        download = DownloadBase(message=message)
        build_profile_id = None
        if domain_has_privilege(request.domain, privileges.BUILD_PROFILES):
            build_profile_id = request.GET.get('profile')
        download.set_task(
            build_application_zip.delay(
                include_multimedia_files=self.include_multimedia_files,
                include_index_files=self.include_index_files,
                app=self.app,
                download_id=download.download_id,
                compress_zip=self.compress_zip,
                filename=self.zip_name,
                build_profile_id=build_profile_id))
        return download.get_start_response()
Exemplo n.º 27
0
def location_export(request, domain):
    headers_only = request.GET.get('download_type', 'full') == 'empty'
    if not request.can_access_all_locations and not headers_only:
        return no_permissions(request)
    if not LocationType.objects.filter(domain=domain).exists():
        messages.error(
            request,
            _("You need to define organization levels before "
              "you can do a bulk import or export."))
        return HttpResponseRedirect(
            reverse(LocationsListView.urlname, args=[domain]))
    include_consumption = request.GET.get('include_consumption') == 'true'
    root_location_id = request.GET.get('root_location_id')
    owner_id = request.couch_user.get_id
    download = DownloadBase()
    res = download_locations_async.delay(domain, download.download_id,
                                         include_consumption, headers_only,
                                         owner_id, root_location_id)
    download.set_task(res)
    return redirect(DownloadLocationStatusView.urlname, domain,
                    download.download_id)
Exemplo n.º 28
0
def excel_commit(request, domain):
    config = ImporterConfig(request)

    excel_id = request.session.get(EXCEL_SESSION_ID)

    excel_ref = DownloadBase.get(excel_id)
    spreadsheet = importer_util.get_spreadsheet(excel_ref, config.named_columns)

    if not spreadsheet:
        return _spreadsheet_expired(request, domain)

    if spreadsheet.has_errors:
        messages.error(request, _('The session containing the file you '
                                  'uploaded has expired - please upload '
                                  'a new one.'))
        return HttpResponseRedirect(base.ImportCases.get_url(domain=domain) + "?error=cache")

    download = DownloadBase()
    download.set_task(bulk_import_async.delay(
        download.download_id,
        config,
        domain,
        excel_id,
    ))

    try:
        del request.session[EXCEL_SESSION_ID]
    except KeyError:
        pass

    return render(request, "importer/excel_commit.html", {
                                'download_id': download.download_id,
                                'template': 'importer/partials/import_status.html',
                                'domain': domain,
                                'report': {
                                    'name': 'Import: Completed'
                                 },
                                'slug': base.ImportCases.slug})
Exemplo n.º 29
0
def location_export(request, domain):
    headers_only = request.GET.get('download_type', 'full') == 'empty'
    if not LocationType.objects.filter(domain=domain).exists():
        messages.error(request, _("You need to define organization levels before "
                                  "you can do a bulk import or export."))
        return HttpResponseRedirect(reverse(LocationsListView.urlname, args=[domain]))

    include_consumption = request.GET.get('include_consumption') == 'true'
    owner_id = request.couch_user.get_id
    download = DownloadBase()

    form = LocationFilterForm(request.GET, domain=domain, user=request.couch_user)

    if form.is_valid():
        location_filters = form.get_filters()
    else:
        return HttpResponseBadRequest('Location filters invalid')

    root_location_ids = location_filters.pop('location_ids')
    res = download_locations_async.delay(domain, download.download_id, include_consumption,
                                         headers_only, owner_id, root_location_ids, **location_filters)
    download.set_task(res)
    return redirect(DownloadLocationStatusView.urlname, domain, download.download_id)
Exemplo n.º 30
0
def toggle_demo_mode(request, domain, user_id):
    user = CommCareUser.get_by_user_id(user_id, domain)
    demo_mode = request.POST.get('demo_mode', 'no')
    demo_mode = True if demo_mode == 'yes' else False

    edit_user_url = reverse(EditCommCareUserView.urlname,
                            args=[domain, user_id])
    # handle bad POST param
    if user.is_demo_user == demo_mode:
        warning = _("User is already in Demo mode!"
                    ) if user.is_demo_user else _("User is not in Demo mode!")
        messages.warning(request, warning)
        return HttpResponseRedirect(edit_user_url)

    if demo_mode:
        download = DownloadBase()
        res = turn_on_demo_mode_task.delay(user.get_id, domain)
        download.set_task(res)
        return HttpResponseRedirect(
            reverse(DemoRestoreStatusView.urlname,
                    args=[domain, download.download_id, user_id]))
    else:
        from corehq.apps.app_manager.views.utils import unset_practice_mode_configured_apps, \
            get_practice_mode_configured_apps
        # if the user is being used as practice user on any apps, check/ask for confirmation
        apps = get_practice_mode_configured_apps(domain)
        confirm_turn_off = True if (request.POST.get('confirm_turn_off',
                                                     'no')) == 'yes' else False
        if apps and not confirm_turn_off:
            return HttpResponseRedirect(
                reverse(ConfirmTurnOffDemoModeView.urlname,
                        args=[domain, user_id]))

        turn_off_demo_mode(user)
        unset_practice_mode_configured_apps(domain, user.get_id)
        messages.success(request, _("Successfully turned off demo mode!"))
    return HttpResponseRedirect(edit_user_url)
Exemplo n.º 31
0
 def delete_cases(self, request, domain):
     explosion_id = request.POST.get('explosion_id')
     download = DownloadBase()
     res = delete_exploded_case_task.delay(self.domain, explosion_id)
     download.set_task(res)
     return redirect('hq_soil_download', self.domain, download.download_id)
Exemplo n.º 32
0
def download_commcare_users(request, domain):
    download = DownloadBase()
    res = bulk_download_users_async.delay(domain, download.download_id)
    download.set_task(res)
    return redirect(DownloadUsersStatusView.urlname, domain, download.download_id)
Exemplo n.º 33
0
 def delete_cases(self, request, domain):
     explosion_id = request.POST.get('explosion_id')
     download = DownloadBase()
     res = delete_exploded_case_task.delay(self.domain, explosion_id)
     download.set_task(res)
     return redirect('hq_soil_download', self.domain, download.download_id)
Exemplo n.º 34
0
 def export_response(self):
     download = DownloadBase()
     res = export_ucr_async.delay(self.report_export, download.download_id, self.request.couch_user)
     download.set_task(res)
     return redirect(DownloadUCRStatusView.urlname, self.domain, download.download_id, self.report_config_id)
Exemplo n.º 35
0
 def export_response(self):
     download = DownloadBase()
     res = export_ucr_async.delay(self.report_export, download.download_id, self.request.couch_user)
     download.set_task(res)
     return redirect(DownloadUCRStatusView.urlname, self.domain, download.download_id, self.report_config_id)