Пример #1
0
def report_add(request, response_format='html'):
    "Create new report based on user choice"
    if 'report' in request.POST:
        report_id = request.POST['report']
        return HttpResponseRedirect(
            reverse('reports_report_edit', args=[report_id]))
    #FIRST TIME AN OBJECT IS CHOSEN
    if 'choice' in request.POST:
        form = None
        object = request.POST['choice']
        object = str(
            object.replace("{'object_type': u'", '').replace("'}", ''))
        full_object = object
        object = object.split('.', 3)

        module_name = object[0] + '.' + object[1] + '.' + object[2]
        import_name = object[3]

        module = __import__(module_name, globals(), locals(), [import_name],
                            -1)
        classobj = getattr(module, import_name)

        obj = classobj()
        names = obj.get_field_names()

        fields = []
        for name in names:
            fields.append(Field(name=name, display=True))

        model = Model(full_object, fields)

        report = Report()
        report.name = "Untitled %s Report" % (obj._meta.object_name)
        report.model = dumps(model)
        report.creator = request.user.get_profile()
        report.save()

        return HttpResponseRedirect(
            reverse('reports_report_edit', args=[report.id]))

    #Initial Object Type Choice
    user_modules = [
        module.name for module in
        request.user.get_profile().get_perspective().get_modules()
    ]
    modules = [module.name for module in Module.objects.all()]
    query = Q(object_type__contains="core")
    for module in modules:
        if module not in user_modules:
            query = query | Q(object_type__contains=module)

    object_types = list(Object.objects.all().exclude(query).values(
        'object_type').distinct().order_by('object_type'))

    object_names = []
    if object_types:
        object_names = ["%s: %s" % \
                        (_get_module_name(object_types[i]['object_type']),
                        (Object.objects.filter(object_type=object_types[i]['object_type']).order_by()[0].get_human_type())) \
                        for i in range(0,len(object_types))]

    form = ObjChoiceForm(
        request.user,
        object_types=object_types,
        object_names=object_names,
    )

    return render_to_response('reports/report_add', {'form': form},
                              context_instance=RequestContext(request),
                              response_format=response_format)