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

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

Display created CSV file path after creation of AC batches.

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