示例#1
0
    def render(self):

        if not self.request.get('paths'):
            msg = _(u'error_no_items',
                    default=u'You have not selected any items.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return_temp = self.request.get('orig_template',
                                           self.context.absolute_url())

            return self.request.RESPONSE.redirect(return_temp)

        dossiers = self.get_selected_dossiers()

        # generate the xls data with the XLSReporter
        reporter = XLSReporter(self.request, self.get_dossier_attributes(),
                               dossiers)

        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, "dossier_report.xlsx")

        return data
示例#2
0
 def test_excel_reporter_value_rows(self):
     translation_request = Environment(('de', 'ch'))
     base_translater = StringTranslater(translation_request,
                                        'opengever.base').translate
     columns = (
         {
             'id': 'title',
             'title': _('label_title', default='Title')
         },
         {
             'id': 'classification',
             'title': u'fooclass',
             'transform': base_translater
         },
         {
             'id': 'Title',
             'title': u'footitle',
             'callable': True
         },
         {
             'id': 'unicorn',
             'title': _('label_unicorn', default='Pony'),
             'default': u'Rainbows!'
         },
     )
     self.login(self.regular_user)
     reporter = XLSReporter(self.request, columns, (self.document, ))
     workbook = self.get_workbook(reporter())
     expected_row = [
         u'Vertr\xe4gsentwurf', u'Nicht klassifiziert',
         u'Vertr\xe4gsentwurf', u'Rainbows!'
     ]
     self.assertEquals(
         expected_row,
         [cell.value for cell in list(workbook.active.rows)[-1]])
示例#3
0
    def __call__(self):
        tasks = get_selected_items(self.context, self.request)
        tasks = [tt for tt in tasks]

        if not tasks:
            msg = _(
                u'error_no_items', default=u'You have not selected any items.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            if self.request.get('orig_template'):
                return self.request.RESPONSE.redirect(
                    self.request.form['orig_template'])
            else:
                return self.request.RESPONSE.redirect(
                    self.context.absolute_url())

        reporter = XLSReporter(
            self.context.REQUEST,
            self.columns(),
            tasks,
            sheet_title=translate(
                _('label_tasks', default=u'Tasks'), context=self.request),
            footer='%s %s' % (
                datetime.now().strftime('%d.%m.%Y %H:%M'),
                get_current_admin_unit().id())
            )

        return self.return_excel(reporter)
示例#4
0
 def test_label_row_is_translated_attribute_titles(self):
     columns = ({
         'id': 'title',
         'title': _('label_title', default='Title')
     }, )
     self.login(self.regular_user)
     reporter = XLSReporter(self.request, columns, (self.document, ))
     workbook = self.get_workbook(reporter())
     self.assertEquals(
         [u'Title'], [cell.value for cell in list(workbook.active.rows)[0]])
示例#5
0
    def test_value_rows(self):
        reporter = XLSReporter(self.request, self.test_attributes, self.brains)
        workbook = self.get_workbook(reporter())

        rows = list(workbook.active.rows)
        self.assertEquals([
            u'Objekt 0', None,
            datetime(2012, 2, 25), u'test_user_0 (test_user_0)',
            u'dossier-state-active'
        ], [cell.value for cell in rows[1]])

        self.assertEquals([
            u'Objekt 1', None,
            datetime(2012, 2, 26), u'test_user_1 (test_user_1)',
            'dossier-state-active'
        ], [cell.value for cell in rows[2]])
示例#6
0
    def __call__(self):
        if not self.request.get('paths'):
            msg = _(
                u'error_no_items', default=u'You have not selected any Items')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return_temp = self.request.get(
                'orig_template', self.context.absolute_url())

            return self.request.RESPONSE.redirect(return_temp)

        # XXX: Also make pseudo-relative paths work
        # (as sent by the new gever-ui)
        rewrite_path_list_to_absolute_paths(self.request)

        documents = self.get_selected_documents()
        reporter = XLSReporter(self.request, self.columns(), documents)
        return self.return_excel(reporter)
    def __call__(self):
        reporter = XLSReporter(self.request,
                               self.get_attributes(),
                               self.context.get_dossier_representations(),
                               sheet_title=self.get_sheet_title())

        response = self.request.RESPONSE
        data = reporter()
        if not data:
            msg = _(u'The report could not been generated.')
            api.portal.show_message(message=msg,
                                    request=self.request,
                                    type='error')
            return response.redirect(self.context.absolute_url())

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, self.get_file_name())

        return data
