Index: main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicant.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicant.py	(revision 7337)
+++ main/waeup.sirp/trunk/src/waeup/sirp/applicants/applicant.py	(revision 7338)
@@ -20,4 +20,5 @@
 from grok import index
 from zope.component.interfaces import IFactory
+from zope.component import createObject
 from zope.securitypolicy.interfaces import IPrincipalRoleManager
 from zope.interface import implementedBy
@@ -75,4 +76,15 @@
         else:
             return '%s %s' % (self.firstname, self.lastname)
+
+    def createStudent(self):
+        """Create a student object from applicatnt data
+        and copy applicant object.
+        """
+        student = createObject(u'waeup.Student')
+        site = grok.getSite()
+
+        site['students'].addStudent(student)
+        student.fullname = self.fullname
+        return student.student_id
 
 # Set all attributes of Applicant required in IApplicant as field
Index: main/waeup.sirp/trunk/src/waeup/sirp/applicants/interfaces.py
===================================================================
--- main/waeup.sirp/trunk/src/waeup/sirp/applicants/interfaces.py	(revision 7337)
+++ main/waeup.sirp/trunk/src/waeup/sirp/applicants/interfaces.py	(revision 7338)
@@ -282,5 +282,104 @@
     the derived interfaces below, which set more fields to required
     state, depending on use-case.
-    """
+
+    This base interface is also implemented by the StudentApplication
+    class in the students package. Thus, these are the data which are saved
+    after admission.
+    """
+
+    applicant_id = schema.TextLine(
+        title = u'Applicant Id',
+        required = False,
+        readonly = False,
+        )
+    reg_number = TextLineChoice(
+        title = u'JAMB Registration Number',
+        readonly = False,
+        required = True,
+        default = None,
+        source = contextual_reg_num_source,
+        )
+    access_code = schema.TextLine(
+        title = u'Access Code',
+        required = False,
+        readonly = True,
+        )
+    firstname = schema.TextLine(
+        title = u'First Name',
+        required = True,
+        )
+    middlenames = schema.TextLine(
+        title = u'Middle Names',
+        required = False,
+        )
+    lastname = schema.TextLine(
+        title = u'Last Name (Surname)',
+        required = True,
+        )
+    date_of_birth = schema.Date(
+        title = u'Date of Birth',
+        required = True,
+        )
+    lga = schema.Choice(
+        source = lgas_vocab,
+        title = u'State/LGA',
+        default = 'foreigner',
+        required = True,
+        )
+    sex = schema.Choice(
+        title = u'Sex',
+        source = GenderSource(),
+        default = u'm',
+        required = True,
+        )
+    email = schema.ASCIILine(
+        title = u'Email',
+        required = True,
+        constraint=validate_email,
+        )
+    phone = schema.TextLine(
+        title = u'Phone',
+        description = u'',
+        required = False,
+        )
+    course1 = schema.Choice(
+        title = u'1st Choice Course of Study',
+        source = CertificateSource(),
+        required = True,
+        )
+    course2 = schema.Choice(
+        title = u'2nd Choice Course of Study',
+        source = CertificateSource(),
+        required = False,
+        )
+
+    #
+    # Data to be imported after screening
+    #
+    screening_score = schema.Int(
+        title = u'Screening Score',
+        required = False,
+        )
+    screening_venue = schema.TextLine(
+        title = u'Screening Venue',
+        required = False,
+        )
+    course_admitted = schema.Choice(
+        title = u'Admitted Course of Study',
+        source = CertificateSource(),
+        default = None,
+        required = False,
+        )
+    notice = schema.Text(
+        title = u'Notice',
+        required = False,
+        )
+
+class IApplicantProcessData(IApplicantBaseData):
+    """An applicant.
+
+    Here we add process attributes and methods to the base data.
+    """
+
     history = Attribute('Object history, a list of messages.')
     state = Attribute('The application state of an applicant')
@@ -294,91 +393,4 @@
         """
 
-    applicant_id = schema.TextLine(
-        title = u'Applicant Id',
-        required = False,
-        readonly = False,
-        )
-    reg_number = TextLineChoice(
-        title = u'JAMB Registration Number',
-        readonly = False,
-        required = True,
-        default = None,
-        source = contextual_reg_num_source,
-        )
-    access_code = schema.TextLine(
-        title = u'Access Code',
-        required = False,
-        readonly = True,
-        )
-    firstname = schema.TextLine(
-        title = u'First Name',
-        required = True,
-        )
-    middlenames = schema.TextLine(
-        title = u'Middle Names',
-        required = False,
-        )
-    lastname = schema.TextLine(
-        title = u'Last Name (Surname)',
-        required = True,
-        )
-    date_of_birth = schema.Date(
-        title = u'Date of Birth',
-        required = True,
-        )
-    lga = schema.Choice(
-        source = lgas_vocab,
-        title = u'State/LGA',
-        default = 'foreigner',
-        required = True,
-        )
-    sex = schema.Choice(
-        title = u'Sex',
-        source = GenderSource(),
-        default = u'm',
-        required = True,
-        )
-    email = schema.ASCIILine(
-        title = u'Email',
-        required = True,
-        constraint=validate_email,
-        )
-    phone = schema.TextLine(
-        title = u'Phone',
-        description = u'',
-        required = False,
-        )
-    course1 = schema.Choice(
-        title = u'1st Choice Course of Study',
-        source = CertificateSource(),
-        required = True,
-        )
-    course2 = schema.Choice(
-        title = u'2nd Choice Course of Study',
-        source = CertificateSource(),
-        required = False,
-        )
-
-    #
-    # Process Data
-    #
-    screening_score = schema.Int(
-        title = u'Screening Score',
-        required = False,
-        )
-    screening_venue = schema.TextLine(
-        title = u'Screening Venue',
-        required = False,
-        )
-    course_admitted = schema.Choice(
-        title = u'Admitted Course of Study',
-        source = CertificateSource(),
-        default = None,
-        required = False,
-        )
-    notice = schema.Text(
-        title = u'Notice',
-        required = False,
-        )
     student_id = schema.TextLine(
         title = u'Student Id',
@@ -391,5 +403,5 @@
         )
 
-class IApplicant(IApplicantBaseData):
+class IApplicant(IApplicantProcessData):
     """An applicant.
 
@@ -399,5 +411,5 @@
     """
 
-class IApplicantEdit(IApplicantBaseData):
+class IApplicantEdit(IApplicantProcessData):
     """An applicant.
 
@@ -443,4 +455,9 @@
         readonly = True,
         )
+
+    def createStudent():
+        """Create a student object from applicatnt data
+        and copy applicant object.
+        """
 
 class IApplicantUpdateByRegNo(IApplicant):
