source: main/waeup.sirp/trunk/src/waeup/sirp/hostels/browser.py @ 6957

Last change on this file since 6957 was 6956, checked in by Henrik Bettermann, 14 years ago

Add more fields and fix code.

  • Property svn:keywords set to Id
File size: 6.0 KB
Line 
1## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
2## This program is free software; you can redistribute it and/or modify
3## it under the terms of the GNU General Public License as published by
4## the Free Software Foundation; either version 2 of the License, or
5## (at your option) any later version.
6##
7## This program is distributed in the hope that it will be useful,
8## but WITHOUT ANY WARRANTY; without even the implied warranty of
9## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10## GNU General Public License for more details.
11##
12## You should have received a copy of the GNU General Public License
13## along with this program; if not, write to the Free Software
14## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15##
16"""UI components for hostels and related components.
17"""
18import grok
19from time import time
20from datetime import date, datetime
21from zope.component import createObject
22from waeup.sirp.browser import (
23    WAeUPPage, WAeUPEditFormPage, WAeUPAddFormPage, WAeUPDisplayFormPage)
24from waeup.sirp.browser.breadcrumbs import Breadcrumb
25from waeup.sirp.browser.resources import datepicker, datatable, tabs
26from waeup.sirp.browser.viewlets import (
27    ManageActionButton, PrimaryNavTab, AddActionButton)
28from waeup.sirp.interfaces import IWAeUPObject, IUserAccount
29from waeup.sirp.widgets.datewidget import (
30    FriendlyDateWidget, FriendlyDateDisplayWidget,
31    FriendlyDatetimeDisplayWidget)
32from waeup.sirp.browser.resources import toggleall
33from waeup.sirp.authentication import get_principal_role_manager
34from waeup.sirp.hostels.container import HostelsContainer
35from waeup.sirp.hostels.hostel import Hostel
36from waeup.sirp.hostels.interfaces import IHostelsContainer, IHostel
37
38def write_log_message(view, message):
39    ob_class = view.__implemented__.__name__.replace('waeup.sirp.','')
40    view.context.loggerInfo(ob_class, message)
41    return
42
43# Save function used for save methods in manager pages
44def msave(view, **data):
45    form = view.request.form
46    changed_fields = view.applyData(view.context, **data)
47    # Turn list of lists into single list
48    if changed_fields:
49        changed_fields = reduce(lambda x,y: x+y, changed_fields.values())
50    fields_string = ' + '.join(changed_fields)
51    view.context._p_changed = True
52    view.flash('Form has been saved.')
53    if fields_string:
54        write_log_message(view, 'saved: % s' % fields_string)
55    return
56
57class HostelsTab(PrimaryNavTab):
58    """Hostels tab in primary navigation.
59    """
60
61    grok.context(IWAeUPObject)
62    grok.order(5)
63    grok.require('waeup.viewHostels')
64    grok.template('primarynavtab')
65
66    pnav = 5
67    tab_title = u'Hostels'
68
69    @property
70    def link_target(self):
71        return self.view.application_url('hostels')
72
73class HostelsBreadcrumb(Breadcrumb):
74    """A breadcrumb for the hostels container.
75    """
76    grok.context(IHostelsContainer)
77    title = u'Hostels'
78
79class HostelBreadcrumb(Breadcrumb):
80    """A breadcrumb for the hostel container.
81    """
82    grok.context(IHostel)
83
84class HostelsContainerPage(WAeUPDisplayFormPage):
85    """The standard view for hostels containers.
86    """
87    grok.context(IHostelsContainer)
88    grok.name('index')
89    grok.require('waeup.viewHostels')
90    #grok.template('containerpage')
91    label = 'Accommodation Section'
92    title = 'Accommodation'
93    pnav = 5
94
95class HostelsContainerManageActionButton(ManageActionButton):
96    grok.order(1)
97    grok.context(IHostelsContainer)
98    grok.view(HostelsContainerPage)
99    grok.require('waeup.manageHostels')
100    text = 'Manage accommodation section'
101
102class HostelsContainerManagePage(WAeUPDisplayFormPage):
103    """The manage page for hostel containers.
104    """
105    grok.context(IHostelsContainer)
106    grok.name('manage')
107    grok.require('waeup.manageHostels')
108    #grok.template('containermanagepage')
109    pnav = 5
110    title = 'Accommodation'
111    label = 'Manage accommodation section'
112
113class HostelsContainerAddActionButton(AddActionButton):
114    grok.order(1)
115    grok.context(IHostelsContainer)
116    grok.view(HostelsContainerManagePage)
117    grok.require('waeup.manageHostels')
118    text = 'Add hostel'
119    target = 'addhostel'
120
121class HostelAddFormPage(WAeUPAddFormPage):
122    """Add-form to add a hostel.
123    """
124    grok.context(IHostelsContainer)
125    grok.require('waeup.manageHostels')
126    grok.name('addhostel')
127    grok.template('hosteladdpage')
128    form_fields = grok.AutoFields(IHostel)
129    title = 'Accommodation'
130    label = 'Add hostel'
131    pnav = 5
132
133    @grok.action('Create hostel')
134    def addHostel(self, **data):
135        hostel = Hostel()
136        self.applyData(hostel, **data)
137        hostel.hostel_id = data['hostel_name'].lower().replace(' ','_')
138        self.context.addHostel(hostel)
139        self.flash('Hostel created.')
140        self.redirect(self.url(self.context[hostel.hostel_id], 'index'))
141        return
142
143class HostelDisplayFormPage(WAeUPDisplayFormPage):
144    """ Page to display hostel data
145    """
146    grok.context(IHostel)
147    grok.name('index')
148    grok.require('waeup.viewHostels')
149    #grok.template('hostelpage')
150    pnav = 5
151
152    @property
153    def label(self):
154        return self.context.hostel_name
155
156    @property
157    def title(self):
158        return self.context.hostel_name
159
160class HostelManageActionButton(ManageActionButton):
161    grok.order(1)
162    grok.context(IHostel)
163    grok.view(HostelDisplayFormPage)
164    grok.require('waeup.manageHostels')
165    text = 'Manage'
166    target = 'edit'
167
168class HostelManageFormPage(WAeUPEditFormPage):
169    """ View to edit hostel data
170    """
171    grok.context(IHostel)
172    grok.name('edit')
173    grok.require('waeup.manageHostels')
174    form_fields = grok.AutoFields(IHostel).omit('hostel_id')
175    #grok.template('hostelmanagepage')
176    label = 'Manage hostel data'
177    pnav = 5
178
179    @property
180    def title(self):
181        return self.context.hostel_name
182
183    def update(self):
184        datepicker.need() # Enable jQuery datepicker in date fields.
185        super(HostelManageFormPage, self).update()
186        return
187
188    @grok.action('Save')
189    def save(self, **data):
190        msave(self, **data)
191        return
Note: See TracBrowser for help on using the repository browser.