Changeset - 6a37134172c3
[Not reviewed]
0 3 0
Christopher Neugebauer - 8 years ago 2016-10-14 23:26:36
chrisjrn@gmail.com
Stops relying on a form
3 files changed with 10 insertions and 24 deletions:
0 comments (0 inline, 0 general)
registrasion/reporting/forms.py
Show inline comments
...
 
@@ -72,25 +72,12 @@ def model_fields_form_factory(model):
 
    choices = []
 
    for field in fields:
 
        if hasattr(field, "verbose_name"):
 
            choices.append((field.name, field.verbose_name))
 

	
 
    class ModelFieldsForm(forms.Form):
 
        fields = forms.MultipleChoiceField(
 
            choices=choices,
 
            required=False,
 
        )
 

	
 
    return ModelFieldsForm
 

	
 

	
 
class SectionContentTypeForm(forms.Form):
 
    section = forms.IntegerField(
 
        required=False,
 
        min_value=0,
 
        widget=forms.HiddenInput(),
 
    )
 

	
 
    content_type = forms.CharField(
 
        required=False,
 
        widget=forms.HiddenInput(),
 
    )
registrasion/reporting/reports.py
Show inline comments
...
 
@@ -207,28 +207,24 @@ def report_view(title, form_type=None):
 
        # Add this report to the list of reports.
 
        _all_report_views.append(report_view)
 

	
 
        return report_view
 

	
 
    return _report
 

	
 

	
 
class ReportView(object):
 

	
 
    def __init__(self, inner_view, title, form_type):
 
        # Consolidate form_type so it has content type and section
 
        bases = [forms.SectionContentTypeForm, form_type]
 
        bases = [base for base in bases if base is not None]
 
        form_type = forms.mix_form(*bases)
 

	
 
        self.inner_view = inner_view
 
        self.title = title
 
        self.form_type = form_type
 

	
 
    def __call__(self, request, *a, **k):
 
        data = ReportViewRequestData(self, request, *a, **k)
 
        return self.render(data)
 

	
 
    def get_form(self, request):
 

	
 
        # Create a form instance
 
        if self.form_type is not None:
...
 
@@ -245,25 +241,25 @@ class ReportView(object):
 
    def wrap_reports(cls, reports, content_type):
 
        reports = [
 
            _ReportTemplateWrapper(content_type, report)
 
            for report in reports
 
        ]
 

	
 
        return reports
 

	
 
    def render(self, data):
 
        renderers = {
 
            "text/csv": self._render_as_csv,
 
            "text/html": self._render_as_html,
 
            "": self._render_as_html,
 
            None: self._render_as_html,
 
        }
 
        render = renderers[data.content_type]
 
        return render(data)
 

	
 
    def _render_as_html(self, data):
 
        ctx = {
 
            "title": self.title,
 
            "form": data.form,
 
            "reports": data.reports,
 
        }
 

	
 
        return render(data.request, "registrasion/report.html", ctx)
...
 
@@ -283,27 +279,28 @@ class ReportView(object):
 
        return response
 

	
 

	
 
class ReportViewRequestData(object):
 

	
 
    def __init__(self, report_view, request, *a, **k):
 
        self.report_view = report_view
 
        self.request = request
 

	
 
        # Calculate other data
 
        self.form = report_view.get_form(request)
 

	
 
        # Content type and section come from the form
 
        self.content_type = self.form.cleaned_data["content_type"]
 
        self.section = self.form.cleaned_data["section"]
 
        # Content type and section come from request.GET
 
        self.content_type = request.GET.get("content_type")
 
        self.section = request.GET.get("section")
 
        self.section = int(self.section) if self.section else None
 

	
 
        # Reports come from calling the inner view
 
        reports = report_view.inner_view(request, self.form, *a, **k)
 

	
 
        # Normalise to a list
 
        if isinstance(reports, Report):
 
            reports = [reports]
 

	
 
        # Wrap them in appropriate format
 
        reports = ReportView.wrap_reports(reports, self.content_type)
 

	
 
        self.reports = reports
registrasion/templatetags/registrasion_tags.py
Show inline comments
...
 
@@ -71,18 +71,20 @@ def items_pending(context):
 
@register.assignment_tag(takes_context=True)
 
def items_purchased(context, category=None):
 
    ''' Returns the items purchased for this user. '''
 

	
 
    return ItemController(context.request.user).items_purchased(
 
        category=category
 
    )
 

	
 

	
 
@register.assignment_tag(takes_context=True)
 
def report_as_csv(context, section):
 

	
 
    query = dict(context.request.GET)
 
    query["section"] = section
 
    query["content_type"] = "text/csv"
 
    old_query = context.request.META["QUERY_STRING"]
 
    query = dict([("section", section), ("content_type", "text/csv")])
 
    querystring = urlencode(query)
 

	
 
    if old_query:
 
        querystring = old_query + "&" + querystring
 

	
 
    return context.request.path + "?" + querystring
0 comments (0 inline, 0 general)