~replaceafill/schooltool/trunk_fixes

« back to all changes in this revision

Viewing changes to src/schooltool/export/export.py

  • Committer: Justas Sadzevicius
  • Date: 2013-05-28 12:12:34 UTC
  • mfrom: (3585.1.4 flourish_trunk)
  • Revision ID: justas@pov.lt-20130528121234-uzr7ke5pz1ihn101
Merge file archive reprorts and minor report tweaks and fixes

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
from schooltool.course.interfaces import ICourseContainer
51
51
from schooltool.course.interfaces import ISectionContainer
52
52
from schooltool.report.browser.report import RequestRemoteReportDialog
 
53
from schooltool.report.browser.report import ProgressReportPage
53
54
from schooltool.relationship.relationship import IRelationshipLinks
54
55
from schooltool.task.progress import TaskProgress
55
56
from schooltool.task.progress import normalized_progress
56
57
from schooltool.report.report import AbstractReportTask
 
58
from schooltool.report.report import NoReportException
57
59
from schooltool.report.report import ReportFile
58
60
from schooltool.report.report import ReportMessage
59
61
from schooltool.report.report import OnPDFReportScheduled
65
67
from schooltool.timetable.daytemplates import SchoolDayTemplates
66
68
 
67
69
 
68
 
class ExcelExportView(BrowserView):
 
70
class ExcelExportView(ProgressReportPage):
69
71
 
70
72
    implements(IXLSExportView)
71
73
 
72
 
    render_invariant = False
73
 
    render_debug = False
74
 
 
75
 
    base_filename = 'export'
76
 
 
77
 
    message_title = _('export')
78
 
 
79
 
    task_progress = None
80
 
    overall_line_id = None
81
 
 
82
 
    def makeFileName(self, basename):
83
 
        if self.render_invariant:
84
 
            return '%s.xls' % basename
85
 
        timestamp = datetime.datetime.now().strftime('%y-%m-%d-%H-%M')
86
 
        return '%s_%s.xls' % (basename, timestamp)
87
 
 
88
 
    @property
89
 
    def filename(self):
90
 
        return self.makeFileName(self.base_filename)
91
 
 
92
74
    def __init__(self, context, request):
93
75
        super(ExcelExportView, self).__init__(context, request)
94
76
        self._font_cache = {}
176
158
        self.write(ws, row, col, data, borders=borders, bold=True, color=YELLOW,
177
159
                   merge=merge)
178
160
 
179
 
    def makeProgress(self):
180
 
        self.task_progress = TaskProgress(self.request.task_id)
181
 
 
182
 
    def updateOverall(self):
183
 
        if self.overall_line_id is None:
184
 
            return
185
 
        max_progress = 0.0
186
 
        overall = 0.0
187
 
        for lid, line in self.task_progress.lines.items():
188
 
            if line.get('progress', None) is not None:
189
 
                overall += line.progress
190
 
                max_progress += 1.0
191
 
        if max_progress > 0.0:
192
 
            overall /= max_progress
193
 
        self.task_progress('overall', progress=overall)
194
 
 
195
 
    def progress(self, importer, value):
196
 
        self.task_progress(importer, progress=value, active=True)
197
 
        self.updateOverall()
198
 
 
199
 
    def finish(self, importer):
200
 
        self.task_progress.finish(importer)
201
 
        self.updateOverall()
202
 
 
203
161
 
204
162
class SchoolTimetableExportView(ExcelExportView):
205
163
 
882
840
        progress.add('overall',
883
841
                     title=_('School Data'), progress=0.0)
884
842
 
 
843
    def update(self):
 
844
        super(MegaExporter, self).update()
 
845
        self.addImporters(self.task_progress)
 
846
 
885
847
    def render(self, workbook):
886
848
        datafile = StringIO()
887
849
        workbook.save(datafile)
914
876
 
915
877
class XLSReportTask(AbstractReportTask):
916
878
 
917
 
    def renderToFile(self, renderer, *args, **kwargs):
918
 
        workbook = renderer()
919
 
        filename = renderer.filename
920
 
        xls = self.makeReportFile(filename, workbook)
921
 
        return xls
 
879
    default_filename = 'report.xls'
 
880
    default_mimetype = 'application/vnd.ms-excel'
922
881
 
923
 
    def makeReportFile(self, filename, workbook):
924
 
        if not filename or not filename.strip():
925
 
            filename = 'report.xls'
926
 
        pdf = ReportFile()
927
 
        pdf.mimeType = 'application/vnd.ms-excel'
928
 
        pdf.__name__ = filename
929
 
        stream = pdf.open('w')
 
882
    def renderReport(self, renderer, stream, *args, **kw):
 
883
        workbook = renderer(*args, **kw)
 
884
        if workbook is None:
 
885
            raise NoReportException()
930
886
        workbook.save(stream)
931
 
        stream.close()
932
 
        return pdf
933
887
 
934
888
 
935
889
class RemoteMegaExporter(MegaExporter):