Index: /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/batching.py
===================================================================
--- /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/batching.py	(revision 10594)
+++ /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/batching.py	(revision 10594)
@@ -0,0 +1,35 @@
+## $Id$
+##
+## 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
+##
+"""Batch processing for applicants.
+"""
+from kofacustom.nigeria.applicants.batching import NigeriaApplicantProcessor
+from waeup.kwarapoly.applicants.interfaces import ICustomApplicant
+
+class CustomApplicantProcessor(NigeriaApplicantProcessor):
+    """A batch processor for IApplicant objects.
+
+    In create mode container_code is required. If application_number is given
+    an applicant with this number is created in the designated container.
+    If application_number is not given a random application_number is assigned.
+    applicant_id is being determined by the system and can't be imported.
+
+    In update or remove mode container_code and application_number columns
+    must not exist. The applicant object is solely searched by its applicant_id
+    or reg_number.
+    """
+    iface = ICustomApplicant
Index: /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/interfaces.py
===================================================================
--- /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/interfaces.py	(revision 10593)
+++ /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/interfaces.py	(revision 10594)
@@ -67,9 +67,13 @@
     adding them to the UG_OMIT* tuples.
     """
-
+    sex = schema.Choice(
+        title = _(u'Sex'),
+        source = GenderSource(),
+        required = False,
+        )
     nationality = schema.Choice(
         source = nats_vocab,
         title = _(u'Nationality'),
-        required = True,
+        required = False,
         )
     lga = schema.Choice(
@@ -93,5 +97,5 @@
         title = _(u'1st Choice Course of Study'),
         source = AppCatCertificateSource(),
-        required = True,
+        required = False,
         )
     course2 = schema.Choice(
@@ -194,4 +198,5 @@
         title = _(u'Result uploaded'),
         default = False,
+        required = False,
         )
     student_id = schema.TextLine(
@@ -208,5 +213,9 @@
         title = _(u'Form locked'),
         default = False,
-        )
+        required = False,
+        )
+
+ICustomUGApplicant[
+    'sex'].order =  IApplicantBaseData['sex'].order
 
 class ICustomPGApplicant(INigeriaPGApplicant):
@@ -249,4 +258,20 @@
     """
 
+    sex = schema.Choice(
+        title = _(u'Sex'),
+        source = GenderSource(),
+        required = True,
+        )
+    course1 = schema.Choice(
+        title = _(u'1st Choice Course of Study'),
+        source = AppCatCertificateSource(),
+        required = True,
+        )
+
+ICustomUGApplicantEdit[
+    'course1'].order =  ICustomUGApplicant['course1'].order
+ICustomUGApplicantEdit[
+    'sex'].order =  ICustomUGApplicant['sex'].order
+
 class ICustomPGApplicantEdit(INigeriaPGApplicantEdit):
     """A postgraduate applicant interface for editing.
Index: /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/tests/test_browser.py
===================================================================
--- /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/tests/test_browser.py	(revision 10593)
+++ /main/waeup.kwarapoly/trunk/src/waeup/kwarapoly/applicants/tests/test_browser.py	(revision 10594)
@@ -106,6 +106,6 @@
         self.browser.getControl(name="form.date_of_birth").value = '09/09/1988'
         self.browser.getControl(name="form.lga").value = ['foreigner']
-        self.browser.getControl(name="form.nationality").value = ['NG']
-        self.browser.getControl(name="form.sex").value = ['m']
+        #self.browser.getControl(name="form.nationality").value = ['NG']
+        #self.browser.getControl(name="form.sex").value = ['m']
         self.browser.getControl(name="form.email").value = 'xx@yy.zz'
 
@@ -135,3 +135,9 @@
         self.assertTrue("Higher" in self.browser.contents)
         self.assertTrue("'O' Level" in self.browser.contents)
+
+        self.browser.open(self.ndftapplicant_path + '/manage')
+        # Manager can fill and save the form
+        self.fill_correct_values()
+        self.browser.getControl("Save").click()
+        self.assertMatches('...Form has been saved...', self.browser.contents)
         return
