source: main/waeup.kofa/branches/henrik-transcript-workflow/docs/source/userdocs/students/browser.rst @ 17238

Last change on this file since 17238 was 14684, checked in by Henrik Bettermann, 8 years ago

Add 'Update all tickets' button to StudyLevelEditFormPage?.

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