source: main/waeup.kofa/trunk/src/waeup/kofa/applicants/payment.py @ 10653

Last change on this file since 10653 was 10392, checked in by Henrik Bettermann, 11 years ago

Request from eTranzact: "Please find the values returned when you use this url you provided, This will throw Array out of bound exception on our system because Faculty and Department has no values, return N/A if any of the parameter is null."

  • Property svn:keywords set to Id
File size: 4.0 KB
Line 
1## $Id: payment.py 10392 2013-06-27 14:17:10Z henrik $
2##
3## Copyright (C) 2011 Uli Fouquet & Henrik Bettermann
4## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; either version 2 of the License, or
7## (at your option) any later version.
8##
9## This program is distributed in the hope that it will be useful,
10## but WITHOUT ANY WARRANTY; without even the implied warranty of
11## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12## GNU General Public License for more details.
13##
14## You should have received a copy of the GNU General Public License
15## along with this program; if not, write to the Free Software
16## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17##
18"""
19Application fee payment.
20"""
21import grok
22import sys
23from hurry.workflow.interfaces import (
24    IWorkflowInfo, InvalidTransitionError)
25from zope.component.interfaces import IFactory
26from zope.interface import implementedBy
27from waeup.kofa.interfaces import MessageFactory as _
28from waeup.kofa.payments import OnlinePayment
29from waeup.kofa.payments.interfaces import IPayer
30from waeup.kofa.applicants.interfaces import IApplicantOnlinePayment
31from waeup.kofa.utils.helpers import attrs_to_fields
32
33class ApplicantOnlinePayment(OnlinePayment):
34    """This is an online payment.
35    """
36    grok.implements(IApplicantOnlinePayment)
37    grok.provides(IApplicantOnlinePayment)
38
39    def __init__(self):
40        super(ApplicantOnlinePayment, self).__init__()
41        return
42
43    def doAfterApplicantPaymentApproval(self):
44        """Process applicant after payment was approved.
45        """
46        wf_info = IWorkflowInfo(self.__parent__)
47        try:
48            wf_info.fireTransition('approve')
49        except InvalidTransitionError:
50            msg = log = 'Error: %s' % sys.exc_info()[1]
51            return False, msg, log
52        log = 'payment approved: %s' % self.p_id
53        msg = _('Payment approved')
54        return False, msg, log
55
56    def doAfterApplicantPayment(self):
57        """Process applicant after payment was made.
58        """
59        wf_info = IWorkflowInfo(self.__parent__)
60        try:
61            wf_info.fireTransition('pay')
62        except InvalidTransitionError:
63            msg = log = 'Error: %s' % sys.exc_info()[1]
64            return False, msg, log
65        log = 'successful payment: %s' % self.p_id
66        msg = _('Successful payment')
67        return False, msg, log
68
69    def approveApplicantPayment(self):
70        """Approve payment and process applicant.
71        """
72        if self.p_state == 'paid':
73            return False, _('This ticket has already been paid.'), None
74        self.approve()
75        return self.doAfterApplicantPaymentApproval()
76
77ApplicantOnlinePayment = attrs_to_fields(
78    ApplicantOnlinePayment, omit=['display_item'])
79
80class Payer(grok.Adapter):
81    """An adapter to publish applicant data through a simple webservice.
82    """
83    grok.context(IApplicantOnlinePayment)
84    grok.implements(IPayer)
85
86    @property
87    def display_fullname(self):
88        "Name of  payer"
89        return self.context.__parent__.display_fullname
90
91    @property
92    def id(self):
93        "Id of payer"
94        return self.context.__parent__.applicant_id
95
96    @property
97    def reg_number(self):
98        "Reg number of payer"
99        return self.context.__parent__.reg_number
100
101    @property
102    def matric_number(self):
103        return 'N/A'
104
105    @property
106    def faculty(self):
107        return 'N/A'
108
109    @property
110    def department(self):
111        return 'N/A'
112
113# Applicant online payments must be importable. So we might need a factory.
114class ApplicantOnlinePaymentFactory(grok.GlobalUtility):
115    """A factory for applicant online payments.
116    """
117    grok.implements(IFactory)
118    grok.name(u'waeup.ApplicantOnlinePayment')
119    title = u"Create a new online payment.",
120    description = u"This factory instantiates new online payment instances."
121
122    def __call__(self, *args, **kw):
123        return ApplicantOnlinePayment()
124
125    def getInterfaces(self):
126        return implementedBy(ApplicantOnlinePayment)
Note: See TracBrowser for help on using the repository browser.