def report_group(request, report_id, field_name, response_format='html'): "View to Group by a given field in a report" t = get_object_or_404(Report, pk=report_id) if not request.user.get_profile().has_permission(t, mode='w'): return user_denied(request, message="You don't have access to this Report") model = loads(t.model) #Check if this field is already grouped, if so then remove grouping thisfield = model.get_field(field_name) if thisfield.groupby == 1: thisfield.groupby = 0 else: #Other wise reset grouping and set selected field as groupfield for field in model.fields: field.groupby = 0 field = model.get_field(field_name) field.groupby = 1 t.model = dumps(model) t.save() return report_edit(request, report_id=report_id, response_format=response_format)
def save(self): if hasattr(self,'chart_id'): chart = get_object_or_404(Chart, pk=self.chart_id) else: chart = Chart() report = get_object_or_404(Report, pk=self.report_id) chart.report = report chart.name = self.data['title'] chart.options = dumps(self.data) chart.save() return chart
def report_filter_remove(request, report_id, field_name, filter_index, response_format='html'): "Remove a Filter on a given field for a Report" report = get_object_or_404(Report, pk=report_id) if not request.user.get_profile().has_permission(report, mode='w'): return user_denied(request, message="You don't have write access to this Report") model = loads(report.model) field = model.get_field(field_name) field.filters.pop(int(filter_index)-1) report.model = dumps(model) report.save() return HttpResponseRedirect(reverse('reports_report_edit', args=[int(report_id)]))
def save(self): #add filter to field if not self.data['choice']: return t = self.report model = loads(t.model) classobj = model.get_class_object() xfield = classobj._meta.get_field_by_name(self.field_name)[0] field = model.get_field(self.field_name) if not field.filters: field.filters = [] c = self.data['choice'] type = xfield.get_internal_type() if type == 'ManyToManyField': c = xfield.related.parent_model.objects.filter(pk=c)[0] if type == 'ForeignKey': c = xfield.related.parent_model.objects.filter(pk=c)[0] display_choice = c if hasattr(self.fields['choice'],'choices'): for choice, dc in self.fields['choice'].choices: if unicode(c)==unicode(choice): display_choice = dc break for choice, dc in self.fields['operand'].choices: if unicode(self.data['operand'])==unicode(choice): display_operand = dc break display = "%s %s %s" % (field.get_human_name(), display_operand, unicode(display_choice)) field.filters.append({'choice': c, 'operand': self.data['operand'], 'display': display }) t.model = dumps(model) t.save()
def report_edit(request, report_id=None, response_format='html'): "Create new report based on user choice" report = get_object_or_404(Report, pk=report_id) if not request.user.get_profile().has_permission(report, mode='w'): return user_denied(request, message="You don't have access to edit this Report") model = loads(report.model) if request.POST and 'commit' in request.POST: # UPDATE MODEL if 'report_name' in request.POST: report.name = request.POST['report_name'] fieldnames = [] aggregations = {} for key in request.POST: if 'field' in key: fieldnames.append(request.POST[key]) elif 'aggregation-' in key: aggregations[key[12:]] = request.POST[key] for field in model.fields: field.aggregation = aggregations.get(field.name, None) if field.name in fieldnames: field.display = True else: field.display = False report.model = dumps(model) report.save() if 'commit' in request.POST: return HttpResponseRedirect(reverse('reports_report_view', args=[report.id])) return render_to_response('reports/report_edit', {'report': report, 'model':model, }, context_instance=RequestContext(request), response_format=response_format)
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)