- Timestamp:
- 10 Sep 2012, 11:05:07 (12 years ago)
- Location:
- main/waeup.kofa/branches/uli-async-update
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/branches/uli-async-update
- Property svn:mergeinfo changed
-
main/waeup.kofa/branches/uli-async-update/src/waeup/kofa/students/browser.py
r9166 r9169 43 43 from waeup.kofa.interfaces import ( 44 44 IKofaObject, IUserAccount, IExtFileStore, IPasswordValidator, IContactForm, 45 IKofaUtils, IUniversity )45 IKofaUtils, IUniversity, IObjectHistory) 46 46 from waeup.kofa.interfaces import MessageFactory as _ 47 47 from waeup.kofa.widgets.datewidget import ( … … 53 53 IUGStudentClearance,IPGStudentClearance, 54 54 IStudentPersonal, IStudentBase, IStudentStudyCourse, 55 IStudentStudyCourseTransfer, 55 56 IStudentAccommodation, IStudentStudyLevel, 56 57 ICourseTicket, ICourseTicketAdd, IStudentPaymentsContainer, 57 IStudentOnlinePayment, IBedTicket, IStudentsUtils, IStudentRequestPW 58 IStudentOnlinePayment, IStudentPreviousPayment, 59 IBedTicket, IStudentsUtils, IStudentRequestPW 58 60 ) 59 61 from waeup.kofa.students.catalog import search 60 62 from waeup.kofa.students.workflow import (CREATED, ADMITTED, PAID, 61 CLEARANCE, REQUESTED, RETURNING, CLEARED, REGISTERED, VALIDATED) 63 CLEARANCE, REQUESTED, RETURNING, CLEARED, REGISTERED, VALIDATED, 64 FORBIDDEN_POSTGRAD_TRANS) 62 65 from waeup.kofa.students.studylevel import StudentStudyLevel, CourseTicket 63 66 from waeup.kofa.students.vocabularies import StudyLevelSource … … 65 68 from waeup.kofa.hostels.hostel import NOT_OCCUPIED 66 69 from waeup.kofa.utils.helpers import get_current_principal, to_timezone 70 from waeup.kofa.mandates.mandate import PasswordMandate 67 71 68 72 grok.context(IKofaObject) # Make IKofaObject the default context … … 91 95 return 92 96 97 def translated_values(view): 98 lang = view.request.cookies.get('kofa.language') 99 for value in view.context.values(): 100 value_dict = dict([i for i in value.__dict__.items()]) 101 value_dict['mandatory_bool'] = value.mandatory 102 value_dict['mandatory'] = translate(str(value.mandatory), 'zope', 103 target_language=lang) 104 value_dict['carry_over'] = translate(str(value.carry_over), 'zope', 105 target_language=lang) 106 value_dict['automatic'] = translate(str(value.automatic), 'zope', 107 target_language=lang) 108 yield value_dict 109 93 110 class StudentsBreadcrumb(Breadcrumb): 94 111 """A breadcrumb for the students container. … … 116 133 """ 117 134 grok.context(IStudentStudyCourse) 118 title = _('Study Course') 135 136 def title(self): 137 if self.context.is_current: 138 return _('Study Course') 139 else: 140 return _('Previous Study Course') 119 141 120 142 class PaymentsBreadcrumb(Breadcrumb): … … 279 301 grok.require('waeup.viewStudent') 280 302 grok.template('basepage') 281 form_fields = grok.AutoFields(IStudentBase).omit('password' )303 form_fields = grok.AutoFields(IStudentBase).omit('password', 'suspended') 282 304 pnav = 4 283 305 284 306 @property 285 307 def label(self): 286 return _('${a}: Base Data', 308 if self.context.suspended: 309 return _('${a}: Base Data (account deactivated)', 310 mapping = {'a':self.context.display_fullname}) 311 return _('${a}: Base Data', 287 312 mapping = {'a':self.context.display_fullname}) 288 313 … … 292 317 return _('set') 293 318 return _('unset') 319 320 class StudentBasePDFFormPage(KofaDisplayFormPage): 321 """ Page to display student base data in pdf files. 322 """ 323 form_fields = grok.AutoFields(IStudentBase).omit( 324 'password', 'suspended', 'phone', 'adm_code', 'sex') 294 325 295 326 class ContactStudentForm(ContactAdminForm): … … 336 367 grok.name('manage_base') 337 368 grok.require('waeup.manageStudent') 338 form_fields = grok.AutoFields(IStudentBase).omit('student_id') 369 form_fields = grok.AutoFields(IStudentBase).omit( 370 'student_id', 'adm_code', 'suspended') 339 371 grok.template('basemanagepage') 340 372 label = _('Manage base data') … … 362 394 allowed_transitions = [t for t in self.wf_info.getManualTransitions() 363 395 if not t[0].startswith('pay')] 396 if self.context.is_postgrad: 397 allowed_transitions = [t for t in allowed_transitions 398 if not t[0] in FORBIDDEN_POSTGRAD_TRANS] 364 399 return [dict(name='', title=_('No transition'))] +[ 365 400 dict(name=x, title=y) for x, y in allowed_transitions] … … 396 431 return 397 432 433 class StudentActivatePage(UtilityView, grok.View): 434 """ Activate student account 435 """ 436 grok.context(IStudent) 437 grok.name('activate') 438 grok.require('waeup.manageStudent') 439 440 def update(self): 441 self.context.suspended = False 442 self.context.writeLogMessage(self, 'account activated') 443 history = IObjectHistory(self.context) 444 history.addMessage('Student account activated') 445 self.flash(_('Student account has been activated.')) 446 self.redirect(self.url(self.context)) 447 return 448 449 def render(self): 450 return 451 452 class StudentDeactivatePage(UtilityView, grok.View): 453 """ Deactivate student account 454 """ 455 grok.context(IStudent) 456 grok.name('deactivate') 457 grok.require('waeup.manageStudent') 458 459 def update(self): 460 self.context.suspended = True 461 self.context.writeLogMessage(self, 'account deactivated') 462 history = IObjectHistory(self.context) 463 history.addMessage('Student account deactivated') 464 self.flash(_('Student account has been deactivated.')) 465 self.redirect(self.url(self.context)) 466 return 467 468 def render(self): 469 return 470 398 471 class StudentClearanceDisplayFormPage(KofaDisplayFormPage): 399 472 """ Page to display student clearance data … … 411 484 def form_fields(self): 412 485 if self.context.is_postgrad: 413 form_fields = grok.AutoFields(IPGStudentClearance).omit('clearance_locked') 414 else: 415 form_fields = grok.AutoFields(IUGStudentClearance).omit('clearance_locked') 486 form_fields = grok.AutoFields( 487 IPGStudentClearance).omit('clearance_locked') 488 else: 489 form_fields = grok.AutoFields( 490 IUGStudentClearance).omit('clearance_locked') 416 491 return form_fields 417 492 … … 432 507 def form_fields(self): 433 508 if self.context.is_postgrad: 434 form_fields = grok.AutoFields(IPGStudentClearance).omit('clearance_locked') 435 else: 436 form_fields = grok.AutoFields(IUGStudentClearance).omit('clearance_locked') 509 form_fields = grok.AutoFields( 510 IPGStudentClearance).omit('clearance_locked') 511 else: 512 form_fields = grok.AutoFields( 513 IUGStudentClearance).omit('clearance_locked') 437 514 return form_fields 438 515 … … 446 523 def label(self): 447 524 portal_language = getUtility(IKofaUtils).PORTAL_LANGUAGE 448 return translate(_('Clearance Slip of 525 return translate(_('Clearance Slip of'), 449 526 'waeup.kofa', target_language=portal_language) \ 450 527 + ' %s' % self.context.display_fullname 451 528 529 def _signatures(self): 530 if self.context.state == CLEARED: 531 return (_('Student Signature'), _('Clearance Officer Signature')) 532 return 533 452 534 def render(self): 453 studentview = StudentBase DisplayFormPage(self.context.student,535 studentview = StudentBasePDFFormPage(self.context.student, 454 536 self.request) 455 537 students_utils = getUtility(IStudentsUtils) 456 538 return students_utils.renderPDF( 457 539 self, 'clearance.pdf', 458 self.context.student, studentview )540 self.context.student, studentview, signatures=self._signatures()) 459 541 460 542 class StudentClearanceManageFormPage(KofaEditFormPage): … … 475 557 def form_fields(self): 476 558 if self.context.is_postgrad: 477 form_fields = grok.AutoFields(IPGStudentClearance) 478 else: 479 form_fields = grok.AutoFields(IUGStudentClearance) 559 form_fields = grok.AutoFields(IPGStudentClearance).omit('clr_code') 560 else: 561 form_fields = grok.AutoFields(IUGStudentClearance).omit('clr_code') 480 562 return form_fields 481 563 … … 557 639 mapping = {'a':self.context.display_fullname}) 558 640 559 class StudentPersonal EditFormPage(KofaEditFormPage):560 """ Page to editpersonal data641 class StudentPersonalManageFormPage(KofaEditFormPage): 642 """ Page to manage personal data 561 643 """ 562 644 grok.context(IStudent) 563 grok.name(' edit_personal')564 grok.require('waeup. handleStudent')645 grok.name('manage_personal') 646 grok.require('waeup.manageStudent') 565 647 form_fields = grok.AutoFields(IStudentPersonal) 566 label = _(' Editpersonal data')648 label = _('Manage personal data') 567 649 pnav = 4 568 650 … … 572 654 return 573 655 656 class StudentPersonalEditFormPage(StudentPersonalManageFormPage): 657 """ Page to edit personal data 658 """ 659 grok.name('edit_personal') 660 grok.require('waeup.handleStudent') 661 label = _('Edit personal data') 662 pnav = 4 663 574 664 class StudyCourseDisplayFormPage(KofaDisplayFormPage): 575 665 """ Page to display the student study course data … … 578 668 grok.name('index') 579 669 grok.require('waeup.viewStudent') 580 form_fields = grok.AutoFields(IStudentStudyCourse)581 670 grok.template('studycoursepage') 582 671 pnav = 4 583 672 584 673 @property 674 def form_fields(self): 675 if self.context.is_postgrad: 676 form_fields = grok.AutoFields(IStudentStudyCourse).omit( 677 'current_verdict', 'previous_verdict') 678 else: 679 form_fields = grok.AutoFields(IStudentStudyCourse) 680 return form_fields 681 682 @property 585 683 def label(self): 586 return _('${a}: Study Course', 587 mapping = {'a':self.context.__parent__.display_fullname}) 684 if self.context.is_current: 685 return _('${a}: Study Course', 686 mapping = {'a':self.context.__parent__.display_fullname}) 687 else: 688 return _('${a}: Previous Study Course', 689 mapping = {'a':self.context.__parent__.display_fullname}) 588 690 589 691 @property … … 606 708 return 607 709 710 @property 711 def prev_studycourses(self): 712 if self.context.is_current: 713 if self.context.__parent__.get('studycourse_2', None) is not None: 714 return ( 715 {'href':self.url(self.context.student) + '/studycourse_1', 716 'title':_('First Study Course, ')}, 717 {'href':self.url(self.context.student) + '/studycourse_2', 718 'title':_('Second Study Course')} 719 ) 720 if self.context.__parent__.get('studycourse_1', None) is not None: 721 return ( 722 {'href':self.url(self.context.student) + '/studycourse_1', 723 'title':_('First Study Course')}, 724 ) 725 return 726 608 727 class StudyCourseManageFormPage(KofaEditFormPage): 609 728 """ Page to edit the student study course data … … 613 732 grok.require('waeup.manageStudent') 614 733 grok.template('studycoursemanagepage') 615 form_fields = grok.AutoFields(IStudentStudyCourse)616 734 label = _('Manage study course') 617 735 pnav = 4 … … 620 738 tabthreeactions = [_('Add study level')] 621 739 740 @property 741 def form_fields(self): 742 if self.context.is_postgrad: 743 form_fields = grok.AutoFields(IStudentStudyCourse).omit( 744 'current_verdict', 'previous_verdict') 745 else: 746 form_fields = grok.AutoFields(IStudentStudyCourse) 747 return form_fields 748 622 749 def update(self): 750 if not self.context.is_current: 751 emit_lock_message(self) 752 return 623 753 super(StudyCourseManageFormPage, self).update() 624 754 tabs.need() … … 685 815 return 686 816 817 class StudentTransferFormPage(KofaAddFormPage): 818 """Page to transfer the student. 819 """ 820 grok.context(IStudent) 821 grok.name('transfer') 822 grok.require('waeup.manageStudent') 823 label = _('Transfer student') 824 form_fields = grok.AutoFields(IStudentStudyCourseTransfer).omit( 825 'entry_mode', 'entry_session') 826 pnav = 4 827 828 def update(self): 829 super(StudentTransferFormPage, self).update() 830 warning.need() 831 return 832 833 @jsaction(_('Transfer')) 834 def transferStudent(self, **data): 835 error = self.context.transfer(**data) 836 if error == -1: 837 self.flash(_('Current level does not match certificate levels.')) 838 elif error == -2: 839 self.flash(_('Former study course record incomplete.')) 840 elif error == -3: 841 self.flash(_('Maximum number of transfers exceeded.')) 842 else: 843 self.flash(_('Successfully transferred.')) 844 return 845 687 846 class StudyLevelDisplayFormPage(KofaDisplayFormPage): 688 847 """ Page to display student study levels … … 692 851 grok.require('waeup.viewStudent') 693 852 form_fields = grok.AutoFields(IStudentStudyLevel) 853 form_fields[ 854 'validation_date'].custom_widget = FriendlyDatetimeDisplayWidget('le') 694 855 grok.template('studylevelpage') 695 856 pnav = 4 … … 702 863 @property 703 864 def translated_values(self): 704 lang = self.request.cookies.get('kofa.language') 705 for value in self.context.values(): 706 value_dict = dict([i for i in value.__dict__.items()]) 707 value_dict['mandatory'] = translate(str(value.mandatory), 'zope', 708 target_language=lang) 709 value_dict['carry_over'] = translate(str(value.carry_over), 'zope', 710 target_language=lang) 711 value_dict['automatic'] = translate(str(value.automatic), 'zope', 712 target_language=lang) 713 yield value_dict 865 return translated_values(self) 714 866 715 867 @property … … 771 923 Mand = translate(_('Mand.'), 'waeup.kofa', target_language=portal_language) 772 924 Score = translate(_('Score'), 'waeup.kofa', target_language=portal_language) 773 studentview = StudentBase DisplayFormPage(self.context.student,925 studentview = StudentBasePDFFormPage(self.context.student, 774 926 self.request) 775 927 students_utils = getUtility(IStudentsUtils) … … 796 948 grok.require('waeup.manageStudent') 797 949 grok.template('studylevelmanagepage') 798 form_fields = grok.AutoFields(IStudentStudyLevel) 950 form_fields = grok.AutoFields(IStudentStudyLevel).omit( 951 'validation_date', 'validated_by') 799 952 pnav = 4 800 953 taboneactions = [_('Save'),_('Cancel')] … … 803 956 804 957 def update(self): 958 if not self.context.__parent__.is_current: 959 emit_lock_message(self) 960 return 805 961 super(StudyLevelManageFormPage, self).update() 806 962 tabs.need() … … 813 969 datatable.need() 814 970 return 971 972 @property 973 def translated_values(self): 974 return translated_values(self) 815 975 816 976 @property … … 861 1021 862 1022 def update(self): 1023 if not self.context.__parent__.is_current: 1024 emit_lock_message(self) 1025 return 863 1026 if str(self.context.__parent__.current_level) != self.context.__name__: 864 1027 self.flash(_('This level does not correspond current level.')) … … 883 1046 884 1047 def update(self): 1048 if not self.context.__parent__.is_current: 1049 emit_lock_message(self) 1050 return 885 1051 if str(self.context.__parent__.current_level) != self.context.__name__: 886 1052 self.flash(_('This level does not correspond current level.')) … … 918 1084 pnav = 4 919 1085 1086 def update(self): 1087 if not self.context.__parent__.is_current: 1088 emit_lock_message(self) 1089 return 1090 super(CourseTicketAddFormPage, self).update() 1091 return 1092 920 1093 @action(_('Add course ticket')) 921 1094 def addCourseTicket(self, **data): … … 924 1097 ticket.automatic = False 925 1098 ticket.carry_over = False 926 ticket.code = course.code927 ticket.title = course.title928 ticket.fcode = course.__parent__.__parent__.__parent__.code929 ticket.dcode = course.__parent__.__parent__.code930 ticket.credits = course.credits931 ticket.passmark = course.passmark932 ticket.semester = course.semester933 1099 try: 934 self.context.addCourseTicket(ticket )1100 self.context.addCourseTicket(ticket, course) 935 1101 except KeyError: 936 1102 self.flash(_('The ticket exists.')) … … 1030 1196 mapping = {'a': ', '.join(deleted)})) 1031 1197 self.context.writeLogMessage( 1032 self,'removed: % 1198 self,'removed: %s' % ', '.join(deleted)) 1033 1199 self.redirect(self.url(self.context)) 1034 1200 return … … 1052 1218 def createTicket(self, **data): 1053 1219 p_category = data['p_category'] 1220 previous_session = data.get('p_session', None) 1221 previous_level = data.get('p_level', None) 1054 1222 student = self.context.__parent__ 1055 1223 if p_category == 'bed_allocation' and student[ … … 1062 1230 return 1063 1231 students_utils = getUtility(IStudentsUtils) 1064 error, payment = students_utils.setPaymentDetails(p_category, student) 1232 error, payment = students_utils.setPaymentDetails( 1233 p_category, student, previous_session, previous_level) 1065 1234 if error is not None: 1066 1235 self.flash(error) 1236 if 'Would you like' in error: 1237 self.redirect(self.url(self.context) + '/@@addpp') 1238 return 1067 1239 self.redirect(self.url(self.context)) 1068 1240 return … … 1071 1243 self.redirect(self.url(self.context)) 1072 1244 return 1245 1246 class PreviousPaymentAddFormPage(OnlinePaymentAddFormPage): 1247 """ Page to add an online payment ticket for previous sessions 1248 """ 1249 grok.context(IStudentPaymentsContainer) 1250 grok.name('addpp') 1251 grok.require('waeup.payStudent') 1252 form_fields = grok.AutoFields(IStudentPreviousPayment).select( 1253 'p_category', 'p_session', 'p_level') 1254 label = _('Add previous session online payment') 1255 pnav = 4 1073 1256 1074 1257 class OnlinePaymentDisplayFormPage(KofaDisplayFormPage): … … 1149 1332 # self.redirect(self.url(self.context)) 1150 1333 # return 1151 studentview = StudentBase DisplayFormPage(self.context.student,1334 studentview = StudentBasePDFFormPage(self.context.student, 1152 1335 self.request) 1153 1336 students_utils = getUtility(IStudentsUtils) … … 1369 1552 1370 1553 def render(self): 1371 studentview = StudentBase DisplayFormPage(self.context.student,1554 studentview = StudentBasePDFFormPage(self.context.student, 1372 1555 self.request) 1373 1556 students_utils = getUtility(IStudentsUtils) … … 1569 1752 self.flash(_('Activation code is invalid.')) 1570 1753 return 1754 if code.state == USED: 1755 self.flash(_('Activation code has already been used.')) 1756 return 1571 1757 # Mark pin as used (this also fires a pin related transition) 1572 1758 # and fire transition start_clearance 1573 if code.state == USED: 1574 self.flash(_('Activation code has already been used.')) 1575 return 1576 else: 1577 comment = _(u"invalidated") 1578 # Here we know that the ac is in state initialized so we do not 1579 # expect an exception, but the owner might be different 1580 if not invalidate_accesscode(pin,comment,self.context.student_id): 1581 self.flash(_('You are not the owner of this access code.')) 1582 return 1583 self.context.clr_code = pin 1759 comment = _(u"invalidated") 1760 # Here we know that the ac is in state initialized so we do not 1761 # expect an exception, but the owner might be different 1762 if not invalidate_accesscode(pin, comment, self.context.student_id): 1763 self.flash(_('You are not the owner of this access code.')) 1764 return 1765 self.context.clr_code = pin 1584 1766 IWorkflowInfo(self.context).fireTransition('start_clearance') 1585 1767 self.flash(_('Clearance process has been started.')) … … 1598 1780 def form_fields(self): 1599 1781 if self.context.is_postgrad: 1600 form_fields = grok.AutoFields(IPGStudentClearance).omit('clearance_locked') 1601 else: 1602 form_fields = grok.AutoFields(IUGStudentClearance).omit('clearance_locked') 1782 form_fields = grok.AutoFields(IPGStudentClearance).omit( 1783 'clearance_locked', 'clr_code') 1784 else: 1785 form_fields = grok.AutoFields(IUGStudentClearance).omit( 1786 'clearance_locked', 'clr_code') 1603 1787 return form_fields 1604 1788 … … 1627 1811 return 1628 1812 self.flash(_('Clearance form has been saved.')) 1629 self.redirect(self.url(self.context,'request_clearance')) 1813 if self.context.clr_code: 1814 self.redirect(self.url(self.context, 'request_clearance')) 1815 else: 1816 # We bypass the request_clearance page if student 1817 # has been imported in state 'clearance started' and 1818 # no clr_code was entered before. 1819 state = IWorkflowState(self.context).getState() 1820 if state != CLEARANCE: 1821 # This shouldn't happen, but the application officer 1822 # might have forgotten to lock the form after changing the state 1823 self.flash(_('This form cannot be submitted. Wrong state!')) 1824 return 1825 IWorkflowInfo(self.context).fireTransition('request_clearance') 1826 self.flash(_('Clearance has been requested.')) 1827 self.redirect(self.url(self.context)) 1630 1828 return 1631 1829 … … 1647 1845 return 1648 1846 pin = '%s-%s-%s' % (self.ac_prefix, self.ac_series, self.ac_number) 1649 if self.context.clr_code != pin:1847 if self.context.clr_code and self.context.clr_code != pin: 1650 1848 self.flash(_("This isn't your CLR access code.")) 1651 1849 return 1652 1850 state = IWorkflowState(self.context).getState() 1653 # This shouldn't happen, but the application officer1654 # might have forgotten to lock the form after changing the state1655 1851 if state != CLEARANCE: 1852 # This shouldn't happen, but the application officer 1853 # might have forgotten to lock the form after changing the state 1656 1854 self.flash(_('This form cannot be submitted. Wrong state!')) 1657 1855 return … … 1673 1871 1674 1872 def update(self, SUBMIT=None): 1873 if not self.context.is_current: 1874 emit_lock_message(self) 1875 return 1876 super(StartSessionPage, self).update() 1675 1877 if not self.context.next_session_allowed: 1676 1878 self.flash(_("You are not entitled to start session.")) … … 1730 1932 1731 1933 def update(self): 1934 if not self.context.is_current: 1935 emit_lock_message(self) 1936 return 1732 1937 if self.context.student.state != PAID: 1733 1938 emit_lock_message(self) … … 1762 1967 1763 1968 def update(self): 1969 if not self.context.__parent__.is_current: 1970 emit_lock_message(self) 1971 return 1764 1972 if self.context.student.state != PAID: 1765 1973 emit_lock_message(self) … … 1776 1984 level_title = translate(self.context.level_title, 'waeup.kofa', 1777 1985 target_language=lang) 1778 return _(' Add and remove course tickets of study level${a}',1986 return _('Edit course list of ${a}', 1779 1987 mapping = {'a':level_title}) 1780 1988 … … 1785 1993 total_credits += val.credits 1786 1994 return total_credits 1995 1996 @property 1997 def translated_values(self): 1998 return translated_values(self) 1787 1999 1788 2000 @action(_('Add course ticket')) … … 1847 2059 ticket = createObject(u'waeup.CourseTicket') 1848 2060 course = data['course'] 1849 for name in ['code', 'title', 'credits', 'passmark', 'semester']:1850 setattr(ticket, name, getattr(course, name))1851 2061 ticket.automatic = False 2062 ticket.carry_over = False 1852 2063 try: 1853 self.context.addCourseTicket(ticket )2064 self.context.addCourseTicket(ticket, course) 1854 2065 except KeyError: 1855 2066 self.flash(_('The ticket exists.')) … … 1927 2138 grok.template('requestpw') 1928 2139 form_fields = grok.AutoFields(IStudentRequestPW).select( 1929 'firstname',' reg_number','email')2140 'firstname','number','email') 1930 2141 label = _('Request password for first-time login') 1931 2142 … … 1948 2159 return True 1949 2160 1950 @action(_(' Get login credentials'), style='primary')2161 @action(_('Send login credentials to email address'), style='primary') 1951 2162 def get_credentials(self, **data): 1952 2163 if not self.captcha_result.is_valid: … … 1954 2165 # No need to flash something. 1955 2166 return 1956 reg_number = data.get('reg_number','')2167 number = data.get('number','') 1957 2168 firstname = data.get('firstname','') 1958 2169 cat = getUtility(ICatalog, name='students_catalog') 1959 2170 results = list( 1960 cat.searchResults(reg_number=(reg_number, reg_number))) 2171 cat.searchResults(reg_number=(number, number))) 2172 if not results: 2173 results = list( 2174 cat.searchResults(matric_number=(number, number))) 1961 2175 if results: 1962 2176 student = results[0] … … 1984 2198 kofa_utils = getUtility(IKofaUtils) 1985 2199 password = kofa_utils.genPassword() 1986 IUserAccount(student).setPassword(password) 2200 mandate = PasswordMandate() 2201 mandate.params['password'] = password 2202 mandate.params['user'] = student 2203 site = grok.getSite() 2204 site['mandates'].addMandate(mandate) 1987 2205 # Send email with credentials 1988 login_url = self.url(grok.getSite(), 'login') 2206 args = {'mandate_id':mandate.mandate_id} 2207 mandate_url = self.url(site) + '/mandate?%s' % urlencode(args) 2208 url_info = u'Confirmation link: %s' % mandate_url 1989 2209 msg = _('You have successfully requested a password for the') 1990 2210 if kofa_utils.sendCredentials(IUserAccount(student), 1991 password, login_url, msg):2211 password, url_info, msg): 1992 2212 email_sent = student.email 1993 2213 else: … … 1995 2215 self._redirect(email=email_sent, password=password, 1996 2216 student_id=student.student_id) 2217 ob_class = self.__implemented__.__name__.replace('waeup.kofa.','') 2218 self.context.logger.info( 2219 '%s - %s (%s) - %s' % (ob_class, number, student.student_id, email_sent)) 1997 2220 return 1998 2221
Note: See TracChangeset for help on using the changeset viewer.