source: WAeUP_SRP/trunk/skins/waeup_utilities/ti_507_resolve.py @ 5066

Last change on this file since 5066 was 3780, checked in by Henrik Bettermann, 16 years ago
  • get study_mode from certificates and ignore study_mode attribute of study_course objects
  • customize school_fee payment for FUTMinna
  • Property svn:keywords set to Id
File size: 3.6 KB
Line 
1## Script (Python) "ti_507_resolve"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=
8##title=
9##
10# $Id: ti_507_resolve.py 3780 2008-11-21 09:26:51Z henrik $
11"""
12"""
13try:
14    from Products.zdb import set_trace
15except:
16    def set_trace():
17        pass
18
19mtool = context.portal_membership
20member = mtool.getAuthenticatedMember()
21if str(member) not in ('admin','joachim'):
22    return
23
24import logging
25import DateTime
26logger = logging.getLogger('Skins.ti_507_resolve')
27from Products.AdvancedQuery import Eq, Between, Le,In
28aq_students = context.students_catalog.evalAdvancedQuery
29aq_portal = context.portal_catalog_real.evalAdvancedQuery
30students_folder = context.portal_url.getPortalObject().campus.students
31
32request = context.REQUEST
33session = request.SESSION
34response = request.RESPONSE
35setheader = request.RESPONSE.setHeader
36logger.info('start')
37count = 0
38found = 0
39commit_after = 1000
40certificates = context.getCertificatesDict()
41students = context.students_catalog()
42wrong = {}
43missing_courses = []
44wrong_modes = {}
45students_with_missing_courses = []
46for student in students:
47    count += 1
48    if student.mode and student.course:
49        certificate = certificates.get(student.course,None)
50        if certificate is None:
51            students_with_missing_courses += student.id,
52            if student.course not in missing_courses:
53                missing_courses += student.course,
54                #logger.info('missing course %s' % student.course)
55            continue
56        current_mode = student.mode
57        study_mode = certificate.get('study_mode','xxx')
58        if current_mode != study_mode:
59            w_count =  wrong_modes.get((current_mode,study_mode),0)
60            #if w_count == 0:
61            #    logger.info('%s != %s' % (student.mode,
62            #                              study_mode))
63            w_count += 1
64            wrong_modes[(current_mode,study_mode)] = w_count
65            d = {}
66            d['student_id'] = student.id
67            d['current_mode'] = study_mode
68            d['current_mode_old'] = current_mode
69            d['study_course'] = student.course
70            d['matric_no'] = student.matric_no
71            d['entry_mode'] = student.entry_mode
72            wrong[student.id] = d
73            if (student.mode,study_mode) not in (('ume_ft', 'ug_ft'),('de_pt', 'ug_pt'),('de_ft', 'ug_ft')):
74                logger.info("; %(student_id)s;  %(matric_no)s ; %(study_course)s ; %(entry_mode)s ; %(current_mode_old)s ; %(current_mode)s" % d)
75    # if wrong and not (len(wrong) % commit_after):
76    #     logger.info('found %d wrong of %d' % (len(wrong),count))
77for k,v in wrong_modes.items():
78    logger.info('wrong mode %s counted %d' % (k,v))
79logger.info('missing courses %s (%d counted)' % (', '.join(missing_courses),len(students_with_missing_courses)))
80logger.info('found %d wrong of %d' % (len(wrong),count))
81count = 0
82
83return
84
85# the following must not be done because I've changed get_from_doc_mode in WAeUPTables. The current_mode field
86# of the study_course object is no longer used
87
88for student_id,d in wrong.items():
89    #set_trace()
90    try:
91        getattr(getattr(students_folder,student_id),'study_course').getContent().edit(mapping=d)
92        failed = False
93    except:
94        failed = True
95    if failed:
96        logger.info("%(student_id)s change failed")
97    else:
98        logger.info("%(student_id)s changed current_mode from %(current_mode_old)s to %(current_mode)s" % d)
99    if count and not count % commit_after:
100        context.waeup_tool.doCommit()
101        logger.info("committing %d of total %d" % (commit_after,count))
102    count += 1
Note: See TracBrowser for help on using the repository browser.