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

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

Add a view for reimport.

File size: 4.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 (
9    AdminTask, AddActionButton, LeftSidebar, BatchOpButton)
10from waeup.sirp.interfaces import IWAeUPObject, IUniversity
11
12from waeup.sirp.accesscodes.accesscodes import AccessCodeBatch
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 update(self, batches=None, archive=None, delete=None):
29        if archive is None and delete is None:
30            return
31        if not batches:
32            self.flash('No batch selected.')
33            return
34        if isinstance(batches, basestring):
35            batches = [batches]
36        for name in batches:
37            batch = self.context[name]
38            csv_file = batch.archive()
39            self.flash('Archived %s (%s)' % (name, csv_file))
40            if delete is None:
41                continue
42            del self.context[name]
43            self.flash('Deleted batch %s' % name)
44
45class AddBatchPage(WAeUPAddFormPage):
46    grok.name('add')
47    grok.context(IAccessCodeBatchContainer)
48    grok.require('waeup.manageACBatches')
49
50    title = label = 'Create a WAeUP Scratch Card Batch'
51    pnav = 0
52
53    form_fields = grok.AutoFields(IAccessCodeBatch).select(
54        'batch_prefix', 'entry_num', 'cost')
55
56    @grok.action('Cancel')
57    def cancel(self, *args, **kw):
58        self.flash('Batch creation cancelled.')
59        self.redirect(self.url(self.context))
60
61    @grok.action('Create batch')
62    def createBatch(self, **data):
63        creator = self.request.principal.id
64        creation_date = datetime.now()
65        data.update(creation_date=creation_date, creator=creator)
66        batch = self.context.createBatch(**data)
67        csv_file = batch.createCSVLogFile()
68        self.context._p_changed = True
69        self.flash('Batch created (%s entries)' % data['entry_num'])
70        self.flash('Data written to %s' % csv_file)
71        self.redirect(self.url(self.context))
72
73class ReimportBatchPage(WAeUPPage):
74    grok.name('reimport')
75    grok.context(IAccessCodeBatchContainer)
76    grok.template('reimportbatchpage')
77    grok.require('waeup.manageACBatches')
78
79    title = 'Reimport Access Code Batches'
80    pnav = 0
81
82       
83class BatchContainerBreadcrumb(Breadcrumb):
84    """A breadcrumb for ac batch containers.
85    """
86    grok.require('waeup.manageACBatches')
87    grok.context(IAccessCodeBatchContainer)
88    title = u'Access Code Batches'
89    parent_viewname = 'administration'
90
91class AdminTaskManageACBatches(AdminTask):
92    """Entry on administration page that links to batch container.
93    """
94    grok.order(5)
95    grok.require('waeup.manageACBatches')
96    grok.template('admintaskacbatches')
97
98    link_title = 'Manage access-code batches'
99    target_viewname = 'accesscodes'
100
101class CreateBatchButton(AddActionButton):
102    """Action button on batch container page which links to batch creation.
103    """
104    grok.context(IAccessCodeBatchContainer)
105    grok.view(BatchContainerPage)
106    grok.require('waeup.manageACBatches')
107    text = 'Add Scratch Card Batch'
108
109class ReimportBatchButton(BatchOpButton):
110    """Action button on batch container page which links to batch reimport.
111    """
112    grok.context(IAccessCodeBatchContainer)
113    grok.view(BatchContainerPage)
114    grok.require('waeup.manageACBatches')
115    target = 'reimport'
116    text = 'Reimport Scratch Card Batch'
117
118class ManageAccessCodes(grok.Viewlet):
119    """Link on front page to access code management.
120    """
121    grok.viewletmanager(LeftSidebar)
122    grok.context(IUniversity)
123    grok.view(UniversityPage)
124    grok.order(6)
125    grok.require('waeup.manageACBatches')
126
127    def render(self):
128        return u'<div class="portlet"><a href="accesscodes">Manage access-codes</a></div>'
Note: See TracBrowser for help on using the repository browser.