source: WAeUP_SRP/trunk/skins/waeup_pins/search_pins.py @ 5002

Last change on this file since 5002 was 4203, checked in by Henrik Bettermann, 16 years ago

display correct id

File size: 5.5 KB
RevLine 
[1002]1## Script (Python) "search_pins"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=REQUEST
8##title=
9##
10# $Id: search_students.py 911 2006-11-20 15:11:29Z henrik $
11"""
12list Students for ClearanceOfficers
13"""
[3076]14try:
15    from Products.zdb import set_trace
16except:
17    def set_trace():
18        pass
[1006]19
[1002]20request = REQUEST
21wftool = context.portal_workflow
22mtool = context.portal_membership
23member = mtool.getAuthenticatedMember()
24roles = member.getRolesInContext(context)
[1134]25pincat = context.portal_pins
26students = context.portal_url.getPortalObject().campus.students
27def check_hostel_pins(term):
28    items = pincat(prefix_batch = term)
29    not_found = []
30    #from Products.zdb import set_trace;set_trace()
31    for item in items:
32        if item.student == '':
33            continue
34        student = getattr(students,item.student,None)
35        if student is None:
36            not_found.append(item)
37        elif not "accommodation_2006" in student.objectIds():
38            not_found.append(item)
39        else:
40            acco = student.accommodation_2006
41            acco_doc = acco.getContent()
42            pin = "".join(str(acco_doc.acco_res_sc_pin).split('-'))
43            if pin != item.pin:
44                not_found.append(item)
45    return not_found
[1540]46
[1120]47def set_used_pins(items, from_cat=False):
48    l = []
49    for i in items:
50        item = {}
51        if from_cat:
52            sno = i.student
53            prefix = i.prefix_batch
54            serial = i.serial
55            pin = i.pin
56        else:
57            sno = i['student']
58            prefix = i.get('prefix_batch')
59            serial = i.get('serial')
60            pin = i.get('pin')
61        item['student'] = sno
[1540]62        item['prefix'] = prefix
[1120]63        item['serial'] = serial
64        if len(sno) > 0:
65            item['pin'] = pin
66        else:
[1853]67            if str(member) in ('admin','joachim'):
[1120]68                item['pin'] = "%s" % (pin,)
69            else:
70                item['pin'] = "%s%s****%s" % (i.prefix_batch,pin[-10:-7],pin[-3:])
[2615]71
[2140]72        if sno.startswith('disabled'):
73            item['student_url'] = None
74            item['student_id'] = sno
75        elif len(sno)==10 or '/' in sno:
[1120]76            #res = context.portal_catalog(SearchableText=sno,portal_type='StudentApplication')
77            res = context.students_catalog(jamb_reg_no=sno.upper())
78            if len(res) > 0:
[2140]79                item['student_url'] = "%s/campus/students/%s/application" % (context.portal_url(),res[0].id)
[1120]80                item['student_id'] = res[0].id
81            else:
82                item['student_url'] = None
83                item['student_id'] = ''
[2615]84        elif len(sno) == 7:
[2140]85            item['student_url'] = '%s/campus/students/%s' % (context.portal_url(),item['student'])
86            item['student_id'] = item['student']
[4203]87        elif sno.startswith(prefix):
88            item['student_url'] = None
89            item['student_id'] = ''       
[1120]90        else:
91            item['student_url'] = ''
92            item['student_id'] = "not used"
93        l.append(item)
94    return l
95
[1002]96lt = context.portal_layouts
97validate = request.has_key("cpsdocument_edit_button")
[1012]98default = {'search_mode': 'student',}
[1002]99rend,psm,ds = lt.renderLayout(layout_id= 'scratch_card_search',
100                      schema_id= 'student_search',
101                      context=context,
102                      mapping=validate and request,
[1012]103                      ob=default,
[1002]104                      layout_mode='edit',
105                      formaction="search_pins",
106                      commit = False,
107                      )
108info = {}
109info['used'] = []
[1401]110#from Products.zdb import set_trace;set_trace()
[1062]111if context.portal_type == "ScratchCardBatch":
[1540]112    info['batch_doc'] = context.getContent()
[3405]113    #info['used'] = set_used_pins(info['batch_doc'].getUsedPins())
114    info['used'] = []
[1062]115    info['unused'] = info['batch_doc'].getUnusedPins()
116    info['nr_used'] = info['batch_doc'].getNumberOfUsedPins()
117    view = context.batch_view
118elif context.portal_type == "ScratchCardBatchesFolder":
[2766]119    batches = context.objectIds()
120    batches.sort()
[3076]121    l = []
122    cols = 6
123    rows,rest = divmod(len(batches),cols)
[3081]124    bis = 0
[3076]125    for r in range(rows):
126        von = r*cols
[3081]127        bis = von + cols
128        l += batches[von:bis],
[3076]129    if rest:
[3081]130        von = bis
[3076]131        l += batches[von:von+rest],
132    info['batches'] = l
[1062]133    view = context.pins_view
[1002]134if psm == '':
[1062]135    return view(rendered = rend,
136                psm = psm,
137                #psm = "%s, %s" % (psm,ds),
138                info = info,
139                allowed = True,
140                )
[1002]141what = ds.get('search_mode')
142term = ds.get('search_string')
[1797]143
144items=[]
[1012]145if term != "":
146    if what == 'student' :
[1062]147        items_1 = pincat(student = term.upper())
148        items_2 = pincat(student = term.lower())
[1012]149        items = items_1 + items_2
150    elif what == 'pin':
[3389]151        term = term.replace('-','').strip().upper()
[1134]152        if context.portal_type == "ScratchCardBatch" and term == "HOS1":
153            items = check_hostel_pins(term)
154        else:
[3389]155            items = pincat(pin = term)
[1062]156    elif what == 'serial':
157        try:
158            snr = int(term.strip())
159            items = pincat(serial = snr)
160        except ValueError:
161            psm = "invalid number"
162            items = []
163            pass
[1012]164    else:
165        items = []
[1540]166
[1120]167info['used'] = set_used_pins(items,from_cat=True)
[1002]168
[1853]169
170
[1062]171return view(rendered = rend,
172            psm = psm,
173            #psm = "%s, %s" % (psm,ds),
174            info = info,
175            allowed = True,
176            )
[1070]177
Note: See TracBrowser for help on using the repository browser.