#-*- mode: python; mode: fold -*-
# $Id: Students.py 200 2006-05-10 06:58:10Z joachim $
from Globals import InitializeClass
from AccessControl import ClassSecurityInfo
from AccessControl.SecurityManagement import newSecurityManager

from Products.CMFCore.utils import UniqueObject, getToolByName
from Products.CMFCore.permissions import View
from Products.CMFCore.permissions import ModifyPortalContent
from Products.CPSCore.CPSBase import CPSBase_adder, CPSBaseFolder
#from Products.CPSCore.CPSBase import CPSBaseDocument as BaseDocument
from Products.CPSDocument.CPSDocument import CPSDocument
from Products.CPSCore.CPSBase import CPSBaseBTreeFolder as BaseBTreeFolder
from Products.CPSCore.CPSMembershipTool import CPSUnrestrictedUser
##class StudentsFolder(BaseBTreeFolder): ###(
##    """
##    WAeUP container for the various WAeUP containers data
##    """
##    meta_type = 'Students Folder'
##    portal_type = meta_type
##    security = ClassSecurityInfo()
##
##
##InitializeClass(StudentsFolder)

##def addStudentsFolder(container, id, REQUEST=None, **kw):
##    """Add a Student."""
##    ob = StudentsFolder(id, **kw)
##    return CPSBase_adder(container, ob, REQUEST=REQUEST)
#####)

class Student(CPSDocument): ###(
    """
    WAeUP Student container for the various student data
    """
    meta_type = 'Student'
    portal_type = meta_type
    security = ClassSecurityInfo()

    security.declareProtected(View,"Title")
    def Title(self):
        """compose title"""
        reg_nr = self.getId()[1:]
        data = getattr(self,'PERSONAL',None)
        if data is None:
            data = getattr(self,'JAMB',None)
        if data:
            content = data.getContent()
            return "%s %s" % (content.firstname,content.lastname)
        return self.title

    def Description(self):
        """compose description"""
        data = getattr(self,'PERSONAL',None)
        if data is None:
            return "none"
        if data:
            content = data.getContent()
            return "%s" % (content.description)
        return self.description

    security.declareProtected(View,"setScratchCardData")
    def setScratchCardData(self,ident,ds):
        """set this data """
        dict = {'%s_sc_pin' % ident : ds.get('sc_pin'),
                '%s_sc_id' % ident : ds.get('sc_id'),
                '%s_sc_value' % ident : ds.get('sc_value'),
                '%s_date' % ident : ds.get('sc_date'),
                }

        old_user = self.portal_membership.getAuthenticatedMember()
        if self.portal_membership.isAnonymousUser():
            tmp_user = CPSUnrestrictedUser('s%(jamb_id)s' % ds, '',
                                       ['StudentManager'], '')
            tmp_user = tmp_user.__of__(self.acl_users)
            newSecurityManager(None, tmp_user)
        #print str(dict)
        self.edit(mapping=dict)
        newSecurityManager(None, old_user)

    security.declareProtected(View,"memberIsOwner")
    def memberIsOwner(self):
        """is the current user the owner"""
        member = self.portal_membership.getAuthenticatedMember()
        #print member, self.getId(),self.aq_parent.getId()
        if self.aq_parent.getId() == str(member):
            return True
        return False

    security.declareProtected(View,"accommodationIsBooked")
    def accommodationIsBooked(self):
        """is the accommodation booked"""
        if self.accommodation_sc_pin != '':
            return True
        return False

    security.declareProtected(View,"accommodationIsPayed")
    def accommodationIsPayed(self):
        """is the accommodation payed"""
        if self.hostel_fee_sc_pin != '':
            return True
        return False

    security.declareProtected(View,"isRegisteredForCurrentLevel")
    def isRegisteredForCurrentLevel(self):
        """is the student registered for the current level"""
        for l in  self.aq_parent.objectValues():
            if l.portal_type == 'StudyLevel':
                return True
        return False

InitializeClass(Student)

def addStudent(container, id, REQUEST=None, **kw):
    """Add a Student."""
    ob = Student(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

class StudentPersonal(CPSDocument): ###(
    """
    WAeUP Student container for the various student data
    """
    meta_type = 'StudentPersonal'
    portal_type = meta_type
    security = ClassSecurityInfo()

    security.declareProtected(View,"Title")
    def Title(self):
        """compose title"""
        content = self.getContent()
        return "Personal Data for %s %s" % (content.firstname,content.lastname)


InitializeClass(StudentPersonal)

def addStudentPersonal(container, id, REQUEST=None, **kw):
    """Add a Students personal data."""
    ob = StudentPersonal(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

class StudentEligibility(CPSDocument): ###(
    """
    WAeUP Student container for the various student data
    """
    meta_type = 'StudentEligibility'
    portal_type = meta_type
    security = ClassSecurityInfo()

    security.declareProtected(View,"Title")
    def Title(self):
        """compose title"""
        return "Eligibility Data"


InitializeClass(StudentEligibility)

def addStudentEligibility(container, id, REQUEST=None, **kw):
    """Add a Students eligibility data."""
    ob = StudentEligibility(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

class StudentDocuments(CPSDocument): ###(
    """
    WAeUP Student container for the various student data
    """
    meta_type = 'StudentDocuments'
    portal_type = meta_type
    security = ClassSecurityInfo()

    security.declareProtected(View,"Title")
    def Title(self):
        """compose title"""
        content = self.getContent()
        return "Scanned Documents"


InitializeClass(StudentDocuments)

def addStudentDocuments(container, id, REQUEST=None, **kw):
    """Add a Students documents"""
    ob = StudentDocuments(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

class Jamb(CPSDocument): ###(
    """
    WAeUP Jamb containing the courses and students
    """
    meta_type = 'Jamb'
    portal_type = meta_type
    security = ClassSecurityInfo()

    security.declareProtected(View,"Title")
    def Title(self):
        """compose title"""
        content = self.getContent()
        return "JAMB Data for %s %s" % (content.firstname,content.lastname)

    security.declareProtected(View,"setOwnership")
    def setOwnership(self,member_id):
        """set ownership"""
        pm = getattr(self,'portal_membership')
        member = pm.getMemberById(member_id)
        self.changeOwnership(member)

InitializeClass(Jamb)

def addJamb(container, id, REQUEST=None, **kw):
    """Add a Jamb."""
    ob = Jamb(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

class StudyLevel(CPSDocument): ###(
    """
    WAeUP StudyLevel containing the courses and students
    """
    meta_type = 'StudyLevel'
    portal_type = meta_type
    security = ClassSecurityInfo()

InitializeClass(StudyLevel)

def addStudyLevel(container, id, REQUEST=None, **kw):
    """Add a StudyLevel."""
    ob = StudyLevel(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

class Semester(CPSDocument): ###(
    """
    WAeUP Semester containing the courses and students
    """
    meta_type = 'Semester'
    portal_type = meta_type
    security = ClassSecurityInfo()

InitializeClass(Semester)

def addSemester(container, id, REQUEST=None, **kw):
    """Add a Semester."""
    ob = Semester(id, **kw)
    return CPSBase_adder(container, ob, REQUEST=REQUEST)

###)