示例#8
0
    def render(self):

        tasks = get_selected_items(self.context, self.request)
        tasks = [tt for tt in tasks]

        if not tasks:
            msg = _(u'error_no_items',
                    default=u'You have not selected any items.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            if self.request.get('orig_template'):
                return self.request.RESPONSE.redirect(
                    self.request.form['orig_template'])
            else:
                return self.request.RESPONSE.redirect(
                    self.context.absolute_url())

        task_attributes = [
            {
                'id': 'title',
                'title': _('label_task_title')
            },
            {
                'id':
                'review_state',
                'title':
                _('review_state'),
                'transform':
                StringTranslater(self.context.REQUEST, 'plone').translate
            },
            {
                'id': 'deadline',
                'title': _('label_deadline'),
                'number_format': DATE_NUMBER_FORMAT
            },
            {
                'id': 'completed',
                'title': _('label_completed'),
                'number_format': DATE_NUMBER_FORMAT
            },
            {
                'id': 'containing_dossier',
                'title': _('label_dossier_title')
            },
            {
                'id': 'issuer',
                'title': _('label_issuer'),
                'transform': readable_author
            },
            {
                'id': 'issuing_org_unit_label',
                'title': _('label_issuing_org_unit')
            },
            {
                'id': 'responsible',
                'title': _('label_responsible'),
                'transform': readable_author
            },
            {
                'id': 'task_type',
                'title': _('label_task_type'),
                'transform': task_type_helper
            },
            {
                'id': 'admin_unit_id',
                'title': _('label_admin_unit_id')
            },
            {
                'id': 'sequence_number',
                'title': _('label_sequence_number')
            },
        ]

        reporter = XLSReporter(self.context.REQUEST,
                               task_attributes,
                               tasks,
                               sheet_title=translate(_('label_tasks',
                                                       default=u'Tasks'),
                                                     context=self.request),
                               footer='%s %s' %
                               (datetime.now().strftime('%d.%m.%Y %H:%M'),
                                get_current_admin_unit().id()))

        data = reporter()
        if not data:
            msg = _(u'Could not generate the report.')
            IStatusMessage(self.request).addStatusMessage(msg, type='error')
            return self.request.RESPONSE.redirect(self.context.absolute_url())

        response = self.request.RESPONSE

        response.setHeader(
            'Content-Type',
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        )
        set_attachment_content_disposition(self.request, "task_report.xlsx")

        return data
示例#9
0
def generate_report(request, context):
    # Translations from opengever.base
    base_translater = StringTranslater(request, 'opengever.base').translate
    label_classification = base_translater(u'label_classification')
    label_privacy_layer = base_translater(u'label_privacy_layer')
    label_public_trial = base_translater(u'label_public_trial')
    label_retention_period = base_translater(u'label_retention_period')
    label_retention_period_annotation = base_translater(
        u'label_retention_period_annotation')
    label_archival_value = base_translater(u'label_archival_value')
    label_archival_value_annotation = base_translater(
        u'label_archival_value_annotation')
    label_custody_period = base_translater(u'label_custody_period')

    # Translations local to opengever.repository
    repository_translater = StringTranslater(request,
                                             'opengever.repository').translate
    label_valid_from = repository_translater(u'label_valid_from')
    label_valid_until = repository_translater(u'label_valid_until')

    # Translations defined here for opengever.repository
    label_repository_number = repository_translater(
        _(
            u'label_repository_number',
            default=u'Repository number',
        ))
    label_repositoryfolder_title_de = repository_translater(
        _(
            u'label_repositoryfolder_title_de',
            default=u'Repositoryfolder title (German)',
        ))
    label_repositoryfolder_title_fr = repository_translater(
        _(
            u'label_repositoryfolder_title_fr',
            default=u'Repositoryfolder title (French)',
        ))
    label_repositoryfolder_description = repository_translater(
        _(
            u'label_repositoryfolder_description',
            default=u'Repositoryfolder description',
        ))
    label_blocked_inheritance = repository_translater(
        _(
            u'label_blocked_inheritance',
            default=u'Blocked inheritance',
        ))
    label_groupnames_with_reader_role = repository_translater(
        _(
            u'label_groupnames_with_reader_role',
            default=u'Read dossiers',
        ))
    label_groupnames_with_contributor_role = repository_translater(
        _(
            u'label_groupnames_with_contributor_role',
            default=u'Create dossiers',
        ))
    label_groupnames_with_editor_role = repository_translater(
        _(
            u'label_groupnames_with_editor_role',
            default=u'Edit dossiers',
        ))
    label_groupnames_with_reviewer_role = repository_translater(
        _(
            u'label_groupnames_with_reviewer_role',
            default=u'Close dossiers',
        ))
    label_groupnames_with_publisher_role = repository_translater(
        _(
            u'label_groupnames_with_publisher_role',
            default=u'Reactivate dossiers',
        ))
    label_groupnames_with_manager_role = repository_translater(
        _(
            u'label_groupnames_with_manager_role',
            default=u'Manage dossiers',
        ))

    column_map = (
        {
            'id': 'get_repository_number',
            'title': label_repository_number,
            'fold_by_method': repository_number_to_outine_level,
            'callable': True
        },  # noqa
        {
            'id': 'title_de',
            'title': label_repositoryfolder_title_de
        },
        {
            'id': 'title_fr',
            'title': label_repositoryfolder_title_fr
        },
        {
            'id': 'description',
            'title': label_repositoryfolder_description
        },
        {
            'id': 'classification',
            'title': label_classification,
            'transform': base_translater,
            'default': u''
        },
        {
            'id': 'privacy_layer',
            'title': label_privacy_layer,
            'transform': base_translater,
            'default': u''
        },
        {
            'id': 'public_trial',
            'title': label_public_trial,
            'transform': base_translater,
            'default': u''
        },
        {
            'id': 'get_retention_period',
            'title': label_retention_period,
            'callable': True,
            'default': u''
        },
        {
            'id': 'get_retention_period_annotation',
            'title': label_retention_period_annotation,
            'callable': True,
            'default': u''
        },  # noqa
        {
            'id': 'get_archival_value',
            'title': label_archival_value,
            'transform': base_translater,
            'callable': True,
            'default': u''
        },  # noqa
        {
            'id': 'get_archival_value_annotation',
            'title': label_archival_value_annotation,
            'callable': True,
            'default': u''
        },
        {
            'id': 'get_custody_period',
            'title': label_custody_period,
            'callable': True,
            'default': u''
        },
        {
            'id': 'valid_from',
            'title': label_valid_from
        },
        {
            'id': 'valid_until',
            'title': label_valid_until
        },
        {
            'id': '__ac_local_roles_block__',
            'title': label_blocked_inheritance,
            'transform': bool_label,
            'default': False
        },
        {
            'id': 'get_groupnames_with_reader_role',
            'title': label_groupnames_with_reader_role,
            'callable': True
        },
        {
            'id': 'get_groupnames_with_contributor_role',
            'title': label_groupnames_with_contributor_role,
            'callable': True
        },
        {
            'id': 'get_groupnames_with_editor_role',
            'title': label_groupnames_with_editor_role,
            'callable': True
        },
        {
            'id': 'get_groupnames_with_reviewer_role',
            'title': label_groupnames_with_reviewer_role,
            'callable': True
        },
        {
            'id': 'get_groupnames_with_publisher_role',
            'title': label_groupnames_with_publisher_role,
            'callable': True
        },
        {
            'id': 'get_groupnames_with_manager_role',
            'title': label_groupnames_with_manager_role,
            'callable': True
        },
    )

    # We sort these by reference number to preserve user experienced ordering
    active_formatter = api.portal.get_registry_record(
        name='formatter', interface=IReferenceNumberSettings)
    formatter = queryAdapter(api.portal.get(),
                             IReferenceNumberFormatter,
                             name=active_formatter)
    repository_brains = sorted(
        api.content.find(context,
                         object_provides=IRepositoryFolder.__identifier__),
        key=formatter.sorter,
    )
    repository_folders = [context] + [
        brain.getObject() for brain in repository_brains
    ]

    # XXX - the excel importer expects 4 non-meaningful rows
    return XLSReporter(
        request,
        column_map,
        repository_folders,
        sheet_title=repository_translater(u'RepositoryRoot'),
        blank_header_rows=4,
    )()
示例#10
0
 def test_set_sheet_title_for_active_workbook_sheet(self):
     title = 'Aufgaben\xc3\xbcbersicht'.decode('utf-8')
     reporter = XLSReporter(None, (), (), sheet_title=title)
     workbook = self.get_workbook(reporter())
     self.assertEquals(title, workbook.active.title)
示例#11
0
 def test_label_row_is_translated_attribute_titles(self):
     reporter = XLSReporter(self.request, self.test_attributes, self.brains)
     workbook = self.get_workbook(reporter())
     self.assertEquals(
         [u'Title', None, u'Start', u'Responsible', u'Review state'],
         [cell.value for cell in list(workbook.active.rows)[0]])
示例#12
0
    def test_xlsreporter(self):
        contact_info = self.stub()
        self.mock_utility(contact_info, IContactInformation, name=u"")
        self.expect(contact_info.is_user(ANY)).result(True)
        self.expect(
            contact_info.describe(ANY)).result('Describe text for a user')

        request = self.mocker.mock()
        brains = []

        for i in range(2):
            brain = self.stub()
            self.expect(brain.Title).result('Objekt %i' % (i))
            self.expect(brain.missing).result(MissingValue)
            self.expect(
                brain.start).result(datetime(2012, 2, 25) + timedelta(i))
            self.expect(brain.responsible).result('Test user %i' % (i))
            self.expect(brain.review_state).result('dossier-state-active')
            brains.append(brain)

        self.replay()

        translation_request = Environment(('de', 'de'))

        test_attributes = [
            {
                'id': 'Title',
                'title': _('label_title', default='Title')
            },
            #test missingvalue
            {
                'id': 'missing',
                'missing': 'Missing',
            },
            {
                'id': 'start',
                'title': _('label_start', default='Start'),
                'transform': format_datetime,
                'style': get_date_style()
            },
            {
                'id': 'responsible',
                'title': _('label_responsible', default='Responsible'),
                'transform': readable_author
            },
            {
                'id':
                'review_state',
                'title':
                _('label_review_state', default='Review state'),
                'transform':
                StringTranslater(translation_request, 'plone').translate
            },
        ]

        # generate the report.xls
        reporter = XLSReporter(request, test_attributes, brains)
        data = reporter()

        # check the generate xls with the xlrd module
        wb = xlrd.open_workbook(file_contents=data)
        sheet = wb.sheets()[0]

        labels = sheet.row(0)
        self.assertEquals(
            [cell.value for cell in labels],
            [u'Title', u'', u'Start', u'Responsible', u'Review state'])

        row1 = sheet.row(1)
        self.assertEquals([cell.value for cell in row1], [
            u'Objekt 0', u'', u'25.02.2012', u'Describe text for a user',
            u'dossier-state-active'
        ])

        row2 = sheet.row(2)
        self.assertEquals([cell.value for cell in row2], [
            u'Objekt 1', u'', u'26.02.2012', u'Describe text for a user',
            u'dossier-state-active'
        ])