| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- from django.http import HttpResponse
- from django.utils.translation import ugettext_lazy as _
-
- from oscar.apps.dashboard.reports.csv_utils import CsvUnicodeWriter
- from oscar.core import utils
-
-
- class ReportGenerator(object):
- """
- Top-level class that needs to be subclassed to provide a
- report generator.
- """
- filename_template = 'report-%s-to-%s.csv'
- content_type = 'text/csv'
- code = ''
- description = '<insert report description>'
-
- def __init__(self, **kwargs):
- if 'start_date' in kwargs and 'end_date' in kwargs:
- self.start_date = kwargs['start_date']
- self.end_date = kwargs['end_date']
-
- self.formatter = self.formatters['%s_formatter' % kwargs['formatter']]()
-
- def report_description(self):
- return _('%(report_filter)s between %(start_date)s and %(end_date)s') % {
- 'report_filter': self.description,
- 'start_date': self.start_date,
- 'end_date': self.end_date,
- }
-
- def generate(self, response):
- pass
-
- def filename(self):
- """
- Returns the filename for this report
- """
- return self.formatter.filename()
-
- def is_available_to(self, user):
- """
- Checks whether this report is available to this user
- """
- return user.is_staff
-
-
- class ReportFormatter(object):
- def format_datetime(self, dt):
- if not dt:
- return ''
- return utils.format_datetime(dt, 'DATETIME_FORMAT')
-
- def format_date(self, d):
- if not d:
- return ''
- return utils.format_datetime(d, 'DATE_FORMAT')
-
- def filename(self):
- return self.filename_template
-
-
- class ReportCSVFormatter(ReportFormatter):
-
- def get_csv_writer(self, file_handle, **kwargs):
- return CsvUnicodeWriter(file_handle, **kwargs)
-
- def generate_response(self, objects, **kwargs):
- response = HttpResponse(content_type='text/csv')
- response['Content-Disposition'] = 'attachment; filename=%s' % self.filename(**kwargs)
- self.generate_csv(response, objects)
- return response
-
-
- class ReportHTMLFormatter(ReportFormatter):
-
- def generate_response(self, objects, **kwargs):
- return objects
|