source: main/waeup.sirp/trunk/src/waeup/sirp/accesscodes/browser.py @ 5120

Last change on this file since 5120 was 5120, checked in by uli, 15 years ago

Remove obsolete import.

File size: 3.5 KB
RevLine 
[5082]1"""UI components for accesscodes.
2"""
3import grok
[5088]4from datetime import datetime
[5084]5from waeup.sirp.browser import WAeUPPage, WAeUPAddFormPage
[5082]6from waeup.sirp.browser.breadcrumbs import Breadcrumb
[5104]7from waeup.sirp.browser.pages import UniversityPage
8from waeup.sirp.browser.viewlets import AdminTask, AddActionButton, LeftSidebar
9from waeup.sirp.interfaces import IWAeUPObject, IUniversity
[5082]10
[5088]11from waeup.sirp.accesscodes.accesscodes import AccessCodeBatch
12from waeup.sirp.accesscodes.interfaces import (
13    IAccessCodeBatchContainer, IAccessCodeBatch,
14    )
[5082]15
16grok.context(IWAeUPObject)
17
18class BatchContainerPage(WAeUPPage):
19    grok.name('index')
20    grok.context(IAccessCodeBatchContainer)
21    grok.template('batchcontainer')
[5104]22    grok.require('waeup.manageACBatches')
[5082]23
24    title = 'Access Code Batches'
25    pnav = 0
26
[5117]27    def update(self, batches=None, archive=None, delete=None):
28        if batches is None:
29            return
30        if archive is None and delete is None:
31            return
32        if isinstance(batches, basestring):
33            batches = [batches]
34        for name in batches:
35            batch = self.context[name]
36            csv_file = batch.archive()
37            self.flash('Archived %s (%s)' % (name, csv_file))
38            if delete is None:
39                continue
40            del self.context[name]
41            self.flash('Deleted batch %s' % name)
[5104]42
[5084]43class AddBatchPage(WAeUPAddFormPage):
44    grok.name('add')
45    grok.context(IAccessCodeBatchContainer)
[5104]46    grok.require('waeup.manageACBatches')
[5084]47
48    title = label = 'Create a WAeUP Scratch Card Batch'
49    pnav = 0
50
[5088]51    form_fields = grok.AutoFields(IAccessCodeBatch).select(
52        'batch_prefix', 'entry_num', 'cost')
53
54    @grok.action('Cancel')
[5104]55    def cancel(self, *args, **kw):
[5088]56        self.flash('Batch creation cancelled.')
57        self.redirect(self.url(self.context))
58
[5084]59    @grok.action('Create batch')
60    def createBatch(self, **data):
[5088]61        creator = self.request.principal.id
62        creation_date = datetime.now()
63        data.update(creation_date=creation_date, creator=creator)
64        batch = AccessCodeBatch(**data)
65        self.context.addBatch(batch)
[5113]66        csv_file = batch.createCSVLogFile()
[5088]67        self.context._p_changed = True
68        self.flash('Batch created (%s entries)' % data['entry_num'])
[5113]69        self.flash('Data written to %s' % csv_file)
[5084]70        self.redirect(self.url(self.context))
71
[5082]72class BatchContainerBreadcrumb(Breadcrumb):
73    """A breadcrumb for ac batch containers.
[5104]74    """
75    grok.require('waeup.manageACBatches')
[5082]76    grok.context(IAccessCodeBatchContainer)
77    title = u'Access Code Batches'
78    parent_viewname = 'administration'
79
80class AdminTaskManageACBatches(AdminTask):
81    """Entry on administration page that links to batch container.
82    """
83    grok.order(5)
[5104]84    grok.require('waeup.manageACBatches')
[5082]85    grok.template('admintaskacbatches')
86
87    link_title = 'Manage access-code batches'
88    target_viewname = 'accesscodes'
[5084]89
90class CreateBatchButton(AddActionButton):
91    """Action button on batch container page which links to batch creation.
92    """
93    grok.context(IAccessCodeBatchContainer)
94    grok.view(BatchContainerPage)
[5104]95    grok.require('waeup.manageACBatches')
[5084]96    text = 'Add Scratch Card Batch'
[5104]97
98class ManageAccessCodes(grok.Viewlet):
99    """Link on front page to access code management.
100    """
101    grok.viewletmanager(LeftSidebar)
102    grok.context(IUniversity)
103    grok.view(UniversityPage)
104    grok.order(6)
105    grok.require('waeup.manageACBatches')
106
107    def render(self):
108        return u'<div class="portlet"><a href="accesscodes">Manage access-codes</a></div>'
Note: See TracBrowser for help on using the repository browser.