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

Last change on this file since 13051 was 13048, checked in by Henrik Bettermann, 10 years ago

Insert line breaks.

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