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

Last change on this file since 16358 was 15610, checked in by Henrik Bettermann, 5 years ago

Add docs.

File size: 18.7 KB
Line 
1.. _logging_in_as_student:
2
3Impersonate Students
4====================
5
6Officers with
7:py:class:`LoginAsStudent<waeup.kofa.students.permissions.LoginAsStudent>`
8permission do see a 'Login as student' button on student display
9pages which redirects to a page, where a temporary student password
10can be set by clicking a 'Set password now' form button. The
11temporary password is valid for 10 minutes. During this period the
12student can't login. The officer is being redirected to a login page
13which allows to directly login as student with pre-filled temporary
14credentials. The second page is to avoid that officers must remember
15the student credentials, have to logout from their own account and
16manually login as student via the regular login page. After 10
17minutes (default value) the officer is automatically thrown out and
18the student is able to login again (if the officer hasn't changed
19the password). Attention: When logging in as student, the officer
20really impersonates the student. All actions are logged with the
21student id and not with the officer's user id. However, start of
22student impersonation is also logged, so that officers can be
23identified and fraudulent use can be discovered.
24
25
26.. _parents_access:
27
28Parents Access
29==============
30
31Parents may gain access to monitor study progress and view all
32payments made by their children. They won't be able to edit data,
33register courses or make payments. Prerequisite for getting access
34is that they have a valid email address and that this address has
35been entered by the student into the parents' email address field.
36If so, parents can request a password on the
37:py:class:`RequestParentsPasswordPage<waeup.kofa.students.browser.RequestParentsPasswordPage>`.
38The student record will be looked up and temporary login
39credentials will be sent to the parents' email address. If they
40click on the confirmation (mandate) link in this email, the
41temporary password will be activated so that they can login. Access
42will be granted for 10 minutes (default value). Parents don't have
43their own account in Kofa. They are logging into the student's
44account instead. The student's password is inactive during this
45period. After 10 minutes parents are automatically thrown out and
46the student is able to login again with the original password.
47
48
49.. _starting_clearance:
50
51Starting Clearance
52==================
53
54When students start the clearance process, Kofa checks if the
55passport picture has been uploaded and the email address field as
56well as the phone number field filled. If not, students can't
57proceed with clearance.
58
59
60.. _rejecting_clearance:
61
62Rejecting Clearance
63===================
64
65When a clearance officer clicks the 'Save comment and reject
66clearance now' button, the `reject` action method of the
67:py:class:`StudentRejectClearancePage<waeup.kofa.students.browser.StudentRejectClearancePage>`
68is called. This method first checks, in which workflow state the
69student is, and fires a transition accordingly. Then the comment,
70which should explain why the request was requested, is saved twice
71in the `officer_comment` attribute of the student and in
72``students.log``. As soon as the `clear` transition (d) is effected,
73an event handler clears the attribute again. The logfile message is
74permanent and ensures that the original cause of rejection can
75always be reconstructed.
76
77Finally, the method redirects to the `ContactStudentFormPage` and prefills
78the HTML form with the comment previously saved. The clearance
79officer can leave the comment as it is, or can modify the text to
80give more information about the reason of rejection. This comment
81will then be sent to the student by email. This comment is not saved,
82neither in the student object nor in the logfile.
83
84.. important::
85
86  All messages sent via Kofa contact forms are private. They are
87  neither stored in the database nor in any logfile. The emails are
88  also not forwarded to any other email address. Thus senders and
89  recipients can be sure that nobody else is eavesdropping and the
90  correspondence is kept secret.
91
92.. seealso::
93
94  :ref:`Clearance Handling Tests <test_handle_clearance>`
95
96
97.. _transferring_students:
98
99Student Transfer
100================
101
102Transferring a student means enabling the student to study another
103programme.
104
105The simple but dirty way is to select another certificate and adjust
106study course attributes accordingly. Existing study levels can be
107either removed or, in case registered courses can be credited, left
108as they are. This simple way is tedious and also dangerous, because
109changes are not tracable. Only the logfile can tell us, that an
110officer has edited the student's data. The data of the previous
111study course are not backed up. They are lost.
112
113Kofa provides a more adequate, cleaner and tracable way of
114transferring students. It can make a backup of the entire study
115course container and create a new and empty container for the new
116study programme with only one click or even by batch processing.
117
118After clicking the 'Transfer student' button the
119`StudentTransferFormPage` opens and asks for the new certificate,
120current session, current level and current verdict. After submitting
121this form, the student transfer method checks if the old study
122course is complete and ready for transfer. It also checks if the
123number of possible transfers is not exceeded. Kofa allows two (2)
124transfers! Finally the copying process is started and history and
125logfile messages are added.
126
127The old study course container(s) can still be accessed via links on
128the current study course display form page. But, they can neither be
129edited, removed, exported or reimported.
130
131
132Batch Transferring Students
133---------------------------
134
135Sometimes students of an entire study programme have to be
136transferred to another programme. This can be done with the
137:ref:`student_study_course_processor`. The import file must contain
138the following columns: `student_id` (or any other locator),
139`certificate`, `current_session`, `current_level` and `entry_mode`.
140Do not import `entry_session`. A transfer is automatically
141initialized if the `entry_mode` value is ``transfer``.
142
143
144Reverting Previous Transfers
145----------------------------
146
147Previous transfers can be reverted by opening the previous study
148course and clicking the 'Reactivate this study course (revert
149previous transfer)' button. This is a complete rollback of the last
150transfer. The current study mode will be irrevocably deleted and
151replaced by the previous study course. The second last study course
152will become the previous study course.
153
154
155.. _student_payment_tickets:
156
157Payments
158========
159
160The `PaymentsManageFormPage` is used by both students and students
161officers. The page tabulates existing payment tickets and allows to
162add or remove tickets. Officers can remove all payment tickets,
163students only those without a response code (`r_code`). Attention:
164Students can remove tickets without response code even if they have
165been marked paid.
166
167There are three different add form pages to add
168`StudentOnlinePayment` instances (= payment tickets). They all
169create objects of the same type, only their attributes are set
170differently.
171
172
173Current Session Payment Tickets
174-------------------------------
175
176Current session payments are the regular payments which have to be
177made in each session to proceed to the next registration step. The
178add form provides a select box of available payment categories
179(`p_category`). After submitting the form, Kofa determines the total
180amount and sets attributes like payment item (`p_item`), payment
181session (`p_session`) and payment level (`p_level`) automatically.
182The Boolean `p_current` attribute is set ``True``. The creation
183datetime is stored in the `creation_date` attribute and is also used
184to construct the unique payment id (`p_id`).
185
186.. note::
187
188  Kofa always determines the total amount, including any fees charged
189  by the school and its service providers. This is the amount which is
190  authorized by students and finally submitted to one of the payment
191  gateways. No fees can be added once the payment ticket is created.
192  Payment tickets do not store any information about charged fees.
193
194
195Payment Ticket Redemption
196-------------------------
197
198Directly after a student payment ticket has been paid - either by
199approval by an officer or by receiving a positive response from a
200payment gateway - the
201:py:meth:`redeemTicket<waeup.kofa.students.payments.StudentOnlinePayment.redeemTicket>`
202method is called. Depending on the category of the payment, an
203appropriate access or activation code is beeing created for the
204owner of the ticket. This code must be entered on certain form pages
205to activate the paid service or to access the next stage of the
206registration process. In other words, making a payment and redeeming
207a payment are two different steps. Successful payments do not
208automatically trigger any action in the portal but create a specifc
209access code which can be used to trigger access-code-related actions
210(see :ref:`accesscodes`).
211
212Until May 2015 also school fee payments had produced access codes,
213which enabled students to start the next session. Since software
214revision 12889, Kofa bypasses SFE access code creation and starts
215the next session automatically.
216
217
218Previous Session Payment Tickets
219--------------------------------
220
221Previous session payments are additional payments which do not
222induce further actions in Kofa. Their sole purpose is to enable
223students to pay for services in previous sessions which they missed
224to pay. The add form for previous session payments allows the
225student to select the payment category, session and level by
226him/herself.
227
228
229Balance Payment Tickets
230-----------------------
231
232Balance payments have been introduced to correct previously made
233payments. In some cases, students select the wrong payment category,
234or other things may have happened which led students pay less than
235expected. This can be balanced by paying a differential amount.
236Therefore, the add form for balance payments allows to freely choose
237the total amount to be paid. It also asks for the category, the
238session and the level the payment is meant for. Like previous
239session payments, balance payments do not induce further actions in
240Kofa. Both can be omitted in customized versions of Kofa if these
241features are not needed.
242
243.. _course_registration:
244
245Course Registration
246===================
247
248Study levels are pre-filled with course tickets. When adding a study
249level,
250:py:meth:`StudentStudyCourse.addStudentStudyLevel<waeup.kofa.students.studycourse.StudentStudyCourse.addStudentStudyLevel>`
251automatically adds course tickets in two steps:
252
2531.  :py:meth:`StudentStudyLevel.addCertCourseTickets<waeup.kofa.students.studylevel.StudentStudyLevel.addCertCourseTickets>`
254    is called which iterates over the certificate courses of the
255    certificate container object in the academic section and creates
256    course tickets if the `level` attribute matches. `title`, `fcode`,
257    `dcode`, `credits`, `passmark` and `semester` are copied from the
258    course object which is attached to the certificate course;
259    `mandatory` and `course_category` are taken from the certificate
260    course itself. Finally, `automatic` is set to ``True`` and
261    `carry_over` to ``False.``
262
2632. The portal can be configured
264   (`IConfigurationContainer.carry_over`) such that failed courses
265   are automatically carried over from one session to the next.
266   Failed course tickets from the previous level, i.e. tickets
267   with a score below the passmark, are collected and 'copied'
268   into the current study level container. The attributes
269   `automatic` and `carry_over` are set to ``True``.
270
271In most cases such an automatically created course list is not
272perfect or even ready for submission to the course adviser. The list
273must be edited according to the student's needs. Students can select
274further courses, which they desire to attend, and can create
275additional course tickets, as long as the total number of credits of
276non-outstanding courses (`outstanding` attribute is ``True``) do
277not exceed 50 (value customizable). That means outstanding courses
278are not considered as registered courses. Usually they are being
279added by officers.
280
281Course tickets can also be removed. Whereas officers can remove any
282ticket from the list, students can remove only optional
283(non-mandatory) course tickets (condition customizable).
284
285The edit form page provides two additional buttons. 'Update all
286tickets' ignores the select boxes and checks all course ticket at
287that level. It looks up the associated course object for each ticket
288and updates the ticket's course parameters (including course title)
289if needed. Attention: If a course was removed, the associated
290course ticket will be invalidated by adding '(course cancelled)' to
291the title and setting the credits to zero. The 'Register course
292list' button submits the course list to the course adviser for
293validation. If the course registration deadline
294(`ISessionConfiguration.coursereg_deadline`) is set and the
295registration period has expired, a late registration fee
296(`ISessionConfiguration.late_registration_fee`) is charged. This
297payment has to be made first, otherwise a warning message appears in
298the browser.
299
300Course advisers can't edit the registered/submitted course list, but
301they can validate or reject it by pressing the same-named link
302buttons. After pressing the 'Reject courses' button, Kofa redirects
303to the `ContactStudentFormPage` which can be used to inform the
304student about the reason of rejection. In contrast to clearance
305rejection, the message, which is being sent to the student by email,
306is neither stored in the database nor in the logfiles.
307
308.. seealso::
309
310  :ref:`Course List Validation Tests <test_handle_courses>`
311
312
313.. _batch_editing_scores:
314
315Batch Editing Scores by Lecturers
316=================================
317
318Lecturers cannot access student records directly. They don't have
319access to the students section. Instead, lecturers go to their
320course in the academic section and click the 'Update scores' button
321which opens the `EditScoresPage` if score editing is enabled for
322that department (`IDepartment.score_editing_disabled`) and
323`IConfigurationContainer.current_academic_session` has been set on
324the portal's configuration page. The `EditScoresPage` lists all
325students, who are attending the course in the current academic
326session. Score editing is allowed if the student's current session
327corresponds with the current academic session and the student is in
328state 'courses validated', see method
329:py:meth:`CourseTicket.editable_by_lecturer<waeup.kofa.students.studylevel.CourseTicket.editable_by_lecturer>`.
330
331There are two options to edit course results. (1) Scores in course
332tickets can be changed by editing its values in the table and
333pressing the 'Update scores from table' button below. Scores can be
334cleared by removing the respective values. Lecturers have to be
335online during this process. (2) Alternatively, lecturers can download
336a csv file, edit scores in this csv file offline and upload the same
337file when they are online again. This procedure is explained in
338step-by-step instructions which show up when pressing the yellow
339'Help' button:
340
341.. admonition:: Help
342
343  **Step-by-step instructions**
344
345  1. Download csv file.
346  2. Open csv file in a text editor or in a spreadsheet programme
347     (Excel or Calc).
348  3. Edit course results only. Do not modify other entries.
349     Do not remove or add columns. Do not add rows.
350  4. Save file in same format (csv). Do not switch to any other
351     format (xls, xlsx or ods).
352  5. Select same file for upload and press the blue 'Update ...'
353     button.
354  6. The values in the table will be updated. Spot-check if the
355     values in the table correspond with the values in your file.
356
357  Note: Only course results of students which are in state
358  'courses validated' and in current academic session can be modified.
359  Additional data will just be ignored.
360
361.. seealso::
362
363  :ref:`Batch Editing Scores Tests <test_batch_editing_scores>`
364
365
366.. _bed_tickets:
367
368Bed Tickets
369===========
370
371.. _bed_allocation:
372
373Bed Allocation
374--------------
375
376Students can obtain a bed ticket if a series of conditions is met:
377
378- The current date must be inside the booking period (between
379  `IHostelsContainer.startdate` and `IHostelsContainer.enddate`).
380
381- The student's current session must match the accommodation session
382  (`IHostelsContainer.accommodation_session`).
383
384- A bed ticket for the same accommodation session does not exist.
385
386- The student must be in the correct workflow state
387  (`IHostelsContainer.accommodation_states`).
388
389- A bed type, which fits to the student, can be determined.
390
391- A bed of that type is available.
392
393- The HOS activation code is not yet used.
394
395- The student is the owner of the activation code.
396
397The customizable utility method
398:py:meth:`getAccommodationDetails<waeup.kofa.students.utils.StudentsUtils.getAccommodationDetails>`
399composes a bed type string. Three criteria are checked: Is the
400student a new, a returning or a final year student? Is the student
401female or male? Has the student to be accommodated in a special
402hostel (`IHostel.special_handling`)? The resulting bed type string
403contains these information. Example: ``regular_female_fr`` means
404that a bed for a new female student in a regular hostel is wanted.
405If the student record allows to determine such a bed string, Kofa
406starts searching a proper bed space.
407
408Before Kofa searches for a free bed space, which meets the bed type
409criteria above, it checks if a bed space has already been allocated
410manually to the student. If so, then this bed is used, no matter
411whether the bed meets the criteria or not. (Theoretically, a male
412student can be accommodated in a hostel which is reserved for female
413students.) If no manually allocated bed space is found, Kofa
414searches for the right space. If bed booking is subject to a charge,
415Kofa also checks, if the student has entered a valid activation code,
416before delivering the bed coordinates to the student.
417
418
419.. _student_relocation:
420
421Student Relocation
422------------------
423
424Officers with `ManageHostels` permission do see a 'Relocate student'
425link button which calls the `BedTicketRelocationView`. This view
426relocates the student if student parameters or the bed type of the
427bed have changed. The `update` method of this view calls the
428:py:meth:`BedTicket.relocateStudent<waeup.kofa.students.accommodation.BedTicket.relocateStudent>`
429method which checks first, if the student has a 'reserved' bed
430space. Students in reserved beds are never subject to relocation. It
431checks secondly, if booking has been cancelled in the accommodation
432section but other bed space has been manually allocated after
433cancellation. Then this bed is used, no matter whether the bed meets
434the bed type criteria or not. If both checks are negative, Kofa
435searches for a free bed space, which meets the student's bed type
436criteria. Only if it finds a new and free bed space, it starts the
437relocation process by releasing the old bed, booking the new bed and
438designating the new bed in the bed ticket.
439
440.. seealso::
441
442  :ref:`Bed Space Booking Tests <test_handle_accommodation>`
Note: See TracBrowser for help on using the repository browser.