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

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

After careful consideration: plural is more appropriate than singular.

A student section has another meaning: https://en.wikipedia.org/wiki/Student_section

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