Index: main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/__init__.py
===================================================================
--- main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/__init__.py	(revision 14993)
+++ main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/__init__.py	(revision 14993)
@@ -0,0 +1,1 @@
+# Make this a package.
Index: main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/browser.py
===================================================================
--- main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/browser.py	(revision 14993)
+++ main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/browser.py	(revision 14993)
@@ -0,0 +1,158 @@
+## $Id$
+##
+## Copyright (C) 2017 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
+##
+
+from kofacustom.nigeria.remita.studentsbrowser import (
+    module_activated,
+    RemitaRequestPaymentStatusPageStudent,
+    RemitaVerifyPaymentStatusPageStudent,
+    RemitaPageStudent)
+from kofacustom.nigeria.remita.applicantsbrowser import (
+    RemitaRequestPaymentStatusPageApplicant,
+    RemitaVerifyPaymentStatusPageApplicant,
+    RemitaPageApplicant)
+
+# Temporarily we can use the test portal like in kofacustom.nigeria
+
+from kofacustom.nigeria.remita.tests import (
+    MERCHANTID, HOST, HTTPS, API_KEY, SERVICETYPEID)
+
+#MERCHANTID = ''
+#HOST = 'login.remita.net'
+#HTTPS = True
+#API_KEY = ''
+#SERVICETYPEID = ''
+
+class CustomRemitaRequestPaymentStatusPageStudent(
+    RemitaRequestPaymentStatusPageStudent):
+    """ Request webservice view for the Remita gateway.
+    """
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+class CustomRemitaVerifyPaymentStatusPageStudent(
+    RemitaVerifyPaymentStatusPageStudent):
+    """ Request webservice view for the Remita gateway.
+    """
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+class CustomRemitaPageStudent(RemitaPageStudent):
+    """ View which sends a POST request to the Remita payment gateway.
+    """
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+    init_url = '/remita/ecomm/split/init.reg'
+
+    @property
+    def serviceTypeId(self):
+        return SERVICETYPEID
+
+    @property
+    def lineitems(self):
+        ba1 = self.context.amount_auth / 2
+        ba2 = self.context.amount_auth / 2
+        lineitems = (
+                      {"lineItemsId":"itemid1","beneficiaryName":"Klaus Mueller",
+                      "beneficiaryAccount":"6020067886","bankCode":"011",
+                      "beneficiaryAmount":str(ba1),"deductFeeFrom":"1"},
+                      {"lineItemsId":"itemid2","beneficiaryName":"Werner Rumm",
+                      "beneficiaryAccount":"0360883515","bankCode":"050",
+                      "beneficiaryAmount":str(ba2),"deductFeeFrom":"0"}
+                    )
+        return lineitems
+
+    def update(self):
+        if not module_activated(self.context.student.current_session):
+            return
+        self.orderId = self.context.p_id
+        self.amount = str(self.context.amount_auth)
+        error = self.init_update()
+        if error:
+            self.flash(error, type='danger')
+            self.redirect(self.url(self.context, '@@index'))
+            return
+        return
+
+class CustomRemitaRequestPaymentStatusPageApplicant(
+    RemitaRequestPaymentStatusPageApplicant):
+    """ Request webservice view for the Remita gateway.
+    """
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+class CustomRemitaVerifyPaymentStatusPageApplicant(
+    RemitaVerifyPaymentStatusPageApplicant):
+    """ Request webservice view for the Remita gateway.
+    """
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+class CustomRemitaPageApplicant(RemitaPageApplicant):
+    """ View which sends a POST request to the Remita payment gateway.
+    """
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+    init_url = '/remita/ecomm/split/init.reg'
+
+    @property
+    def serviceTypeId(self):
+        return SERVICETYPEID
+
+    @property
+    def lineitems(self):
+        lineitems = (
+                      {"lineItemsId":"itemid1","beneficiaryName":"Klaus Mueller",
+                      "beneficiaryAccount":"6020067886","bankCode":"011",
+                      "beneficiaryAmount":self.context.amount_auth/2,"deductFeeFrom":"1"},
+                      {"lineItemsId":"itemid2","beneficiaryName":"Werner Rumm",
+                      "beneficiaryAccount":"0360883515","bankCode":"050",
+                      "beneficiaryAmount":self.context.amount_auth/2,"deductFeeFrom":"0"}
+                    )
+        return lineitems
+
+    def update(self):
+        if not module_activated(self.context.__parent__.__parent__.year):
+            return
+        self.orderId = self.context.p_id
+        self.amount = str(self.context.amount_auth)
+        error = self.init_update()
+        if error:
+            self.flash(error, type='danger')
+            self.redirect(self.url(self.context, '@@index'))
+            return
+        return
Index: main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/webservices.py
===================================================================
--- main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/webservices.py	(revision 14993)
+++ main/kofacustom.skeleton/trunk/src/kofacustom/skeleton/remita/webservices.py	(revision 14993)
@@ -0,0 +1,39 @@
+## $Id$
+##
+## Copyright (C) 2017 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
+##
+
+from kofacustom.nigeria.remita.webservices import PaymentNotificationListenerWebservice
+from kofacustom.skeleton.remita.browser import MERCHANTID, HOST, HTTPS, API_KEY
+
+class CustomPaymentNotificationListenerWebservice(
+    PaymentNotificationListenerWebservice):
+    """A webservice to receive payment notifications from
+    accepted IP addresses without authentication which trigger
+    a query of a Remita transaction status.
+    """
+
+    ACCEPTED_IP = ('127.0.0.1', '209.235.215.199', '162.13.211.91',
+                   '162.13.211.92', '83.138.167.2',)
+
+    merchantId = MERCHANTID
+    host = HOST
+    https = HTTPS
+    api_key = API_KEY
+
+    def update(self, P_ID=None):
+        self.output = 'Webservice disabled'
+        return
