Пример #1
0
def export_csv(request, formdef_id):
    xsd = get_object_or_404( FormDefModel, pk=formdef_id)
    root = xsd.element
    if ElementDefModel.objects.filter(parent=root).count():
        tempfiles = []
        
        def make_filename(table_name):
            if table_name == root.table_name:
                return "root.csv"
            else:
                start = len(root.table_name) + 1
                return table_name[start:] + ".csv"
                
        visited = set()
        current = ElementDefModel.objects.filter(id=root.id)
    
        while current.count():
            for element in current:
                if element not in visited:
                    tempfiles.append( (get_temp_csv(element), make_filename(element.table_name)) )
                    visited.add(element)
            current = ElementDefModel.objects.filter(parent=current)
    
    
        return get_zipfile([(temp.name, filename) for (temp, filename) in tempfiles], "%s.zip" % xsd.form_name)
    else:
        return format_csv(root.get_rows(), root.get_column_names(), xsd.form_name)
Пример #2
0
def orphaned_data_xml(request):
    """
    Get a zip file containing all orphaned submissions
    """
    context = {}
    inner_qs = SubmissionHandlingOccurrence.objects.all().values('pk').query
    orphans = Submission.objects.exclude(id__in=inner_qs)
    attachments = Attachment.objects.filter(submission__in=orphans)
    xforms = attachments.filter(attachment_uri=XFORM_URI)
    return get_zipfile( xforms.values_list('filepath', flat=True) )
Пример #3
0
def export_xml(request, formdef_id):
    """
    Get a zip file containing all submissions for this schema
    """
    formdef = get_object_or_404(FormDefModel, pk=formdef_id)
    metadata = Metadata.objects.filter(formdefmodel=formdef).order_by('id')
    file_list = []
    for datum in metadata:
        file_list.append( datum.attachment.filepath )
    return get_zipfile(file_list)
Пример #4
0
 def read(self, request, formdef_id):
     """ list all submitted instance data for a particular schema """
     try:
         formdef = FormDefModel.objects.get(pk=formdef_id)
     except FormDefModel.DoesNotExist:
         return HttpResponseBadRequest("Schema with id %s could not found." % formdef_id)            
     metadata = Metadata.objects.filter(formdefmodel=formdef).order_by('id')
     if not metadata:
         return HttpResponseBadRequest("Metadata of schema with id %s not found." % formdef_id)
     filter = []
     if request.REQUEST.has_key('start-id'):
         if filter: filter = filter + " AND "
         filter = filter + "id >= " + request.GET['start-id']
         metadata = metadata.filter(raw_data__gte=request.GET['start-id'])
     if request.REQUEST.has_key('end-id'):
         if filter: filter = filter + " AND "
         filter = filter + "id <= " + request.GET['end-id']
         metadata = metadata.filter(raw_data__lte=request.GET['end-id'])
     if request.REQUEST.has_key('start-submit-date'):
         date = datetime.strptime(request.GET['start-submit-date'],"%Y-%m-%d")
         # not the most efficient way of doing this 
         # but it keeps our django orm reference and sql work separate
         metadata = metadata.filter(attachment__submission__submit_time__gte=date)
         raw_ids = [int(m.raw_data) for m in metadata]
         filter.append( ['id','IN',tuple(raw_ids)] )
     if request.REQUEST.has_key('end-submit-date'):
         date = datetime.strptime(request.GET['end-submit-date'],"%Y-%m-%d")
         metadata = metadata.filter(attachment__submission__submit_time__lte=date)
         raw_ids = [int(m.raw_data) for m in metadata]
         filter.append( ['id','IN',tuple(raw_ids)] )
     if request.REQUEST.has_key('format'):
         if request.GET['format'].lower() == 'xml' or \
            request.GET['format'].lower() == 'zip':
             file_list = []
             for datum in metadata:
                 file_list.append( datum.attachment.filepath )
             return get_zipfile(file_list)
     # default to csv export
     rows = formdef.get_rows( column_filters=filter )
     column = formdef.get_column_names()
     return format_csv(rows, column, formdef.form_name)