def get_render_context(self, request, extra_context={}, by_row=None): context_request = request or self.request related_fields = [] filter_related_fields = {} if self.parent_report and by_row: for index, (pfield, plookup) in enumerate(self.parent_report.model_fields): for cfield, clookup in self.model_fields: if pfield is cfield and plookup in clookup: related_fields.append([ pfield, cfield, plookup, clookup, by_row[index].value ]) filter_related_fields[clookup] = by_row[index].value try: form_groupby = self.get_form_groupby(context_request) form_filter = self.get_form_filter(context_request) form_config = self.get_form_config(context_request) column_labels = self.get_column_names(filter_related_fields) report_rows = [] groupby_data = None filter_kwargs = None report_anchors = [] chart = None context = { 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, } if context_request.GET: groupby_data = form_groupby.get_cleaned_data( ) if form_groupby else None filter_kwargs = filter_related_fields or form_filter.get_filter_kwargs( ) if groupby_data: self.__dict__.update(groupby_data) else: self.__dict__['onlytotals'] = False report_rows = self.get_rows(context_request, groupby_data, filter_kwargs, filter_related_fields) for g, r in report_rows: report_anchors.append(g) if len(report_anchors) <= 1: report_anchors = [] if self.type == 'chart' and groupby_data and groupby_data[ 'groupby']: config = form_config.get_config_data() if config: chart = self.get_chart(config, report_rows) if self.onlytotals: for g, rows in report_rows: for r in list(rows): if r.is_value(): rows.remove(r) if not context_request.GET.get( 'export', None) is None and not self.parent_report: if context_request.GET.get('export') == 'excel': response = HttpResponse(mimetype='text/csv') response[ 'Content-Disposition'] = 'attachment; filename=%s.csv' % self.slug writer = csv.writer(response) writer.writerow([ unicode(x).encode("utf-8") for x in column_labels ]) for g, rows in report_rows: for row in list(rows): if row.is_value(): writer.writerow([ unicode(x.value).encode("utf-8") for x in row ]) elif row.is_caption: writer.writerow([ unicode(x).encode("utf-8") for x in row ]) elif row.is_total: writer.writerow([ unicode(x.value).encode("utf-8") for x in row ]) writer.writerow([ unicode(' ').encode("utf-8") for x in row ]) return response if context_request.GET.get('export') == 'pdf': inlines = [ ir(self, context_request) for ir in self.inlines ] report_anchors = None setattr(self, 'is_export', True) context = { 'report': self, 'column_labels': column_labels, 'report_rows': report_rows, 'report_inlines': inlines, } context.update({'pagesize': 'legal landscape'}) return render_to_pdf( self, 'model_report/export_pdf.html', context) inlines = [ir(self, context_request) for ir in self.inlines] is_inline = self.parent_report is None render_report = not (len(report_rows) == 0 and is_inline) context = { 'render_report': render_report, 'is_inline': is_inline, 'inline_column_span': 0 if is_inline else len(self.parent_report.get_column_names()), 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, 'report_inlines': inlines, } if extra_context: context.update(extra_context) context['request'] = request return context finally: globals()['_cache_class'] = {}
def get_render_context(self, request, extra_context={}, by_row=None): context_request = request or self.request related_fields = [] filter_related_fields = {} if self.parent_report and by_row: for index, (pfield, plookup) in enumerate(self.parent_report.model_fields): for cfield, clookup in self.model_fields: if pfield is cfield and plookup in clookup: related_fields.append( [pfield, cfield, plookup, clookup, by_row[index]]) filter_related_fields[clookup] = by_row[index] try: form_groupby = self.get_form_groupby(context_request) form_filter = self.get_form_filter(context_request) form_config = self.get_form_config(context_request) column_labels = self.get_column_names(filter_related_fields) report_rows = [] groupby_data = None filter_kwargs = None report_anchors = [] chart = None context = { 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, } if context_request.GET: groupby_data = form_groupby.get_cleaned_data( ) if form_groupby else None filter_kwargs = filter_related_fields or form_filter.get_filter_kwargs( ) if groupby_data: self.__dict__.update(groupby_data) else: self.__dict__['onlytotals'] = False report_rows = self.get_rows(context_request, groupby_data, filter_kwargs, filter_related_fields) for g, r in report_rows: report_anchors.append(g) if len(report_anchors) <= 1: report_anchors = [] if self.type == 'chart': config = form_config.get_config_data() if config: chart = self.get_chart(config, report_rows) if self.onlytotals: for g, rows in report_rows: for r in list(rows): if r.is_value(): rows.remove(r) if not context_request.GET.get( 'export', None) is None and not self.parent_report: if context_request.GET.get('export') == 'excel': response = HttpResponse(mimetype='text/csv') response[ 'Content-Disposition'] = 'attachment; filename=%s.csv' % self.slug writer = csv.writer(response) writer.writerow([ unicode(x).encode("utf-8") for x in column_labels ]) for g, rows in report_rows: for row in list(rows): if row.is_value(): writer.writerow([ unicode(x.value).encode("utf-8") for x in row ]) elif row.is_caption: writer.writerow([ unicode(x).encode("utf-8") for x in row ]) elif row.is_total: writer.writerow([ unicode(x.value).encode("utf-8") for x in row ]) writer.writerow([ unicode(' ').encode("utf-8") for x in row ]) return response if context_request.GET.get('export') == 'pdf': inlines = [ ir(self, context_request) for ir in self.inlines ] report_anchors = None setattr(self, 'is_export', True) context = { 'report': self, 'column_labels': column_labels, 'report_rows': report_rows, 'report_inlines': inlines, } context.update({'pagesize': 'legal landscape'}) return render_to_pdf(self, 'model_report/export_pdf.html', context) inlines = [ir(self, context_request) for ir in self.inlines] context = { 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, 'report_inlines': inlines, 'request': context_request, } if extra_context: context.update(extra_context) return context finally: globals()['_cache_class'] = {}
def get_render_context(self, request, extra_context={}, by_row=None): context_request = request or self.request related_fields = [] filter_related_fields = {} if self.parent_report and by_row: for index, (pfield, plookup) in enumerate(self.parent_report.model_fields): for cfield, clookup in self.model_fields: if pfield is cfield and plookup in clookup: related_fields.append([pfield, cfield, plookup, clookup, by_row[index]]) filter_related_fields[clookup] = by_row[index] try: form_groupby = self.get_form_groupby(context_request) form_filter = self.get_form_filter(context_request) form_config = self.get_form_config(context_request) column_labels = self.get_column_names(filter_related_fields) report_rows = [] groupby_data = None filter_kwargs = None report_anchors = [] chart = None context = { "report": self, "form_groupby": form_groupby, "form_filter": form_filter, "form_config": form_config if self.type == "chart" else None, "chart": chart, "report_anchors": report_anchors, "column_labels": column_labels, "report_rows": report_rows, } if context_request.GET: groupby_data = form_groupby.get_cleaned_data() if form_groupby else None filter_kwargs = filter_related_fields or form_filter.get_filter_kwargs() if groupby_data: self.__dict__.update(groupby_data) else: self.__dict__["onlytotals"] = False report_rows = self.get_rows(context_request, groupby_data, filter_kwargs, filter_related_fields) for g, r in report_rows: report_anchors.append(g) if len(report_anchors) <= 1: report_anchors = [] if self.type == "chart": config = form_config.get_config_data() if config: chart = self.get_chart(config, report_rows) if self.onlytotals: for g, rows in report_rows: for r in list(rows): if r.is_value(): rows.remove(r) if not context_request.GET.get("export", None) is None and not self.parent_report: if context_request.GET.get("export") == "excel": response = HttpResponse(mimetype="text/csv") response["Content-Disposition"] = "attachment; filename=%s.csv" % self.slug writer = csv.writer(response) writer.writerow([unicode(x).encode("utf-8") for x in column_labels]) for g, rows in report_rows: for row in list(rows): if row.is_value(): writer.writerow([unicode(x.value).encode("utf-8") for x in row]) elif row.is_caption: writer.writerow([unicode(x).encode("utf-8") for x in row]) elif row.is_total: writer.writerow([unicode(x.value).encode("utf-8") for x in row]) writer.writerow([unicode(" ").encode("utf-8") for x in row]) return response if context_request.GET.get("export") == "pdf": inlines = [ir(self, context_request) for ir in self.inlines] report_anchors = None setattr(self, "is_export", True) context = { "report": self, "column_labels": column_labels, "report_rows": report_rows, "report_inlines": inlines, } context.update({"pagesize": "legal landscape"}) return render_to_pdf(self, "model_report/export_pdf.html", context) inlines = [ir(self, context_request) for ir in self.inlines] context = { "report": self, "form_groupby": form_groupby, "form_filter": form_filter, "form_config": form_config if self.type == "chart" else None, "chart": chart, "report_anchors": report_anchors, "column_labels": column_labels, "report_rows": report_rows, "report_inlines": inlines, "request": context_request, } if extra_context: context.update(extra_context) return context finally: globals()["_cache_class"] = {}
def get_render_context(self, request, extra_context={}, by_row=None): context_request = request or self.request related_fields = [] filter_related_fields = {} if self.parent_report and by_row: for mfield, cfield, index in self.related_inline_filters: filter_related_fields[cfield] = by_row[index].value try: form_groupby = self.get_form_groupby(context_request) form_filter = self.get_form_filter(context_request) form_config = self.get_form_config(context_request) column_labels = self.get_column_names(filter_related_fields) report_rows = [] groupby_data = None filter_kwargs = None report_anchors = [] chart = None context = { 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, } if context_request.GET: groupby_data = form_groupby.get_cleaned_data() if form_groupby else None filter_kwargs = filter_related_fields or form_filter.get_filter_kwargs() if groupby_data: self.__dict__.update(groupby_data) else: self.__dict__['onlytotals'] = False report_rows = self.get_rows(context_request, groupby_data, filter_kwargs, filter_related_fields) for g, r in report_rows: report_anchors.append(g) if len(report_anchors) <= 1: report_anchors = [] if self.type == 'chart' and groupby_data and groupby_data['groupby']: config = form_config.get_config_data() if config: chart = self.get_chart(config, report_rows) if self.onlytotals: for g, rows in report_rows: for r in list(rows): if r.is_value(): rows.remove(r) if not context_request.GET.get('export', None) is None and not self.parent_report: if context_request.GET.get('export') == 'excel': book = Workbook(encoding='utf-8') sheet1 = FitSheetWrapper(book.add_sheet(self.get_title()[:20])) stylebold = easyxf('font: bold true; alignment:') stylevalue = easyxf('alignment: horizontal left, vertical top;') row_index = 0 for index, x in enumerate(column_labels): sheet1.write(row_index, index, u'%s' % x, stylebold) row_index += 1 for g, rows in report_rows: if g: sheet1.write(row_index, 0, u'%s' % x, stylebold) row_index += 1 for row in list(rows): if row.is_value(): for index, x in enumerate(row): if isinstance(x.value, (list, tuple)): xvalue = ''.join(['%s\n' % v for v in x.value]) else: xvalue = x.text() sheet1.write(row_index, index, xvalue, stylevalue) row_index += 1 elif row.is_caption: for index, x in enumerate(row): if not isinstance(x, unicode): sheet1.write(row_index, index, x.text(), stylebold) else: sheet1.write(row_index, index, x, stylebold) row_index += 1 elif row.is_total: for index, x in enumerate(row): sheet1.write(row_index, index, x.text(), stylebold) sheet1.write(row_index + 1, index, ' ') row_index += 2 response = HttpResponse(mimetype="application/ms-excel") response['Content-Disposition'] = 'attachment; filename=%s.xls' % self.slug book.save(response) return response if context_request.GET.get('export') == 'pdf': inlines = [ir(self, context_request) for ir in self.inlines] report_anchors = None setattr(self, 'is_export', True) context = { 'report': self, 'column_labels': column_labels, 'report_rows': report_rows, 'report_inlines': inlines, } context.update({'pagesize': 'legal landscape'}) return render_to_pdf(self, 'model_report/export_pdf.html', context) inlines = [ir(self, context_request) for ir in self.inlines] is_inline = self.parent_report is None render_report = not (len(report_rows) == 0 and is_inline) context = { 'render_report': render_report, 'is_inline': is_inline, 'inline_column_span': 0 if is_inline else len(self.parent_report.get_column_names()), 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, 'report_inlines': inlines, } if extra_context: context.update(extra_context) context['request'] = request return context finally: globals()['_cache_class'] = {}
def render(self, request, extra_context={}): try: form_groupby = self.get_form_groupby(request) form_filter = self.get_form_filter(request) form_config = self.get_form_config(request) column_labels = self.get_column_names() report_rows = [] groupby_data = None filter_kwargs = None report_anchors = [] chart = None context = { 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, } if request.GET: groupby_data = form_groupby.get_cleaned_data() if form_groupby else None filter_kwargs = form_filter.get_filter_kwargs() self.__dict__.update(groupby_data) report_rows = self.get_rows(request, groupby_data, filter_kwargs) for g, r in report_rows: report_anchors.append(g) if len(report_anchors) <= 1: report_anchors = [] if self.type == 'chart': config = form_config.get_config_data() if config: chart = self.get_chart(config, report_rows) if self.onlytotals: for g, rows in report_rows: for r in list(rows): if r.is_value(): rows.remove(r) if not request.GET.get('export', None) is None: if request.GET.get('export') == 'excel': import csv from django.http import HttpResponse response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename=%s.csv' % self.slug writer = csv.writer(response) writer.writerow([unicode(x).encode("utf-8") for x in column_labels]) for g, rows in report_rows: for row in list(rows): if row.is_value(): writer.writerow([unicode(x.value).encode("utf-8") for x in row]) elif row.is_caption: writer.writerow([unicode(x).encode("utf-8") for x in row]) elif row.is_total: writer.writerow([unicode(x.value).encode("utf-8") for x in row]) writer.writerow([unicode(' ').encode("utf-8") for x in row]) return response if request.GET.get('export') == 'pdf': report_anchors = None setattr(self, 'is_export', True) context = { 'report': self, 'column_labels': column_labels, 'report_rows': report_rows, } context.update({'pagesize': 'legal landscape'}) return render_to_pdf(self, 'model_report/export_pdf.html', context) context = { 'report': self, 'form_groupby': form_groupby, 'form_filter': form_filter, 'form_config': form_config if self.type == 'chart' else None, 'chart': chart, 'report_anchors': report_anchors, 'column_labels': column_labels, 'report_rows': report_rows, } if extra_context: context.update(extra_context) return render_to_response('model_report/report.html', context, context_instance=RequestContext(request)) finally: globals()['_cache_class'] = {}