- Timestamp:
- 21 Sep 2012, 08:19:35 (12 years ago)
- Location:
- main/waeup.kofa/branches/uli-zc-async
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
main/waeup.kofa/branches/uli-zc-async
- Property svn:mergeinfo changed
/main/waeup.kofa/branches/uli-async-update removed /main/waeup.kofa/branches/uli-autoinclude-less removed /main/waeup.kofa/trunk removed
- Property svn:mergeinfo changed
-
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/applicant.py
r9209 r9211 27 27 from zope.securitypolicy.interfaces import IPrincipalRoleManager 28 28 from zope.interface import implementedBy 29 from zope.schema.interfaces import RequiredMissing , ConstraintNotSatisfied29 from zope.schema.interfaces import RequiredMissing 30 30 from hurry.workflow.interfaces import IWorkflowInfo, IWorkflowState 31 31 from waeup.kofa.image import KofaImageFile … … 36 36 from waeup.kofa.interfaces import MessageFactory as _ 37 37 from waeup.kofa.students.vocabularies import RegNumNotInSource 38 from waeup.kofa.students.studycourse import StudentStudyCourse39 38 from waeup.kofa.utils.helpers import attrs_to_fields 40 39 from waeup.kofa.applicants.interfaces import IApplicant, IApplicantEdit … … 119 118 if self.course_admitted is None: 120 119 return False, _('No course admitted provided.') 121 # Set student attributes120 # Add student object 122 121 try: 123 122 for name in self.create_names: 124 123 setattr(student, name, getattr(self, name, None)) 125 124 except RequiredMissing, err: 126 return False, 'RequiredMissing: %s' % err 127 except: 128 return False, 'Error: %s' % err 129 # Finally prove if the certificate still exists 130 try: 131 StudentStudyCourse().certificate = self.course_admitted 132 except ConstraintNotSatisfied, err: 133 return False, 'ConstraintNotSatisfied: %s' % self.course_admitted.code 134 # Add student 125 return False, _('RequiredMissing: %s' % err) 135 126 site = grok.getSite() 136 127 site['students'].addStudent(student) 137 # Save student_id138 128 self.student_id = student.student_id 139 # Fire transitions140 129 IWorkflowInfo(self).fireTransition('create') 141 130 IWorkflowInfo(student).fireTransition('admit') 131 142 132 # Set password 143 133 IUserAccount(student).setPassword(self.application_number) 134 144 135 # Save the certificate and set session attributes 145 136 student['studycourse'].certificate = self.course_admitted … … 151 142 # Update the catalog 152 143 notify(grok.ObjectModifiedEvent(student)) 144 153 145 # Save application slip 154 146 self._createApplicationPDF(student, view=view) -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/batching.py
r9209 r9211 40 40 grok.provides(IBatchProcessor) 41 41 grok.context(Interface) 42 util_name = 'applicants containerprocessor'42 util_name = 'applicants container processor' 43 43 grok.name(util_name) 44 44 -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/browser.py
r9209 r9211 309 309 pnav = 3 310 310 311 @property 312 def form_fields(self): 313 form_fields = grok.AutoFields(IApplicantsContainer).omit('title') 314 form_fields['description'].custom_widget = HTMLDisplayWidget 315 form_fields[ 316 'startdate'].custom_widget = FriendlyDatetimeDisplayWidget('le') 317 form_fields[ 318 'enddate'].custom_widget = FriendlyDatetimeDisplayWidget('le') 319 if self.request.principal.id == 'zope.anybody': 320 form_fields = form_fields.omit( 321 'code', 'prefix', 'year', 'mode', 322 'strict_deadline', 'application_category') 323 return form_fields 311 form_fields = grok.AutoFields(IApplicantsContainer).omit('title') 312 form_fields['description'].custom_widget = HTMLDisplayWidget 313 form_fields[ 314 'startdate'].custom_widget = FriendlyDatetimeDisplayWidget('le') 315 form_fields[ 316 'enddate'].custom_widget = FriendlyDatetimeDisplayWidget('le') 324 317 325 318 @property … … 501 494 grok.template('applicantdisplaypage') 502 495 form_fields = grok.AutoFields(IApplicant).omit( 503 'locked', 'course_admitted', 'password' , 'suspended')496 'locked', 'course_admitted', 'password') 504 497 label = _('Applicant') 505 498 pnav = 3 506 hide_hint = False507 499 508 500 @property … … 547 539 grok.name('base') 548 540 form_fields = grok.AutoFields(IApplicant).select( 549 'applicant_id', 'email', 'course1')541 'applicant_id', 'firstname', 'lastname','email', 'course1') 550 542 551 543 class CreateStudentPage(UtilityView, grok.View): … … 716 708 717 709 def update(self): 718 if self.context.state in ('initialized', 'started' , 'paid'):710 if self.context.state in ('initialized', 'started'): 719 711 self.flash( 720 _('Please pay and submitbefore trying to download the application slip.'))712 _('Please pay before trying to download the application slip.')) 721 713 return self.redirect(self.url(self.context)) 722 714 return … … 890 882 form_fields = grok.AutoFields(IApplicantEdit).omit( 891 883 'locked', 'course_admitted', 'student_id', 892 's uspended'884 'screening_score', 893 885 ) 894 886 form_fields['applicant_id'].for_display = True … … 1042 1034 return 1043 1035 1044 @action(_(' Send login credentials to email address'), style='primary')1036 @action(_('Get login credentials'), style='primary') 1045 1037 def register(self, **data): 1046 1038 if not self.captcha_result.is_valid: … … 1093 1085 # Send email with credentials 1094 1086 login_url = self.url(grok.getSite(), 'login') 1095 url_info = u'Login: %s' % login_url1096 1087 msg = _('You have successfully been registered for the') 1097 1088 if kofa_utils.sendCredentials(IUserAccount(applicant), 1098 password, url_info, msg):1089 password, login_url, msg): 1099 1090 email_sent = applicant.email 1100 1091 else: -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/browser_templates/applicantdisplaypage.pt
r9209 r9211 1 <h2 i18n:domain="waeup.kofa"> 2 ... 3 <span tal:replace="context/translated_state">APPLICATIONSTATE 4 </span> 5 <span tal:omit-tag="" 6 i18n:translate="" tal:condition="context/suspended">(account suspended) 7 </span> 8 ... 1 <h2> 2 ... <span tal:replace="context/translated_state">APPLICATIONSTATE</span> ... 9 3 </h2> 10 4 … … 20 14 <tbody> 21 15 <tal:widgets content="structure provider:widgets" /> 22 <tr tal:condition="view/getCourseAdmitted">16 <tr> 23 17 <td class="fieldname" i18n:translate=""> 24 18 Admitted Course of Study: -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/browser_templates/applicanteditpage.pt
r9209 r9211 3 3 autocomplete="off"> 4 4 5 <h2 i18n:domain="waeup.kofa"> 6 ... 7 <span tal:replace="context/translated_state">APPLICATIONSTATE 8 </span> 9 <span tal:omit-tag="" 10 i18n:translate="" tal:condition="context/suspended">(account suspended) 11 </span> 12 ... 5 <h2> 6 ... <span tal:replace="context/translated_state">APPLICATIONSTATE</span> ... 13 7 </h2> 14 8 -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/browser_templates/applicantregemailsent.pt
r9209 r9211 29 29 <tr> 30 30 </table> 31 <p >32 <span i18n:translate="">Print this page and proceed to the</span>31 <p i18n:translate=""> 32 Print this page and proceed to the 33 33 <a tal:attributes="href python: view.url(layout.site, 'login')">login form</a>. 34 <span i18n:translate="">Please note that passwords are case-sensitive,34 Please note that passwords are case-sensitive, 35 35 <br />when entering your credentials, and keep your password secret! 36 </span>37 36 </p> 38 37 <p tal:condition = "view/email"> -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/browser_templates/applicantscontainerpage.pt
r9209 r9211 1 <table class="form-table"> 1 <span tal:condition="view/introduction" tal:omit-tag=""> 2 <p tal:content="structure view/introduction">INTRODUCTION</p> 3 </span> 4 5 <table class="form-table" tal:condition="layout/isAuthenticated"> 2 6 <tbody> 3 7 <tal:block repeat="widget view/widgets"> … … 15 19 </tbody> 16 20 </table> 17 18 <span tal:condition="view/introduction" tal:omit-tag="">19 <p tal:content="structure view/introduction">INTRODUCTION</p>20 </span> -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/browser_templates/applicantsrootpage.pt
r9209 r9211 25 25 </td> 26 26 <td> 27 <span tal:content="python: layout.format TZDate(entry.startdate)">START</span>27 <span tal:content="python: layout.formatDate(entry.startdate)">START</span> 28 28 - 29 <span tal:content="python: layout.format TZDate(entry.enddate)">END</span>29 <span tal:content="python: layout.formatDate(entry.enddate)">END</span> 30 30 </td> 31 31 </tr> -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/container.py
r9209 r9211 51 51 description_dict = {} 52 52 53 local_roles = [] 53 @property 54 def local_roles(self): 55 return [] 54 56 55 57 def archive(self, app_ids=None): -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/dynamicroles.py
r9209 r9211 24 24 import grok 25 25 from zope.securitypolicy.interfaces import IPrincipalRoleManager 26 from zope.securitypolicy.principalrole import AnnotationPrincipalRoleManager27 26 from waeup.kofa.applicants.interfaces import IApplicant 27 from waeup.kofa.students.dynamicroles import StudentPrincipalRoleManager 28 28 29 29 # All components in here have the same context: Applicant instances 30 30 grok.context(IApplicant) 31 31 32 class ApplicantPrincipalRoleManager( AnnotationPrincipalRoleManager,33 grok.Adapter): 32 class ApplicantPrincipalRoleManager(StudentPrincipalRoleManager): 33 34 34 grok.provides(IPrincipalRoleManager) 35 35 36 36 #: The attribute name to lookup for additional roles 37 37 extra_attrib = 'course1' 38 subcontainer = None 38 39 39 40 # Role name mapping: … … 44 45 'waeup.local.ClearanceOfficer':'waeup.ApplicationsOfficer', 45 46 } 46 47 def getRolesForPrincipal(self, principal_id):48 """Get roles for principal with id `principal_id`.49 50 Different to the default implementation, this method also51 takes into account local roles set on any department connected52 to the context student.53 54 If the given principal has at least one of the55 `external_rolenames` roles granted for the external object, it56 additionally gets `additional_rolename` role for the context57 student.58 59 For the additional roles the `extra_attrib` and all its parent60 objects are looked up, because 'role inheritance' does not61 work on that basic level of permission handling.62 63 Some advantages of this approach:64 65 - we don't have to store extra local roles for clearance66 officers in ZODB for each student67 68 - when local roles on a department change, we don't have to69 update thousands of students; the local role is assigned70 dynamically.71 72 Disadvantage:73 74 - More expensive role lookups when a clearance officer wants75 to see an student form.76 77 This implementation is designed to be usable also for other78 contexts than students. You can inherit from it and set79 different role names to lookup/set easily via the static class80 attributes.81 """82 apr_manager = AnnotationPrincipalRoleManager(self._context)83 result = apr_manager.getRolesForPrincipal(principal_id)84 if result != []:85 # If there are local roles defined here, no additional86 # lookup is done.87 return result88 # The principal has no local roles yet. Let's lookup the89 # connected course, dept, etc.90 obj = getattr(self._context, self.extra_attrib, None)91 # Lookup local roles for connected course and all parent92 # objects. This way we fake 'role inheritance'.93 while obj is not None:94 extra_roles = IPrincipalRoleManager(obj).getRolesForPrincipal(95 principal_id)96 for role_id, setting in extra_roles:97 if role_id in self.rolename_mapping.keys():98 # Grant additional role99 # permissions (allow, deny or unset)100 # according to the rolename mapping above.101 result.append(102 (self.rolename_mapping[role_id], setting))103 return result104 obj = getattr(obj, '__parent__', None)105 return result -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/export.py
r9209 r9211 83 83 elif name == 'history': 84 84 value = value.messages 85 elif name == 'phone' and value is not None:86 # Append hash '#' to phone numbers to circumvent87 # unwanted excel automatic88 value = str('%s#' % value)89 85 return super( 90 86 ApplicantsExporter, self).mangle_value( -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/interfaces.py
r9209 r9211 18 18 """Interfaces of the university application package. 19 19 """ 20 from datetime import datetime21 20 from grokcore.content.interfaces import IContainer 22 21 from zc.sourcefactory.contextual import BasicContextualSourceFactory … … 30 29 from waeup.kofa.schema import TextLineChoice, FormattedDate 31 30 from waeup.kofa.interfaces import ( 32 IKofaObject, validate_email,31 IKofaObject, year_range, validate_email, 33 32 SimpleKofaVocabulary) 34 33 from waeup.kofa.interfaces import MessageFactory as _ … … 42 41 43 42 _marker = object() # a marker different from None 44 45 def year_range():46 curr_year = datetime.now().year47 return range(curr_year - 2, curr_year + 5)48 43 49 44 class RegNumInSource(ValidationError): … … 328 323 application_number = Attribute('The key under which the record is stored') 329 324 330 suspended = schema.Bool(331 title = _(u'Account suspended'),332 default = False,333 required = False,334 )335 336 325 applicant_id = schema.TextLine( 337 326 title = _(u'Applicant Id'), … … 404 393 required = False, 405 394 ) 395 screening_venue = schema.TextLine( 396 title = _(u'Screening Venue'), 397 required = False, 398 ) 399 screening_score = schema.Int( 400 title = _(u'Screening Score'), 401 required = False, 402 ) 406 403 student_id = schema.TextLine( 407 404 title = _(u'Student Id'), … … 463 460 required = False, 464 461 ) 462 screening_score = schema.Int( 463 title = _(u'Screening Score'), 464 required = False, 465 readonly = True, 466 ) 467 screening_venue = schema.TextLine( 468 title = _(u'Screening Venue'), 469 required = False, 470 readonly = True, 471 ) 465 472 course_admitted = schema.Choice( 466 473 title = _(u'Admitted Course of Study'), -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/tests/test_applicantcopier.py
r9209 r9211 21 21 import os 22 22 import grok 23 from datetime import datetime24 23 from hurry.workflow.interfaces import IWorkflowInfo, IWorkflowState 25 24 from zope.event import notify … … 29 28 from waeup.kofa.interfaces import IExtFileStore, IFileStoreNameChooser 30 29 from waeup.kofa.applicants.tests.test_browser import ApplicantsFullSetup 31 32 session = datetime.now().year - 233 30 34 31 class ApplicantCopierFunctionalTests(ApplicantsFullSetup): … … 70 67 self.browser.getControl(name="form.course_admitted").value = ['CERT1'] 71 68 self.browser.getControl("Save").click() 72 # Maybe the certificate has meanwhile been removed73 del self.app['faculties']['fac1']['dep1'].certificates['CERT1']74 (success, msg) = self.applicant.createStudent()75 self.assertFalse(success)76 self.assertTrue('ConstraintNotSatisfied: CERT1' in msg)77 # Ok, lets add the certificate and try again78 self.app['faculties']['fac1']['dep1'].certificates.addCertificate(79 self.certificate)80 69 (success, msg) = self.applicant.createStudent() 81 70 self.assertTrue('created' in msg) … … 93 82 self.assertEqual(student.firstname, 'John') 94 83 self.assertEqual(student.lastname, 'Tester') 95 # student_id set in application record?96 self.assertEqual(self.applicant.student_id, student.student_id)97 84 # Check if passport image has been copied 98 85 storage = getUtility(IExtFileStore) … … 123 110 # Has the student studycourse the correct attributes? 124 111 self.assertEqual(student['studycourse'].certificate.code, 'CERT1') 125 self.assertEqual(student['studycourse'].entry_session, session)112 self.assertEqual(student['studycourse'].entry_session, 2009) 126 113 self.assertEqual(student['studycourse'].entry_mode, 'ug_ft') 127 self.assertEqual(student['studycourse'].current_session, session)114 self.assertEqual(student['studycourse'].current_session, 2009) 128 115 self.assertEqual(student['studycourse'].current_level, 100) 129 116 -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/tests/test_authentication.py
r9209 r9211 64 64 email = None 65 65 phone = None 66 suspended = False67 66 68 67 -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/tests/test_browser.py
r9209 r9211 23 23 import tempfile 24 24 import grok 25 from datetime import datetime26 25 from StringIO import StringIO 27 26 from datetime import datetime, date, timedelta … … 47 46 PH_LEN = 2059 # Length of placeholder file 48 47 49 session_1 = datetime.now().year - 250 container_name_1 = u'app%s' % session_151 session_2 = datetime.now().year - 152 container_name_2 = u'app%s' % session_253 54 48 class ApplicantsFullSetup(FunctionalTestCase): 55 49 # A test case that only contains a setup and teardown … … 86 80 self.manage_root_path = self.root_path + '/@@manage' 87 81 self.add_container_path = self.root_path + '/@@add' 88 self.container_path = 'http://localhost/app/applicants/ %s' % container_name_182 self.container_path = 'http://localhost/app/applicants/app2009' 89 83 self.manage_container_path = self.container_path + '/@@manage' 90 84 91 85 # Add an applicants container 92 86 applicantscontainer = ApplicantsContainer() 93 applicantscontainer.code = container_name_187 applicantscontainer.code = u'app2009' 94 88 applicantscontainer.prefix = 'app' 95 applicantscontainer.year = session_196 applicantscontainer.title = u'This is the %s container' % container_name_189 applicantscontainer.year = 2009 90 applicantscontainer.title = u'This is the app2009 container' 97 91 applicantscontainer.application_category = 'basic' 98 92 applicantscontainer.mode = 'create' … … 101 95 applicantscontainer.startdate = datetime.now(pytz.utc) - delta 102 96 applicantscontainer.enddate = datetime.now(pytz.utc) + delta 103 self.app['applicants'][ container_name_1] = applicantscontainer104 self.applicantscontainer = self.app['applicants'][ container_name_1]97 self.app['applicants']['app2009'] = applicantscontainer 98 self.applicantscontainer = self.app['applicants']['app2009'] 105 99 106 100 # Populate university … … 141 135 self.applicant.reg_number = u'1234' 142 136 self.applicant.course1 = certificate 143 app['applicants'][ container_name_1].addApplicant(self.applicant)137 app['applicants']['app2009'].addApplicant(self.applicant) 144 138 IUserAccount( 145 self.app['applicants'][ container_name_1][139 self.app['applicants']['app2009'][ 146 140 self.applicant.application_number]).setPassword('apwd') 147 141 self.manage_path = 'http://localhost/app/applicants/%s/%s/%s' % ( 148 container_name_1, self.applicant.application_number, 'manage')142 'app2009', self.applicant.application_number, 'manage') 149 143 self.edit_path = 'http://localhost/app/applicants/%s/%s/%s' % ( 150 container_name_1, self.applicant.application_number, 'edit')144 'app2009', self.applicant.application_number, 'edit') 151 145 self.view_path = 'http://localhost/app/applicants/%s/%s' % ( 152 container_name_1, self.applicant.application_number)146 'app2009', self.applicant.application_number) 153 147 154 148 def login(self): … … 309 303 'There were errors' in self.browser.contents) 310 304 self.browser.getControl(name="form.prefix").value = ['app'] 311 self.browser.getControl(name="form.year").value = [ str(session_2)]305 self.browser.getControl(name="form.year").value = ['2010'] 312 306 self.browser.getControl(name="form.mode").value = ['create'] 313 307 self.browser.getControl( … … 323 317 self.browser.open(self.add_container_path) 324 318 self.browser.getControl(name="form.prefix").value = ['app'] 325 self.browser.getControl(name="form.year").value = [ str(session_2)]319 self.browser.getControl(name="form.year").value = ['2010'] 326 320 self.browser.getControl(name="form.mode").value = ['create'] 327 321 self.browser.getControl( … … 332 326 self.browser.open(self.manage_root_path) 333 327 ctrl = self.browser.getControl(name='val_id') 334 ctrl.getControl(value= container_name_2).selected = True328 ctrl.getControl(value='app2010').selected = True 335 329 self.browser.getControl("Remove selected", index=0).click() 336 330 self.assertTrue('Successfully removed:' in self.browser.contents) 337 331 self.browser.open(self.add_container_path) 338 332 self.browser.getControl(name="form.prefix").value = ['app'] 339 self.browser.getControl(name="form.year").value = [ str(session_2)]333 self.browser.getControl(name="form.year").value = ['2010'] 340 334 self.browser.getControl(name="form.mode").value = ['create'] 341 335 #self.browser.getControl(name="form.ac_prefix").value = ['APP'] … … 343 337 name="form.application_category").value = ['basic'] 344 338 self.browser.getControl("Add applicants container").click() 345 del self.app['applicants'][ container_name_2]339 del self.app['applicants']['app2010'] 346 340 ctrl = self.browser.getControl(name='val_id') 347 ctrl.getControl(value= container_name_2).selected = True341 ctrl.getControl(value='app2010').selected = True 348 342 self.browser.getControl("Remove selected", index=0).click() 349 343 self.assertMatches('...Could not delete...', self.browser.contents) … … 471 465 self.browser.open(self.slip_path) 472 466 self.assertTrue( 473 'Please pay and submitbefore trying to download the application slip.'467 'Please pay before trying to download the application slip.' 474 468 in self.browser.contents) 475 469 # If applicant is in correct state the pdf slip can be opened. 476 IWorkflowState(self.applicant).setState(' submitted')470 IWorkflowState(self.applicant).setState('paid') 477 471 self.browser.open(self.manage_path) 478 472 self.browser.getLink("Download application slip").click() … … 499 493 self.browser.headers['content-length'], str(PH_LEN)) 500 494 501 def test_applicant_login(self):502 self.applicant.suspended = True503 self.login()504 self.assertTrue(505 'You entered invalid credentials.' in self.browser.contents)506 self.applicant.suspended = False507 self.browser.getControl("Login").click()508 self.assertTrue(509 'You logged in.' in self.browser.contents)510 511 495 def test_applicant_access(self): 512 496 # Applicants can edit their record 513 497 self.browser.open(self.login_path) 514 498 self.login() 515 self.assertTrue(516 'You logged in.' in self.browser.contents)517 499 self.browser.open(self.edit_path) 518 500 self.assertTrue(self.browser.url != self.login_path) … … 717 699 in self.browser.contents) 718 700 configuration = SessionConfiguration() 719 configuration.academic_session = session_1701 configuration.academic_session = 2009 720 702 configuration.application_fee = 200.0 721 703 self.app['configuration'].addSessionConfiguration(configuration) … … 745 727 payment_id = self.applicant.keys()[0] 746 728 payment = self.applicant[payment_id] 747 self.assertEqual(payment.p_item,'This is the %s container' % container_name_1)748 self.assertEqual(payment.p_session, session_1)729 self.assertEqual(payment.p_item,'This is the app2009 container') 730 self.assertEqual(payment.p_session,2009) 749 731 self.assertEqual(payment.p_category,'application') 750 732 self.assertEqual(payment.amount_auth,200.0) … … 839 821 self.browser.getControl("Final Submit").click() 840 822 self.assertTrue( 841 ' Application submitted' in self.browser.contents)823 '... submitted ...' in self.browser.contents) 842 824 # ... or allow submission after deadline. 843 825 IWorkflowState(self.applicant).setState('paid') … … 848 830 self.browser.getControl("Final Submit").click() 849 831 self.assertTrue( 850 ' Application submitted' in self.browser.contents)832 '... submitted ...' in self.browser.contents) 851 833 self.browser.goBack(count=1) 852 834 self.browser.getControl("Save").click() … … 935 917 self.browser.getControl(name="form.phone.area").value = '555' 936 918 self.browser.getControl(name="form.phone.ext").value = '6666666' 937 self.browser.getControl(" Sendlogin credentials").click()919 self.browser.getControl("Get login credentials").click() 938 920 self.assertEqual(self.browser.url, 939 921 self.container_path + '/registration_complete?email=xx%40yy.zz') … … 962 944 self.browser.getControl(name="form.reg_number").value = 'anynumber' 963 945 self.browser.getControl(name="form.email").value = 'xx@yy.zz' 964 self.browser.getControl(" Sendlogin credentials").click()946 self.browser.getControl("Get login credentials").click() 965 947 self.assertTrue('No application record found.' 966 948 in self.browser.contents) … … 972 954 self.browser.getControl(name="form.reg_number").value = '1234' 973 955 self.browser.getControl(name="form.email").value = 'xx@yy.zz' 974 self.browser.getControl(" Sendlogin credentials").click()956 self.browser.getControl("Get login credentials").click() 975 957 self.assertTrue('An error occurred.' in self.browser.contents) 976 958 # Let's set this attribute manually … … 981 963 self.browser.getControl(name="form.reg_number").value = '1234' 982 964 self.browser.getControl(name="form.email").value = 'xx@yy.zz' 983 self.browser.getControl(" Sendlogin credentials").click()965 self.browser.getControl("Get login credentials").click() 984 966 # Anonymous is not informed that firstname verification failed. 985 967 # It seems that the record doesn't exist. … … 991 973 self.browser.getControl(name="form.firstname").value = 'John' 992 974 self.browser.getControl(name="form.reg_number").value = '1234' 993 self.browser.getControl(" Sendlogin credentials").click()975 self.browser.getControl("Get login credentials").click() 994 976 self.assertTrue('Your password has already been set and used.' 995 977 in self.browser.contents) 996 978 #IUserAccount( 997 # self.app['applicants'][ container_name_1][979 # self.app['applicants']['app2009'][ 998 980 # self.applicant.application_number]).context.password = None 999 981 # Even without unsetting the password we can re-register if state … … 1005 987 self.browser.getControl(name="form.reg_number").value = '1234' 1006 988 self.browser.getControl(name="form.email").value = 'new@yy.zz' 1007 self.browser.getControl(" Sendlogin credentials").click()989 self.browser.getControl("Get login credentials").click() 1008 990 # Yeah, we succeded ... 1009 991 self.assertTrue('Your registration was successful.' … … 1021 1003 self.browser.getControl(name="form.identifier").value = '1234' 1022 1004 self.browser.getControl(name="form.email").value = 'aa@aa.ng' 1023 self.browser.getControl(" Sendlogin credentials").click()1005 self.browser.getControl("Get login credentials").click() 1024 1006 self.assertTrue('No record found' in self.browser.contents) 1025 1007 self.applicant.email = 'aa@aa.ng' … … 1029 1011 self.browser.getControl(name="form.identifier").value = '1234' 1030 1012 self.browser.getControl(name="form.email").value = 'aa@aa.ng' 1031 self.browser.getControl(" Sendlogin credentials").click()1013 self.browser.getControl("Get login credentials").click() 1032 1014 self.assertTrue( 1033 1015 'An email with your user name and password has been sent' -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/tests/test_export.py
r9209 r9211 120 120 applicant.course_admitted = self.certificate 121 121 applicant.notice = u'Some notice\nin lines.' 122 applicant.screening_score = 98 123 applicant.screening_venue = u'Exam Room' 122 124 applicant.password = 'any password' 123 125 result_entry = ResultEntry( … … 142 144 'course_admitted,date_of_birth,display_fullname,email,firstname,' 143 145 'history,lastname,locked,middlename,notice,password,phone,' 144 'reg_number,s ex,state,'145 'student_id, suspended,container_code\r\n'146 'reg_number,screening_score,screening_venue,sex,state,' 147 'student_id,container_code\r\n' 146 148 'dp2011_654321,,654321,,,,,Anna Tester,,Anna,' 147 149 in result) 148 150 self.assertTrue( 149 151 'Application initialized by system\'],Tester,' 150 '0,,,,,,, initialized,,0,dp2011\r\n'152 '0,,,,,,,,,initialized,,dp2011\r\n' 151 153 in result) 152 154 return … … 166 168 'course_admitted,date_of_birth,display_fullname,email,firstname,' 167 169 'history,lastname,locked,middlename,notice,password,phone,' 168 'reg_number,s ex,state,'169 'student_id, suspended,container_code\r\n'170 'reg_number,screening_score,screening_venue,sex,state,' 171 'student_id,container_code\r\n' 170 172 'dp2011_654321,,654321,CERT1,CERT1,CERT1,1981-02-04#,' 171 173 'Anna M. Tester,anna@sample.com,Anna,' … … 174 176 'Application initialized by system\'],' 175 177 'Tester,0,M.,"Some notice\nin lines.",any password,' 176 '+234-123-12345 #,123456,f,initialized,,0,dp2011\r\n'178 '+234-123-12345,123456,98,Exam Room,f,initialized,,dp2011\r\n' 177 179 in result) 178 180 … … 190 192 'course_admitted,date_of_birth,display_fullname,email,firstname,' 191 193 'history,lastname,locked,middlename,notice,password,phone,' 192 'reg_number,s ex,state,'193 'student_id, suspended,container_code\r\n'194 'reg_number,screening_score,screening_venue,sex,state,' 195 'student_id,container_code\r\n' 194 196 'dp2011_654321,,654321,CERT1,CERT1,CERT1,1981-02-04#,' 195 197 'Anna M. Tester,anna@sample.com,Anna,' … … 198 200 'Application initialized by system\'],' 199 201 'Tester,0,M.,"Some notice\nin lines.",any password,' 200 '+234-123-12345 #,123456,f,initialized,,0,dp2011\r\n'201 in result) 202 return 202 '+234-123-12345,123456,98,Exam Room,f,initialized,,dp2011\r\n' 203 in result) 204 return -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/utils.py
r9209 r9211 39 39 SEPARATORS_DICT = { 40 40 'form.course1': _(u'Desired Study Courses'), 41 'form.s tudent_id': _(u'Process Data'),41 'form.screening_score': _(u'Process Data'), 42 42 } 43 43 … … 45 45 """Set the payment data of an applicant. 46 46 """ 47 timestamp = ("%d" % int(time()*10000))[1:]47 timestamp = "%d" % int(time()*1000) 48 48 container_fee = container.application_fee 49 49 if container_fee: -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/viewlets.py
r9209 r9211 183 183 """Get a URL to the target... 184 184 """ 185 if self.context.state in ('initialized', 'started' , 'paid'):185 if self.context.state in ('initialized', 'started'): 186 186 return 187 187 return self.view.url(self.view.context, self.target) … … 204 204 205 205 class PaymentReceiptActionButton(ManageActionButton): 206 grok.order( 9) # This button should always be the last one.206 grok.order(1) 207 207 grok.context(IApplicantOnlinePayment) 208 208 grok.view(OnlinePaymentDisplayFormPage) … … 219 219 220 220 class ApprovePaymentActionButton(ManageActionButton): 221 grok.order( 8)221 grok.order(2) 222 222 grok.context(IApplicantOnlinePayment) 223 223 grok.view(OnlinePaymentDisplayFormPage) -
main/waeup.kofa/branches/uli-zc-async/src/waeup/kofa/applicants/workflow.py
r9209 r9211 150 150 source = PAID, 151 151 destination = STARTED), 152 Transition(153 transition_id = 'reset7',154 title = _('Reset application to admitted'),155 msg = _('Application reset to admitted'),156 source = CREATED,157 destination = ADMITTED),158 152 ) 159 153
Note: See TracChangeset for help on using the changeset viewer.