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