Ejemplo n.º 1
0
    def export(self, request, queryset=None):
        self.init_response()
        self.init_writer()
        distinct_forms = queryset.aggregate(
            Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if queryset.count():
            fields = queryset[0].form_definition.get_field_dict()
            field_order = list(fields.keys())
            if include_header:
                header = []
                if include_form:
                    header.append(_('Form'))
                if include_created:
                    header.append(_('Created'))
                if include_pk:
                    header.append(_('ID'))
                # Form fields might have been changed and not match
                # existing form logs anymore.
                # Hence, use current form definition for header.
                # for field in queryset[0].data:
                #    header.append(field['label'] if field['label'] else field['key'])
                for field_name, field in fields.items():
                    header.append(field.label or field.name)

                self.writerow([
                    force_text(cell, encoding=settings.CSV_EXPORT_ENCODING)
                    for cell in header
                ])

            for entry in queryset:
                row = []
                if include_form:
                    row.append(entry.form_definition)
                if include_created:
                    row.append(entry.created)
                if include_pk:
                    row.append(entry.pk)
                name_to_value = {d['name']: d['value'] for d in entry.data}
                for field in field_order:
                    value = friendly(name_to_value.get(field),
                                     null_value=settings.CSV_EXPORT_NULL_VALUE)
                    value = force_text(value,
                                       encoding=settings.CSV_EXPORT_ENCODING)
                    row.append(value)

                self.writerow(row)

        self.close()
        return self.response
Ejemplo n.º 2
0
    def export_xls(self, request, queryset=None):
        import xlwt

        response = HttpResponse(mimetype='application/ms-excel')
        response[
            'Content-Disposition'] = 'attachment; filename=%s.xls' % unicode(
                self.model._meta.verbose_name_plural)
        wb = xlwt.Workbook()
        ws = wb.add_sheet(unicode(self.model._meta.verbose_name_plural))
        if queryset is None:
            queryset = self.get_change_list_query_set(request)

        distinct_forms = queryset.aggregate(
            Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if include_header:
            header = []
            if include_form:
                header.append(_('Form'))
            if include_created:
                header.append(_('Created'))
            if include_pk:
                header.append(_('ID'))
            for field in queryset[0].data:
                header.append(
                    field['label'] if field['label'] else field['key'])
            for i, f in enumerate(header):
                ws.write(
                    0, i,
                    smart_unicode(f, encoding=settings.CSV_EXPORT_ENCODING))

        for i, entry in enumerate(queryset):
            row = []
            if include_form:
                row.append(entry.form_definition)
            if include_created:
                row.append(entry.created)
            if include_pk:
                row.append(entry.pk)
            for field in entry.data:
                value = friendly(field['value'])
                row.append(
                    smart_unicode(value,
                                  encoding=settings.CSV_EXPORT_ENCODING))
            for j, cell in enumerate(row):
                ws.write(i + 1, j, smart_unicode(cell))
        wb.save(response)
        return response
Ejemplo n.º 3
0
    def export(self, request, queryset=None):
        self.init_response()
        self.init_writer()
        distinct_forms = queryset.aggregate(Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if queryset.count():
            fields = queryset[0].form_definition.get_field_dict()
            if include_header:
                header = []
                if include_form:
                    header.append(_('Form'))
                if include_created:
                    header.append(_('Created'))
                if include_pk:
                    header.append(_('ID'))
                # Form fields might have been changed and not match 
                # existing form logs anymore.
                # Hence, use current form definition for header.
                # for field in queryset[0].data:
                #    header.append(field['label'] if field['label'] else field['key'])
                for field_name, field in fields.items():
                    header.append(field.label if field.label else field.key)

                self.writerow([smart_str(cell, encoding=settings.CSV_EXPORT_ENCODING) for cell in header])

            for entry in queryset:
                row = []
                if include_form:
                    row.append(entry.form_definition)
                if include_created:
                    row.append(entry.created)
                if include_pk:
                    row.append(entry.pk)

                for item in entry.data:
                    value = friendly(item['value'], null_value=settings.CSV_EXPORT_NULL_VALUE)
                    value = smart_str(
                        value, encoding=settings.CSV_EXPORT_ENCODING)
                    row.append(value)

                self.writerow(row)

        self.close()
        return self.response
Ejemplo n.º 4
0
def export_csv(request):
    """
    TODO: Re-code this. Executing this now will result in an error (No such
    class "FormLogAdmin").
    """
    
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename='+app_settings.get('FORM_DESIGNER_CSV_EXPORT_FILENAME')
    writer = csv.writer(response, delimiter=app_settings.get('FORM_DESIGNER_CSV_EXPORT_DELIMITER'))
    qs = get_change_list_query_set(FormLogAdmin, FormLog, request)
    
    from django.db.models import Count
    distinct_forms = qs.aggregate(Count('form_definition', distinct=True))['form_definition__count']
    
    include_created = app_settings.get('FORM_DESIGNER_CSV_EXPORT_INCLUDE_CREATED')
    include_pk = app_settings.get('FORM_DESIGNER_CSV_EXPORT_INCLUDE_PK')
    include_header = app_settings.get('FORM_DESIGNER_CSV_EXPORT_INCLUDE_HEADER') and distinct_forms == 1
    include_form = app_settings.get('FORM_DESIGNER_CSV_EXPORT_INCLUDE_FORM') and distinct_forms > 1

    if include_header:
        header = [] 
        if include_form:
            header.append(_('Form'))
        if include_created:
            header.append(_('Created'))
        if include_pk:
            header.append(_('ID'))
        for field in qs.all()[0].data:
            header.append(field['label'] if field['label'] else field['key'])
        writer.writerow(header)

    for entry in qs:
        row = []
        if include_form:
            row.append(entry.form_definition)
        if include_created:
            row.append(entry.created)
        if include_pk:
            row.append(entry.pk)
        for field in entry.data:
            value = friendly(field['value'])
            if not isinstance(value, basestring):
                value = unicode(value)
            value = value.encode(settings.DEFAULT_CHARSET)
            row.append(value)
        writer.writerow(row)

    return response
Ejemplo n.º 5
0
    def export_xls(self, request, queryset=None):
        import xlwt

        response = HttpResponse(mimetype='application/ms-excel')
        response['Content-Disposition'] = 'attachment; filename=%s.xls' % unicode(self.model._meta.verbose_name_plural)
        wb = xlwt.Workbook()
        ws = wb.add_sheet(unicode(self.model._meta.verbose_name_plural))
        if queryset is None:
            queryset = self.get_change_list_query_set(request)

        distinct_forms = queryset.aggregate(Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if include_header:
            header = []
            if include_form:
                header.append(_('Form'))
            if include_created:
                header.append(_('Created'))
            if include_pk:
                header.append(_('ID'))
            for field in queryset[0].data:
                header.append(field['label'] if field['label'] else field['key'])
            for i, f in enumerate(header):
                ws.write(0, i, smart_unicode(f, encoding=settings.CSV_EXPORT_ENCODING))

        for i, entry in enumerate(queryset):
            row = []
            if include_form:
                row.append(entry.form_definition)
            if include_created:
                row.append(entry.created)
            if include_pk:
                row.append(entry.pk)
            for field in entry.data:
                value = friendly(field['value'])
                row.append(smart_unicode(
                    value, encoding=settings.CSV_EXPORT_ENCODING))
            for j, cell in enumerate(row):
                ws.write(i+1, j, smart_unicode(cell))
        wb.save(response)
        return response
Ejemplo n.º 6
0
    def export_csv(self, request, queryset=None):
        response = HttpResponse(mimetype='text/csv')
        response[
            'Content-Disposition'] = 'attachment; filename=' + settings.CSV_EXPORT_FILENAME
        writer = csv.writer(response, delimiter=settings.CSV_EXPORT_DELIMITER)
        if queryset is None:
            queryset = self.get_change_list_query_set(request)

        distinct_forms = queryset.aggregate(
            Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if include_header:
            header = []
            if include_form:
                header.append(_('Form'))
            if include_created:
                header.append(_('Created'))
            if include_pk:
                header.append(_('ID'))
            for field in queryset[0].data:
                header.append(
                    field['label'] if field['label'] else field['key'])
            writer.writerow([
                smart_str(cell, encoding=settings.CSV_EXPORT_ENCODING)
                for cell in header
            ])

        for entry in queryset:
            row = []
            if include_form:
                row.append(entry.form_definition)
            if include_created:
                row.append(entry.created)
            if include_pk:
                row.append(entry.pk)
            for field in entry.data:
                value = friendly(field['value'])
                row.append(
                    smart_str(value, encoding=settings.CSV_EXPORT_ENCODING))
            writer.writerow(row)
        return response
Ejemplo n.º 7
0
def export_csv(request):
    response = HttpResponse(mimetype="text/csv")
    response["Content-Disposition"] = "attachment; filename=" + app_settings.get("FORM_DESIGNER_CSV_EXPORT_FILENAME")
    writer = csv.writer(response, delimiter=app_settings.get("FORM_DESIGNER_CSV_EXPORT_DELIMITER"))
    qs = get_change_list_query_set(FormLogAdmin, FormLog, request)

    from django.db.models import Count

    distinct_forms = qs.aggregate(Count("form_definition", distinct=True))["form_definition__count"]

    include_created = app_settings.get("FORM_DESIGNER_CSV_EXPORT_INCLUDE_CREATED")
    include_pk = app_settings.get("FORM_DESIGNER_CSV_EXPORT_INCLUDE_PK")
    include_header = app_settings.get("FORM_DESIGNER_CSV_EXPORT_INCLUDE_HEADER") and distinct_forms == 1
    include_form = app_settings.get("FORM_DESIGNER_CSV_EXPORT_INCLUDE_FORM") and distinct_forms > 1

    if include_header:
        header = []
        if include_form:
            header.append(_("Form"))
        if include_created:
            header.append(_("Created"))
        if include_pk:
            header.append(_("ID"))
        for field in qs.all()[0].data:
            header.append(field["label"] if field["label"] else field["key"])
        writer.writerow(header)

    for entry in qs:
        row = []
        if include_form:
            row.append(entry.form_definition)
        if include_created:
            row.append(entry.created)
        if include_pk:
            row.append(entry.pk)
        for field in entry.data:
            value = friendly(field["value"])
            if not isinstance(value, basestring):
                value = unicode(value)
            value = value.encode(app_settings.get("FORM_DESIGNER_CSV_EXPORT_ENCODING"))
            row.append(value)
        writer.writerow(row)

    return response
Ejemplo n.º 8
0
def export_csv(request):
    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=' + settings.CSV_EXPORT_FILENAME
    writer = csv.writer(response, delimiter=settings.CSV_EXPORT_DELIMITER)
    qs = get_change_list_query_set(FormLogAdmin, FormLog, request)

    from django.db.models import Count
    distinct_forms = qs.aggregate(Count('form_definition', distinct=True))['form_definition__count']

    include_created = settings.CSV_EXPORT_INCLUDE_CREATED
    include_pk = settings.CSV_EXPORT_INCLUDE_PK
    include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
    include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

    if include_header:
        header = []
        if include_form:
            header.append(_('Form'))
        if include_created:
            header.append(_('Created'))
        if include_pk:
            header.append(_('ID'))
        for field in qs.all()[0].data:
            header.append(field['label'] if field['label'] else field['key'])
        writer.writerow([smart_str(cell) for cell in header])

    for entry in qs:
        row = []
        if include_form:
            row.append(entry.form_definition)
        if include_created:
            row.append(entry.created)
        if include_pk:
            row.append(entry.pk)
        for field in entry.data:
            value = friendly(field['value'])
            if not isinstance(value, basestring):
                value = unicode(value)
            value = value.encode(settings.CSV_EXPORT_ENCODING)
            row.append(value)
        writer.writerow(row)

    return response
Ejemplo n.º 9
0
    def export_csv(self, request, queryset=None):
        response = HttpResponse(mimetype='text/csv')
        response['Content-Disposition'] = 'attachment; filename=' + settings.CSV_EXPORT_FILENAME
        writer = csv.writer(response, delimiter=settings.CSV_EXPORT_DELIMITER)
        if queryset is None:
            queryset = self.get_change_list_query_set(request)

        distinct_forms = queryset.aggregate(Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER and distinct_forms == 1
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if include_header:
            header = []
            if include_form:
                header.append(_('Form'))
            if include_created:
                header.append(_('Created'))
            if include_pk:
                header.append(_('ID'))
            for field in queryset[0].data:
                header.append(field['label'] if field['label'] else field['key'])
            writer.writerow([smart_str(cell, encoding=settings.CSV_EXPORT_ENCODING) for cell in header])

        for entry in queryset:
            row = []
            if include_form:
                row.append(entry.form_definition)
            if include_created:
                row.append(entry.created)
            if include_pk:
                row.append(entry.pk)
            for field in entry.data:
                value = friendly(field['value'])
                row.append(smart_str(
                    value, encoding=settings.CSV_EXPORT_ENCODING))
            writer.writerow(row)
        return response
Ejemplo n.º 10
0
    def export(self, request, queryset=None):
        self.init_response()
        self.init_writer()
        distinct_forms = queryset.aggregate(Count('form_definition', distinct=True))['form_definition__count']

        include_created = settings.CSV_EXPORT_INCLUDE_CREATED
        include_pk = settings.CSV_EXPORT_INCLUDE_PK
        include_header = settings.CSV_EXPORT_INCLUDE_HEADER
        include_form = settings.CSV_EXPORT_INCLUDE_FORM and distinct_forms > 1

        if queryset.count():
            if include_header:
                header = []
                if include_form:
                    header.append(_('Form'))
                if include_created:
                    header.append(_('Created'))
                if include_pk:
                    header.append(_('ID'))
                # Form fields might have been changed and not match 
                # existing form logs anymore.
                # Hence, use current form definition for header.
                # for field in queryset[0].data:
                #    header.append(field['label'] if field['label'] else field['key'])
                if distinct_forms == 1:
                    # Each field label is a header column
                    fields = queryset[0].form_definition.get_field_dict()
                    for field_name, field in fields.items():
                        header.append(field.label if field.label else field.key)
                else:
                    # Since multiple form types will most likely have different field labels,
                    # just have one 'Data' header column to display all the field labels and values
                    header.append(_('Data'))

                self.writerow([smart_str(cell, encoding=settings.CSV_EXPORT_ENCODING) for cell in header])

            for entry in queryset:
                row = []
                if include_form:
                    row.append(entry.form_definition)
                if include_created:
                    row.append(entry.created)
                if include_pk:
                    row.append(entry.pk)


                if distinct_forms == 1:
                    # Pretty print all values into their own corresponding columns
                    for item in entry.data:
                        value = friendly(item['value'], null_value=settings.CSV_EXPORT_NULL_VALUE, return_markup=False)
                        value = smart_str(value, encoding=settings.CSV_EXPORT_ENCODING)
                        row.append(value)
                else:
                    # Pretty print all values into the 'Data' column
                    value = u''
                    for item in entry.data:
                        value += item['label'] if item['label'] else item['name']
                        value += u': ' + friendly(item['value'], null_value=settings.CSV_EXPORT_NULL_VALUE, return_markup=False)
                        value += u'\n'

                    value = smart_str(value[:len(value)-1], encoding=settings.CSV_EXPORT_ENCODING)
                    row.append(value)

                self.writerow(row)

        self.close()
        return self.response