## Script (Python) "dumpSCPayments.py"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
# $Id: dumpSCPayments.py 2670 2007-11-15 22:07:14Z henrik $
"""
"""
try:
    from Products.zdb import set_trace
except:
    def set_trace():
        pass

mtool = context.portal_membership
member = mtool.getAuthenticatedMember()
if str(member) not in ('admin','joachim'):
    return


import logging
import DateTime
logger = logging.getLogger('Skins.dumpSCPayments')
from Products.AdvancedQuery import Eq, Between, Le,In
aq_pins = context.portal_pins.evalAdvancedQuery
aq_student = context.students_catalog.evalAdvancedQuery
#students_folder = context.portal_url.getPortalObject().campus.students

request = context.REQUEST
session = request.SESSION
response = request.RESPONSE
setheader = request.RESPONSE.setHeader
def rwrite(s):
    response.setHeader('Content-type','text/html; charset=ISO-8859-15')
    response.write("%s<br>\n\r" % s)

cost_dict = {}
for k,v in context.getScratchCardCost():
    cost_dict[''.join(k.split('_'))] = v

used_query = ~Eq('student','') & ~In('prefix_batch',('APP1','APP2','APP3','APP4','APP5',))

pins = aq_pins(used_query,sortSpecs=('student',))
#set_trace()
count = 1
student_id = 'xxx'
d = {}
l = []
sum_total = 0.0
log_after = 100
logger.info("start")
for pin in pins:
    if pin.pin.startswith('APP'):
        continue
    if student_id != pin.student:
        if d:
            res = aq_student(Eq('id',pin.student))
            if not res:
                logger.info("student_id %s not found" % pin.student)
                continue
            student = res[0]
            d['name'] = student.name
            d['faculty'] = student.faculty
            d['department'] = student.department
            d['course'] = student.course
            d['matric_no'] = student.matric_no
            #d['costs'] = ' '.join(costs)
            d['pins'] = ' '.join(pins)
            d['sum'] = sum
            sum_total += sum
            # rwrite(("%d: " % count) + "%(student_id)s %(pins)s %(costs)s %(sum)8.2f" % d +\
            #         " %(faculty)s %(department)s %(course)s" % d)
            l +=d,
            d = {}
            if not count % log_after:
                logger.info("processed %d/%d" % (log_after,count))
                # if not count % 1000:
                #     break
            count += 1
        student_id = d['student_id'] = pin.student
        costs = ["%8.2f" % cost_dict[pin.prefix_batch],]
        pins = [pin.pin,]
        sum = cost_dict[pin.prefix_batch]
    else:
        costs += ("%8.2f" % cost_dict[pin.prefix_batch]),
        pins += pin.pin,
        sum += cost_dict[pin.prefix_batch]
fields= ('student_id','name','pins','sum','matric_no','faculty','department','course')
csv_name = context.waeup_tool.dumpListToCSV(l,'sc_payments',fields=fields)
logger.info('%s dumped sc payments to %s' % (member,csv_name))
logger.info("finished for %d students total N %12.2f %12.2f Euros" % (count,sum_total,sum_total/170))


