Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 6637)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser.py	(revision 6638)
@@ -322,10 +322,42 @@
     grok.require('waeup.manageStudents')
     form_fields = grok.AutoFields(IStudentBase).omit('student_id')
-    #grok.template('editstudentbase')
+    grok.template('studentbasemanagepage')
     label = 'Edit base data'
 
-    @property
-    def title(self):
-        return 'Student: %s' % self.context.name
+    def update(self):
+        datepicker.need() # Enable jQuery datepicker in date fields.
+        super(StudentBaseManageFormPage, self).update()
+        self.wf_info = IWorkflowInfo(self.context)
+        return
+
+    @property
+    def title(self):
+        return 'Student: %s' % self.context.name
+
+    def getTransitions(self):
+        """Return a list of dicts of allowed transition ids and titles.
+
+        Each list entry provides keys ``name`` and ``title`` for
+        internal name and (human readable) title of a single
+        transition.
+        """
+        allowed_transitions = self.wf_info.getManualTransitions()
+        return [dict(name='', title='No transition')] +[
+            dict(name=x, title=y) for x, y in allowed_transitions]
+
+    @grok.action('Save')
+    def save(self, **data):
+        changed_fields = self.applyData(self.context, **data)
+        changed_fields = changed_fields.values()
+        fields_string = '+'.join(' + '.join(str(i) for i in b) for b in changed_fields)
+        self.context._p_changed = True
+        form = self.request.form
+        if form.has_key('transition') and form['transition']:
+            transition_id = form['transition']
+            self.wf_info.fireTransition(transition_id)
+        self.flash('Form has been saved.')
+        ob_class = self.__implemented__.__name__.replace('waeup.sirp.','')
+        self.context.loggerInfo(ob_class, 'saved: % s' % fields_string)
+        return
 
 class StudentClearanceDisplayFormPage(WAeUPDisplayFormPage):
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentbasemanagepage.pt
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentbasemanagepage.pt	(revision 6638)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/browser_templates/studentbasemanagepage.pt	(revision 6638)
@@ -0,0 +1,55 @@
+<form action="." tal:attributes="action request/URL" method="post"
+      class="edit-form" enctype="multipart/form-data">
+
+  <div class="form-status"
+    tal:define="status view/status"
+    tal:condition="status">
+    Form Status:
+    <span i18n:translate="" tal:content="view/status">
+      Form status summary
+    </span>
+  </div>
+
+  <table class="form-fields zebra">
+    <tbody>
+      <tal:block repeat="widget view/widgets">
+        <tr>
+          <td class="label">
+            <label tal:attributes="for widget/name">
+              <span class="required" tal:condition="widget/required">*</span>
+              <span i18n:translate="" tal:content="widget/label">label</span>:
+            </label>
+          </td>
+          <td class="field">
+            <span class="widget" tal:content="structure widget">
+              <input type="text" />
+            </span>
+            <tal:error tal:condition="widget/error">
+              <span tal:replace="structure widget/error">error</span>
+            </tal:error>
+            <tal:hint tal:condition="widget/hint">
+              <span class="hint" tal:content="structure widget/hint">hint</span>
+            </tal:hint>
+          </td>
+        </tr>
+      </tal:block>
+      <tr>
+        <td class="label"><label>Application Transition:</label></td>
+        <td>
+          <select id="transition" name="transition">
+            <option tal:repeat="transition view/getTransitions"
+                    tal:attributes="value transition/name">
+              <span tal:replace="transition/title">TRANSITIONTITLE</span>
+            </option>
+          </select>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+
+  <div class="actionButtons" tal:condition="view/availableActions">
+    <input tal:repeat="action view/actions"
+           tal:replace="structure action/render"
+           />
+  </div>
+</form>
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 6637)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/tests/test_browser.py	(revision 6638)
@@ -200,4 +200,8 @@
         self.assertEqual(self.browser.headers['Status'], '200 Ok')
         self.assertEqual(self.browser.url, self.manage_student_path)
+        # Managers can fire transitions
+        self.browser.getControl(name="transition").value = ['admit']
+        self.browser.getControl("Save").click()
+        self.assertTrue('Form has been saved' in self.browser.contents)
 
         self.browser.open(self.student_path)
@@ -236,5 +240,5 @@
         self.assertEqual(self.browser.headers['Status'], '200 Ok')
         self.assertEqual(self.browser.url, self.history_student_path)
-        self.assertMatches('...Student object created by system...', self.browser.contents)
+        self.assertMatches('...Student admitted by system...', self.browser.contents)
 
         return
Index: main/waeup.sirp/trunk/src/waeup/sirp/students/workflow.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/students/workflow.py	(revision 6637)
+++ main/waeup.sirp/trunk/src/waeup/sirp/students/workflow.py	(revision 6638)
@@ -18,5 +18,5 @@
         source = None,
         condition = NullCondition,
-        msg = 'Student object created',
+        msg = 'Student record created',
         destination = CREATED),
 
@@ -31,5 +31,5 @@
         transition_id = 'reset1',
         title = 'Reset student',
-        msg = 'Student reset',
+        msg = 'Student record reset',
         source = ADMITTED,
         destination = CREATED),
