##
## applicants.py
## Login : <uli@pu.smp.net>
## Started on  Fri Jul 16 11:46:55 2010 Uli Fouquet
## $Id$
## 
## Copyright (C) 2010 Uli Fouquet
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##
import grok
from zope.component.interfaces import IFactory
from zope.schema.fieldproperty import FieldProperty
from waeup.sirp.interfaces import IWAeUPSIRPPluggable
from waeup.sirp.jambtables.interfaces import (
    IResultEntry, IApplicant, IApplicantContainer
    )

class ResultEntry(grok.Context):
    grok.implements(IResultEntry)

    def __init__(self, subject=None, score=None):
        self.subject = subject
        self.score = score
    

class Applicant(grok.Context):
    grok.implements(IApplicant)

    fst_sit_results = FieldProperty(IApplicant['fst_sit_results'])
    
    def __init__(self):
        self.reg_no = None
        self.access_code = None
        self.serial = None
        self.course1 = None
        self.course2 = None
        self.course3 = None
        self.firstname = None
        self.middlenames = None
        self.lastname = None
        self.jamb_age = None
        self.date_of_birth = None
        self.jamb_state = None
        self.jamb_lga = None
        self.lga = None
        self.sex = None
        self.email = None
        self.phone = None
        self.passport = False
        self.aos = None
        self.subj1 = None
        self.subj2 = None
        self.subj3 = None
        self.hq_matric_no = None
        self.hq_type = None
        self.hq_grade = None
        self.hq_school = None
        self.hq_session = None
        self.hq_disc = None
        self.fst_sit_fname = None
        self.fst_sit_no = None
        self.fst_sit_date = None
        self.fst_sit_type = None
        #self.fst_sit_results = []
        self.fst_sit_results = None
        #self.fst_sit_results = ResultEntry()
        self.scd_sit_fname = None
        self.scd_sit_no = None
        self.scd_sit_date = None
        self.scd_sit_type = None
        self.scd_sit_results = None
        self.eng_score = None
        self.subj1score = None
        self.subj2score = None
        self.subj3score = None
        self.application_date = None
        self.status = None
        self.screening_date = None
        self.screening_type = None
        self.screening_score = None
        self.screening_venue = None
        self.total_score = None
        self.course_admitted = None
        self.department = None
        self.faculty = None
        self.entry_session = None
        self.notice = None
        self.student_id = None
        self.import_record_no = None
        self.imported_by = None
        self.import_date = None
        self.import_from = None

class ApplicantFactory(grok.GlobalUtility):
    """A factory for faculty containers.
    """
    grok.implements(IFactory)
    grok.name(u'waeup.Applicant')
    title = u"Create a new applicant.",
    description = u"This factory instantiates new applicant instances."

    def __call__(self, *args, **kw):
        return Applicant()

    def getInterfaces(self):
        return implementedBy(Appliant)

        
class ApplicantContainer(grok.Container):
    grok.implements(IApplicantContainer)

class AccessCodePlugin(grok.GlobalUtility):
    grok.name('applications')
    grok.implements(IWAeUPSIRPPluggable)

    def setup(self, site, name, logger):
        site['applications'] = ApplicantContainer()
        logger.info('Installed application container.')
        return

    def update(self, site, name, logger):
        if not 'applications' in site.keys():
            logger.info('Updating site at %s. Installing applications.' % (
                    site,))
            self.setup(site, name, logger)
        else:
            logger.info(
                'ApplicantsPlugin: Updating site at %s: Nothing to do.' % (
                    site, ))
        return

