Ignore:
Timestamp:
27 Sep 2012, 10:19:14 (12 years ago)
Author:
Henrik Bettermann
Message:

Configure setPaymentDetails, and add some basic tests.

Location:
main/waeup.futminna/trunk/src/waeup/futminna/students
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.futminna/trunk/src/waeup/futminna/students/tests/test_browser.py

    r9155 r9244  
    7979        self.assertEqual(utils.getReturningData(self.student),(2005, 100))
    8080        return
     81
     82    def test_set_payment_details(self):
     83        self.app['configuration']['2004'].gown_fee = 150.0
     84        self.app['configuration']['2004'].transfer_fee = 90.0
     85        self.app['configuration']['2004'].booking_fee = 150.0
     86        self.app['configuration']['2004'].maint_fee = 180.0
     87        self.app['configuration']['2004'].clearance_fee = 120.0
     88        utils = getUtility(IStudentsUtils)
     89
     90        error, payment = utils.setPaymentDetails('schoolfee',self.student)
     91        self.assertEqual(payment, None)
     92        self.assertEqual(error, u'Amount could not be determined.')
     93
     94        self.student.nationality = u'NG'
     95
     96        IWorkflowState(self.student).setState('cleared')
     97        error, payment = utils.setPaymentDetails('schoolfee',self.student)
     98        self.assertEqual(payment.p_level, 100)
     99        self.assertEqual(payment.p_session, 2004)
     100        self.assertEqual(payment.amount_auth, 37000.0)
     101        self.assertEqual(payment.p_item, u'CERT1')
     102        self.assertEqual(error, None)
     103
     104        self.certificate.study_mode = 'jm_ft'
     105        error, payment = utils.setPaymentDetails('schoolfee',self.student)
     106        self.assertEqual(payment.amount_auth, 72700.0)
     107
     108        IWorkflowState(self.student).setState('returning')
     109        error, payment = utils.setPaymentDetails('schoolfee',self.student)
     110        self.assertEqual(payment.p_level, 100)
     111        self.assertEqual(payment.p_session, 2004)
     112        self.assertEqual(payment.amount_auth, 37000.0)
     113        self.assertEqual(payment.p_item, u'CERT1')
     114        self.assertEqual(error, None)
     115
     116        self.certificate.study_mode = 'ug_ft'
     117        error, payment = utils.setPaymentDetails('schoolfee',self.student)
     118        self.assertEqual(payment.amount_auth, 20000.0)
     119
     120
     121        error, payment = utils.setPaymentDetails('clearance',self.student)
     122        self.assertEqual(payment.p_level, 100)
     123        self.assertEqual(payment.p_session, 2004)
     124        self.assertEqual(payment.amount_auth, 20000.0)
     125        self.assertEqual(payment.p_item, u'CERT1')
     126        self.assertEqual(error, None)
     127
     128        error, payment = utils.setPaymentDetails('schoolfee',self.student, 2004, 100)
     129        self.assertEqual(error, u'Previous session payment not yet implemented.')
     130        return
  • main/waeup.futminna/trunk/src/waeup/futminna/students/utils.py

    r9155 r9244  
    5454
    5555        """
    56         return _(u'Payment components not yet configured.'), None
     56        p_item = u''
     57        amount = 0.0
     58        if previous_session:
     59            return _('Previous session payment not yet implemented.'), None
     60        p_session = student['studycourse'].current_session
     61        p_level = student['studycourse'].current_level
     62        p_current = True
     63        session = str(p_session)
     64        try:
     65            academic_session = grok.getSite()['configuration'][session]
     66        except KeyError:
     67            return _(u'Session configuration object is not available.'), None
     68        if category == 'schoolfee':
     69            try:
     70                certificate = student['studycourse'].certificate
     71                p_item = certificate.code
     72            except (AttributeError, TypeError):
     73                return _('Study course data are incomplete.'), None
     74            if student.current_mode.endswith('_ft'):
     75                # fresh remedial
     76                if student.current_level == 10 and student.state == CLEARED:
     77                    if student['studycourse'].entry_mode == 'rmd_ft':
     78                        amount = 80200.0
     79                    else:
     80                        amount = 74200.0
     81
     82                # fresh
     83                elif student.state == CLEARED:
     84                    if student.current_mode == 'jm_ft':
     85                        amount = 72700.0
     86                    elif student.is_foreigner:
     87                        amount = 131500.0
     88                    else:
     89                        amount = 37000.0 # School Fee reduced by 8000
     90                # returning
     91                elif student.state == RETURNING:
     92                    if student.current_mode == 'jm_ft':
     93                        amount = 37000.0
     94                    elif student.is_foreigner:
     95                        amount = 109500.0
     96                    else:
     97                        amount = 20000.0
     98                else:
     99                    amount = 0.0
     100        elif category == 'clearance':
     101            try:
     102                p_item = student['studycourse'].certificate.code
     103            except (AttributeError, TypeError):
     104                return _('Study course data are incomplete.'), None
     105            if student.faccode in ['EET','ICT'] or student.depcode in ['ARC']:
     106                amount = 25000.0
     107            else:
     108                amount = 20000.0
     109        elif category == 'bed_allocation':
     110            p_item = self.getAccommodationDetails(student)['bt']
     111            amount = academic_session.booking_fee
     112        if amount in (0.0, None):
     113            return _('Amount could not be determined.'), None
     114        for key in student['payments'].keys():
     115            ticket = student['payments'][key]
     116            if ticket.p_state == 'paid' and\
     117               ticket.p_category == category and \
     118               ticket.p_item == p_item and \
     119               ticket.p_session == p_session:
     120                  return _('This type of payment has already been made.'), None
     121        payment = createObject(u'waeup.StudentOnlinePayment')
     122        timestamp = ("%d" % int(time()*10000))[1:]
     123        payment.p_id = "p%s" % timestamp
     124        payment.p_category = category
     125        payment.p_item = p_item
     126        payment.p_session = p_session
     127        payment.p_level = p_level
     128        payment.p_current = p_current
     129        payment.amount_auth = amount
     130        return None, payment
    57131
    58132
Note: See TracChangeset for help on using the changeset viewer.