## $Id: test_utils.py 17943 2024-10-16 12:21:57Z henrik $
##
## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
## 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 hurry.workflow.interfaces import IWorkflowState
from zope.component import getUtility, createObject
from waeup.kofa.students.studylevel import StudentStudyLevel
from waeup.kofa.students.tests.test_browser import StudentsFullSetup
from waeup.kofa.students.interfaces import IStudentsUtils
from waeup.kofa.students.studylevel import StudentStudyLevel
from kofacustom.edopoly.testing import FunctionalLayer

class StudentsUtilsTests(StudentsFullSetup):

    layer = FunctionalLayer

    def test_setMatricNumber(self):
        IWorkflowState(self.student).setState('school fee paid')
        site = grok.getSite()
        utils = getUtility(IStudentsUtils)
        site['configuration'].next_matric_integer = 1
        site['configuration'].next_matric_integer_2 = 1
        site['configuration'].next_matric_integer_3 = 1
        self.student.matric_number = None
        # nd_ft
        self.certificate.study_mode ='nd_ft'
        msg, mnumber = utils.setMatricNumber(self.student)
        self.assertEqual(msg, 'Matriculation number cannot be set.')
        error, payment = utils.setPaymentDetails('clearance',self.student)
        payment.p_state = 'paid'
        self.student['payments']['any_key'] = payment
        msg, mnumber = utils.setMatricNumber(self.student)
        self.assertEqual(self.student.matric_number, 'fac1/ND/04/00001')
        self.assertEqual(site['configuration'].next_matric_integer, 2)
        self.assertEqual(msg, None)
        # hnd_ft
        self.student.matric_number = None
        self.certificate.study_mode ='hnd_ft'
        msg, mnumber = utils.setMatricNumber(self.student)
        self.assertEqual(self.student.matric_number, 'fac1/HD/04/00001')
        self.assertEqual(site['configuration'].next_matric_integer_2, 2)
        self.assertEqual(msg, None)
        # nd_pt
        self.student.matric_number = None
        self.certificate.study_mode ='nd_pt'
        msg, mnumber = utils.setMatricNumber(self.student)
        self.assertEqual(self.student.matric_number, 'fac1/PT/04/00001')
        self.assertEqual(site['configuration'].next_matric_integer_3, 2)
        self.assertEqual(msg, None)
        return

    def test_set_payment_details(self):
        self.student['studycourse'].certificate.school_fee_1 = 6666.0
        self.student['studycourse'].certificate.study_mode = 'nd_pt'
        IWorkflowState(self.student).setState('returning')
        #self.student.nationality = u'NG'
        #self.student.lga = 'ebonyi_ukaba'
        utils = getUtility(IStudentsUtils)
        configuration = createObject('waeup.SessionConfiguration')
        configuration.academic_session = 2005
        self.app['configuration'].addSessionConfiguration(configuration)
        self.app['configuration']['2004'].ict_entre_fee = 4170.0
        self.app['configuration']['2005'].ict_entre_fee = 2180.0
        self.app['configuration']['2004'].union_fee = 1234.0
        self.app['configuration']['2005'].union_fee = 1434.0
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(error, u'Pay ICT fee(s) first.')
        error, payment = utils.setPaymentDetails('ict_entre',self.student)
        self.assertEqual(error, None)
        self.assertEqual(payment.p_level, 200)
        self.assertEqual(payment.p_session, 2005)
        self.assertEqual(payment.amount_auth, 2180.0)
        payment.p_state = 'paid'
        self.student['payments']['any_key'] = payment
        #error, payment = utils.setPaymentDetails('union',self.student)
        #self.assertEqual(error, None)
        #self.assertEqual(payment.p_level, 200)
        #self.assertEqual(payment.p_session, 2005)
        #self.assertEqual(payment.amount_auth, 1434.0)
        #payment.p_state = 'paid'
        #self.student['payments']['any_key_2'] = payment
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(error, None)
        self.assertEqual(payment.p_level, 200)
        self.assertEqual(payment.p_session, 2005)
        self.assertEqual(payment.amount_auth, 6666.0)

        IWorkflowState(self.student).setState('cleared')
        error, payment = utils.setPaymentDetails('ict_entre',self.student)
        self.assertEqual(error, None)
        self.assertEqual(payment.p_level, 100)
        self.assertEqual(payment.p_session, 2004)
        self.assertEqual(payment.amount_auth, 4170.0)
        payment.p_state = 'paid'
        self.student['payments']['any_key_3'] = payment
        error, payment = utils.setPaymentDetails('union',self.student)
        self.assertEqual(error, None)
        self.assertEqual(payment.p_level, 100)
        self.assertEqual(payment.p_session, 2004)
        self.assertEqual(payment.amount_auth, 1234.0)
        payment.p_state = 'paid'
        self.student['payments']['any_key_4'] = payment
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(error, None)
        self.assertEqual(payment.p_level, 100)
        self.assertEqual(payment.p_session, 2004)
        self.assertEqual(payment.amount_auth, 6666.0)

        IWorkflowState(self.student).setState('admitted')
        error, payment = utils.setPaymentDetails('schoolfee',self.student)
        self.assertEqual(error, u'Please proceed for clearance before paying school fees.')
