source: main/waeup.kofa/trunk/docs/source/userdocs/students/browser.rst @ 13082

Last change on this file since 13082 was 13078, checked in by Henrik Bettermann, 9 years ago

More docs.

File size: 19.8 KB
Line 
1.. _students_browser:
2
3Browsing the Students Section
4=============================
5
6The reader may ask: How do officers and students browse the portal?
7Where are the step-by-step operating instructions on how to use
8Kofa? We are always tempted to answer: The menu navigation should be
9self-explanatory and it's quite easy to follow the menu prompts or
10flash messages which appear above page titles in a green, yellow or
11red box. For the students section this answer seems a bit over the
12top. We must indeed describe some browser pages and what their
13clickable actions are doing with the data. The reason is, that a lot
14of Kofa's functionality is embedded in view and utility methods and
15not only provided by the functionality of content components as
16described above.
17
18.. _navigation_bar:
19
20Navigation Bar
21==============
22
23
24
25
26
27.. _page_layout:
28
29Page Layout
30===========
31
32Kofa makes use of two different `Bootstrap`_ layouts. Anonymous
33users, students and applicants do see a single-column theme with
34only a static top navigation bar. Students can navigate to the
35various display form pages of their record by pulling down the 'My
36Data' tab in the navigation bar.
37
38Officers see a double-column theme after logging in. The left column
39contains a box which contains links to the user's preferences (My
40Preferences) and roles (My Roles). It also contains links to the
41various sections of Kofa depending on the permissions the officer
42has has obtained. Possible sections are: 'Portal Configuration',
43'Officers', 'Data Center', 'Reports' and 'Access Codes'. A second
44box shows up in the left column when the officer accesses a student
45record. This box gives direct access to the pages of a
46student record.
47
48
49.. _manage_edit_pages:
50
51Views, Pages and Form Pages
52===========================
53
54Views are dealing with request and response objects. Usually a view
55renders (produces) HTML or PDF code to be displayed in a web browser
56or a pdf reader respectively. Very often a view only redirects to
57another view or page and does not render code by itself.
58Views, which render pdf code, are called pdf slips in Kofa.
59
60Kofa pages are 'layout-aware' browser views, which means they know
61about the global page layout and render content inside it.
62
63In Kofa most pages are form pages which means they are layout-aware
64views on data. These pages are either used to submit data (simple form
65page), or to display, edit or add persistant data. The latter three
66are called display, edit or add form pages respectively. Kofa is
67using the `Zope Formlib`_ package to auto-generate these forms.
68
69.. note::
70
71  Briefly, Zope Formlib is wedded to `Zope Schema`_, it provides
72  display and input widgets (= views) for the fields defined in the
73  Zope Schema package. Auto-generation is done with `grok.AutoFields`
74  which takes the fields, declared in an interface, and renders
75  display or input widgets, according to the schema declaration, for
76  display or edit forms respectively.
77
78Whereas display and add form pages are usually shared by officers
79and students, edit form pages are not. Students are not allowed to
80edit all of their data all the time. Edit access is restricted by
81workflow states or other conditions. Officers' access is much less
82restricted, and we therefore speak of 'managing' instead of 'editing'
83data. In most cases, Kofa uses two different form pages which
84require different permissions: An `EditFormPage` requires the
85:py:class:`HandleStudent<waeup.kofa.students.permissions.HandleStudent>`
86permission and a `ManageFormPage` requires the
87:py:class:`ManageStudent<waeup.kofa.students.permissions.ManageStudent>`
88permission.
89
90
91.. _action_buttons:
92
93Action Buttons
94==============
95
96There are two kinds of action buttons which appear on pages:
97
98-  **Link Buttons** appear on top of the page above the page
99   title and are decorated with an icon. These
100   :py:class:`action
101   buttons<waeup.kofa.browser.viewlets.ActionButton>` have a
102   link target which means they usually refer to another Kofa
103   page and are sending GET requests to open the page.
104
105-  **Form Buttons** are submit buttons which appear below a form.
106   They are HTML form actions which submit data by sending a
107   POST request back to the form page. A form page method is
108   called and processes the data or simply redirects to
109   another Kofa page.
110
111
112.. _logging_in_as_student:
113
114Logging in as Student
115=====================
116
117Officers with
118:py:class:`LoginAsStudent<waeup.kofa.students.permissions.LoginAsStudent>`
119permission do see a 'Login as student' button on student display
120pages which redirects to a page, where a temporary student password
121can be set by clicking a 'Set password now' form button. The
122temporary password is valid for 10 minutes. During this period the
123student can't login. The officer is being redirected to a login page
124which allows to directly login as student with pre-filled temporary
125credentials. The second page is to avoid that officers must remember
126the student credentials, have to logout from their own account and
127manually login as student via the regular login page. After 10
128minutes the officer is automatically thrown out and the student is
129able to login again (if the officer hasn't changed the password).
130Attention: When logging in as student, the officer really
131impersonates the student. All actions are logged with the student id
132and not with the officer's user id. However, start of student
133impersonation is also logged, so that officers can be identified and
134fraudulent use can be discovered.
135
136
137.. _rejecting_clearance:
138
139Rejecting Clearance
140===================
141
142When a clearance officer clicks the 'Save comment and reject
143clearance now' button, the `reject` action method of the
144:py:class:`StudentRejectClearancePage<waeup.kofa.students.browser.StudentRejectClearancePage>`
145is called. This method first checks, in which workflow state the
146student is, and fires a transition accordingly. Then the comment,
147which should explain why the request was requested, is saved twice
148in the `officer_comment` attribute of the student and in
149``students.log``. As soon as the `clear` transition (d) is effected,
150an event handler clears the attribute again. The logfile message is
151permanent and ensures that the original cause of rejection can
152always be reconstructed.
153
154Finally, the method redirects to the `ContactStudentFormPage` and prefills
155the HTML form with the comment previously saved. The clearance
156officer can leave the comment as it is, or can modify the text to
157give more information about the reason of rejection. This comment
158will then be sent to the student by email. This comment is not saved,
159neither in the student object nor in the logfile.
160
161.. important::
162
163  All messages sent via Kofa contact forms are private. They are
164  neither stored in the database nor in any logfile. The emails are
165  also not forwarded to any other email address. Thus senders and
166  recipients can be sure that nobody else is eavesdropping and the
167  correspondence is kept secret.
168
169.. seealso::
170
171  :ref:`Clearance Handling Doctests <test_handle_clearance>`
172
173
174.. _transferring_students:
175
176Student Transfer
177================
178
179Transferring a student means enabling the student to study another
180programme.
181
182The simple but dirty way is to select another certificate and adjust
183study course attributes accordingly. Existing study levels can be
184either removed or, in case registered courses can be credited, left
185as they are. This simple way is tedious and also dangerous, because
186changes are not tracable. Only the logfile can tell us, that an
187officer has edited the student's data. The data of the previous
188study course are not backed up. They are lost.
189
190Kofa provides a more adequate, cleaner and tracable way of
191transferring students. It can make a backup of the entire study
192course container and create a new and empty container for the new
193study programme with only one click or even by batch processing.
194
195After clicking the 'Transfer student' button the
196`StudentTransferFormPage` opens and asks for the new certificate,
197current session, current level and current verdict. After submitting
198this form, the student transfer method checks if the old study
199course is complete and ready for transfer. It also checks if the
200number of possible transfers is not exceeded. Kofa allows two (2)
201transfers! Finally the copying process is started and history and
202logfile messages are added.
203
204The old study course container(s) can still be accessed via links on
205the current study course display form page. But, they can neither be
206edited, removed, exported or reimported.
207
208
209Batch Transferring Students
210---------------------------
211
212Sometimes students of an entire study programme have to be
213transferred to another programme. This can be done with the
214:py:class:`StudentStudyCourseProcessor<waeup.kofa.students.batching.StudentStudyCourseProcessor>`.
215The import file must contain the following columns: `student_id`
216(or any other locator), `certificate`, `current_session`,
217`current_level` and `entry_mode`. Do not import `entry_session`. A
218transfer is automatically initialized if the `entry_mode` value is
219``transfer``.
220
221
222Reverting Previous Transfers
223----------------------------
224
225Previous transfers can be reverted by opening the previous study
226course and clicking the 'Reactivate this study course (revert
227previous transfer)' button. This is a complete rollback of the last
228transfer. The current study mode will be irrevocably deleted and
229replaced by the previous study course. The second last study course
230will become the previous study course.
231
232
233.. _payment_tickets:
234
235Payments
236========
237
238The `PaymentsManageFormPage` is used by both students and students
239officers. The page tabulates existing payment tickets and allows to
240add or remove tickets. Officers can remove all payment tickets,
241students only those without a response code (`r_code`). Attention:
242Students can remove tickets without response code even if they have
243been marked paid.
244
245There are three different add form pages to add
246`StudentOnlinePayment` instances (= payment tickets). They all
247create objects of the same type, only their attributes are set
248differently.
249
250
251Current Session Payment Tickets
252-------------------------------
253
254Current session payments are the regular payments which have to be
255made in each session to proceed to the next registration step. The
256add form provides a select box of available payment categories
257(`p_category`). After submitting the form, Kofa determines the total
258amount and sets attributes like payment item (`p_item`), payment
259session (`p_session`) and payment level (`p_level`) automatically.
260The Boolean `p_current` attribute is set ``True``. The creation
261datetime is stored in the `creation_date` attribute and is also used
262to construct the unique payment id (`p_id`).
263
264.. note::
265
266  Kofa always determines the total amount, including any fees charged
267  by the school and its service providers. This is the amount which is
268  authorized by students and finally submitted to one of the payment
269  gateways. No fees can be added once the payment ticket is created.
270  Payment tickets do not store any information about charged fees.
271
272
273Payment Ticket Redemption
274-------------------------
275
276Directly after a student payment ticket has been paid - either by
277approval by an officer or by receiving a positive response from a
278payment gateway - the
279:py:meth:`redeemTicket<waeup.kofa.students.payments.StudentOnlinePayment.redeemTicket>`
280method is called. Depending on the category of the payment, an
281appropriate access or activation code is beeing created for the
282owner of the ticket. This code must be entered on certain form pages
283to activate the paid service or to access the next stage of the
284registration process. In other words, making a payment and redeeming
285a payment are two different steps. Successful payments do not
286automatically trigger any action in the portal but create a specifc
287access code which can be used to trigger access-code-related actions
288(see :ref:`accesscodes`).
289
290Until May 2015 also school fee payments had produced access codes,
291which enabled students to start the next session. Since software
292revision 12889, Kofa bypasses SFE access code creation and starts
293the next session automatically.
294
295
296Previous Session Payment Tickets
297--------------------------------
298
299Previous session payments are additional payments which do not
300induce further actions in Kofa. Their sole purpose is to enable
301students to pay for services in previous sessions which they missed
302to pay. The add form for previous session payments allows the
303student to select the payment category, session and level by
304him/herself.
305
306
307Balance Payment Tickets
308-----------------------
309
310Balance payments have been introduced to correct previously made
311payments. In some cases, students select the wrong payment category,
312or other things may have happened which led students pay less than
313expected. This can be balanced by paying a differential amount.
314Therefore, the add form for balance payments allows to freely choose
315the total amount to be paid. It also asks for the category, the
316session and the level the payment is meant for. Like previous
317session payments, balance payments do not induce further actions in
318Kofa. Both can be omitted in customized versions of Kofa if these
319features are not needed.
320
321.. _course_registration:
322
323Course Registration
324===================
325
326Study levels are pre-filled with course tickets. When adding a study
327level,
328:py:meth:`StudentStudyCourse.addStudentStudyLevel<waeup.kofa.students.studycourse.StudentStudyCourse.addStudentStudyLevel>`
329automatically adds course tickets in two steps:
330
3311.  :py:meth:`StudentStudyLevel.addCertCourseTickets<waeup.kofa.students.studylevel.StudentStudyLevel.addCertCourseTickets>`
332    is called which iterates over the certificate courses of the
333    certificate container object in the academic section and creates
334    course tickets if the `level` attribute matches. `title`, `fcode`,
335    `dcode`, `credits`, `passmark` and `semester` are copied from the
336    course object which is attached to the certificate course;
337    `mandatory` is taken from the certificate course itself. Finally,
338    `automatic` is set to ``True`` and `carry_over` to ``False.``
339
3402.  The portal can be configured
341    (`IConfigurationContainer.carry_over`) such that failed courses are
342    automatically carried over from one session to the next. Failed
343    course tickets from the previous level, i.e. tickets with a score
344    below the passmark, are collected and 'copied' into the current
345    study level container. The attributes `automatic` and `carry_over`
346    are set to ``True``.
347
348In most cases such an automatically created course list is not
349perfect or even ready for submission to the course adviser. The list
350must be edited according to the student's needs. Students can select
351further courses, which they desire to attend, and can create
352additional course tickets, as long as the total number of credits do
353not exceed 50 (value customizable). Course tickets can also be
354removed. Whereas officers can remove any ticket from the list,
355students can remove only optional (non-mandatory) course tickets
356(condition customizable).
357
358The edit form page provides a 'Register course list' button which
359submits the course list to the course adviser for validation. If the
360course registration deadline
361(`ISessionConfiguration.coursereg_deadline`) is set and the
362registration period has expired, a late registration fee
363(`ISessionConfiguration.late_registration_fee`) is charged. This
364payment has to be made first, otherwise a warning message appears in
365the browser.
366
367Course advisers can't edit the registered/submitted course list, but
368they can validate or reject it by pressing the same-named link
369buttons. After pressing the 'Reject courses' button, Kofa redirects
370to the `ContactStudentFormPage` which can be used to inform the student
371about the reason of rejection. In contrast to clearance rejection,
372the message, which is being sent to the student by email, is neither
373stored in the database nor in the logfiles.
374
375.. seealso::
376
377  :ref:`Course List Validation Doctests <test_handle_courses>`
378
379
380.. _batch_editing_scores:
381
382Batch Editing Scores by Lecturers
383=================================
384
385Lecturers cannot access student records directly. They don't have
386access to the students section. Instead, lecturers go to their course
387in the academic section and view or export lists of students who
388attended the course, either in a previous or in the current session.
389They do also see an 'Update scores' link button which opens the
390`EditScoresPage` if score editing is enabled for that department
391(`IDepartment.score_editing_disabled`) and
392`IConfigurationContainer.current_academic_session` has been set on
393the portal's configuration page. The `EditScoresPage` lists all
394students, who are attending the course in the current academic
395session. Score editing is allowed if the student's current session
396corresponds with the current academic session and the student is in
397state 'courses validated', see method
398:py:meth:`CourseTicket.editable_by_lecturer<waeup.kofa.students.studylevel.CourseTicket.editable_by_lecturer>`.
399
400.. seealso::
401
402  :ref:`Batch Editing Scores Doctests <test_batch_editing_scores>`
403
404
405.. _bed_tickets:
406
407Bed Tickets
408===========
409
410Students can obtain a bed ticket if a series of conditions is met:
411
412- The current date must be inside the booking period (between
413  `IHostelsContainer.startdate` and `IHostelsContainer.enddate`).
414
415- The student's current session must match the accommodation session
416  (`IHostelsContainer.accommodation_session`).
417
418- A bed ticket for the same accommodation session does not exist.
419
420- The student must be in the correct workflow state
421  (`IHostelsContainer.accommodation_states`).
422
423- A bed type, which fits to the student, can be determined.
424
425- A bed of that type is available.
426
427- The HOS activation code is not yet used.
428
429- The student is the owner of the activation code.
430
431The customizable utility method
432:py:meth:`getAccommodationDetails<waeup.kofa.students.utils.StudentsUtils.getAccommodationDetails>`
433composes a bed type string. Three criteria are checked: Is the
434student a new, a returning or a final year student? Is the student
435female or male? Has the student to be accommodated in a special
436hostel (`IHostel.special_handling`)? The resulting bed type string
437contains these information. Example: ``regular_female_fr`` means
438that a bed for a new female student in a regular hostel is wanted.
439If the student record allows to determine such a bed string, Kofa
440starts searching a proper bed space.
441
442Before Kofa searches for a free bed space, which meets the bed type
443criteria above, it checks if a bed space has already been allocated
444manually to the student. If so, then this bed is used, no matter
445whether the bed meets the criteria or not. (Theoretically, a male
446student can be accommodated in a hostel which is reserved for female
447students.) If no manually allocated bed space is found, Kofa
448searches for the right space. If bed booking is subject to a charge,
449Kofa also checks, if the student has entered a valid activation code,
450before delivering the bed coordinates to the student.
451
452
453Relocation
454----------
455
456Officers with `ManageHostels` permission do see a 'Relocate student'
457link button which calls the `BedTicketRelocationView`. This view
458relocates the student if student parameters or the bed type of the
459bed have changed. The `update` method of this view checks first, if
460the student has a 'reserved' bed space. Students in reserved beds
461are never subject to relocation. It checks secondly, if booking has
462been cancelled in the accommodation section but other bed space has
463been manually allocated after cancellation. Then this bed is used,
464no matter whether the bed meets the bed type criteria or not. If
465both checks are negative, Kofa searches for a free bed space, which
466meets the student's bed type criteria. Only if it finds a new and
467free bed space, it starts the relocation process by releasing the
468old bed, booking the new bed and designating the new bed in the bed
469ticket.
470
471.. seealso::
472
473  :ref:`Bed Space Booking Doctests <test_handle_accommodation>`
474
475
476.. _bootstrap: http://getbootstrap.com/
477
478.. _zope schema: http://docs.zope.org/zope.schema
479
480.. _zope formlib: http://bluebream.zope.org/doc/1.0/manual/schema.html#auto-generated-forms-using-the-forms-package
Note: See TracBrowser for help on using the repository browser.